#include <amxmodx>
#define TaskTime 15.0
#define HowManyChecks 10
#define ExtraPing 150 // ExtraPing + g_MaxPing : If a user has a ping above this, his ping Offense counter goes up 5 instead of 1
#define MAXPLAYERS 32
#define CheckUpdateRate 1 // 1 = Uses menu | 2 = auto changes settings
#define UseSetInfo 1
#define HPK_IMMUNITY ADMIN_IMMUNITY
new g_PingOffence[MAXPLAYERS+1]
new g_CheckPlayer[MAXPLAYERS+1] // To save the poor cpu having to keep track of the connected players
new g_MaxPing
#if CheckUpdateRate != 0
new g_MinUpdateRate
new g_MinRate
#endif
new g_MaxPlayers
#define PluginVersion "1.1.4"
public plugin_init()
{
register_plugin("Yet Another High Ping Kicker",PluginVersion,"EKS")
#if CheckUpdateRate == 1
register_menucmd(register_menuid("yZbyt niskie cl_updaterate:"),1023,"MenuCheckSelection")
#endif
#if CheckUpdateRate != 0
register_cvar("amx_minupdaterate","40")
register_cvar("amx_minrate","10000")
#endif
register_cvar("amx_maxping","200")
register_cvar("amx_maxping_add","50")
register_cvar("yhpk_version",PluginVersion,FCVAR_SERVER)
set_task(TaskTime,"Task_CheckPlayers",64,_,_,"b")
return PLUGIN_CONTINUE
}
public plugin_cfg()
{
g_MaxPlayers = get_maxplayers()
g_MaxPing = get_cvar_num("amx_maxping")
#if CheckUpdateRate != 0
g_MinUpdateRate = get_cvar_num("amx_minupdaterate")
g_MinRate = get_cvar_num("amx_minrate")
#endif
new sTimeH[4] // Contains the hour in a sting
get_time("%H",sTimeH,3)
new TimeH = str_to_num(sTimeH)
if (TimeH < 14)
{
g_MaxPing = g_MaxPing + get_cvar_num("amx_maxping_add")
server_print("[HPK] Time is %d, added +%d to maxping(%d)",TimeH,get_cvar_num("amx_maxping_add"),g_MaxPing)
}
else
server_print("[HPK] Time is %d, maxping(%d)",TimeH,g_MaxPing)
}
public client_putinserver(id)
{
if(is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id))
set_task(20.0,"Task_ActivatePingCheck",id,_,_,"a",1) // Since when the user "just" connected, his ping is high, we dont want to get a false detection
}
public Task_ActivatePingCheck(id)
{
g_PingOffence[id] = 0
g_CheckPlayer[id] = 1
#if CheckUpdateRate != 0
client_print(id,print_chat,"[HPK] Maksymalny dopuszczalny ping to %d, a najnizsze dopuszczalne cl_updaterate to %d",g_MaxPing,g_MinUpdateRate)
#else
client_print(id,print_chat,"[HPK] Maksymalny dopuszczalny ping to %d",g_MaxPing)
#endif
}
public client_disconnect(id)
{
g_CheckPlayer[id] = 0
remove_task(id)
}
public Task_CheckPlayers()
{
for(new i=1;i<=g_MaxPlayers;i++) if(g_CheckPlayer[i])
CheckPing(i)
}
stock CheckPing(id)
{
#if CheckUpdateRate != 0
new TempString[10]
get_user_info(id,"cl_updaterate",TempString,9)
new clrate = str_to_num(TempString)
get_user_info(id,"rate",TempString,9)
new rate = str_to_num(TempString)
#endif
new ping,loss
get_user_ping(id,ping,loss)
if(ping > g_MaxPing)
{
if(ping >= ExtraPing+g_MaxPing) g_PingOffence[id] = g_PingOffence[id] + 5 // If the user has a ping ExtraPing + g_MaxPing, he gets +5 instead of +1 in his ping offence counter
else g_PingOffence[id]++
if(g_PingOffence[id] >= HowManyChecks)
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
client_print(0,print_chat,"[HPK] %s zostal wyrzucony za zbyt wysoki ping %d",Name,g_MaxPing)
server_cmd("kick #%d Zbyt duzy ping",get_user_userid(id))
log_amx("%s<%s> zostal wyrzucony za zbyt wysoki ping (tj. %d)",Name,Auth,ping)
return PLUGIN_CONTINUE
}
client_print(id,print_chat,"[HPK] Twoj ping przekracza %d, ogarnij go lub opusc serwer.",g_MaxPing)
}
#if CheckUpdateRate == 1
if(clrate < g_MinUpdateRate || rate < g_MinRate)
{
if(g_CheckPlayer[id] == 1 || g_CheckPlayer[id] == 3)
{
ShowMenu(id)
if(g_CheckPlayer[id] == 3)
g_CheckPlayer[id] = 2
else
{
g_CheckPlayer[id] = 2
}
}
}
else if(clrate < g_MinUpdateRate && g_CheckPlayer[id] == 2)
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
client_print(0,print_chat,"[HPK] %s zostal wyrzucony za zbyt niskie cl_updaterate(%d)/rate(%d)",Name,clrate,rate)
server_cmd("kick #%d Too low a cl_updaterate",get_user_userid(id))
log_amx("%s<%s> zostal wyrzucony za zbyt niskie cl_updaterate(%d)/rate(%d)",Name,Auth,clrate,rate)
return PLUGIN_CONTINUE
}
#endif
#if CheckUpdateRate == 2
if(clrate < g_MinUpdateRate)
{
#if UseSetInfo == 1
format(TempString,9,"%d",g_MinUpdateRate)
set_user_info(id,"cl_updaterate",TempString)
#else
client_cmd(id,"cl_updaterate %d",g_MinUpdateRate)
#endif
client_print(id,print_chat,"[HPK] Twoj updaterate zostal zwiekszony do %d",g_MinUpdateRate)
}
if(rate < g_MinRate)
{
#if UseSetInfo == 1
format(TempString,9,"%d",g_MinRate)
set_user_info(id,"rate",TempString)
#else
client_cmd(id,"rate %d",g_MinRate)
#endif
client_print(id,print_chat,"[HPK] Twoj updaterate zostal zwiekszony do %d",g_MinRate)
}
#endif
//client_print(id,3,"%d mial ping: %d(%d) loss %d clrate %d(%d) Rate: %d (%d)",id,ping,g_MaxPing,loss,clrate,g_MinUpdateRate,rate,g_MinRate)
return PLUGIN_CONTINUE
}
#if CheckUpdateRate == 1
public ShowMenu(id)
{
new szMenuBody[151]
new len,keys
len = format(szMenuBody,255,"y Zbyt niskie cl_updaterate/rate:^n Zwieksz cl_updaterate/rate lub opusc serwer")
len += format(szMenuBody[len],150 - len,"^nw 1. Zwieksz do %d",g_MinUpdateRate)
len += format(szMenuBody[len],150 - len,"^nw 2. Opusc serwer")
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
show_menu( id, keys, szMenuBody, -1 )
return PLUGIN_CONTINUE
}
public MenuCheckSelection(id,key) // Called by ShowReadyMenu
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
if(key == 0)
{
client_print(0,print_chat,"[HPK] %s wybral zwieksenie cl_updaterate/rate",Name)
log_amx("%s<%s> wybral zwieksenie cl_updaterate/rate",Name,Auth)
client_cmd(id,"cl_updaterate %d",g_MinUpdateRate)
client_cmd(id,"rate %d",g_MinRate)
}
else if(key == 1)
{
client_print(0,print_chat,"[HPK] %s odmowil zwieksenia cl_updaterate/rate",Name)
server_cmd("kick #%d Zbyt niskie cl_updaterate/rate",get_user_userid(id))
log_amx("%s<%s> odmowil zwieksenia cl_updaterate/rate",Name,Auth)
}
else // Made a wrong selection
ShowMenu(id)
return PLUGIN_CONTINUE
}
#endifi nie wiem w który mmiejscu dodać
if ( get_user_flags(id) & HPK_IMMUNITY) {
remove_task(id)
client_print(id, print_chat, "[HPK] Sprawdzanie pingu Cie nie obejmuje, poniewaz masz immunitet...")
return PLUGIN_CONTINUE
}
żeby nie wywalało adminow z flagą a próbowałem w public Task_ActivatePingCheck(id) ale wyskakuje błąd podczas kompilacji .. co robie źle ?;>


Dodatki SourceMod



Temat jest zamknięty









