//Easy, look you use OnPlayerUpdate(playerid)
//So mine is like this, It's kinda simple and easy
new SpeedHacking[MAX_PLAYERS];
#define SpeedCheck(%0,%1,%2,%3,%4) floatround(floatsqroot(%4?(%0*%0+%1*%1+%2*%2):(%0*%0+%1*%1) ) *%3*1.6)
//=================================================================================================//
//Under OnPlayerUpdate
public OnPlayerUpdate(playerid)
{
//Anti SpeedHack
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(GetPlayerVehicleID(playerid) != 578 || GetPlayerVehicleID(playerid) != 520 || GetPlayerVehicleID(playerid) != 578 || 425)
{
if(PlayerInfo[playerid][pAdmin] < 10)
{
if(GetVehicleSpeed(GetPlayerVehicleID(playerid), 0) > 250)
{
SpeedHacking[playerid] =1;
CheatsDetected(playerid);
return 1;
}
}
}
}
//OTHER CODES
return 1;
}
//=================================================================================================//
//Now lets go to the stock CheatsDetected
//Stock CheatsDeteceed
stock CheatsDetected(playerid)
{
new string[128];
if(SpeedHacking[playerid] == 1)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
format(string,sizeof(string),"[ANTI CHEAT] Anti-Cheat has banned %s(%d). [Reason: Cheats Detected]",pName,playerid);
SendClientMessageToAll(COLOR_PINK,string);
format(string,sizeof(string),"1[ANTI CHEAT] Anti-Cheat has banned %s(%d). [Reason: Cheats Detected]",pName,playerid);
IRC_GroupSay(gGroupID,IRC_CHANNEL,string);
IRC_GroupSay(gGroupID,IRC_ADMINCHANNEL,string);
format(string, sizeof(string), "~r~BANNED!");
GameTextForPlayer(playerid, string, 3000, 1);
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"Player's Data");
INI_WriteString(File,"BanReason","Cheats Detected");
INI_WriteString(File,"Reason","Speed Hacks");
INI_Close(File);
PlayerInfo[playerid][pBanned] =1;
SetTimerEx("KickPlayer",1000,false,"i",playerid);
return 1;
}
return 1;
}
//=================================================================================================//
//In o.3x Kick(playerid); has proirity over all codes, so you have to make a timer for it
//like this so it posts all the codes needed before the kick
forward KickPlayer(ID);
public KickPlayer(ID)
{
Kick(ID);
return 1;
}
//=================================================================================================//
//Now lets come to OnPlayerConnect part
//So I'm using Y_INI as you see
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
if(PlayerInfo[playerid][pBanned] == 1)
{
format(string,sizeof(string),"[BANNED] You are currently banned from the server. [Reason: %s]",PlayerInfo[playerid][pBanReason]);
SendClientMessage(playerid, COLOR_RED,string);
SendClientMessage(playerid, COLOR_RED,"[BANNED] Please Ban Appeal on our forums at www.SERVER.net");
SetTimerEx("KickPlayer",1000,false,"i",playerid);
return 1;
}
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"{FF0000}SERVER","{FFFFFF}Welcome back to the server! \n Type your password below to login.","Login","Quit");
}
//=================================================================================================//
//Vehicle speed
stock GetVehicleSpeed(vehicleid, get3d)
{
new Float:x, Float:y, Float:z;
GetVehicleVelocity(vehicleid, x, y, z);
return SpeedCheck(x, y, z, 100.0, get3d);
}