Q:怎样在MUD中加一个新的权限等级?比如(boss)
A:
首先讲讲Es2类MudLib中所谓的权限等级的构成。
从MudOs的层面上讲,在MudLib中的权限,体现在
对文件的读写权限,对efun的调用权限两个方面。
对于文件读写权限的控制,由MASTER_OB的valid_read()
和valid_write()检查。Es2类lib中将这个检查交给了
securityd.c中的同名函数进行,而在这个文件中,
他定义了一套不同于euid,uid的身份制度,也就是通常
说的巫师等级制度。
对于efun调用权限的控制,一部分是一些特殊的efun
比如bind,seteuid,shadow,socket等,他们在MASTER_OB
里有自己的检查函数;另一部分是利用simul_efun和
MASTER_OB里对override的检查来实现的。这个问题以后
有必要再讲。
加一个新的权限等级,就是要在Lib中加入一个有着和
其他等级不同的权限的人群,根据上面的分析,需要
改动的就包括上面相关的文件。
/adm/daemons/securityd.c
首先修改那个wiz_levels,加入你所需要的等级(boss),
理论上,事情已经完结,如果你promote test (boss),
以后你wizlist的时候是可以看到test的。不过这个等级
跟一般的玩家是没有权限上的区别的。要实现区别,
就要在上面提到的各个权限检查中加入对他的额外判断,
在securityd.c中,就包括trusted_write,exclude_write,
trusted_read,exclude_read等mapping的修改,加入对于
(boss)这个等级的额外判断。同时在其他的地方,如果
需要可以加入对他它的判断。
/include/command.h
加入这个等级巫师能够使用的命令,我想你看了文件就该明白
怎么修改。
/feature/command.c
enable_player(),在switch里加入:
case "(boss)":
set_path(???);//这个 ???是你在command.h里定义的宏
//enable_wizard; 加不加这个自己决定
break;
然后更新各个文件,看看效果如何。
pkuxkx.net 5555里我加过一个(online)的等级。
尊重作者 转载请注明出处52mud.com