Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Вы не подключены. Войдите или зарегистрируйтесь

[Мануал] [АнтиЧит] Оружее

Перейти вниз  Сообщение [Страница 1 из 1]

1[Мануал] [АнтиЧит] Оружее Empty [Мануал] [АнтиЧит] Оружее Чт Ноя 07, 2013 7:30 pm

Genirator

Genirator
Администратор
Администратор

1. Рассмотрим некоторые особенности... Перед нами стоит цель разработать безопасную функцию выдачи оружия, такую, в которую встроен независимый счетчик. Значит все оружие в моде теперь должно выдаваться только через эту функцию. НО. Есть одна проблема - встроенные в саму игру механизмы получения оружия, например выдача шотгана в полицейской машине, которую мы никак не сможем проконтролировать. Как это не печально, но наш античит будет проверять не все оружие. Начнем с того что определим максимальное количество видов оружия, в самом начале своего pwn пишем:

Код:
#define MAX_WEAPONS 47  
2. теперь введем список "зеленого оружия" в нем будет оружие которое дается самой игрой (например в машине полиции):

Код:
new GreenWeaponList[] = {22,23,24,25};
3. Оружие в этом списке будет игнорироваться сканером. Вы можете сами отредактировать список как вам удобно!
Далее введем массив переменных в которых будет храниться количество оружия у определенного игрока:

Код:
new pWeapons[MAX_PLAYERS][MAX_WEAPONS];  
4. Задержка, препятствует срабатыванию сканера в момент выдачи оружия:

Код:
new pWeaponDelay[MAX_PLAYERS];  
5. Далее напишем

Код:
forward ACSCheckBudWeapons();  
6. forward ACSCheckBudWeapons();
это нам потом пригодится.
Итак мы ввели основные переменные с которыми будет работать наш античит. Теперь перейдем к функциям.
Функции
Функции можно писать в самом "низу" своего pwn. Первой функцией будет функция безопасной выдачи оружия в которую мы встроим счетчик патронов:

Код:
ACSGivePlayerWeapon(playerid, weaponid, ammo)
{
pWeaponDelay[playerid] = 1;
if(IsColdWeapon(weaponid))
{ ammo = 1; pWeapons[playerid][weaponid] = ammo; } else {
pWeapons[playerid][weaponid] = pWeapons[playerid][weaponid] + ammo;}
GivePlayerWeapon(playerid, weaponid, ammo);
}  
7. Еще раз напоминаю. что теперь ВСЕ оружие в вашем моде должно выдаваться через ACSGivePlayerWeapon.
Второй функцией будет функция проверки "зеленого оружия":

Код:
IsGreenWeapon(weaponid)
{
for(new i= 0;i<sizeof(GreenWeaponList);i++) {
if(GreenWeaponList[i] == weaponid) {return 1;}
}
return 0;
}
8. Функция возвращает 1 если проверяемое оружие есть в списке и 0 если его там нет.
Далее функция которая определяет холодное оружие:

Код:
IsColdWeapon(weaponid)
{
if(weaponid > 0 && weaponid < 16) {return 1;}
if(weaponid == 46) {return 1;}
return 0;
}  
9. Теперь напишем функцию сброса счетчиков игрока (если заметили, это модифицированная функция изъятия у игрока всего оружия):

Код:
ACSResetPlayerWeapons(playerid)
{
pWeaponDelay[playerid] = 1;
ResetPlayerWeapons(playerid);
for(new i=0;i<MAX_WEAPONS;i++)
{pWeapons[playerid][i] = 0;}
}
10. Если используете в своем моде функцию изъятия оружия у игрока, то теперь надо отнимать все оружие ТОЛЬКО при помощи ACSResetPlayerWeapons(playerid).
Последней функцией будет сама функция проверки, которая будет удалять читеров с сервера:

Код:
public ACSCheckBudWeapons()
{
new wid, amm;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i)) {continue;}
if(pWeaponDelay[i] > 0){pWeaponDelay[i]--; continue;}
for(new s=1;s<13;s++)
{
GetPlayerWeaponData(i, s, wid, amm);
if(amm == -1 && IsColdWeapon(wid)) {amm = 1;}
if(pWeapons[i][wid] < amm)
{
if(!IsGreenWeapon(wid))
{
ACSResetPlayerWeapons(i);
Kick(i);
continue;
}  
}
if(amm >= 0) {pWeapons[i][wid] = amm;}
}
}
}
11.Поскольку это public функция, ей нужен заголовок, его мы уже написали в самом начале ( forward ACSCheckBudWeapons(); )
Подключение
Все, теперь осталось подключить этот античит.
Первое что надо сделать - очищать счетчик игрока, если он вышел с сервера, для этого находим в своем pwn паблик OnPlayerDisconnect и пишем в него строку:

Код:
ACSResetPlayerWeapons(playerid);
12. Теперь надо поставить функцию проверки оружия игроков на таймер, чтобы проверка выполнялась каждые 5 секунд - находим паблик OnGameModInit и добавляем в него строку:

Код:
SetTimer("ACSCheckBudWeapons",5000,1);

http://www.pawno.wikiforum.net

Вернуться к началу  Сообщение [Страница 1 из 1]

Права доступа к этому форуму:
Вы не можете отвечать на сообщения