37666564 发表于 2015-12-14 14:24:08

【分享】AMXX 每回合前20秒内retry会被自动kick的插件,带源码

本帖最后由 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   (把下划线改成点,没办法,我目前权限低,没法发链接地址)

===================================================================


/* AMXX Mod script.
*
*
*
*
*/


#include <amxmodx>
#include <amxmisc>

new timer_count = 0
new disc_pl_ip, 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
      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
                        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
                get_user_ip(id,ip,16,1)
                disc_pl_ip = ip
                disc_pl_count++
      }
      return PLUGIN_CONTINUE
}

37666564 发表于 2015-12-14 15:38:18


效果如下图

364719328 发表于 2015-12-15 10:18:32

朋友 你的qq多少 请教个问题

MaJx1994 发表于 2015-12-16 09:11:06

记录名字更好一点,反复retry 肯定是为了打战绩 记录ID才是最好的方式

37666564 发表于 2015-12-17 09:30:05

MaJx1994 发表于 2015-12-16 09:11
记录名字更好一点,反复retry 肯定是为了打战绩 记录ID才是最好的方式

记录 name 的话,如果被插件 kick ,人家改个名字就能进来了。

这个插件对前几秒 awp 打死人,然后重进的,非常受用。

比如 de_dust2 ,开局,在中门,双方awp在中门的门缝里过招,很容易打死人。 然后你打死他,他立刻retry,再次跑来中门捡回自己的枪,继续打。我最烦的就是这种人。必须记录 ip 才能有效遏制。

Sea 发表于 2015-12-18 17:22:34

下来看看能不能整到DOD里~顺便支持下楼主~

MaJx1994 发表于 2015-12-25 13:43:16

37666564 发表于 2015-12-17 09:30
记录 name 的话,如果被插件 kick ,人家改个名字就能进来了。

这个插件对前几秒 awp 打死人,然后重进 ...

为什么别人要retry?

MaJx1994 发表于 2015-12-25 13:45:30

37666564 发表于 2015-12-17 09:30
记录 name 的话,如果被插件 kick ,人家改个名字就能进来了。

这个插件对前几秒 awp 打死人,然后重进 ...

玩家之所以rerty connect 是因为不想被别人杀,想保留战绩仅此而已 别的以外还有解释吗?
如果记录IP 网吧玩家岂不是都被踢了
记录ID 才是最有效的方式。
他换ID 同理战绩也无法保存

css 发表于 2015-12-26 16:22:18

这是个过时的插件,的确
页: [1]
查看完整版本: 【分享】AMXX 每回合前20秒内retry会被自动kick的插件,带源码