09.12.2008, 19:50
Copy, paste in pawno and compile 

Code:
/*******************************************************************************
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 0
#define HELIKILL_MAX_KILLS 2
#define HELIKILL_TIMELIMIT 600 // 10 MINUTES
#define DRIVEBY_PROTECTION 1
#define DRIVEBY_MAX_KILLS 2
#define DRIVEBY_TIMELIMIT 600 // 10 MINUTES
#define TEAMKILL_PROTECTION 0
#define TEAMKILL_MAX_KILLS 5
#define TEAMKILL_TIMELIMIT 600 // 10 MINUTES
#define SPAWNKILL_PROTECTION 0
#define SPAWNKILL_MAX_KILLS 4
#define SPAWNKILL_TIMELIMIT 40 // 40 SECONDS
#define SPAM_PROTECTION 1
#define SPAM_MAX_MSGS 5
#define SPAM_TIMELIMIT 8 // 8 SECONDS
#define PING_PROTECTION 0
#define PING_MAX_EXCEEDS 5 // 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 2000 // 250ms PING
forward 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,"*** Pбra com o drivebying - Prуxima vez serб kick ou BAN !!!");
}
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 foi expluso por 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 desliga os downloads (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;
}

