|
发表于 2015-12-14 14:24:08
|
显示全部楼层
|阅读模式
来自 中国–北京–北京
本帖最后由 37666564 于 2015-12-14 14:32 编辑
AMXX 每回合前20秒内retry会被自动kick的插件,带源码。
声明: 此插件不是我原创的,我只是在前人的作品上做了一点修改和汉化。我是从点通论坛的会员 alliedmods 和 aliabc 那里得来的,至于他们是否为最早的原创,我就不清楚了。
在一些混战服里,有些玩家前几秒就被敌人打死了,然后他立刻 retry 或者 reconnect 重生进来,又可以活着继续杀人。我特烦这样爱retry的人。 该插件专门用来对付这种人,开启该插件后,任何人在 每回合前 20 秒内retry,都会被服务器自动 kick 。 kick的情形是,retry者的进服的进度条走了不到 1% 就被服务器 kick 并弹出 kick 提示,同时,服务器内的全体其他玩家会在屏幕左下角的聊天栏看到服务器发出的通告: 某某某 因在回合前20秒内retry被服务器自动kick。 而且 20 秒内,无论他怎么改名,无论他尝试多少次retry ,都会被kick,根源在于,这个插件是通过 记录玩家 ip 来 识别 retry 者的。 如果 20 秒内,他反复retry ,进度条还没有走完,就会被自动kick,且每 retry 一次,服务器内的玩家就能看到一次 服务器对他 autokick 的公告。
直到本回合的 roundtime 已经超过了 20 秒,被kick的玩家才能再次进入。而,在 回合时间走完前20秒之后,他虽然能进来了,但此时是 死亡状态,没法杀人了,只能等待下一局。
要说明一下, 怎样会被服务器认定为 retry 呢? 你在每回合的前20秒内,在控制台输入 retry 或者 reconnect ,就会被服务器自动 kick。
除此之外,你在每回合的前20秒内,断开连接,然后双击进服,也会被插件视为 retry,照样kick 20秒。
还有,如果你不断开连接,直接双击重进,还是会被插件视为retry ,照样 kick 20 秒。
哈哈。插件实际上是对每个玩家的 ip 记录 20 秒。
我只修改了3点: 1、 把 retry 者的 kick 提示汉化了,并且优化了下翻译。我拿到的版本早先都是英文的提示;
2、添加了服务器向全体玩家发出 retry者被kick的通告。我拿到的版本最早是没有服务器对其他玩家的通告的。
3、对 AMXX 的 大 OP 添加了免疫支持。 大 OP 不受该插件的制约, 大 OP 可以随便 retry 。 所谓 大 OP,就是在 amxx的users.ini里拥有 a 权限的 OP。 拥有 a 权限的 OP 无法被传送,无法被其他人处死,无法被自己处死,无法被其他人kick,也无法被自己 kick。 这个插件早先是能制约任何人的,现在 大 OP 拥有了豁免权,但 没有 a 权限的 OP 依然受它的制约。
不多说了,源码和编译好的插件一并送上。 如果你们想自己修改源码,则必须使用 Ultraedit 来修改源码,所有的amxx的源码修改,都必须这样。如果你直接在记事本里修改,改完了也没法成功编译,只会显示错误。 修改方法,详情如下 tieba_baidu_com/p/1777358251 (把下划线改成点,没办法,我目前权限低,没法发链接地址)
===================================================================
[mw_shl_code=c,true]
/* AMXX Mod script.
*
*
*
*
*/
#include <amxmodx>
#include <amxmisc>
new timer_count = 0
new disc_pl_ip[32][16], disc_pl_count = 0
public plugin_init() {
register_plugin("Kick retry players","1.0","Niro")
register_logevent("roundstart", 2, "0=World triggered", "1=Round_Start")
return PLUGIN_CONTINUE
}
public roundstart() {
timer_count = 1
remove_task(9182)
set_task(0.0, "timer",9182)
}
public timer(){
if(timer_count<20) // 设定每回合前 20 秒内不允许retry
{
set_task(1.0, "timer",9182)
timer_count++
}
else
{
timer_count = 0
disc_pl_count = 0
}
}
public client_connect(id) {
// no bots or admin immunity users
if ((is_user_bot(id)) || (get_user_flags(id)&ADMIN_IMMUNITY)) {
return PLUGIN_HANDLED
}
new ip[16]
get_user_ip(id,ip,16,1)
for(new i=0;i<disc_pl_count;i++)
{
if(equal(ip,disc_pl_ip))
{ server_cmd("kick #%d 每回合前20秒内禁止retry,请于20秒后重试",get_user_userid(id))
new name[32]
get_user_name(id,name,31)
client_print(0,print_chat,"%s 因在回合前20秒内retry被服务器自动kick",name)
}
}
return PLUGIN_CONTINUE
}
public client_disconnect(id) {
// no bots or admin immunity users are in list
if ((is_user_bot(id)) || (get_user_flags(id)&ADMIN_IMMUNITY)) {
return PLUGIN_HANDLED; }
if(timer_count>0)
{
new ip[16]
get_user_ip(id,ip,16,1)
disc_pl_ip[disc_pl_count] = ip
disc_pl_count++
}
return PLUGIN_CONTINUE
}[/mw_shl_code]
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注个册吧
×
|