帮忙看一下这段代码*(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) 错误。也不知道该代码写得对不对,帮忙修正一下。
谢谢了 !
回复: 帮忙看一下这段代码*(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
}
数组无法用数组直接赋值,且你的目的是判断(如果是两个数之间判断相等,用==.而等号只是一个赋值语句).
回复: 帮忙看一下这段代码*(20行)
kinsprite 太谢谢你了:super:回复: 帮忙看一下这段代码*(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个分别什么时候用?有点分不清 。。。
谢谢 !
回复: 帮忙看一下这段代码*(20行)
这段代码如果直接加进adminslots代码里的话是不是会正常工作呢?回复: 帮忙看一下这段代码*(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
}
回复: 帮忙看一下这段代码*(20行)
如你所说,可以直接加进使用。再次感谢你细心教导。
回复: 帮忙看一下这段代码*(20行)
学习!!!!!!!!!
页:
[1]