Дошли руки написать действительно нормальный античит на оружие B)
Ловит все виды читов на оружие. (Вплоть до dgun ^^ )
Создаём переменные
В ваш любимый таймер (у меня 1 раз в сек) либо в OnPlayerUpdate вставляем такой код
Все GivePlayerWeapon заменяем на GiveAntiWeapon, а ResetPlayerWeapon на ResetAnti.
А также добавляем паблик и стоки
Ловит все виды читов на оружие. (Вплоть до dgun ^^ )
Создаём переменные
PHP:
new bool:weapcheat[MAX_PLAYERS];
new WeaponInfo[MAX_PLAYERS][13];
new AmmoInfo[MAX_PLAYERS][13];
new pWeaponInfo[MAX_PLAYERS][13];
new pAmmoInfo[MAX_PLAYERS][13];
В ваш любимый таймер (у меня 1 раз в сек) либо в OnPlayerUpdate вставляем такой код
PHP:
for (new i = 1; i < 13; i++)
{
GetPlayerWeaponData(playerid, i, pWeaponInfo[playerid][i], pAmmoInfo[playerid][i]);
if (!(pWeaponInfo[playerid][i] == WeaponInfo[playerid][i]))
{
SendClientMessage(playerid, 0xFF8BABFF, "[CheatHere]: {EAEAEA}Обнаружен чит на {ff8bab}оружие{EAEAEA}.");
weapcheat[playerid] = true;
break;
}
if ((GetPlayerWeapon(playerid) == pWeaponInfo[playerid]) && (pAmmoInfo[playerid] == 0))
{
SetTimerEx("dgun",1000,false,playerid,GetPlayerWeapon(playerid),i);
}
if (pAmmoInfo[playerid][i] > AmmoInfo[playerid][i])
{
SendClientMessage(playerid, 0xFF8BABFF, "[CheatHere]: {EAEAEA}Обнаружен чит на {ff8bab}патроны{EAEAEA}.");
weapcheat[playerid] = true;
break;
} else {
AmmoInfo[playerid][i] = pAmmoInfo[playerid][i];
}
}
if (weapcheat[playerid])
{
weapcheat[playerid] = false;
Kick(playerid);
}
Все GivePlayerWeapon заменяем на GiveAntiWeapon, а ResetPlayerWeapon на ResetAnti.
А также добавляем паблик и стоки
PHP:
public dgun(playerid,weap,cntr)
{
GetPlayerWeaponData(playerid, cntr, pWeaponInfo[playerid][cntr], pAmmoInfo[playerid][cntr]);
if ((GetPlayerWeapon(playerid) == weap) && (pAmmoInfo[playerid][cntr] == 0))
{
SendClientMessage(playerid, 0xFF8BABFF, "[CheatHere]: {EAEAEA}Обнаружен чит на {ff8bab}оружие{EAEAEA}.");
weapcheat[playerid] = true;
}
}
stock GiveAntiWeapon(playerid,weapid,ammo)
{
new slot;
slot = GetWeaponSlot(weapid);
WeaponInfo[playerid][slot] = weapid;
AmmoInfo[playerid][slot] = ammo;
GivePlayerWeapon(playerid,weapid,ammo);
return;
}
stock ResetAnti(playerid)
{
ResetPlayerWeapon(playerid);
for (new i = 1; i < 13; i++)
{
WeaponInfo[playerid][i] = 0;
AmmoInfo[playerid][i] = 0;
}
return;
}
stock GetWeaponSlot(weaponid)
{
new slot;
switch(weaponid)
{
case 0,1: slot = 0;
case 2 .. 9: slot = 1;
case 10 .. 15: slot = 10;
case 16 .. 18, 39: slot = 8;
case 22 .. 24: slot =2;
case 25 .. 27: slot = 3;
case 28, 29, 32: slot = 4;
case 30, 31: slot = 5;
case 33, 34: slot = 6;
case 35 .. 38: slot = 7;
case 40: slot = 12;
case 41 .. 43: slot = 9;
case 44 .. 46: slot = 11;
}
return slot;
}