rendered paste body/******************************************************************************* Player Protections (Driveby, teamkill, helikill, spawnkill, chat spam, ping) Created 2007 - HAMM3R - Driveby detection elements adapted from code by Serafim - Modify it, erase it, explode it with a nuclear warhead... I don't care.*******************************************************************************/#include <a_samp>// ADJUST THESE TO MODIFY EACH PROTECTION'S SETTINGS#define HELIKILL_PROTECTION 1#define HELIKILL_MAX_KILLS 5#define HELIKILL_TIMELIMIT 600 // 10 MINUTES#define DRIVEBY_PROTECTION 1#define DRIVEBY_MAX_KILLS 5#define DRIVEBY_TIMELIMIT 600 // 10 MINUTES#define TEAMKILL_PROTECTION 1#define TEAMKILL_MAX_KILLS 5#define TEAMKILL_TIMELIMIT 600 // 10 MINUTES#define SPAWNKILL_PROTECTION 1#define SPAWNKILL_MAX_KILLS 4#define SPAWNKILL_TIMELIMIT 40 // 40 SECONDS#define SPAM_PROTECTION 1#define SPAM_MAX_MSGS 4#define SPAM_TIMELIMIT 8 // 8 SECONDS#define PING_PROTECTION 1#define PING_MAX_EXCEEDS 4 // Do NOT set this to 1 - Pings are very high when a player first joins#define PING_TIMELIMIT 60 // 1 MINUTE#define PING_MAX_PING 500 // 500ms PINGforward Float:GetDistanceBetweenPlayers(p1,p2);forward PingProtection();new gSpamCount[MAX_PLAYERS][2];new gTeamkillCount[MAX_PLAYERS][2];new gHelikillCount[MAX_PLAYERS][2];new gSpawnkillCount[MAX_PLAYERS][MAX_PLAYERS][2];new gDrivebyCount[MAX_PLAYERS][2];new gPingCount[MAX_PLAYERS][2];public OnFilterScriptInit(){ #if PING_PROTECTION SetTimer("PingProtection", 5000, 1); #endif return 1;}public OnPlayerConnect(playerid){ gTeamkillCount[playerid][0] = 0; gTeamkillCount[playerid][1] = 0; gHelikillCount[playerid][0] = 0; gHelikillCount[playerid][1] = 0; gDrivebyCount[playerid][0] = 0; gDrivebyCount[playerid][1] = 0; gSpamCount[playerid][0] = 0; gSpamCount[playerid][1] = 0; gPingCount[playerid][0] = 0; gPingCount[playerid][1] = 0; for(new x=0; x<MAX_PLAYERS; x++) { gSpawnkillCount[playerid][x][0] = 0; gSpawnkillCount[playerid][x][1] = 0; } return 1;}public OnPlayerText(playerid, text[]){ #if SPAM_PROTECTION SpamProtection(playerid); #endif return 1;}public OnPlayerDeath(playerid, killerid, reason){ if(reason == 50) { #if HELIKILL_PROTECTION HelikillProtection(killerid); #endif } if(GetPlayerTeam(killerid) == GetPlayerTeam(playerid)) { #if TEAMKILL_PROTECTION TeamkillProtection(killerid); #endif } if(!IsPlayerInAnyVehicle(playerid) && GetPlayerState(killerid) == PLAYER_STATE_DRIVER && (reason == WEAPON_TEC9 || reason == WEAPON_UZI || reason == WEAPON_MP5) && GetDistanceBetweenPlayers(playerid,killerid) < 100) { #if DRIVEBY_PROTECTION DrivebyProtection(killerid); #endif } #if SPAWNKILL_PROTECTION SpawnkillProtection(killerid,playerid); #endif return 1;}stock TeamkillProtection(killerid){ new string[64]; if(gTeamkillCount[killerid][0] == 0) { gTeamkillCount[killerid][1] = TimeStamp(); } gTeamkillCount[killerid][0]++; if(TimeStamp() - gTeamkillCount[killerid][1] > DRIVEBY_TIMELIMIT) { gTeamkillCount[killerid][0] = 1; gTeamkillCount[killerid][1] = TimeStamp(); } else if(gTeamkillCount[killerid][0] == DRIVEBY_MAX_KILLS) { format(string,sizeof(string),"*** %s has been kicked (Excessive teamkilling)",GetName(killerid)); SendClientMessageToAll(0xC8BEBEAA,string); Kick(killerid); } else if(gTeamkillCount[killerid][0] == DRIVEBY_MAX_KILLS-1) { SendClientMessage(killerid,0xC8BEBEAA,"*** Stop teamkilling - Next one is a kick"); } return 1;}stock HelikillProtection(killerid){ new string[64]; if(gHelikillCount[killerid][0] == 0) { gHelikillCount[killerid][1] = TimeStamp(); } gHelikillCount[killerid][0]++; if(TimeStamp() - gHelikillCount[killerid][1] > HELIKILL_TIMELIMIT) { gHelikillCount[killerid][0] = 1; gHelikillCount[killerid][1] = TimeStamp(); } else if(gHelikillCount[killerid][0] == HELIKILL_MAX_KILLS) { format(string,sizeof(string),"*** %s has been kicked (Excessive helikilling)",GetName(killerid)); SendClientMessageToAll(0xC8BEBEAA,string); Kick(killerid); } else if(gHelikillCount[killerid][0] == HELIKILL_MAX_KILLS-1) { SendClientMessage(killerid,0xC8BEBEAA,"*** Stop helikilling - Next one is a kick"); } return 1;}stock DrivebyProtection(killerid){ new string[64]; if(gDrivebyCount[killerid][0] == 0) { gDrivebyCount[killerid][1] = TimeStamp(); } gDrivebyCount[killerid][0]++; if(TimeStamp() - gDrivebyCount[killerid][1] > DRIVEBY_TIMELIMIT) { gDrivebyCount[killerid][1] = TimeStamp(); gDrivebyCount[killerid][0] = 1; } else if(gDrivebyCount[killerid][0] == DRIVEBY_MAX_KILLS) { format(string,sizeof(string),"*** %s has been kicked (Excessive drivebying)",GetName(killerid)); SendClientMessageToAll(0xC8BEBEAA,string); Kick(killerid); } else if(gDrivebyCount[killerid][0] == DRIVEBY_MAX_KILLS-1) { SendClientMessage(killerid,0xC8BEBEAA,"*** Stop drivebying - Next one is a kick"); } return 1;}stock SpawnkillProtection(killerid, playerid){ new string[64]; if(gSpawnkillCount[killerid][playerid][0] == 0) { gSpawnkillCount[killerid][playerid][1] = TimeStamp(); } gSpawnkillCount[killerid][playerid][0]++; if(TimeStamp() - gSpawnkillCount[killerid][playerid][1] > SPAWNKILL_TIMELIMIT) { gSpawnkillCount[killerid][playerid][0] = 1; gSpawnkillCount[killerid][playerid][1] = TimeStamp(); } else if(gSpawnkillCount[killerid][playerid][0] == SPAWNKILL_MAX_KILLS) { format(string,sizeof(string),"*** %s has been kicked (Spawnkilling)",GetName(killerid)); SendClientMessageToAll(0xC8BEBEAA,string); Kick(killerid); } else if(gSpawnkillCount[killerid][playerid][0] == SPAWNKILL_MAX_KILLS-1) { SendClientMessage(killerid,0xC8BEBEAA,"*** Stop spawnkilling - Next one is a kick"); } return 1;}stock SpamProtection(playerid){ new string[64]; if(gSpamCount[playerid][0] == 0) { gSpamCount[playerid][1] = TimeStamp(); } gSpamCount[playerid][0]++; if(TimeStamp() - gSpamCount[playerid][1] > SPAM_TIMELIMIT) { gSpamCount[playerid][0] = 1; gSpamCount[playerid][1] = TimeStamp(); } else if(gSpamCount[playerid][0] == SPAM_MAX_MSGS) { format(string,sizeof(string),"*** %s has been kicked (Flood/Spam Protection)",GetName(playerid)); SendClientMessageToAll(0xC8BEBEAA,string); Kick(playerid); } // Best not to help them figure out the time limits /*else if(gSpamCount[playerid][0] == SPAM_MAX_MSGS-1) { SendClientMessage(playerid,0xC8BEBEAA,"*** Stop spamming - Next one is a kick"); }*/ return 1;}public PingProtection(){ new string[64]; for(new x=0; x<MAX_PLAYERS; x++) { if(GetPlayerPing(x) > PING_MAX_PING) { if(gPingCount[x][0] == 0) { gPingCount[x][1] = TimeStamp(); } gPingCount[x][0]++; if(TimeStamp() - gPingCount[x][1] > PING_TIMELIMIT) { gPingCount[x][1] = TimeStamp(); gPingCount[x][0] = 1; } else if(gPingCount[x][0] == PING_MAX_EXCEEDS) { format(string,sizeof(string),"*** %s has been kicked (Ping Exceeds %dms)",GetName(x), PING_MAX_PING); SendClientMessageToAll(0xC8BEBEAA,string); Kick(x); } } } return 1;}stock Float:GetDistanceBetweenPlayers(p1,p2){ new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2; if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2)){ return -1.00; } GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2); return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));}stock GetName(playerid){ new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); return name;}stock TimeStamp(){ new time = GetTickCount() / 1000; return time;}