银河网络(纪念站)

标题: [申精]如何更改插件命令的权限! [打印本页]

作者: s〇rRyヽ    时间: 2012-5-9 21:18
标题: [申精]如何更改插件命令的权限!
本帖最后由 D.R.CTO_地瓜 于 2012-5-12 08:15 编辑

改插件命令权限涉及到两个函数register_concmd()和cmd_access(),cmd_access()是检验玩家是否有register_concmd中定义的权限。
因此修改权限可分为两种情况。
1.原插件已经定义过权限。如amx_ban,amx_kick,amx_votekick,amx_voteban等命令。
2.原插件没有定义权限。如amx_help,amx_who,voterr等。
对于第一中情况修改比较简单,只需修改register_concmd()中的权限就可以了。如想把amx_voteban的权限由j改为d.可以这样修改:
打开adminvote.sma文件,找到plugin_init()函数,把其中的register_concmd("amx_voteban","cmdVoteKickBan",ADMIN_VOTE,"<name or #userid>")改为:
register_concmd("amx_voteban","cmdVoteKickBan",ADMIN_BAN,"<name or #userid>"),即把ADMIN_VOTE改为ADMIN_BAN.
对于第二中情况则要在实现命令的函数开头加入检验权限的函数即cmd_access(),比如说amx_who命令原本没有权限,我想改为m权限可以这样修改:
I。打开admincmd.sma,修改register_concmd("amx_who","cmdWho",0,"- displays who is on server")  为register_concmd("amx_who","cmdWho",ADMIN_LEVEL_A,"- displays who is on server") 。
II。在cmdWho这个函数的开头加入
if(!cmd_access(id, level, cid, 1))
     return PLUGIN_HANDLED
它的作用就是检验玩家是否具备在register_concmd中定义的权限,如果不具备,return PLUGIN_HANDLED 。return PLUGIN_HANDLED 意思是终止执行下面的程序。
注:其中cmd_access()函数中的数值(此例中数值为1)可设置成定义函数中read_argv()函数(不包含read_argv(0,output[],len))的个数+1,简单的说可以设置成输入完整命令时参数的个数(包含命令本身)。
下面列出插件原代码中(即*.sma文件)的权限对应的op设置时的权限。
#define ADMIN_IMMUNITY        (1<<0)  /* flag "a" */
#define ADMIN_RESERVATION     (1<<1)  /* flag "b" */
#define ADMIN_KICK            (1<<2)  /* flag "c" */
#define ADMIN_BAN             (1<<3)  /* flag "d" */
#define ADMIN_SLAY            (1<<4)  /* flag "e" */
#define ADMIN_MAP             (1<<5)  /* flag "f" */
#define ADMIN_CVAR            (1<<6)  /* flag "g" */
#define ADMIN_CFG             (1<<7)  /* flag "h" */
#define ADMIN_CHAT            (1<<8)  /* flag "i" */
#define ADMIN_VOTE            (1<<9)  /* flag "j" */
#define ADMIN_PASSWORD        (1<<10) /* flag "k" */
#define ADMIN_RCON            (1<<11) /* flag "l" */
#define ADMIN_LEVEL_A         (1<<12) /* flag "m" */
#define ADMIN_LEVEL_B         (1<<13) /* flag "n" */
#define ADMIN_LEVEL_C         (1<<14) /* flag "o" */
#define ADMIN_LEVEL_D         (1<<15) /* flag "p" */
#define ADMIN_LEVEL_E         (1<<16) /* flag "q" */
#define ADMIN_LEVEL_F         (1<<17) /* flag "r" */
#define ADMIN_LEVEL_G         (1<<18) /* flag "s" */
#define ADMIN_LEVEL_H         (1<<19) /* flag "t" */
#define ADMIN_MENU            (1<<20) /* flag "u" */
#define ADMIN_USER            (1<<25) /* flag "z" */


作者: D.R.CTO_地瓜    时间: 2012-5-12 08:25
本帖最后由 D.R.CTO_地瓜 于 2012-5-12 08:27 编辑

补充:管理员验证标记常量
常量名                     值              注释
FLAG_KICK             1        //验证标记 "a"
FLAG_TAG              2        //验证标记 "b"
FLAG_AUTHID         4        //验证标记 "c"
FLAG_IP                  8        //验证标记 "d"
FLAG_NOPASS       16        //验证标记 "e"





对于每个验证标记所代表的验证方式请查看你的.../addons/amxmodx/configs/users.ini中的说明





作者: 麻瓜啊    时间: 2012-5-12 09:26
呃        地瓜威武    这样般就可以申精?
作者: D.R.CTO_地瓜    时间: 2012-5-12 09:32
麻瓜啊 发表于 2012-5-12 09:26
呃        地瓜威武    这样般就可以申精?

我没给他精啊= =




欢迎光临 银河网络(纪念站) (https://yhgd.demo.weixianghost.com/) Powered by Discuz! X3.1