|
|
Модератор форума: pro100web |
Форум » Общее » Другие игры » Дополнения для SAMP » SAMP: Улыбочку, вас снимают (Система камер контроля скорости.) |
SAMP: Улыбочку, вас снимают |
Дата: Понедельник, 26.03.2018, 17:06 | Сообщение # 1
Данная система позволяет устанавливать камеры контроля скорости на определенных участках дорог. Встроенный редактор позволяет изменять максимальную скорость.
Код // Добавляет на сервер радары, для измерение скорости и штраф за превышение! /* MYSQL: R41-4 & DCCMD */ /************************************************/ #define MAX_CAM_AREA (100) new TotalCamsSpeed = 0, CamMaxSpeed[MAX_CAM_AREA][1], Float:CamPosy[MAX_CAM_AREA][6], AreaidSpeedCam[MAX_CAM_AREA]; new Text3D:SpeedCam3DText[MAX_CAM_AREA] = {Text3D:-1, ...}; new SpeedCamID[MAX_CAM_AREA]; /************************************************/ public OnGameModeInit(){ mysql_tquery(MySQL, "SELECT * FROM `speedcam`", "LoadSpeedCams", ""); } /**************Загрузка из БД********************/ forward LoadSpeedCams(); public LoadSpeedCams(){ new rows, string[128]; cache_get_row_count(rows); if(rows){ for(new idx = 0; idx <= rows-1; idx++) { cache_get_value_name_float(idx, "sp_x", CamPosy[idx][0]); cache_get_value_name_float(idx, "sp_y", CamPosy[idx][1]); cache_get_value_name_float(idx, "sp_z", CamPosy[idx][2]); cache_get_value_name_float(idx, "sp_rx", CamPosy[idx][3]); cache_get_value_name_float(idx, "sp_ry", CamPosy[idx][4]); cache_get_value_name_float(idx, "sp_rz", CamPosy[idx][5]); cache_get_value_name_int(idx, "speed", CamMaxSpeed[idx][0]); AreaidSpeedCam [idx]= CreateDynamicSphere(CamPosy[idx][0], CamPosy[idx][1], CamPosy[idx][2], 15.0, 0, 0); SpeedCamID [idx]= CreateDynamicObject(18880, CamPosy[idx][0], CamPosy[idx][1], CamPosy[idx][2], CamPosy[idx][3], CamPosy[idx][4], CamPosy[idx][5]); format(string, sizeof(string), "Радар {3399FF}№%i\n{ff3600}Работает\n{FFFFFF}Ограничение скорости: {FF6600}%i км/ч",idx,CamMaxSpeed[idx][0]); SpeedCam3DText [idx]= CreateDynamic3DTextLabel(string, 0xFFFFFFFF, CamPosy[idx][0],CamPosy[idx][1],CamPosy[idx][2] + 3.5, 15.0); TotalCamsSpeed++; } } return printf("[SpeedCams загружены]: Cams <%i>", TotalCamsSpeed); } /**************Установка камер*******************/ CMD:aspeedcam(playerid, params[]) { if(Проверка на админа) return false; else if(sscanf(params,"i",params[0])) return SendClientMessage(playerid, 0xAAC5E3AA, "[!] /aspeedcam [LIMIT]"); else if(params[0] <= 0 || params[0] > 200) return SendClientMessage(playerid, 0xAAC5E3AA, "[!] /aspeedcam [от 0 до 200]"); new Float:x, Float:y, Float:z, Float:angle; GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, angle); x += floatsin(-angle, degrees); y += floatcos(-angle, degrees); new idx = TotalCamsSpeed-1; CamPosy[idx][0] = x; CamPosy[idx][1] = y; CamPosy[idx][2] = z; SetPVarInt(playerid, "CreateSpeeCam", 1); SetPVarInt(playerid, "SpeedLimited", params[0]); new temppp = CreateDynamicObject(18880, CamPosy[idx][0], CamPosy[idx][1], CamPosy[idx][2], 0.0, 0.0, angle+360); SetTimerEx("EditDynamicObject", 100, false, "dd", playerid, temppp); return 1; } /**************Редактор скорости*****************/ CMD:editspeedcam(playerid, params[]) { if(Проверка на админа) return false; else if(sscanf(params,"ii",params[0],params[1])) return SendClientMessage(playerid, 0xAAC5E3AA, "[!] /editspeedcam [limit][id]"); if(TotalCamsSpeed-1<params[1] || params[1]<1) return SendClientMessage(playerid, 0xAAC5E3AA, "[!] Скорей всего такая камера не существует!"); else if(params[0] <= 0 || params[0] > 200) return SendClientMessage(playerid, 0xAAC5E3AA, "[!] /editspeedcam [от 0 до 200] [id]"); CamMaxSpeed[params[1]][0] = params[0]; new string[128]; format(string, sizeof(string), "Радар {3399FF}№%i\n{ff3600}Работает\n{FFFFFF}Ограничение скорости: {FF6600}%i км/ч",params[1],CamMaxSpeed[params[1]][0]); UpdateDynamic3DTextLabelText(SpeedCam3DText[params[1]],0xFFFFFFFF,string); string[0] = EOS; mysql_format(MySQL,string,sizeof(string),"UPDATE `speedcam` SET `speed` = '%i' WHERE `id` = '%i'", params[0], params[1]); mysql_query(MySQL,string,false); return 1; } /**************Редактор объектов*****************/ public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) { if(GetPVarInt(playerid, "CreateSpeeCam")){ if(response == EDIT_RESPONSE_FINAL) { new idx = TotalCamsSpeed-1, string[128]; CamMaxSpeed[idx][0] = GetPVarInt(playerid, "SpeedLimited"); AreaidSpeedCam [idx]= CreateDynamicSphere(x,y,z, 15.0, 0, 0); format(string, sizeof(string), "Радар {3399FF}№%i\n{ff3600}Работает\n{FFFFFF}Ограничение скорости: {FF6600}%i км/ч",idx,CamMaxSpeed[idx][0]); SpeedCam3DText [idx]= CreateDynamic3DTextLabel(string, 0xFFFFFFFF, x,y,z + 3.5, 15.0); SpeedCamID [idx]= CreateDynamicObject(18880, x,y,z,rx,ry,rz); TotalCamsSpeed++; DeletePVar(playerid, "CreateSpeeCam"); DeletePVar(playerid, "SpeedLimited"); mysql_query_string[0] = EOS; format(mysql_query_string,512,"INSERT INTO `speedcam`(`sp_x`, `sp_y`, `sp_z`, `sp_rx`, `sp_ry`, `sp_zy`, `speed`) VALUES ('%f','%f','%f','%f','%f','%f','%i')", x,y,z,rx,ry,rz,GetPVarInt(playerid, "SpeedLimited")); mysql_tquery(MySQL,mysql_query_string); CancelEdit(playerid); } else if(response == EDIT_RESPONSE_CANCEL) { SendClientMessage(playerid, 0xAAC5E3AA, "[!] Размещение радара отменено"); DestroyDynamicObject(objectid); DeletePVar(playerid, "CreateSpeeCam"); DeletePVar(playerid, "SpeedLimited"); CancelEdit(playerid); } } } /**************Вход в сферу**********************/ public OnPlayerEnterDynamicArea(playerid, areaid) { if(areaid >= AreaidSpeedCam[0] && areaid <= AreaidSpeedCam[TotalCamsSpeed-1] && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { if(GetTickCount()-GetPVarInt(playerid, "PauseArea") < 5000) return 1; SetPVarInt(playerid, "PauseArea", GetTickCount()); new CurSpeed = GetVehicleSpeed(GetPlayerVehicleID(playerid)); // желательно использовать своё вычисление new CUR_CamMaxSpeed; for(new i; i < TotalCamsSpeed; i ++) { if(AreaidSpeedCam [i]== areaid){ CUR_CamMaxSpeed = CamMaxSpeed[i][0]; //скорость break; } } if(CurSpeed-20 < CUR_CamMaxSpeed) return 1; // 20 км/ч допустимая погрешность new ShtrafCost = (CurSpeed * 2); new string[144]; format(string, sizeof(string), "SMS: Вам пришла квитанция №%i за превышение скорости на сумму %i$. Ваша скорость %d, ограничение %d (км/ч)", random(4000)+1000, ShtrafCost, CurSpeed, CUR_CamMaxSpeed); SendClientMessage(playerid, 0xFFFF00FF, string); } } /**********Примерный код расчета скорости********/ stock GetVehicleSpeed(vehicleid){ new Float:m[4]; GetVehicleVelocity(vehicleid,m[0],m[1],m[2]); return floatround(floatsqroot(m[0]*m[0] + m[1]*m[1] + m[2]*m[2]) * 160); } /**************SQL DUMP**************************/ CREATE TABLE IF NOT EXISTS `speedcam` ( `id` int(11) NOT NULL, `sp_x` varchar(11) NOT NULL, `sp_y` varchar(11) NOT NULL, `sp_z` varchar(11) NOT NULL, `sp_rx` varchar(11) NOT NULL, `sp_ry` varchar(11) NOT NULL, `sp_zy` varchar(11) NOT NULL, `speed` int(11) NOT NULL DEFAULT '60' ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; INSERT INTO `speedcam` (`id`, `sp_x`, `sp_y`, `sp_z`, `sp_rx`, `sp_ry`, `sp_zy`, `speed`) VALUES (1, '-1753.7778', '-648.1532', '18.5612', '0.0000', '0.0000', '178.0000', 60), (2, '-1381.2643', '-822.7592', '80.3115', '0.0000', '0.0000', '90.0000', 60), (3, '-1354.3423', '-808.8740', '76.9315', '0.0000', '0.0000', '-90.0000', 60), (4, '-356.7830', '-856.6662', '45.7432', '0.0000', '0.0000', '66.0000', 60), (5, '-322.9359', '-856.2917', '45.8832', '0.0000', '0.0000', '-112.0000', 60), (6, '-291.2151', '33.3040', '0.2073', '0.0000', '0.0000', '-17.0000', 60), (7, '-260.1395', '76.0766', '0.3873', '0.0000', '0.0000', '160.0000', 60), (8, '1652.5416', '-261.4128', '37.6421', '0.0000', '0.0000', '-4.0000', 60), (9, '1686.1609', '-318.9695', '43.7621', '0.0000', '0.0000', '176.0000', 60), (10, '1488.6129', '-1866.1495', '12.4978', '0.0000', '0.0000', '-90.0000', 60), (11, '1452.7208', '-1878.1750', '12.4978', '0.0000', '0.0000', '90.0000', 56), (12, '1038.1125', '-2295.5747', '12.0654', '0.0000', '0.0000', '15.0000', 60), (13, '1088.9343', '-2324.1606', '12.0654', '0.0000', '0.0000', '210.0000', 60), (14, '1.8263', '-1512.2292', '2.1643', '0.0000', '0.0000', '-100.0000', 60), (15, '-65.3751', '-1518.0380', '1.2309', '0.0000', '0.0000', '60.0000', 60); Отформатированный код в radar.ini: Код http://radio-shlyapa.ru/files
Сообщение отредактировал pro100web - Понедельник, 26.03.2018, 17:36
|
| |||
| |||