Hello. I've been recently working on my anticheat system, I tested it for false-positive on localhost, only to find out after, that it bans players with ping more then 100. Could someone tell me how do I account for high ping? Here is the code, it's on a timer, which repeats itself every 2 seconds.
pawn Код:
forward CheckHealth(playerid);
public CheckHealth(playerid)
{
//new Float:fHealth;
if(GetPlayerAnimationIndex(playerid))
{
new animlib[32];
new animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
if(!strcmp(animname, "VEND_USE", true))
{
SetPVarFloat(playerid, "faPlayerHealth", 100.0);
SetPlayerHealth(playerid, 100.0);
GivePlayerCash(playerid, -500);
}
}
if(leftarea[playerid] == 0) return 0;
if(timer1[playerid] == 1) return 0;
GetPlayerHealth(playerid, Float:gHealth);
SetPlayerHealth(playerid, gHealth -1);
isgod[playerid] = SetTimerEx("IsGod",500,0,"i",playerid);
if(gHealth != GetPVarFloat(playerid, "faPlayerHealth"))
{
if(GetTickCount() < (lastupdate[playerid]+200) && gHealth > GetPVarFloat(playerid, "faPlayerHealth"))
{
HandleCheater(playerid, HealthRes); //SendClientMessageToAll(-1, "HEALTH HACKS");
}
else
{
//player lost health && GetPlayerInterior(playerid) == 0
}
SetPVarFloat(playerid, "faPlayerHealth", gHealth);
}
new Float:fArmor;
GetPlayerArmour(playerid, Float:fArmor);
if(fArmor != GetPVarFloat(playerid, "faPlayerArmor"))
{
if(GetTickCount() < (lastupdate[playerid]+200) && fArmor > GetPVarFloat(playerid, "faPlayerArmor"))
{
HandleCheater(playerid, ArmorRes); //SendClientMessageToAll(-1, "ARMOR HACKS");
}
else
{
//player has lost armor
}
SetPVarFloat(playerid, "faPlayerArmor", fArmor);
}
vehGOD[playerid] = GetPlayerVehicleID(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
GetVehicleHealth(vehGOD[playerid], Float:wHealth);
SetVehicleHealth(vehGOD[playerid], wHealth -0.01);
isvehgod[playerid] = SetTimerEx("IsVehGod",2000,0,"i",playerid);
if(GetPlayerInterior(playerid) == 0 && wHealth != GetPVarFloat(playerid, "faPlayerVHealth"))
{
if(!IsPlayerInDynamicArea(playerid, spray[0]) && !IsPlayerInDynamicArea(playerid, spray[1]) && !IsPlayerInDynamicArea(playerid, spray[2]) && !IsPlayerInDynamicArea(playerid, spray[3]) && !IsPlayerInDynamicArea(playerid, spray[4]) && !IsPlayerInDynamicArea(playerid, spray[5]) && GetTickCount() < (lastupdate[playerid]+200) && wHealth > GetPVarFloat(playerid, "faPlayerVHealth"))
{
if(!IsPlayerInDynamicArea(playerid, spray[6]) && !IsPlayerInDynamicArea(playerid, spray[7]) && !IsPlayerInDynamicArea(playerid, spray[8]) && !IsPlayerInDynamicArea(playerid, spray[9]))
{
HandleCheater(playerid, VehRepair); //CallRemoteFunction("OnVehicleRespray", "iiii", playerid, GetPlayerVehicleID(playerid), -1, -1);
}
}
else
{
//veh lost
}
SetPVarFloat(playerid, "faPlayerVHealth", wHealth);
}
}
new Float:Velocity[3];
GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0], Velocity[1], Velocity[2]);
if(lastupdate[playerid]+200 && GetVehicleSpeedd(GetPlayerVehicleID(playerid)) > 300 && Velocity[2] >= 0) {HandleCheater(playerid, SpeedHack);} //{SendClientMessageToAll(-1, "SPEED HACKS");}
new str[10];
format(str,sizeof(str),"weapon%d",GetPlayerWeapon(playerid));
if(GetTickCount() < (lastupdate[playerid]+200) && GetPlayerWeapon(playerid) != 0 && GetPVarInt(playerid,str) == 0)
{
HandleCheater(playerid, WeapHack);
}
return 1;
}
forward IsGod(playerid);
public IsGod(playerid)
{
GetPlayerHealth(playerid, Float:cHealth);
if(GetTickCount() < (lastupdate[playerid]+200) && gHealth == cHealth)
{
HandleCheater(playerid, GodM); //SendClientMessageToAll(-1, "GOD HACKS");
}
else
{
SetPVarFloat(playerid, "faPlayerHealth", cHealth +1);
SetPlayerHealth(playerid, cHealth +1);
}
return 1;
}
forward IsVehGod(playerid);
public IsVehGod(playerid)
{
GetVehicleHealth(vehGOD[playerid], Float:wwHealth);
if(GetTickCount() < (lastupdate[playerid]+200) && wHealth == wwHealth && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
HandleCheater(playerid, VehGod); //SendClientMessageToAll(-1, "VEH GOD HACKS");
}
else
{
SetPVarFloat(playerid, "faPlayerVHealth", wwHealth+1);
SetVehicleHealth(vehGOD[playerid], wwHealth+1);
}
return 1;
}
I mostly get detections on god/vehgod, but also some veh repair and health restore. Any help will be appreciated.