PDA

Просмотр полной версии : [Мануал] [GF] Установка шипов для полиции



Osetin
15.10.2013, 18:45
Полицейский командой /block устанавливает на дорогу шипы, прокалывающие колёса у проезжающих мимо машин. Чтобы убрать шипы, необходимо ввести команду заново.
Для работы требуются:
streamer
ZCMD/DC_CMD
foreach



http://www.youtube.com/watch?v=s0Sz696xbvE&feature=player_embedded

Ко всем new:

new spike_areas[MAX_PLAYERS];
new spike_objects[MAX_PLAYERS] = {0, ...};

В самый конец мода:

CMD:block(playerid, params[])
{
if(!IsACop(playerid)) // Заменяем на свою проверку Полиции/ФБР
return SendClientMessage(playerid, -1, "Ошибка: Вы не состоите в Полиции/ФБР.");
if(GetPlayerVirtualWorld(playerid) != 0 || GetPlayerInterior(playerid) != 0)
return SendClientMessage(playerid, -1, "Ошибка: Данную команду нельзя использовать в интерьере.");
if(IsPlayerInAnyVehicle(playerid))
return SendClientMessage(playerid, -1, "Ошибка: нельзя использовать в машине.");
if(spike_objects[playerid] == 0)
{
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
spike_objects[playerid] = CreateDynamicObject(2899, x, y, z-0.8, 0, 0, a);
spike_areas[playerid] = CreateDynamicSphere(x, y, z, 7.0, -1, -1, -1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.1, 0, 1, 1, 1, 1);
SendClientMessage(playerid, 0x0bda51FF, "Вы установили шипы с дистанционным управлением.");
return SendClientMessage(playerid, 0x0bda51FF, "Используйте команду {007fff}/block {0bda51}, чтобы дезактивировать их.");
}
else
{
DestroyDynamicObject(spike_objects[playerid]);
spike_objects[playerid] = 0;
DestroyDynamicArea(spike_areas[playerid]);
return SendClientMessage(playerid, COLOR_GREY, "Шипы дезактивированы.");
}
}
Далее в колбэк OnPlayerEnterDynamicArea:


if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
foreach(new i:Player)
{
if(areaid == spike_areas[i])
{
new panels, doors, lights, tires;
GetVehicleDamageStatus(GetPlayerVehicleID(playerid), panels, doors, lights, tires);
UpdateVehicleDamageStatus(GetPlayerVehicleID(playerid), panels, doors, lights, 15);
break;
}
}
}
При дисконнекте (OnPlayerDisconnect):

if(spike_objects[playerid] != 0)
{
DestroyObject(spike_objects[playerid]);
DestroyDynamicArea(spike_areas[playerid]);
}
Автор: codyO
Доработка: Daniel_Cortez

Salvacore
17.10.2013, 03:24
Молодец, полезная тема.

Daniel_Cortez
02.03.2014, 19:11
Обновлено.

#Vito
02.03.2014, 20:12
Как трек называется? :3

DeimoS
04.03.2014, 10:33
Система, мягко говоря, кривая. Например, spike_objects, не обнуляется при удалении объекта и из-за этого колёса всё равно будут прокалываться :(

Mihail_Chery*
05.03.2014, 18:00
Далее в колбэк OnPlayerEnterDynamicArea:

А что делать если у меня нет такого "Колбэка"? :grin:

Salvacore
05.03.2014, 18:30
Далее в колбэк OnPlayerEnterDynamicArea:

А что делать если у меня нет такого "Колбэка"? :grin:
Создай.

=SAN=
05.03.2014, 19:24
Vito_Wayne, трек: Listen To Me, Looking At Me

#Vito
05.03.2014, 20:23
Vito_Wayne, трек: Listen To Me, Looking At Me
Благодарю :music2:

- - - Добавлено - - -


Далее в колбэк OnPlayerEnterDynamicArea:

А что делать если у меня нет такого "Колбэка"? :grin:

public OnPlayerEnterDynamicArea(playerid, areaid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
foreach(new i:Player)
{
if(areaid == spike_areas[i])
{
new panels, doors, lights, tires;
GetVehicleDamageStatus(GetPlayerVehicleID(playerid), panels, doors, lights, tires);
UpdateVehicleDamageStatus(GetPlayerVehicleID(playerid), panels, doors, lights, 15);
break;
}
}
}
return true;
}

Daniel_Cortez
25.07.2015, 08:37
Таки обновил мануал. Устранён баг, из-за которого невозможно было поставить шипы более 1 раза. Спасибо DeimoS за то, что указал на проблему.
Также динамические регионы теперь правильно удаляются при убирании шипов и не нагружают сервер.

Заодно сделал объекты шипов динамическими, чтобы они не влияли на лимит. Всё равно в мануале требуется стример - так почему бы не использовать его возможности по полной?

Joker_Fox
25.07.2015, 22:59
Хорошая система, и Кортез код вправил)