Приветствую Вас Гость | RSS

Все для SA-MP

Суббота, 18.05.2024, 13:35
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Мир GTA San Andreas » Анти-читы » Запрет некоторых видов оружия
Запрет некоторых видов оружия
Подполковник

massa Администраторы

Сообщения:
145
Симпатия:
1
Запрет некоторых видов оружия:

Бывают такие моменты когда некоторые виды оружия неуместны на сервере, например сервер носит жанр: RP или RPG. Использование Минигана(38), C4(39), Ракетниц(35, 36) и т.п. чаще всего не требуется или совсем запрещается из-за сильного отличия огневой мощи в отличие от другого арсенала. Если использование таких видов оружия не востребовательно, спрашивается: "А оно надо вам, так рисковать?", умелый читер без всяких проблем воспользуется данным оружием.
Существует два способа защиты, путем автовызываемой(OnPlayerUpdate) функции или по таймеру:

Защита через OnPlayerUpdate.
1. Так как OnPlayerUpdate вызывается постоянно, мы можем даже не сомневаться что читера с оружием заметит и накажет, рассмотрим условие:
Код
if(GetPlayerWeapon(playerid) == 38) // (ЕСЛИ ОРУЖИЕ = 38)   
{   
}
Срабатывает условие, если у игрока есть оружие по ID 38(Миниган), то он будет наказан.
Получаем id оружия у игрока, в данном случае id будет проверятся у всех онлайн игроков так как функция OnPlayerUpdate работает для всех(цикл).
2. Теперь назначаем наказание для читера и уведомляем его об наказании.
Код
if(GetPlayerWeapon(playerid) == 38) // (ЕСЛИ ОРУЖИЕ = 38)   
{   
SendClientMessage(playerid,0xf0b501AA,"ANTI-CHEAT: Вы были кикнуты за читерство запрещенного оружия!"); // отсылаем сообщение игроку   
Kick(playerid); // кикаем игрока   
}
0xf0b501AA - это цвет текста.
Если кто и попытается начитерить миниган или другое запрещенное оружие, его сразу кикнет.
На данном этапе можно закончить защиту через OnPlayerUpdate, но если вы хотите запрещать сразу несколько оружия, читайте дальше.
3. Объявляем новую переменную badgun и присваиваем функцию GetPlayerWeapon.
Переменная badgun будет выполнять функцию GetPlayerWeapon, особой роли она не играет, объявляют её для удобства понимания и сокращения кода. Можно её и не объявлять, а сразу использовать проверку(например: GetPlayerWeapon(playerid) == 38 || GetPlayerWeapon(playerid) == 35).
Код
new badgun = GetPlayerWeapon(playerid); // (badgun = ОРУЖИЮ)   
if(badgun == 38 || badgun == 35) // (ЕСЛИ ОРУЖИЕ = 38 ИЛИ ЕСЛИ ОРУЖИЕ = 35)   
{   
SendClientMessage(playerid,0xf0b501AA,"ANTI-CHEAT: Вы были кикнуты за читерство запрещенного оружия!"); // отсылаем сообщение игроку   
Kick(playerid); // кикаем игрока   
}
Через оператор ||(или) добавляем проверку на еще одно запрещенное оружие Гранатомет(35) и так далее.

Защита через public с таймером.
1. Если вы считаете что OnPlayerUpdate использовать не рационально или он у вас и так уже сильно загружен, тогда используем таймер.
Объявляем переменную badguntimer в начало кода(ко всем new).
Код
new badguntimer; // в начало мода
2. В автовызываемой функции OnGameModeInit к переменной badguntimer привязываем таймер.
Код
badguntimer = SetTimer("BadGunFunction",1000,1); // в OnGameModeInit
Таймер каждые 1000 миллисекунд(1 секунда) будет вызывать функцию BadGunFunction(public).
3. В автовызываемой функции OnGameModeExit уничтожаем таймер объявленный через badguntimer , дабы избежать проблем.
Код
KillTimer(badguntimer); // в OnGameModeExit
4. Теперь нам необходимо добавить функцию BadGunFunction которая у нас будет вызываться через таймер.
Код
forward BadGunFunction();   
public BadGunFunction()   
{   
for(new i; i != MAX_PLAYERS; i++)   
{   
new badgun = GetPlayerWeapon(playerid); // (badgun = ОРУЖИЮ)   
if(badgun == 38 || badgun == 35) // (ЕСЛИ ОРУЖИЕ = 38 ИЛИ ЕСЛИ ОРУЖИЕ = 35)   
{   
SendClientMessage(playerid,0xf0b501AA,"ANTI-CHEAT: Вы были кикнуты за читерство запрещенного оружия!"); // отсылаем сообщение игроку   
Kick(playerid); // кикаем игрока   
}   
}   
return 1;   
}
Вот и все, теперь вы научились пользоваться переменными, использовать таймеры, узнали значение некоторых автовызываемых функций, а самое главное научились защищать сервер от читеров. Удачи.
Использовались функции:
- GetPlayerWeapon
- SendClientMessage
- Kick
- SetTimer

Автор: massa


ТРЕБУЮТСЯ МОДЕРАТОРЫ НА ФОРУМ!

 
Форум » Мир GTA San Andreas » Анти-читы » Запрет некоторых видов оружия
  • Страница 1 из 1
  • 1
Поиск: