Делаем простой анти-баннихоп:
Данный анти-биннихоп не дает совершить прыжок с нажатой кнопкой SHIFT(спринт), прыгать можно, но не разганясь. Тем самым игрокам будет не выгодно баннихопить. Но есть плохая сторона, эту систему можно обойти.
1. Находим все ваши #define в моде и добавляем к ним еще один:
Quote
#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
2. После, ищем в моде паблик OnPlayerKeyStateChange и добавляем в него:
Quote
if(PRESSED(KEY_JUMP | KEY_SPRINT) && (GetPlayerState(playerid) != 2))
{
ClearAnimations(playerid);
}
Более усложненная версия анти-баннихопа:
Этот анти-баннихоп работает сложновато, но его обойти не как. Огромный минус в том, что он замораживает баннихопера, тем самым начинает раздрожать, и не все смиряются с этим.
1. В самом начале, ко всем new приписываем:
Quote
new BunnyHoppingTime[MAX_PLAYERS];
new BunnyHoppingTutTime[MAX_PLAYERS];
forward AntiBunnyHop();
2. После ищем OnPlayerConnect и кидаем к ним:
Quote
BunnyHoppingTime[playerid]= 0;
BunnyHoppingTutTime[playerid] = 0;
3. Дальше находим паблик с OnGameModeInit и кидаем туда:
Quote
SetTimer("AntiBunnyHop",1000,1);
4. Так же добавляем в паблик OnPlayerKeyStateChange, вот это:
Quote
if(newkeys & KEY_JUMP || (newkeys & KEY_SPRINT && newkeys & KEY_JUMP))
{
if(!IsPlayerInAnyVehicle(playerid))
{
if(BunnyHoppingTime[playerid] > 15)
{
BunnyHoppingTutTime[playerid] = 5; // 5 - на сколько будет замораживать игрока
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid,COLOR_WHITE,"* Баннихоп заприщен, тебя замарозило на 5 секунд!");
}
BunnyHoppingTime[playerid] += 5;
}
}
5. Добавляем в самый конец мода еще один паблик:
Quote
public AntiBunnyHop()
{
for(new i=0;i {
if(!IsPlayerConnected(i))
{
continue;
}
if(BunnyHoppingTutTime[i] > 0)
{
BunnyHoppingPunTime[i] --;
if(BunnyHoppingTutTime[i] == 0)
{
TogglePlayerControllable(i,1);
}
}
}
return 1;
}