作者laechan (小太保)
看板mud
标题Re: [闲聊] 架 LPmud -- 1
时间Fri Jul 29 10:41:35 2011
现在开始创建一个新角色.
1.登入自己的 mud.
2.输入一个 id, 例如我是输入 laechan, 然後按 y.
3.这时会出现一个给新玩家的讯息, 这个讯息存在 /adm/news/nplayer_intro
4.输入密码, 然後再输入一次做为确认
5.选性别(我选 male), 选种族(我选 human)
6.输入 email, 输入
[email protected] 就行了
7.输入 real name, 随便输入(像我是输入 laechan)
然後就可登入一开始的登入用房间 /d/TMI/rooms/quad.c
more here 就可以看到该房间的档案, data here 则可以看到
这个房间的物件资料, LPmud一般是..
exits: 出口, mapping 格式, key name 是方向, 接的是房间档名
light: 房间亮度
long: 房间长叙述
short: 房间名
所以你可以用编辑器把这个房间改一改, 这样你的 mud 就有了
一个最起始的登入用房间.
再来的话,cd /adm/daemons, 下 ls 指令, 你会看到一些档案,
处理方才登入程序的档案有两个..
/adm/daemons/logind.c // 一般登入用档案
/adm/daemons/newuserd.c // 新玩家专用档案
它的意思就是,如果你是旧玩家,那从你进行登入、到成功登进
mud 的起始房间,大抵上都是由 logind.c 处理。
但如果 logind.c 判断到你是未注册的新玩家,它就会请 newuserd.c
来协助处理你的帐号新增流程(就是选性别, 种族那边).
然後 data me, 你就可以看到自己的一些 data 资料, 一般栏位
是这样的..
armor : 用来储存你穿上装备後的 armor 值资料. 比方某防具
shield 设定防御值 60, 那你装备上它之後就是
armor["shield"]=60
capacity : 负重最大值, 基本上每一件物品都有 mass 重量设定,
总重不能超过这个 capacity 值.
cwd : 代表你现在按 cd. 指令会看到的目录名(也就是你目前
所处的工作目录
gender : 就是你的性别
id : 比方我选的 name 是 laechan, 那 id 这个栏位就是 ({"laechan"})
ip : 登入 ip. 因为我是 telnet localhost 5000, 所以 ip
栏位看到的就是 "127.0.0.1" 代表我是本地登入
last_location: 你上一个所处的房间在哪里(wiz 指令 back 用的)
mass : 一般人物重量
max_sp : sp(精神力, 魔法力)的最大值
npc : npc 识别. 因为我是玩家不是 npc, 所以 npc = 0
race : 就是你的种族
reply : 若有玩家 tell 你什麽, 然後你 reply 回他, 回他的
讯息就会储存在这个栏位
stat : 玩家的属性数值, TMI-2 目前定义了几种数值
([ "dexterity" : 17, "strength" : 13, "intelligence" : 16,
"constitution" : 15 ])
time_to_heal: 几秒自我回复一次, 通常这个是由 /std/user.c 的
heart_beat 函数控制
weapon1 : 第一武器
weapon2 : 第二武器
.
.
.
一开始的资料栏位都是很单纯的.
/cmds/std 则收集了一般玩家可以下的指令, 常见的 score, look,
alias, get, drop, passwd, i(inventory) 等都在这里, LPmud 一
般的分法如下...
/cmds/adm 管理者才能下的指令
/cmds/file 一般巫师可以使用的档案类指令
/cmds/ghost 玩家变成 ghost 状态(比方阵亡时)可以用的指令
/cmds/object 与物件相关的指令(如物件移动的 gate)
/cmds/std 一般玩家可以使用的指令
/cmds/wiz 权限层级为 wiz 时可使用的指令
/cmds/xtra 权限层级为 elder wiz 时可使用的指令
定义权限的地方则放在 /adm/news/groups 档案内, more 他可以
看到几个东西
(root) cratylus
(admin) (root):cratylus
(adminaccess) (admin)
也就是说这个 mud 的最高管理者(root)它设定为 cratylus, 我
只要将它改成 laechan, 那我就是我自己 mud 的最高管理者.
再来管理者区(admin)的 (root):cratylus 它的意思, 就是root
当然是管理者的一员, 用 (root) 就代表把 root 区的所有人都
纳进来的意思, : 则是分隔号. 除此之外我亦把 cratylus 也设
为管理者的意思.
而在这个 mud 里头, adminaccess 则是更次一级的管理者的意
思. 像圣殿的分法就是 root、adm_c、adm、deep、wizard
分法可以照自己的意思, 不过刚开始都先 follow 它的预设值即
可. 所以你只要把自己的 id 加进 root 区, 然後重开 mud, 这
样你的角色就会自动变成最高级管理者,
接下来我们对我们的人物下 save, 再 quit, 则你的玩家档案会
被存在 /data/std 目录下, 有两个档案..
/data/std/connection/l/laechan.o // 储存登入用资讯
/data/std/user/l/laechan.o // 玩家资料的实际储存档
底下是在 connection 目录下的 laechan.o 档
#/std/connection.c
name "laechan"
password "doeaeo`f!jehbnbo`nchhfgndd`fbggnhmfndjnji"
body "/std/user"
email "
[email protected]"
real_name "laechan"
ip "127.0.0.1"
wizard 1
last_on 1311905037
password 即密码的部份, 它储存的是已编码过的.
接着用编辑器打开 user 目录下的 laechan.o, 然後找一行
"PATH":"/cmds/std:/cmds/object:/cmds/xtra:/cmds/file:/cmds/wiz"
这一行就是你登入 or 创造角色时, 系统自动配给你的
「你可以执行指令的范围」
所以虽然一开始创建的角色不是 wiz,却可以执行 wiz 指令,原因
就在於系统有把 wiz 区的指令配给你的缘故。
这是因为 /adm/daemons/newuserd.c 自动帮你做了 set("wizard",1);
的动作的缘故.
/adm/daemons/newuserd.c
static void get_real_name(string rn, object user, object body)
{
.
.
.
#ifdef AUTO_WIZHOOD
user->set("wizard", 1);
write("AUTO_WIZHOOD="+identify(AUTO_WIZHOOD)+"\n");
body->set("PATH", AUTO_WIZHOOD);
write("\t[You have been granted automatic wizard status]\n");
#endif /* AUTO_WIZHOOD */
.
.
}
中间那一段是说如果 /include/config.h 有定义 AUTO_WIZHOOD
的话,就执行 #ifdef ... #endif 之间的东西
user->set("wizard", 1); 设 wizard 标记
body->set("PATH", AUTO_WIZHOOD); 设 AUTO_WIZHOOD 到 PATH
但是 /include/config.h 所 #define AUTO_WIZHOOD 的东西却是
空的(undefined), 既然是空的为何会执行上面?
原因很简单, 因为就算是空的「仍然 #define 了 AUTO_WIZHOOD」,
所以 #ifdef AUTO_WIZHOOD 它就判断为真.
这时候, 虽然 PATH 是空的, 可是因为有 wizard 参数, 玩家在登入
时就会再呼叫 /std/user.c 的 init_commands 函数
/std/user.c
static void init_commands() {
string path;
add_action( "cmd_hook", "", 1 );
path = query("PATH");
if (!path) {
if ( wizardp(this_object()) )
path = NEW_WIZ_PATH;
else
path = USER_CMDS;
set("PATH", path, MASTER_ONLY);
}
}
所以只要把 newuserd.c 的 #ifdef ... #endif 把他们整个
/* */ 掉, 就不会鸡婆地把每个新创的玩家角色都设为 wiz
了。
到这里至少..
一、你已经可以新增管理者角色.
二、每个在你 mud 新增的角色, 其权限就只会是玩家.
三、你已经知道如何改登入画面、及玩家一开始登入的房间环境.
四、你也可以试着简化 newuserd.c 的流程, 比方如果你的 mud
不需要玩家输入 email 跟 real_name 的话, 那就可以让
newuserd.c 跳过这两个输入流程.
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.83.16.91