Code:
#include <amxmodx>
#include <regex>
#define PLUGINNAME "ANTISPAM + PING KICKER"
#define VERSION "0.1"
#define AUTHOR "and karaulov"
#define PATTERN "(?:(?:2\s*5\s*[0-5]|2\s*[0-4]\s*[0-9]|1\s*[0-9]\s*[0-9]|[1-9]?\s*[0-9])\s*\.\s*){3}(?:2\s*5\s*[0-5]|2\s*[0-4]\s*[0-9]|1\s*[0-9]\s*[0-9]|[1-9]?\s*[0-9])"
#define ADMINLEVEL ADMIN_IMMUNITY
// Variables
new iResult, Regex:hPattern, iReturnValue, szError[64], szAllArgs[256], szMessage[256];
new badpingcheck[33];
new minping[33];
new maxping[33];
new lossess[33];
new const REALMAXPING = 125
public client_disconnected(id)
{
badpingcheck[id] = 0
}
public pings(id, level, cid)
{
if (get_user_flags(id) & ADMIN_IMMUNITY)
{
new players[32],iNum;
get_players(players,iNum)
for(new i = 0; i < iNum;i++)
{
new idx = players[i]
if (is_user_connected(idx))
{
new nPing, nLoss
get_user_ping(idx, nPing, nLoss)
new username[32]
get_user_name(idx,username,31)
client_print(id,print_console,"^4[PATRIOT PING]^1: Игрок ^3%s^1 потерь ^3%i^1 ping ^3%i^1 мин ^3%i^1 макс ^3%i^1 !",username,lossess[idx],nPing,minping[idx],maxping[idx] )
}
}
}
else
{
new idx = id
new nPing, nLoss
get_user_ping(idx, nPing, nLoss)
new username[32]
get_user_name(idx,username,31)
client_print(id,print_console,"^4[PATRIOT PING]^1: Игрок ^3%s^1 потерь ^3%i^1 ping ^3%i^1 мин ^3%i^1 макс ^3%i^1 !",username,lossess[idx],nPing,minping[idx],maxping[idx] )
}
}
public check_players(idhask)
{
new players[32],iNum;
get_players(players,iNum)
for(new i = 0; i < iNum;i++)
{
new id = players[i]
if (is_user_connected(id))
{
new nPing, nLoss
lossess[id] += nLoss;
get_user_ping(id, nPing, nLoss)
if (minping[id] == -1 || nPing < minping[id])
{
minping[id] = nPing;
}
if (maxping[id] < nPing)
{
maxping[id] = nPing;
}
if (nPing > REALMAXPING)
{
if (badpingcheck[id] > 10 && !(get_user_flags(id) & ADMIN_IMMUNITY))
{
new username[32]
get_user_name(id,username,31)
client_print_color(0,print_team_red,"^4[PATRIOT PING]^1: Игрок ^3%s^1 выброшен за высокий ping (^3%i^1) потерь ^3%i^1!",username,maxping[id],lossess[id])
server_cmd("kick #%i ^"ping %i^"", get_user_userid(id),maxping[id])
}
else
{
badpingcheck[id] += 1;
client_print_color(id,print_team_red,"^4[PATRIOT PING]^1: Ваш ping высокий (^3%i^1) из 140,потерь (^3%i^1). Предупреждение %i из 10!",nPing,lossess[id], badpingcheck[id])
}
}
else
{
badpingcheck[id] = badpingcheck[id] / 2;
}
}
}
}
public check_players2(idhask)
{
new players[32],iNum;
get_players(players,iNum)
for(new i = 0; i < iNum;i++)
{
new id = players[i]
if (is_user_connected(id))
{
new nPing, nLoss
get_user_ping(id, nPing, nLoss)
if (nPing < REALMAXPING)
{
badpingcheck[id]=0;
}
}
}
}
public client_putinserver(id)
{
badpingcheck[id] = 0;
lossess[id] = 0;
minping[id] = -1;
new userid = get_user_userid(id);
if (userid > 0)
{
new name[32];
get_user_name(id,name,31);
if (strlen(name) > 8)
{
new szIP[40];
get_user_ip ( id, szIP, charsmax(szIP) , 1 );
iResult = regex_match_c(name, hPattern, iReturnValue);
switch (iResult)
{
case REGEX_MATCH_FAIL:
{
log_amx("REGEX_MATCH_FAIL! %s", szError);
}
case REGEX_PATTERN_FAIL:
{
log_amx("REGEX_PATTERN_FAIL! %s", szError);
}
case REGEX_NO_MATCH:
{
}
default:{
log_amx("REGEX_MATCH! %s", name);
server_cmd("fb_ban 10 #%i ^"реклама сервера! смени ник^"", userid)
server_cmd("addip 10 %s", szIP)
return PLUGIN_HANDLED;
}
}
}
}
return PLUGIN_CONTINUE;
}
public hook_say(id, level, cid)
{
if(!(get_user_flags(id) & ADMINLEVEL))
{
read_args(szAllArgs, charsmax(szAllArgs));
iResult = regex_match_c(szAllArgs, hPattern, iReturnValue);
switch (iResult)
{
case REGEX_MATCH_FAIL:
{
log_amx("REGEX_MATCH_FAIL! %s", szError);
return PLUGIN_CONTINUE;
}
case REGEX_PATTERN_FAIL:
{
log_amx("REGEX_PATTERN_FAIL! %s", szError);
return PLUGIN_CONTINUE;
}
case REGEX_NO_MATCH:
{
return PLUGIN_CONTINUE;
}
default:{
szMessage[0] = 0x04;
format(szMessage[1], 251, "[Blocked] %s", szAllArgs);
szMessage[192] = '^0';
client_print_color(id,print_team_red,"%s", szMessage)
return PLUGIN_HANDLED;
}
}
}
return PLUGIN_CONTINUE
}
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHOR);
register_clcmd("say", "hook_say");
register_clcmd("say_team", "hook_say");
register_clcmd("pings", "pings");
register_clcmd("say pings", "pings");
register_clcmd("say_team pings", "pings");
register_clcmd("say /pings", "pings");
register_clcmd("say_team /pings", "pings");
hPattern = regex_compile(PATTERN, iReturnValue, szError, 63, "is");
set_task(2.0,"check_players",_,_,_,"b")
}
public plugin_end() {
regex_free(hPattern);
}