飘风 发表于 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" */

coolzsb 发表于 2003-8-30 19:26:39

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

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

猪头三 发表于 2003-8-30 20:53:16

好东西.. 顶...

et007 发表于 2005-3-29 04:14:18

锅底汤更浓 :wink:

世纪之星 发表于 2005-3-29 09:00:06

好,支持 :super:

轻音乐 发表于 2005-3-29 18:50:36

好东西看完是要定地~ :d:

CrazyWind 发表于 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

辛苦了 顶~!

WeeVee 发表于 2005-4-27 22:12:45

:boss:
[=H.H=] LightMusic
我在QQ对战平台CS1.6广东1建服好像看到了你的名字 :D
页: [1] 2
查看完整版本: [重要]如何更改插件命令的权限!