enum e_RadarData {
bool:rOn,
rLimit,
rAreaId
}
new
RadarData[MAX_PLAYERS][e_RadarData],
Iterator:RadarsOn<MAX_PLAYERS>;
public OnGameModeExit() {
foreach(new i : RadarsOn) {
if(IsValidDynamicArea(RadarData[i][rAreaId])) {
DestroyDynamicArea(RadarData[i][rAreaId]);
}
}
Iter_Clear(RadarsOn);
return 1;
}
public OnPlayerDisconnect(playerid, reason) {
if(RadarData[playerid][rOn]) {
if(IsValidDynamicArea(RadarData[playerid][rAreaId])) {
DestroyDynamicArea(RadarData[playerid][rAreaId]);
}
RadarData[playerid][rOn] = false;
RadarData[playerid][rAreaId] = INVALID_STREAMER_ID;
Iter_Remove(RadarsOn, playerid);
}
return 1;
}
CMD:startradar(playerid, params[]) {
if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din departament.");
if(OnDuty[playerid] != 1) return SendClientMessage(playerid, COLOR_LGREEN, "Eroare: Nu esti la datorie!");
new vehicleid = GetPlayerVehicleID(playerid);
if(!Copcar2(vehicleid)) return SendClientMessage(playerid, COLOR_GREY, "Nu esti intr-o masina a factiunii.");
if(RadarData[playerid][rOn]) return SendClientMessage(playerid, -1, "Ai deja activat radaru.");
new viteza;
if(sscanf(params, "d", viteza)) return SendClientMessage(playerid, COLOR_GREY, "USAGE: {FFFFFF}/startradar <Speed Limit>");
if(viteza > 200 || viteza < 40) return SendClientMessage(playerid, -1, "Viteza invalida (40-200).");
new Float:cX, Float:cY, Float:cZ, Float:cAngle;
GetVehiclePos(vehicleid, cX, cY, cZ);
GetVehicleZAngle(vehicleid, cAngle);
new Float:rad = (360.0 - cAngle) * 0.0174532925,
Float:points[8];
points[0] = cX; points[1] = cY;
points[2] = cX + (45.0 * floatcos(rad + 0.15, degrees));
points[3] = cY + (45.0 * floatsin(rad + 0.15, degrees));
points[4] = cX + (45.0 * floatcos(rad - 0.15, degrees));
points[5] = cY + (45.0 * floatsin(rad - 0.15, degrees));
points[6] = cX; points[7] = cY;
new areaid = CreateDynamicPolygon(points, cZ - 2.0, cZ + 5.0, 4);
Streamer_SetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, playerid);
RadarData[playerid][rOn] = true;
RadarData[playerid][rLimit] = viteza;
RadarData[playerid][rAreaId] = areaid;
Iter_Add(RadarsOn, playerid);
TogglePlayerControllable(playerid, 0);
new string[64];
format(string, sizeof(string), "Ai activat radarul. Viteza maxima: %d KM/H.", viteza);
SendClientMessage(playerid, COLOR_YELLOW, string);
return 1;
}
CMD:stopradar(playerid, params[]) {
if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Nu faci parte din politie.");
if(!RadarData[playerid][rOn]) return SendClientMessage(playerid, COLOR_GREY, "Nu ai radarul activ.");
if(IsValidDynamicArea(RadarData[playerid][rAreaId])) {
DestroyDynamicArea(RadarData[playerid][rAreaId]);
}
RadarData[playerid][rOn] = false;
RadarData[playerid][rLimit] = 0;
RadarData[playerid][rAreaId] = INVALID_STREAMER_ID;
Iter_Remove(RadarsOn, playerid);
TogglePlayerControllable(playerid, 1);
SendClientMessage(playerid, COLOR_YELLOW, "Ai dezactivat radarul!");
return 1;
}
public OnPlayerEnterDynamicArea(playerid, areaid) {
new copid = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID);
if(IsPlayerConnected(copid) && RadarData[copid][rOn] && RadarData[copid][rAreaId] == areaid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && OnDuty[playerid] != 1)
{
new viteza = Carspeed1(playerid);
if(viteza > RadarData[copid][rLimit])
{
new targetName[MAX_PLAYER_NAME], copName[MAX_PLAYER_NAME], msg[144];
GetPlayerName(playerid, targetName, sizeof(targetName));
GetPlayerName(copid, copName, sizeof(copName));
format(msg, sizeof(msg), "{FF0000}[RADAR] %s[ID:%d] conduce cu {FF0000}%d km/h, Locatie: %s, Limita: %d km/h!", targetName, playerid, viteza, GetPlayerZone(playerid), RadarData[copid][rLimit]);
SendClientMessage(copid, COLOR_LIGHTBLUE, msg);
format(msg, sizeof(msg), "{FF0000}[RADAR] Ai fost surprins de %s conducand cu {FF0000}%d km/h. Limita: %d km/h.", copName, viteza, RadarData[copid][rLimit]);
SendClientMessage(playerid, COLOR_YELLOW, msg);
}
}
}
return 1;
}
cred ca e mai ok asa