cityhonghu 发表于 2006-5-11 18:10:40

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


#include <amxmodx>
#include <amxmisc>

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

public client_connect(id) {
        new who = 0, ipp, ipc
        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) 错误。也不知道该代码写得对不对,帮忙修正一下。
谢谢了 !

kinsprite 发表于 2006-5-11 18:36:49

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

#include <amxmodx>
#include <amxmisc>

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

public client_connect(id)
{
    new who
    new ipp, ipc
    get_user_ip(id, ipc, 15, 1)      //不包含端口
    new players_num = get_playersnum(1)       //包含连接中玩家
    for (new i=1; i<=players_num; i++)
    {
      get_user_ip(i, ipp, 15, 1)
      if (equal(ipp,ipc) && i!=id)            //equal ( const a[], const b[], [ c ] ) If c is specified, c characters are compared only. 比较两个数组是否相等
      {
            who = id
            break
      }
    }
    if(who!=0)
    {
          server_cmd("kick #%d ^"Dropped: Now This IP can't join server !wait...^"", get_user_userid(id))
    }
   return PLUGIN_CONTINUE
}

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

cityhonghu 发表于 2006-5-11 20:07:02

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

kinsprite 太谢谢你了:super:

cityhonghu 发表于 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个分别什么时候用?有点分不清 。。。
谢谢 !

cityhonghu 发表于 2006-5-11 20:46:29

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

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

kinsprite 发表于 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个分别什么时候用?有点分不清 。。。
谢谢 !

是一个一个比较. 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应该没有问题,你试试就知道了.

#include <amxmodx>
#include <amxmisc>

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

public client_connect(id)
{
    new ipp, ipc
    get_user_ip(id, ipc, 15, 1)         //不包含端口
    new players_num = get_playersnum(1)//包含连接中玩家
    for (new i=1; i<=players_num; i++)
    {
      get_user_ip(i, ipp, 15, 1)
      if (equal(ipp,ipc) && i!=id)   //equal ( const a[], const b[], [ c ] ) If c is specified, c characters are compared only. 比较两个数组是否相等
      {
            server_cmd("kick #%d ^"Dropped: Now This IP can't join server !wait...^"", get_user_userid(id))
            break
      }
    }
    return PLUGIN_CONTINUE
}

cityhonghu 发表于 2006-5-12 08:12:39

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

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

大馒头 发表于 2006-5-12 22:51:26

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

学习!!!!!!!!!
页: [1]
查看完整版本: 帮忙看一下这段代码*(20行)