Anticheat and high ping/lag
#1

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)