1. Рассмотрим некоторые особенности... Перед нами стоит цель разработать безопасную функцию выдачи оружия, такую, в которую встроен независимый счетчик. Значит все оружие в моде теперь должно выдаваться только через эту функцию. НО. Есть одна проблема - встроенные в саму игру механизмы получения оружия, например выдача шотгана в полицейской машине, которую мы никак не сможем проконтролировать. Как это не печально, но наш античит будет проверять не все оружие. Начнем с того что определим максимальное количество видов оружия, в самом начале своего pwn пишем:
Далее введем массив переменных в которых будет храниться количество оружия у определенного игрока:
это нам потом пригодится.
Итак мы ввели основные переменные с которыми будет работать наш античит. Теперь перейдем к функциям.
Функции
Функции можно писать в самом "низу" своего pwn. Первой функцией будет функция безопасной выдачи оружия в которую мы встроим счетчик патронов:
Второй функцией будет функция проверки "зеленого оружия":
Далее функция которая определяет холодное оружие:
Последней функцией будет сама функция проверки, которая будет удалять читеров с сервера:
Подключение
Все, теперь осталось подключить этот античит.
Первое что надо сделать - очищать счетчик игрока, если он вышел с сервера, для этого находим в своем pwn паблик OnPlayerDisconnect и пишем в него строку:
- Код:
#define MAX_WEAPONS 47
- Код:
new GreenWeaponList[] = {22,23,24,25};
Далее введем массив переменных в которых будет храниться количество оружия у определенного игрока:
- Код:
new pWeapons[MAX_PLAYERS][MAX_WEAPONS];
- Код:
new pWeaponDelay[MAX_PLAYERS];
- Код:
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);
}
Второй функцией будет функция проверки "зеленого оружия":
- Код:
IsGreenWeapon(weaponid)
{
for(new i= 0;i<sizeof(GreenWeaponList);i++) {
if(GreenWeaponList[i] == weaponid) {return 1;}
}
return 0;
}
Далее функция которая определяет холодное оружие:
- Код:
IsColdWeapon(weaponid)
{
if(weaponid > 0 && weaponid < 16) {return 1;}
if(weaponid == 46) {return 1;}
return 0;
}
- Код:
ACSResetPlayerWeapons(playerid)
{
pWeaponDelay[playerid] = 1;
ResetPlayerWeapons(playerid);
for(new i=0;i<MAX_WEAPONS;i++)
{pWeapons[playerid][i] = 0;}
}
Последней функцией будет сама функция проверки, которая будет удалять читеров с сервера:
- Код:
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;}
}
}
}
Подключение
Все, теперь осталось подключить этот античит.
Первое что надо сделать - очищать счетчик игрока, если он вышел с сервера, для этого находим в своем pwn паблик OnPlayerDisconnect и пишем в него строку:
- Код:
ACSResetPlayerWeapons(playerid);
- Код:
SetTimer("ACSCheckBudWeapons",5000,1);