PDA

Просмотр полной версии : [Вопрос] Античит



Killer
25.07.2018, 03:53
Проблема с античитом. Вторично игрока не кикает с сервера, игрок может бегать с читерским оружием.
Допустим - игрок зашел, выбрал читерское оружие - его кикнуло, он зашел на сервер через чит, оружие не выключал, в общем итоге - он может бегать со своим читерским оружием.

Вот мой код в общем секундном таймере:


new weap = GetPlayerWeapon(i);
if(GetPlayerWeapon(i) > 0 && GetPlayerAmmo(i) == 0 && Weapons[i][GetPlayerWeapon(i)] == 0 && GetPVarInt(i, "GunCheck") < gettime()) Delgun(i), KickD(i,"cheat (#2)");
if(GetPVarInt(i, "GunCheck") < gettime())
{
new weaponid, ammo;
for (new it = 1; it < 11; it++)
{
GetPlayerWeaponData(i, it, weaponid, ammo);
if(ammo > Weapons[i][weaponid]) Delgun(i), KickD(i,"cheat (#1)");
else if(ammo < Weapons[i][weaponid]) Weapons[i][weaponid] = ammo;
}
}

Выдача оружия:


stock GetWeaponSlot(weaponid)
{
new slot;
switch(weaponid)
{
case 1: slot = 0;
case 2..9: slot = 1;
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 16..18, 39: slot = 8;
case 41..43: slot = 9;
case 10..15: slot = 10;
case 44..46: slot = 11;
}
return slot;
}
stock GiveWeapon(playerid,weaponid,ammo)
{
SetPVarInt(playerid, "GunCheck", gettime() + 2);
new ammow = 0;
GetPlayerWeaponData(playerid, GetWeaponSlot(weaponid), ammow, ammow);
Weapons[playerid][weaponid] += (ammo+ammow);
GivePlayerWeapon(playerid,weaponid,ammo);
WeaponInfo[playerid][weaponid] = weaponid;
Player_Slots[playerid][GetWeaponSlot(weaponid)] = weaponid;
return true;
}

Подскажите, какую проверку нужно добавить,спасибо.

Nexius_Tailer
25.07.2018, 04:08
Скорее всего оружие просто сохраняется сервером при выходе, и это сохранение не учитывает, что оружие было начитерено.