|

- UID
- 33945
- 帖子
- 920
- 精华
- 2
- 积分
- 167
- 经验
- 793 点
- 点通币
- 4549 点
- 金币
- 0 点
- MyPC
-
- CPU
-
- 主板
-
- 内存
-
- 网速
-
- 服务器IP
-
- 注册时间
- 2006-1-4
|
8#
发表于 2010-3-10 13:06
| 只看该作者
/* Yet another High Ping Kicker
About:
This plugin kick players that have to high a ping, or to low a cl_updaterate setting. It also has a
option to adds X amount to the max ping when the clock is goes over 24.
Forum Thread: http://www.amxmodx.org/forums/viewtopic.php?t=7865
Credits:
Ops in #AMXmod @ Quakenet for alot of help ( + AssKicker & CheesyPeteza )
Install:
Install the plugin like any other
Put these into your amxx.cfg with the correct vaules
amx_maxping 125
amx_minrate 40
amx_maxping_add 50
Changelog:
1.1.2
- Added ADMIN_IMMUNITY and ADMIN_RESERVATION immunity
1.1.1
- Fixed: Task not being removed when player left.
1.1.0
- Added: Shows a menu to ppl with to low a cl_updaterate settings
1.0.0
- First released version
*/
#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
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
new g_MinRate
new g_MaxPlayers
public plugin_init()
{
register_plugin("High Ping Kicker","1.1.2","skywalker|EKS")
register_menucmd(register_menuid("\ycl_updaterate 设置太低:"),1023,"MenuCheckSelection")
register_cvar("amx_maxping","125")
register_cvar("amx_minrate","40")
register_cvar("amx_maxping_add","75")
register_cvar("amx_hpk_Time","20.0")
register_cvar("amx_hpk_counter","10")
set_task(float(get_cvar_num("amx_hpk_Time")),"Task_CheckPlayers",64,_,_,"b")
return PLUGIN_CONTINUE
}
public plugin_cfg()
{
g_MaxPlayers = get_maxplayers()
g_MaxPing = get_cvar_num("amx_maxping")
g_MinRate = get_cvar_num("amx_minrate")
//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
g_MaxPing = get_cvar_num("amx_maxping")
g_MinRate = get_cvar_num("amx_minrate")
client_print(id,print_chat,"[HPK] 最高 ping 是%dms, 最低能接受的cl_updaterate是 %d",g_MaxPing,g_MinRate)
}
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)
CheckPing(i)
}
stock CheckPing(id)
{
if ((get_user_flags(id) & ADMIN_IMMUNITY) || (get_user_flags(id) & ADMIN_RESERVATION)) {
remove_task(id)
client_print(id, print_chat, "[HPK] 您对Ping检查有豁免权...")
return PLUGIN_CONTINUE
}
new TempString[5]
get_user_info(id,"cl_updaterate",TempString,4)
new ping,loss
get_user_ping(id,ping,loss)
new clrate = str_to_num(TempString)
if(ping > g_MaxPing)
{
if(ping >= get_cvar_num("amx_maxping_add")+g_MaxPing) g_PingOffence[id] = g_PingOffence[id] + 5 // If the user has a ping get_cvar_num("amx_maxping_add") + g_MaxPing, he gets +5 instead of +1 in his ping offence counter
else g_PingOffence[id]++
if(g_PingOffence[id] >= get_cvar_num("amx_hpk_counter"))
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
client_print(0,print_chat,"[HPK] %s 因为Ping超过 %d而被踢",Name,g_MaxPing)
server_cmd("kick #%d To high a ping",get_user_userid(id))
log_amx("%s<%s> was kicked for having to high a ping (was %d)",Name,Auth,ping)
return PLUGIN_CONTINUE
}
client_print(id,print_chat,"[HPK] 你的Ping超过了 %d, 想办法解决你的Ping或者离开",g_MaxPing)
}
if(clrate < g_MinRate && ( g_CheckPlayer[id] == 1 || g_CheckPlayer[id] == 3))
{
if(g_CheckPlayer[id] == 3)
g_CheckPlayer[id] = 2
else
{
g_CheckPlayer[id] = 2
ShowMenu(id)
}
}
else if(clrate < g_MinRate && 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 因为cl_updaterate(%d)太低而被踢",Name,clrate)
server_cmd("kick #%d To low a cl_updaterate",get_user_userid(id))
log_amx("%s<%s> was kicked for having to low a cl_updaterate (was %d)",Name,Auth,clrate)
return PLUGIN_CONTINUE
}
// client_print(0,3,"%d had ping: %d(%d) loss %d clrate %d(%d)",id,ping,g_MaxPing,loss,clrate,g_MinRate)
return PLUGIN_CONTINUE
}
public ShowMenu(id)
{
new szMenuBody[151]
new len,keys
len = format(szMenuBody,255,"\ycl_updaterate 设置太低:^n 增大 cl_updaterate 的值或者离开服务器")
len += format(szMenuBody[len],150 - len,"^n\w 1. 增加到 %d",g_MinRate)
len += format(szMenuBody[len],150 - len,"^n\w 2. 离开")
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
{
if(key == 0)
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
client_print(0,print_chat,"[HPK] %s 选择更新他的 cl_updaterate",Name)
log_amx("%s<%s> choose to update his cl_updaterate",Name,Auth)
client_cmd(id,"cl_updaterate %d",g_MinRate)
}
else
{
new Name[32],Auth[35]
get_user_name(id,Name,31)
get_user_authid(id,Auth,34)
client_print(0,print_chat,"[HPK] %s 选择不更新他的 cl_updaterate",Name)
server_cmd("kick #%d To low a cl_updaterate",get_user_userid(id))
log_amx("%s<%s> was kicked for having to low a cl_updaterate",Name,Auth)
}
return PLUGIN_CONTINUE
} 麻烦楼主把这个源码中的改成测试一下。 |
|