shape1
shape2
shape3
shape4
shape7
shape8

Анти-ДБ

  • Автор темы Amfy
  • Дата начала

A

Amfy

Гость
Гость
Чему меня научит это готовое решение?
В этой теме я научу определять, прыгнул ли игрок на винты, в момент, когда вертолет неподвижно стоит на земле, или на самом деле произошло дб, а именно убийство лопастями вертолета (Helicopter Blades).
 
Особенности системы:
Ко всему этому, это готовое решение поможет исправить баг, когда при вытаскивании игрока из вертолета его откидывало на лопасти, а на вас срабатывала система анти-дб.

Ко всем глобальным переменным:

new bool:JustSat[MAX_PLAYERS];
В public OnPlayerStateChange(playerid, newstate, oldstate)

if(newstate == PLAYER_STATE_DRIVER)
{
JustSat[playerid] = true;
SetTimerEx("SetJustSat", 5000, 0, "i", playerid);
}

В public OnPlayerDeath(playerid, killerid, reason)

if(reason == 50) // 50 - убит лопастями вертолета (Helicopter Blades)
{
new Games[256];
if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER && !JustSat[killerid]) //если игрок на водительском месте
{
new Float:Vel[3];
GetVehicleVelocity(GetPlayerVehicleID(killerid), Vel[0], Vel[1], Vel[2]);
if(Vel[0] == 0 && Vel[1] == 0 && Vel[2] == 0)
{
format(Games,sizeof(Games),"%s прыгнул на винты игроку %s!",PlayerName(playerid),PlayerName(killerid));
SendClientMessageToAll(0xAFAFAFAA,Games);
SendClientMessage(playerid,0xAFAFAFAA,"На нашем сервере запрещено прыгать на винты!"); //думаю, соообщения достаточно, хотя можете использовать и другое наказание
}
else
{
format(Games,sizeof(Games),"%s убил лопастями вертолета игрока %s",PlayerName(killerid),PlayerName(playerid));
SendClientMessageToAll(0xAFAFAFAA,Games);
Kick(killerid); //наказываем игрока, можете заменить посадкой в тюрьму или просто выводом сообщения
}
}
}

В конец мода добавить:

forward SetJustSat(playerid);
public SetJustSat(playerid)
{
JustSat[playerid] = false;
return 1;
}

Автор: Games