SA-MP Forums Archive
Need Help with Anti Cheats - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Need Help with Anti Cheats (/showthread.php?tid=583040)



Need Help with Anti Cheats - MBilal - 25.07.2015

I make some anti cheats which i make but i got some problem in them.
-> Anti Interior Hack

its working fine and detect hacker fast but the problem happen SetPlayerPos set by server auto like when you enter in the car modification shop to mod your car then SetPlayerPos and SetPlayerInterior auto set ,and Anti interior hack detect it as player hacking how i can avoid that .


Код:
new bool:TeleportInt[MAX_PLAYERS][19] ;

I make this stock to detect interior id

stock SetPlayerIntEx(playerid, interior)
{
    TeleportInt[playerid][interior] = true;
    SetPlayerInterior(playerid,interior);
}

I am resetting all all interior when player join and on player disconnect

and using Timer 1sec to detect but how i can avoid car modification interiors 
 				 new interior = GetPlayerInterior(i);
				if(TeleportInt[i][interior] == false )
				{
					BanMessages(i, "Interior Hack");
				}
I also try Anti Health hack with this same idea

Код:
stock SetPlayerHealthEx(playerid, Float:Health)
{
	 HealthAllowed[playerid] = true;
     SetPlayerHealth(playerid, Health);
}


save under 1 sec Timer 
 				new Float:health;
        	    GetPlayerHealth(i, health);
            	if (health >= 100  && HealthAllowed[i] == false)
            	{
					BanMessages(i, "Health Hack");
				}

I want to ask is it give problem when he die and auto get Health too fast from OnPLayerSPawn fast rather than getting it from SetPlayerHealthEx ?..
Thanks


Re: Need Help with Anti Cheats - M4D - 25.07.2015

Quote:

This callback is called when a player enters or exits a mod shop.

OnEnterExitModShop


Re: Need Help with Anti Cheats - MBilal - 25.07.2015

You mean this?

Код:
public OnEnterExitModShop(playerid, enterexit, interiorid)
{
    if(enterexit == 0) // If enterexit is 0, this means they are exiting
    {
      SetPlayerIntEx(playerid,GetPlayerInterior(playerid));
   
    }
    return 1;
}



Re: Need Help with Anti Cheats - xVIP3Rx - 25.07.2015

pawn Код:
new CurrentInterior[MAX_PLAYERS] ;

stock SetPlayerIntEx(playerid, interior)
{
    CurrentInterior[playerid] = interior;
    SetPlayerInterior(playerid, interior);
    return 1;
}

if(CurrentInterior[i] !=  GetPlayerInterior(i))
{
    BanMessages(i, "Interior Hack");
}

public OnEnterExitModShop(playerid, enterexit, interiorid)
{
    CurrentInterior[playerid] = interiorid;//This sets the current interior to the new interior the player has entered
    return 1;
}



Re: Need Help with Anti Cheats - MBilal - 25.07.2015

Yeah Thank But what about the Anti Health hack?
Код:
stock SetPlayerHealthEx(playerid, Float:Health)
{
	 HealthAllowed[playerid] = true;
     SetPlayerHealth(playerid, Health);
}


save under 1 sec Timer 
 				new Float:health;
        	    GetPlayerHealth(i, health);
            	if (health >= 100  && HealthAllowed[i] == false)
            	{
					BanMessages(i, "Health Hack");
				}
I want to ask is it give problem when he die and auto get Health too fast from OnPLayerSPawn fast rather than getting it from SetPlayerHealthEx ?.


Re: Need Help with Anti Cheats - M4D - 25.07.2015

Anti health hack:
simply, make server-sided health
how ?
just define a new variable and store player health into it.
set a 1 second repeating timer and check if player health is higher than variable value, he is using health hack
if not, set variable value to new player health


a quick example for my explains

Код:
new Float:PlayerHealth[MAX_PLAYERS];

SetPlayerHealthEx(playerid, Float:hp)
{
	PlayerHealth[playerid] = hp;
	return SetPlayerHealth(playerid, hp);
}

public AntiCheat()
{
	for(new i; i < MAX_PLAYERS; i++)
	{
		new Float:health;
		GetPlayerHealth(i, health);
		if(health > PlayerHealth[i])
		{
			//Player Using Health Hack
		}
		else
		{
			//>Player Health decreased, lets set variable value to new health
			PlayerHealth[i] = health;
		}
	}
	return 1;
}
a repeating timer Call "AntiCheat" callback every 1 or 2 second
it's better to use "foreach" instead of "for" loop


Re: Need Help with Anti Cheats - MBilal - 25.07.2015

PlayerHealth[playerid] = hp;

Tag Mismatched..

You are storing Float in array ..


Re: Need Help with Anti Cheats - M4D - 25.07.2015

i'm sorry...
it was my fault
Edit:
Код:
new Float:PlayerHealth[MAX_PLAYERS];



Re: Need Help with Anti Cheats - xVIP3Rx - 25.07.2015

pawn Код:
new Float:CurrentHealth[MAX_PLAYERS];

stock SetPlayerHealthEx(playerid, Float:Health)
{
     CurrentHealth[playerid] = health;
     SetPlayerHealth(playerid, Health);
}


//Timer
    new Float:health;
    GetPlayerHealth(i, health);
    if (health > CurrentHealth[playerid])
    {
        BanMessages(i, "Health Hack");
    }
This just sets the variable to the current health, if his health is higher that when you gave to him it'll give the message


Re: Need Help with Anti Cheats - MBilal - 25.07.2015

the Problem is when player die and spawn and he got banned i tested both codes..