1、MUD编辑修改入门教程 MUDLIB各个目录是干什么的? 现在大部分中文MUD都是在东方故事(esII)基础上发展起来的,其目录结构基本一样, 也有个别MUD为了标新立异对个别目录换了个名字以示不同,但其实质没有什么变化。 这个做的最可恶的是xkx,把一个好好的daemon目录换成了一个不土不洋的kungfu, 里边却还是skill,condition这些洋名,简直让人faint!我实在看不出这种修改有什么好处, 除了添麻烦(xkx对一些命令的汉化,什么cha,du...也是如此)。不过, 也有一些是为了系统更合理而修改的。 对MUDLIB目录的解释已经有许多版
2、本了,基本也没什么区别,下边是我的解释, 以我自己整理的一份MUDLIB为基础,如果有目录不同的地方适当贯通就是了。 adm 这里是最基本,最底层的程序,是整个MUD的控制枢纽。 这个目录只有admin权限可以修改。 admdaemons 守护程序目录。守护程序是指游戏中频繁调用的控制类程序, MUD里各种基本功能都是由这些程序控制的。这些程序一般在游戏一启动就自动载入内存。 按照unix下文件命名习惯,这里的程序多以d.c结尾, 比如combatd.c就是控制战斗的程序。另外由于这些程序调用非常频繁, 一般都做了宏定义(查看includeglobals.h),例
3、如admdaemonscombatd.c 定义为COMBAT_D,在其它程序里可以适用这些宏定义代替这些文件名。 admetc 系统配置目录,此目录定义为CONFIG_DIR 这里放的是游戏的系统文档文件, 比如游戏的欢迎画面,巫师列表,BAN掉的IP记录等。 admobj 这里只有两个文件,但却是整个MUD最重要的东西。 master.c:这是MudOS主控物件,也就是整个MUD的总司令。 simul_efun.c防真函数加载精灵,这是MUD启动时第一个要载入的东西。 所谓efun,是指系统函数,也就是mudos中定义的函数。 这些函数不必做任何说明可以在MU
4、D的任何程序里直接调用, 而且由于他们是预先定义的,也就是mudos早已经知道他们是做什么的, 所以比其它在MUDLIB里定义的函数执行效率要高。但他们的缺点是修改非常不方便, 对任何一个efun函数的修改必须重新编译mudos才能生效。因此, 在MUDLIB中又有了防真函数的定义,也就是simul_efun, 这些函数的作用跟efun完全一样,不同的是他们定义在UDLIB中,可以随时修改, 但必须重新启动游戏才能生效。 顺便讲一下一个MUD启动的过程,MUD启动的初始化过程分以下几步: 1.载入防真函数simul_efun 2.载入主控物件master,这
5、里是调用master的create()函数将其载入内存。 3.载入需要预先载入的守护程序,这里调用master的preload()函数, 需要预先载入的文件定义在admetcpreload里。 4.MUD进入多用户状态,允许玩家登录。 以上过程必须正确无误的执行完,否则游戏无法正确启动。 master.c和simul_efun.c这两个文件只能在游戏启动时由mudos自动载入, 不可以在游戏中用update的方法载入,而且这两个物件也不 允许非ROOT权限的物件摧毁(destruct)它,因为他们的摧毁就等于游戏关闭 。 admsimul_efun 防真函数目录
6、这里放的是定义各类防真函数的文件, 这些文件由SIMUL_EFUN_OB(也就是admobjsimul_efun)来载入内存。 cmds 游戏命令目录,这里放的是游戏中可以使用的各种命令, 只有admin才可以修改这个目录 cmdsadm 只有天神(admin)可以使用的命令 cmdsarch 只有大巫师(arch)以上才可以使用的命令 cmdswiz 只有巫师(wizard)以上才可以使用的命令 cmdsapp 只有巫师学徒(wizard)以上才可以使用的命令 cmdsimm 只有荣誉玩家(immortal)以上才可以使用的命令 cmdsusr 只有普通玩
7、家(player)以上才可以使用的命令 cmdsstd 所有生物(npc and player)都可以使用的命令命令目录采用子集格式, 权限高的命令完全包含权限低的命令,比如天神可以使用所有游戏命令, 普通玩家只能使用cmdsusr和cmdsstd目录下的命令。 data 游戏数据目录,只有arch以上权限才可以修改这个目录 databoard 各个留言板的数据 datalogin 玩家登录数据 datauser 玩家档案,呵呵,这里记录的是每个玩家的所有劳动成果 datanpc 一些特殊npc的数据,比如商店老板 datadaemon 重要的系统数据,比如e
8、mote词,英汉翻译词典 datamail 玩家信件 feature 标准继承函数。只有admin才可以对这个目录进行修改这些函数是非常重要的, 是MUD里各种物件,包括玩家,NPC,物品,房间等的各种功能的标准定义, 这些函数反映了整个MUD的与众不同之处,一个好的MUDLIB必然要对这些函数进行优化。 而要设计新的程序,必须对这个目录所有文件有所了解。 obj 系统物件,这是经常在MUD里被调用的各种物件。 这个目录下的物件被复制后跟调用他的物件具有相同的euid, 也就是说具有相同的权限,所以,这里的一个npc如果经admin编译后复制出来, 也具有了ad
9、min权限。这点非常重要,有些物件必须具有跟玩家相同的euid才能正常使用 ,比如符纸。而出于安全考虑,这个目录下的物件不可以随便复制。 只有arch以上才可以修改此目录。 objboard 游戏中各个留言板 objnpc 一些特殊的NPC objsheet 各种符纸 objweapons 兵器 objmisc 其它乱七八糟的东西,比如信箱等 quest 游戏里各种任务quest的文件,此目录需要wizard以上权限才可以修改 binaries 文件编译过程生成的二进制文件,此目录ROOT权限才可以修改 d 区域目录,游戏的地图门派和NPC存放的地方。此目录w
10、izard以上权限可以修改。 这里是整个MUDLIB最简单最常用的东西,也是玩家可以直接接触到的东西。 玩家所呆的任何一个房间都应该对应这个目录下的一个文件, 房间里每个NPC也都对应一个文件。这个目录下存在许多子目录, 分别对应游戏的不同区域(domain)。 ddomainnpc 该区域中的npc ddomainnpcobj 该区域中npc身上的物品 ddomainobj 该区域中的物品 data_bak 档案备份目录,保存需要备份的重要数据。admin可以修改 include 头文件目录,只有admin可以修改。这里放的是游戏中各个文件所需要的头文件,
11、 其中以下几个特别重要: globals.h全局定义的头文件,这是一个特殊的头文件, 他不需要在任何一个文件里被调用,但是这里定义的所有变量可以在任何一个文件里直接使用。 这里一般用来定义非常重要的或者许多地方需要调用 的变量。对这个文件的修改必须重新启动游戏才可以生效。command.h 这里定义的是各个权限等级所能够使用的命令目录,所以,除了admin, 应该绝对禁止任何人修改此文件。 includerace 种族的头文件 includenet 网络功能的头文件 open 系统临时目录,ftp登陆目录,任何人都具有写权限。 questobj FY3的ta
12、sk专门目录,存放各个task物品文件。wizard以上权限可以修改。 u 巫师工作目录,存放各个巫师开发过程的半成品。 这里的子目录名只能为各个巫师的euid, 而只有对应euid的人才有对相应目录的修改权限。比如一个目录是lion, 那么只有lion这个ID或者比lion权限高的人 才可以修改它下边的内容。 clone 物品目录,存放游戏中需要经常复制的各种物品,wizard以上权限可以写。 这个目录下的物品一般被其他地方复制(clone)出来,但他们的euid是固定的, 不会随调用它的物件的不同而改变,这就是这个目录和obj目录的最大不同。 此目录arch
13、以上等级可以修改 clonearmor 装备 clonedrug 药品 clonefruit 水果,水果跟食物的不同是吃了可以同时加食物和饮水, 而且有些水果具有养颜美容之功效。 cloneliquid 容器,象酒袋茶壶一类 clonemoney 顾名思义,人见人爱的东西 cloneuser 玩家物件,包括login.c(link_ob)和user.c(body), 此目录只有admin可以修改 clonebooks 各种秘籍 clonefood 吃的 clonegift 各种礼物,一般是好东东 cloneweapon 兵器 clonemis
14、c 其他杂物,比如尸体,头颅。 daemon 呵呵,这个目录为什么叫这个名字我一直没明白,看下边的说明吧。 此目录只有arch以上可以修改。 daemonskill 游戏中所有的技能 daemoncondition 人物各种状态,比如中毒,恢复等。 daemonclass 这个应该理解为“组织”或“工会”,是ESII从外国MUD里保留下来的东西, 不过随着中文MUD的发展,工会的概念逐渐被淡化,其含义已经跟以前完全不同, 现在他的意思有点象“身份”,比如道士,和尚,喇嘛,官兵,老百姓。。。。 个人有个人的身份。很多情况下,这个跟门派类似,但又不完全相同。 这里
15、存放的是各种不同身份的人所具有的特殊东西, 不过现在一般用来存放各种特殊技能的特殊用法(perform) doc 文档。 游戏中的各种文本文件,arch以上可以修改 dochelp 各种帮助文件 docefuns 各种系统函数的用法 docstory 各种背景故事 log 系统日记,记录游戏过程各种重要事件,是巫师处理纠纷和剔除bug的主要依据来源。 一个好的巫师应该养成经常看系统日记的习惯。本目录只有ROOT权限可以修改。 p 玩家目录,这个目录下内容玩家具有写的权限。主要存放需要玩家修改的内容, 比如玩家房间,自创武功等。 std 标准对象目录,游戏中各种标
16、准物件, 只有admin可以修改游戏里其他物件都需要继承这里的相应文件。 stdarmor 装备物品的标准继承,比如衣服,盔甲等 stdboard 留言板 stdchar 生物的标准继承,MUD里的生物包含两种:玩家(player)和非玩家( npc)他们都需要继承stdcharchar.c这个对象, 他们与其他物件的区别是具有心跳(heartbeat)。 stddrug 药品的标准继承,其实这个现在一般不用了,这部分功能都放到了 feature的相应文件里,保留这个是为了跟旧的系统兼容。 stditem 物品的标准继承 stdroom 房间的标准继承
17、 有人曾问房间和物品到底有什么区别?说实话,这个问题还真不好说, 这两个物件基本结构差不多,也没有什么可以区分的特征。 现在的常用判断方法是房间是没有环境(environment)的,但也不是所有物品 (包括生物)都有环境,所以,呵呵,这个问题还有待MUD程序的进一步完善, 现在基本上无法判断。 stdskill 技能的标准继承 stdweapon 武器的标准继承 stdmisc 其他物件,比如钱,符纸。 值得注意的是,std这个目录跟一般MUDLIB的结构不太一样, 一般MUDLIB并没有如此归类存放,大家可以根据自己的认识加以判断。 以上是根据我的理
18、解对各个目录的解释,未必是权威的说法, 只是为了让大家有所认识,如果有什么错误请指正。 作为刚入门的新巫师,准确理解各个目录的作用是非常重要的, 必须知道哪个目录下的东西是做什么的,哪个目录你可以去改,哪个目录你不能动。 一般来说,要成为一个合格的巫师,至少要花半月时间来“读”程序, 了解整个MUDLIB的结构,了解各个文件的作用 (未必要完全看懂,但至少应该知道他是干什么的), 这样不至于再以后的程序开放过程中不知道什么功能该如何实现,从而走许多弯路。 当你了解了整个MUDLIB后就可以试着自己写程序了, 一般你只能在自己的工作目录里写东西。刚开始不妨试着
19、写一个简单的房间, 然后试着写一个简单的npc,然后试着把这个npc放到这个房间里。。。。。。 这样逐渐提高,你很快就成为一个合格的巫师了。 认 识 自 己 --什么是巫师? 巫师是创造者,程序设计师,负责创造玩家眼里的游戏世界。你可以创造任何东西, 这也使得巫师这个位置显得很重要且需担负很大的责任。当一个巫师代表你可以在瞬间取一个玩家的性命,对游戏系统造成很大的损害,或是建立一个人间天堂。任何你想得到的都可以做到。 在目前的大陆,专职的巫师是很少见的。这恐怕主要是因为MUD这个游戏还没有一套成熟的商业运营机制来使它产生经济效益,并以此养活那位专职的巫师吧!大多
20、数巫师都是走的“玩而优则巫”的道路。很难想像:一个从未玩过MUD的人会有多高的热情和动力去承担如此艰巨、而且是无报酬的工作。但并非说玩得好的玩家就一定要去做巫师,有人就是天生的玩家。流行的对于巫师有专职与兼职之说,这是指在一个MUD与两个或多个MUD担任巫师之分。我们的观点是坚决反对兼职巫师的,以下摘录的一段文字很能代表我们的看法: -------------------------------------------------------------------- 对于目前大部分的wiz兼职实在对于大陆泥巴这个freeware 是最大侮辱了 我对于巫师的看法就是该诚恳的,勤
21、奋的,付出在自己最热爱的一个mud 而不该去其他的mud寻找所谓的新的创意,或是一个等待开发处女,如果 大家的目的是需要提高中国泥巴的整体水平的话,大概你一个单兵作用不 大吧,那可需要的是一个整体的力量。 兼职的巫师本身就是一种浮华的类wiz ,他们有点技术,热忠于这个那个的 mud串门做个嘴片子,本身精力也许很多,有任务也许完成,下网了就也许 满足于自己名片颇多。 如果要获得新的想法,需要在其他mud当巫师才能获得吗?那不是成了看别 人的工作成果,“启发“自己的新想法?这... 如果觉得另外一个mud比现在所在的mud 更能体现自己的想法思路或风
22、格, 那 坚决的全身心的投入到那个更理想的mud里哪,如果觉得现在呆的mud 没发展了。那呆着也是惹那一身烦嘛!居然有人在自己不喜欢的mud里当 wiz ,这... mud 本身就是体现一个创作群体的思想,现在大家对于mud的观念特奇怪, 做wiz 的等待admin发任务,admin 抱死自己的权利,不去发现wiz们的长 处而只知道门派、地图、daemon的下任务,有技术的wiz抱怨工作简单、无 聊,需要提高的wiz抱怨石头太硬。这就导致了巫师这个群体成个很官僚的 状况,如果大家真心的做个mud,又何至如此呢。 还有就是兼职也导致侵犯某些codes的
23、作者的权利,甚至有人拿着这边的程 序到那边去申请职务,这... 如果大家真心要把自己做的门派,或是得意的程序奉献给大家,那建议把 那些程序放到自己的主页上呀,好坏自有公论嘛,而且大家在你的主页上 经过讨论,或者对你是个更大的提高呢,这样大家知道是你的程序,觉得 保证你的权利。freeware,sigh,到了中国这个福地,什么都变味了,人们 换着法子的保护自己署名的权利,更大一群人拿着去掉开发者的署名的程 序做开发. 这... 是freeware 的精神吗?限制巫师兼职根本就不是一种可 以用来限制的条件,只是一相情愿的愿望而已。(有删改) ※ 来源·B
24、BS 水木清华站 ·[FROM 166.111.54.141] --------------------------------------------------------------------- --巫师的观念: 巫师是什么?巫师并不是神,神只是提供我们服务器、提供我们站点的人物,在我们这里,他们被定义为(gods),真正的巫师都是同玩家一样通过远程登录上去的用户——只是一个拥有较多权限的超级用户而已。因此本质上也是一种高级的玩家,但他所遵循的原则却要绝对地高于玩家。 争吵 巫师:永远不要与玩家争吵。如果你觉得自己错了,请于第一时间去改正它,第二时间再向玩家
25、说明。要是觉得丢面子的话,就保持缄默吧。如果你觉得自己没错,就不要理会,对方再纠缠下去干脆 kickout....有些事情是越争越越乱、越争越糟糕。还有一点:你如果上线时手头有事情要处理或者没有二十分钟以上的闲功夫,奉劝你不要现身,隐身处理事情算了。 玩家:永远不要与巫师争吵。如果你觉得自己对的,尽可能地去post或mail,如果觉得自己未被重视受到了伤害又不大可能得到补偿,你可以拒玩这个站点。如果你发现是你自己错了......你完了......... 要求 巫师:永远不要对玩家提出要求。如果你觉得确需限制,就直接设计出程序,只要他们在规则的允许之内,任由他们发展。一个好
26、的巫师是完全通过他的程序来实现对世界的调控,而不是言语。话多的巫师工作将会很累很累。 玩家:请不要对巫师提出出格的要求。这是一种很不健康的思想,理论上,玩家与巫师应该是有某种正式的沟通管道,而尽量减少私底下的交易。也就说,巫师应该只是制订规则、写区域、管理维护MUD,而尽量减少介入玩家的生活或成长过程。玩家也应该要尽量不要要求不在巫师工作范围内的事情,最常见的就是向巫师索取仙果、询问打开暗门的口令、某个秘密人物的所在。这种要求直接导致你在巫师心目中的评价直线下降。如果牵涉到要求改武功、提经验的地步的话,可能会带来进行坐黑牢的惩罚。而在此,我们还得指出一点,对于巫师来说“勿以恶小而为之”,
27、最好的办法就是做一个铁石心肠的家伙,拒绝一切超越工作范围的事,否则,你还是去做一个“新手指南”的玩家好了。 脾气 巫师理论上不应该有任何的脾气,这也许有点不尽人情,但是我们对每一个巫师都这样建议,上线前深呼吸几次。一上线先hihi,遇到事情先hehe,实在脾气上来压也压不住时,你干脆就quit再拍桌子跺脚大叫几声:“老子再也不做巫师了!”然后心平气和地再 login进去,巫师当然还得做、程序也还得写、丑话还得听。人们不是常说:“我们都有情绪因为我们不是神仙”,哈哈!现在你一在线,你就已经是神仙了。所以........ 动力: 一个纯义务的、没有报酬的工作,初期的
28、那份新鲜劲会随着没完没了的程序、函数而消磨怠尽。因此你得不时地给自己寻找动力。善始善终,巫师应该是程序员届最能考验人的工作之一。 水平 怎么你也得了解一下 MUDOS吧?实在不行,大致有个概念也成。对于 LPC你总弄懂吧?你所工作的MUDLIB不看完也说不过去吧?也许你目前还不行,但你若真的想当一名好巫师,你就得朝这个目标去做。 ——巫师权限简介: 大总管(gods):这个级别的比较特殊,一般是由你服务器所在单位的工作人员或管理人员担当。严格意义上,只有他们是神。神可以什么事都不做,却可以决定任何事情。不要去向神要求什么?你所要做的事除了沟通就只有祈祷。当然,对于神来说
29、除了到处goto和参预巫师频道的讨论外,他们也不必要过多的档案处理权。因为服务器就在他们的身边,任何制约对于他们来说都是可笑的,“神打了个呵欠,地上就刮了三个月的风暴”......... 天神(admin) :游戏的实际管理人,在游戏中所有事情的最后决定者。事实上他们只是神的使者的意义。天神唯一的限制就是不能(确切说应该是不准)修改 LOG 下的文件,那里只有真正的神(大总管)才能通过服务器的操作进行删除。 大巫师(arch):天神的助手,一般都是由熟悉系统架构的人来担任的。大巫师也是执行多数区域的 QC 的人选。只有一些涉及系统更动的问题,才必须通过天神进行更新操作,大巫师与天
30、神没有职责上的区别,只有处理权限的不同。 巫师(wizard):写区域的人, 请乖乖的遵守所有的巫师规则. 巫师学徒(apprentice):练习生。在这个阶段,你的工作是先熟悉环境和相关规定。调适一下你的心态,并确实的知道当巫师所负有的责任. --一些见议: 当巫师好像是在当创造者,任何你想得到的东西都可以通过程序做到。因为这样,请你动手前务必多想想,先把后果想清楚了再做。如果不幸出了些差错,也请完完全全地负起责任并承担后果。永远记住,你的一举一动,不论大小,对这个游戏都将造成一些影响,请尽量让这些成为正面的影响。 善待你的同事并尊重你的上级,巫师级别的划分并不一定是完
31、全反应着能力的高低。而实际上略通编程技巧的人也都知道,一个wizard可以很轻易地把自己改为 admin,而事实上你也别去动这个脑筋。巫师守则的遵守只是靠相互信任与自觉。原理上,用程序我们是可以完成任何事情。系统中的各种防御及记录体系也都是防君子不防小人的,但是我们不希望在程序中看到巫师物品,即使必须要有,一定要加上对使用的人的权限判断,我认为有写巫师物品的时间还不如多设计几个谜题算了。 认 识 工 作 --在开始制作之前 让我们大略看一下在LP MUD,即所谓战斗 MUD中, 世界的构成方式。这个世界是由一个个的对象(object)所组成, 每个对象有一个对应的程序来描述它的特
32、性。在游戏中所见到的每个房间,每个 npc,每个物品,甚至你自己,都是一个object,都是一段程序。 我们首先写出一段程序来创造出一个全新的对象,然后利用update来更新对象所属的程序, 再用 clone来实际造出一个可用的对象。在这里所谓更新,就是将硬盘里这个文件编译后形成一段代码,这段代码是存在于内存中的。在MUD中,程序只有进了内存方可执行。因此当你修改了或新写了一个文件,那只表明你在硬盘上改动或创造了这个文件,你必须做一下update,将它编译放入内存,你的修改和创造才正式生效。而clone命令其实就是update+move,因为它update的是一个物品或npc,这个物品或
33、npc还需要有地方放。(看起来吃力吗?没关系,当你对 updata和clone的操作十分熟悉后,再想想这段话,你就会chat oh)在系统里, 我们可以制作各式各样的对象, 但是都可以将之划分在三大类里面 房间、物品与生物。在制作区域时, 我们习惯将区域放置在根目录下的d 目录。房间的档案就直接摆在区域的目录下,生物与物品则摆在这个区域中名为 npc及obj的子目录中。 --制作的基本品质要求 所有的 MUD都有自己的风格、发展方向、跟程序品质的要求。由于这些东东与程序是否能通常执行关系不大。有时仅仅只是一些个人习惯而已。作为MUD这么一个集体创作的作品,这种习惯就有必要有一个集体性的
34、统一,这种统一大约是随著主持这个 MUD的admin而异。事实上又由于每个admin对mudlib的了解程度不一,所以对品质要求的深度也不同。以下是我们“无锡 MUD巫师组”对各位新加盟的巫师的品质要求: 命名 命名的一个基本原则就是简单直观。一般我们要求使用中文的拼音,如果其英文名很熟知并确实比拼音短小直观的情况下,也可使用英文,当然也包括那些已经约定俗成的如:room、eat、food、cloth等。在使用拼音时,要遵循下列要求: 1,请尽量保证发音准确,没把握请查字典; 2,两字词直接连写,例:大门 damen.c,超过两字请使用隔断符号进行间隔,以免出现难以辨读的情
35、况。 3,隔断符号分“_”和“-”两种,它们两者的区别在于前者两边的关系是修饰的、而“-”两边之间的关系是并列的。东客房可以写成dong-kefang或者是kefang_dong,两者之间的区别相信不需要我再多说了吧。 4,四字词应在两字中间用“-”隔开,象wuxidayu应该写成wuxi-dayu。三字词请选择好隔断的部位。象老管家lao-guanjia就不能写成laoguan-jia,这些看起来似乎有些罗嗦,但的确是必须养成的一种良好习惯。 此外,命名最好形成统一的规范,不管在哪里当巫师,一定要先仔细看一看那里的大部分文件的命名格式,尽可能地与前面的文件相融合。 目录
36、 目录原则上没有什么过多的限制,有一些传统,你可以通过阅读整个系统的文件来看明白。一般的区域放在d目录下,每一区域中下面再包含npc与obj两级子目录,用于放置这一区域里的人物与物品,一般不要再增添其它的有关子目录,而可以教授武功的人物请放在kungfuclass下的同名称的目录下,我们所要提醒的一点是,在新的区域目录的设置上要相对合理,里面文件过少,就请合并至相近的一个目录中,如果太多,也要尽量拆成两个目录。以免给日后对该目录的操作造成不便。 程序 程序语言相当简单,但是良好的习惯必须在一开始养成。 1,程序必须缩排整齐,缩排一律用 tab (相当於 4 的空格),虽然
37、缩不缩排无关程式是否能够执行,但是如果你是一个只求程式执行正确,而不管别人是否容易阅读,在 Mud这样一个由多人共同发展程序的环境中将会十分惹人反感。 例:请采用类似 if(...) { if(...) { ... } else { ... } } else if(...) { ... } else { ... } 的风格,不要采用 if(...){ ... } 这样的风格。有人也许会说,我看很多正规的程序
38、员就不这样子嘛!但是你别忘了,LPC是一种特殊的编程语言,它还有有它特殊的工作环境。一是,它的程序有可能会经过很多的人阅读与修改,二是它经常要在zmud这样的客户端软件下进行远程的在线逐行修改,到了那时你就会对这样的规范体会颇深了。 2,开头的注释行并不是可有可无的,最起码得让你的同事对这个程序有疑问时知道找谁?并建议是加上编写和修改的时间。 该文件完整的绝对路径 中文名称 作者完成或者是最修改日期 如有对该文件的重要说明,请写在这一行 3,对于房间的描述应该整齐划一,至少在同一区域下的场景描述都需保持一致。每行控制在57至61个字节之间,建议人物20个字,房间30
39、个字一行。对于人物的描述,出现的信息提示也遵守这种规则。 4,档案路径名称最好和绝对路径无关,这样当你的程序在整个目录被移到另一路径下后仍然能够正常运行,为此你可以用 __DIR__ 这个由MudOS提供的巨集定义表示这个档案目前所在的目录(__FILE__表示目前这个档案的档名),即使移动之后必须做修正,最好也限於某个 .h 档案。 5,档案中尽量不要直接调用其它目录下的 NPC 或 OBJ ,为扩展性着想,至少房间一定要调用自己目录下的。当然 CLONE 目录下的除外,如确需要,请直接在自己的目录下复制一份。如果确实发现各个目录对该文件的调用率很大,不妨申请大神直接在 CLONE 目录
40、下设置。 6,语言风格也许与写作的各个人有关,但是我们这里的金庸风格是十分明显的,什么该有,什么不该有,最笨的方法就是翻翻原著。我们不希望在你创造的区域发现一块德芙巧克力或者是冲锋枪。同时我们也希望区域的设计需要有相当的「原创性」,现在侠客行上衍生出的版本非常之多,我们不希望我们巫师只是在这其间东抄一点、西窃一点。能用自己想出来的东西,最好回避跟一些太出名的作品雷同的东西。在制作时,有关的地理、历史以及相关小说应该是一个好的巫师的必备参考书籍。 7,所有的讯息必须正确而且适当,所谓「正确」是指基干一般常识必须无误,例如:某人拉开一张桌子,自己看到的是“你拉开了一张桌子”,旁观的人也能看到讯
41、息,但却应该是“某人拉一了一张桌”,各有不同。而如果是某人看到桌子心中不由一惊的讯息,旁观的人就不一定能看到了。所谓「适当」是指讯息出现的地方、讯息的长短、标点符号、颜色、出现时间必须尽量合乎真实世界的情形,例如人物add_action的讯息应该要能适当地表达出动作者的立场,不能有看起来怪怪的感觉。写作的时候,应该多想想:现实中应该是怎么样的? 8,景物或物品的设置必须合理,如一株可以爬的树你可以把它写成房间的景物,也可以用一个物品来表示树的存在(可以砍下来带走),但是一个可以钻进去的地洞就不应该写成一个物品,虽然在程序上是可行的,但却是绝不合式的。 9,人物的强度,也就是它的武功与经验必
42、须合理,我们的MUD虽然采开放式的属性系统,但是另一个重点是:NPC和玩家是同一个世界的人,NPC 的作用不能作为它具有变态能力的理由,换句话说NPC的「强」必须有故事背景设定上的理由,比如根据天龙八部小说你可以把少林寺中的一个烧火头陀设成罕世高手,但这必须要控制在严格的情况下需要在游戏中给予足够的提示。任何应用上的牵强理由而设计的强力NPC会受到最严格的检验。( 请先参照各门派掌门的强度,作为假设的玩家强度水准上限,NPC没有特殊理由不应该强过这些人,而且这种强度的NPC应该是十分「少见」的。)一旦由于某种原因你要将某一个存在的NPC调高,你必须要给玩家足够的提示与声明。 10、武器装备的
43、强度必须合理,和NPC相同,强力的装备也就是宝物应该是十分罕见的,如果没有适当的故事背景设定,强力的装备会受到最严格的检验,而且这些装备必须是极其罕见的,也要受到一定条件的限制。这里一个例子就是各种杂类的MUDLIB总会在一些好奇的巫师手中出现一些增加1000级的伏魔刀之类的东西,这些东西一旦出现,事实上将会对你(或者是原作者)精心构筑的整个MUD的武功系统的否定。 11、区域的大小与其中所含的「机关」必须成正比。在这里我们给出一个数字,如果你的区域每过10个房间,都全是一堆用房间编辑器做出来的改改叙述、名称和数字的房间、NPC 、装备或物品,那对于这种阳春区域,我劝你还是自己收回去欣赏、不
44、要作任何通过你上级 QC (也就是对佻的程序进行品质鉴定)的可能性幻想。 此外,还有一些编程原则是必须遵守的: 一、自己定义的函数,在文件开始最好有一个函数原型的定义声明(声明的作法就是在文件的开关几句将这个文件里所用到了自己定义的函数头写上,注意:末尾要加分号),每个函数前有一个简单的说明也是基本的要求(也就是前面加的注释行,告诉别人,这个函数是干什么的,是在什么地方调用,如果别人要修改要注意什么)。而一些复杂的地方也最好加上注释。因为在线解决问题时是经常要查看源程序的。 二、若要完成复杂的功能需要对d、kungfu以外的目录增加或修改文件,需要先征得大巫师的检查和同意。而在这之前
45、可以提请巫师组讨论,看看有没有更好的实现办法。 三、做复杂的物件时,尽可能将一些日后可以通用的功能做成inherit或include,以方便以后的编写。 四、为兼容性、稳定性考虑,除非迫不得已,不要直接调用你很少看见过的EFUN(就是一些由MUDOS定义的外部函数,你在整个MUDLIB是找不到它们的说明。)。 怎么开始工作,有人说先做起来再说,有人说先看起来再说,我们的意见是,从简单的房间和人物在编写开始,最简单的起步就是找一些相近的自己也能看得懂的程序来改,这样产生错误的可能最小。待涉及到机关与秘密的制作后,再开始全面地读看MUDLIB的程序,实在看不懂,先跳过去,一直看完,结合我们
46、的中级工作手册(编纂中),我想接下去的自学历程应该是十分顺利的了吧? 为了使这本手册最大限度地通俗易懂,我尽量做到决不过早地向大家提及一大堆专业术语,以免吓跑我们的新巫师朋友,但是......这里,我先提一个,就一个......好不好?我们来理解一个概念--继承(inherit)。在程序中,继承的意义就在于把很多东东中间的共性提出来,设置成一些标准物。然后,别的程序就没有必要再一个个地重复设置,直接继承它就有了这些特性。继承共分两种:一是标准物件,就是具体的东东,比如说:npc(人物)、item(物品)、room(房间);第二种就是标准特征,比如说:F_MASTER(可收徒的)、F_EQ
47、UIP(可装备的)。多用继承可以大大减轻系统的记忆量,也对我们的工作带来很大的便利。好,下面我们开始写程序了。 MUD编辑修改入门教程2(zz) 我们新巫师不会一上手就去开发新的系统程序,先起手写的大都是一些简单的房间、物品、人物,这类程序首先必需要继承一个标准物件,如:房间要 inherit ROOM; 物品要 inherit ITEM; 人物要 inherit NPC; 道理前面已经讲清楚了。 接下来可能要碰到一大堆令人头疼的函数了,不过没关系,我们先不要去理会它们,做一些简单的房间呀、人物之类的只要用到一个最基本的函数:create()。create()的作用就是在你写的这个
48、程序,不管是房间还是东西,当它被制造出来,它就会立刻启用这一函数,对自己进行一些最基本的设定。函数里的语句格式也很简单,就是: set("属性",某个值); 到底有哪些属性可以set呢?你可以去找一些程序多看看,也可以问问较资深的巫师。下面为新巫师们列出了一些基本属性:()里的表示这个属性的类性。string表示是字符串,int表示是数字型。 房间属性 "short"(string) 房间的短叙述。 "long" (string) 房间的长叙述。 "item_desc"(string或函数) 房间中个别景物的叙述,格式为:([ <景物名称>:<景物
49、叙述>, .... ])。其中<景物叙述>可以是字串或 function type。 "exits" (mapping) 房间的出口,包括有门的方向,格式为:([ <出口>:<房间档名>, .... ])。 "objects" (mapping) 房间中的物品、生物,格式:([ <物品或生物档名>:<数量>, .... ])。 "outdoors" (string) 房间是否为「户外」,户外房间可以看到天色变化与气候影响。字串的意义表示房间的气候区,通常和该区域的 domain (即 /d 下的目录名称) 同。 "no_fight"(int) 房间是为禁止作战区域。 "no_magic"(int) 房间是为禁止施法区域。 人物属性 "id" (string) 人物英文名,这个字可以用来识别玩家,通常 "id" 跟 "name" 都不直接用set() 设定,而是用 F_NAME 中的 set_name()。 "title", "nickname", "name" (string) 人物的称号、绰号、与中文姓名。 "age" (int) 人物的年龄。 "age_modify"(int) 这个数值会在 update_age() 中被加在人物的年龄上,可以是负数






