Anti-teleport hack
#1

Hello

I wanted to make a anti-teleport hack script.
There are lots of misreports.
You will ban although you stand.
someone who is teleporting will not ban.

here is a part of my script

OnGameModeInit:
Код:
SetTimer("check",1000,1);
public:
Код:
public check()
{
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
                //anti teleport:
		if(poscheatan[i] == 1 && Spieler[i][Admin] <= 0) //checks if the anti teleport hack is activated or not.
		{
		        GetPlayerPos(i,cheatpos[0],cheatpos[1],cheatpos[2]);
			SetTimerEx("cheatposcheck",500,0,"i",i); //a new timer starts end ends before the timer "check" ends
		}
		else if(poscheatan[i] == 2) //is needed to activate and disable. for Example when a admin teleport him poscheatan will disable an a few secons later reactivated
		{
		    poscheatan[i] = 3;
		}
		else if(poscheatan[i] == 3)
		{
		    poscheatan[i] = 1;
		}
            }
        }
    }
    return 1;
}
2. public:
Код:
public cheatposcheck(playerid)
{
	if(distanz(playerid,cheatpos[0],cheatpos[1],cheatpos[2]) >= 150)
	{
	    cheater[playerid]++;
	    new str[256],name[MAX_PLAYER_NAME];
	   	GetPlayerName(playerid,name,sizeof(name));
	   	format(str,sizeof(str),"[WARNUNG][CHEAT] %s (%d) steht und Verdacht eines Teleport-Hacks!", name, playerid);
	   	for (new j = 0; j < MAX_PLAYERS; j++)
		{
			if(Spieler[j][Admin] >= 1)
			{
				SendClientMessage(j,0x0000FFFF,str);
			}
		}
		if(cheater[playerid] >= 5)
		{
			new bstr[256],Spielerdatei[256];
	   		format(bstr,sizeof(bstr),"%s wurde vom System gebannt, Grund: Teleport", name);
	   		SendClientMessageToAll(0xFF0000FF,bstr);
			Spieler[playerid][ban] = 1;
			format(Spielerdatei,sizeof(Spielerdatei),"/User/%s.ini", name);
			dini_Set(Spielerdatei,"bangrund","Teleport");
	   		Kick(playerid);
		}
	}
	return 1;
}
distanz:
Код:
stock distanz(playerid,Float:x,Float:y,Float:z)
{
	new Float:dis;
	new Float:x1,Float:y1,Float:z1;
	if (!IsPlayerConnected(playerid)) return -1;
	GetPlayerPos(playerid,x1,y1,z1);
	dis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),2)+floatpower(floatabs(floatsub(y,y1)),2)+floatpower(floatabs(floatsub(z,z1)),2));
	return floatround(dis);
}
example for a admin-teleport:

Код:
dcmd_get(playerid,params[])
{
	new pID;
	if(sscanf(params, "u", pID))
	{
	    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /get [Playerid]");
	}
	if(!IsPlayerConnected(pID))
	{
        return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
	}
	if(Spieler[playerid][Admin] <= 1)
	{
	    return SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin Level 2!");
	}
	if(Spieler[playerid][Admin]<Spieler[pID][Admin])
	{
		return SendClientMessage(playerid,COLOR_RED,"Du kannst diesen Befehl nicht an hцherrangigen Admins ausfьhren!");
	}
	else
	{
	        poscheatan[pID] = 0; //disable.. now he can teleport
		new Float:x, Float:y, Float:z;
		GetPlayerPos(playerid, x, y, z);
		SetPlayerPos(pID, x+2, y+2, z+2);
		new admint = GetPlayerInterior(playerid);
		SetPlayerInterior(pID, admint);
		new admvrt = GetPlayerVirtualWorld(playerid);
		SetPlayerVirtualWorld(pID, admvrt);
		new aname[MAX_PLAYER_NAME], string2[256];
	        GetPlayerName(playerid, aname, sizeof(aname));
	        format(string2, sizeof(string2), "Du wurdest von %s zu sich teleportiert.", aname);
	        SendClientMessage(pID, COLOR_RED, string2);
	        new name[MAX_PLAYER_NAME], string[256];
	        GetPlayerName(pID, name, sizeof(name));
	        format(string, sizeof(string), "Du hast %s zu dir teleportiert.", name );
		SendClientMessage(playerid, COLOR_GREEN, string);
		poscheatan[pID] = 2; // still disabled.. 
	}
    return 1;
}
I hope you can help me..

sry for my bad english

Psycho
Reply
#2

You need a different pos for all players

pawn Код:
new Float:cheatpos[MAX_PLAYERS][3];
then

pawn Код:
GetPlayerPos(i,cheatpos[i][0],cheatpos[i][1],cheatpos[i][2]);
and

pawn Код:
if(distanz(playerid,cheatpos[playerid][0],cheatpos[playerid][1],cheatpos[playerid][2]) >= 150)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)