PHP код:
// раздефайним константу MAX_VEHICLES, установив ей значение 1999, потому что идёт от 1 до 1999
#if defined MAX_VEHICLES
#undef MAX_VEHICLES
#define MAX_VEHICLES 1999
#else
#define MAX_VEHICLES 1999
#endif
// создадим итератор для всего транспорта на сервере, как-раз тут нам надо было бы отнимать единицу, однако проще установить новое значение константе
new Iterator: Vehicle<MAX_VEHICLES>;
// рекомендую перехватить нативные функции для работы с транспортом, а именно: (CreateVehicle, AddStaticVehicleEx, DestroyVehicle).
stock CreateVehicleEx(vehicletype, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay, addsiren)
{
new veh_id = CreateVehicle(vehicletype, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay, addsiren);
Iter_Add(Vehicle, veh_id);
return veh_id;
}
#if defined _ALS_CreateVehicle
#undef CreateVehicle
#else
#define _ALS_CreateVehicle
#endif
#define CreateVehicle CreateVehicleEx
stock ac_AddStaticVehicleEx(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float:z_angle, color1, color2, respawn_delay, addsiren)
{
new veh_id = AddStaticVehicleEx(vehicletype, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay, addsiren);
Iter_Add(Vehicle, veh_id);
return veh_id;
}
#if defined _ALS_AddStaticVehicleEx
#undef AddStaticVehicleEx
#else
#define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx ac_AddStaticVehicleEx
stock DestroyVehicleEx(vehicleid)
{
if(!Iter_Contains(Vehicle, vehicleid))
return ;
return Iter_Remove(Vehicle, vehicleid);
}
#if defined _ALS_DestroyVehicle
#undef DestroyVehicle
#else
#define _ALS_DestroyVehicle
#endif
#define DestroyVehicle DestroyVehicleEx
// ну и мой вариант команды
CMD:spveh(playerid, params[])
{
if(AdminInfo[playerid][aLevel] < 2 || !AdminInfo[playerid][aLogin])
return ;
extract params -> new Float: rad = 200.0; else
return SendClientMessage(playerid, -1, "Введите: /spveh [радиус]");
if(!(1.0 <= rad <= 200.0))
return SendClientMessage(playerid, COLOR_GREY, "Радиус не может быть меньше 1.00 выше 200.0 (области видимости).");
new count = MAX_VEHICLES;
foreach (new vehicleid : Vehicle)
{
if(IsPlayerInRangeOfPoint(playerid, rad, VehicleInfo[vehicleid][vX], VehicleInfo[vehicleid][vY], VehicleInfo[vehicleid][vZ])
continue;
if(IsVehicleOccupied(vehicleid))
continue;
SetVehicleToRespawn(vehicleid);
count --;
}
new const fmt_str[] = "Администратор %s (%d) зареспавнил весь транспорт в радиусе %f м (%d машин)";
new result_str[(((sizeof fmt_str) + ((- 2 + MAX_PLAYER_NAME) + (- 2 + 3) + (- 2 + 5) + (- 2 + 4)) + 1))];
format
(
result_str, sizeof result_str,
fmt_str,
PlayerInfo[playerid][pNames],
playerid,
rad,
(MAX_VEHICLES - count)
);
return SendAdminMessage(COLOR_LIGHTRED, result_str);
}
stock IsVehicleOccupied(vehicleid)
{
foreach(new playerid : Player)
{
if(!IsPlayerInVehicle(i, vehicleid))
continue;
return 1;
}
return ;
}
Собсна как-то так