搜索
查看: 8064|回复: 10

[重要]如何更改插件命令的权限!

[复制链接]
发表于 2003-8-24 12:21:39 | 显示全部楼层 |阅读模式 来自 中国–福建–厦门
更改插件命令权限涉及到两个函数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" */
发表于 2003-8-30 19:26:39 | 显示全部楼层 来自 中国–福建–厦门–思明区

赫赫,难得有一篇讲解得这么细致的好文章

辛苦飘风了,可惜居然没有人看
33人的浏览量,哎,不知道说什么好了
回复

使用道具 举报

发表于 2003-8-30 20:53:16 | 显示全部楼层 来自 中国–北京–北京
好东西.. 顶...
回复

使用道具 举报

发表于 2005-3-29 04:14:18 | 显示全部楼层 来自 中国–广东–深圳
锅底汤更浓 :wink:
回复

使用道具 举报

发表于 2005-3-29 09:00:06 | 显示全部楼层 来自 中国–河北–衡水
好,支持 :super:
回复

使用道具 举报

发表于 2005-3-29 18:50:36 | 显示全部楼层 来自 中国–河北–衡水–深州市
好东西看完是要定地~ :d:
回复

使用道具 举报

发表于 2005-4-27 11:56:15 | 显示全部楼层 来自 中国–黑龙江–大庆
可不可以设置双权限啊??
比如:ADMIN_VOTE & ADMIN_BAN
回复

使用道具 举报

发表于 2005-4-27 15:11:38 | 显示全部楼层 来自 中国–广东–广州–越秀区

!!!!

:super:  :super:  :super:  :super:
回复

使用道具 举报

发表于 2005-4-27 18:27:43 | 显示全部楼层 来自 中国–澳门
辛苦了 顶~!
回复

使用道具 举报

发表于 2005-4-27 22:12:45 | 显示全部楼层 来自 中国–广西–玉林
:boss:
[=H.H=] LightMusic
我在QQ对战平台CS1.6广东1建服好像看到了你的名字 :D
回复

使用道具 举报

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

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