搜索
查看: 2494|回复: 7

帮忙看一下这段代码*(20行)

[复制链接]
发表于 2006-5-11 18:10:40 | 显示全部楼层 |阅读模式 来自 日本
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
        register_plugin("onlyip","0.1","cityhonghu")
}

public client_connect(id) {
        new who = 0, ipp[32], ipc[32]
        get_user_ip(id, ipc, 31)
        new maxplayers = get_maxplayers()
        for(new i = 1; i <= maxplayers; ++i) {
                get_user_ip(i, ipp, 31)
                if(ipp = ipc) {
                        who = id
                }
        }
        if(who)
        server_cmd("kick #%d ^"Dropped: Now This IP cant join server !wait...^"", get_user_userid(id))
}

要实现的功能是,当玩家进入服务器是检查其IP,如果这个IP的玩家已在游戏中就不允许其进入。
简单的说,不允许相同IP的玩家同时进入服务器。防止盗屏 !
东拼西凑的代码,编译时出现第15行if(ipp = ipc) 错误。也不知道该代码写得对不对,帮忙修正一下。
谢谢了 !
发表于 2006-5-11 18:36:49 | 显示全部楼层 来自 中国–湖北–武汉

回复: 帮忙看一下这段代码*(20行)

  1. #include <amxmodx>
  2. #include <amxmisc>

  3. public plugin_init()
  4. {
  5. register_plugin("onlyip","0.1","cityhonghu")
  6. }

  7. public client_connect(id)
  8. {
  9.     new who
  10.     new ipp[16], ipc[16]
  11.     get_user_ip(id, ipc, 15, 1)        //不包含端口
  12.     new players_num = get_playersnum(1)       //包含连接中玩家
  13.     for (new i=1; i<=players_num; i++)
  14.     {
  15.         get_user_ip(i, ipp, 15, 1)
  16.         if (equal(ipp,ipc) && i!=id)            //equal ( const a[], const b[], [ c ] ) If c is specified, c characters are compared only. 比较两个数组是否相等
  17.         {
  18.             who = id
  19.             break
  20.         }
  21.     }
  22.     if(who!=0)
  23.     {
  24.           server_cmd("kick #%d ^"Dropped: Now This IP can't join server !wait...^"", get_user_userid(id))
  25.     }
  26.      return PLUGIN_CONTINUE
  27. }
复制代码


[color="Magenta"]数组无法用数组直接赋值,且你的目的是判断(如果是两个数之间判断相等,用==.而等号只是一个赋值语句).
回复

使用道具 举报

 楼主| 发表于 2006-5-11 20:07:02 | 显示全部楼层 来自 日本

回复: 帮忙看一下这段代码*(20行)

kinsprite 太谢谢你了:super:
回复

使用道具 举报

 楼主| 发表于 2006-5-11 20:27:00 | 显示全部楼层 来自 日本

回复: 帮忙看一下这段代码*(20行)

   for (new i=1; i<=players_num; i++)
    {
        get_user_ip(i, ipp, 15, 1)
        if (equal(ipp,ipc) && i!=id)
        {
            who = id
            break
        }
    }

这一段代码是不是指,ipc与所有玩家一个一个对比IP,如果ipp等于ipc且不是同一玩家时,赋予who为id值?这个id是指userid吗? break是什么意思?

new who不需要赋予其值为0吗? 默认就是0吗?

return PLUGIN_CONTINUE
return PLUGIN_HANDLED
这2个分别什么时候用?有点分不清 。。。
谢谢 !
回复

使用道具 举报

 楼主| 发表于 2006-5-11 20:46:29 | 显示全部楼层 来自 日本

回复: 帮忙看一下这段代码*(20行)

这段代码如果直接加进adminslots代码里的话是不是会正常工作呢?
回复

使用道具 举报

发表于 2006-5-11 23:21:52 | 显示全部楼层 来自 中国–湖北–武汉

回复: 帮忙看一下这段代码*(20行)

Post by cityhonghu
这一段代码是不是指,ipc与所有玩家一个一个对比IP,如果ipp等于ipc且不是同一玩家时,赋予who为id值?这个id是指userid吗? break是什么意思?

new who不需要赋予其值为0吗? 默认就是0吗?

return PLUGIN_CONTINUE
return PLUGIN_HANDLED
这2个分别什么时候用?有点分不清 。。。
谢谢 !


[color="DarkOrchid"]是一个一个比较. who实际是多余的,我只是沿用你的.改为下面的更直观.break是跳出最近的封闭循环体;这些翻编程语句书都有. new who初始化就为0. return PLUGIN_CONTINUE与return PLUGIN_HANDLED根据函数类型或者事件类型决定的;有的函数返回影响游戏引擎对数据的收集,这样的函数就不可以乱返回了.
#define PLUGIN_CONTINUE                0        /* Results returned by public functions */
#define PLUGIN_HANDLED                1        /* stop other plugins */
#define PLUGIN_HANDLED_MAIN        2        /* to use in client_command(), continue all plugins but stop the command */
放在那个adminslots应该没有问题,你试试就知道了.
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. public plugin_init()
  4. {
  5.     register_plugin("onlyip","0.1","cityhonghu")
  6. }
  7. public client_connect(id)
  8. {
  9.     new ipp[16], ipc[16]
  10.     get_user_ip(id, ipc, 15, 1)           //不包含端口
  11.     new players_num = get_playersnum(1)  //包含连接中玩家
  12.     for (new i=1; i<=players_num; i++)
  13.     {
  14.         get_user_ip(i, ipp, 15, 1)
  15.         if (equal(ipp,ipc) && i!=id)     //equal ( const a[], const b[], [ c ] ) If c is specified, c characters are compared only. 比较两个数组是否相等
  16.         {
  17.             server_cmd("kick #%d ^"Dropped: Now This IP can't join server !wait...^"", get_user_userid(id))
  18.             break
  19.         }
  20.     }
  21.     return PLUGIN_CONTINUE
  22. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2006-5-12 08:12:39 | 显示全部楼层 来自 日本

回复: 帮忙看一下这段代码*(20行)

如你所说,可以直接加进使用。
再次感谢你细心教导。
回复

使用道具 举报

发表于 2006-5-12 22:51:26 | 显示全部楼层 来自 中国–北京–北京–海淀区

回复: 帮忙看一下这段代码*(20行)

学习!!!!!!!!!
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表