不知怎么回事,又想到MUD。是不是因为最近总捣鼓Fedora的Shell,情形和当年玩MUD有些相似?
当时在湖大玩的是湖南信息港的一个服务器。虽然叫“封神演义”,和封神却半点关系也拉不上,只是最流行的“侠客行”的一个修改版而已。我当时就曾经去下载了“侠客行”MUDLIB的源代码,黑灯瞎火之中找到一个Bug,居然在所谓的“封神”中也能使用,哈哈。
现在想旧梦重温,自己架一个MUD服务器,自己一个人瞎玩,嘿嘿。就跑去网上找下载的地方。
发现大多数以前的MUD网站或关闭、或无人维修,情形惨淡。“泥巴”果然最后要归于尘土,这是它的宿命。我当时在玩的时候,大概是2000年,已经是它的末期。非常萧条,非常孤独。然而我喜欢它清清白白的无声世界。
尝试了许多无效连接之后,好不容易找到一个现在还搞这些无人问津的东西的网站。下载了侠客行100海洋版。又跑到MUDOS的官网上,下载MUDOS的源代码。头痛就来了。
在Fedora下,MUDOS倒是很顺利就编译成功。到了架起服务器时,就失败了。
问题在于MUDOS的默认的编译选项没有载入xkx100(侠客行)所需的部件。查找了许久,发现必须修改它的options.h文件(可以复制options.h为local_options,然后修改local_options):
- #undef NO_ADD_ACTION : 大多数国内的MUDLIB(基本都基于ES2)都使用了Add_Action
- #undef NO_WIZARDS : 以支持Wiz
- #define PACKAGE_UIDS : 大多数国内的MUDLIB都使用这个作为安全系统。
之后xkx100在服务器端上正常运行起来了。用客户端连接时又有问题:
- 无法Login,输入username之后,就出现提示符,再输入就都是错误提示。
- 查看logind.c,发现错误都在于input_to函数。例如原文件是这么使用:input_to(“get_id");我去查看了文档,发现这样也是合法。我将它改成了input_to((:get_id:));之后,再在前面加入函数的声明,却就正确地运行。
- Login之后,无法save_object();提示没有权限进行文件写入操作。奇怪的是Data里面User的信息可以写入,而写Login的信息时就出错。
- 确实原因不明。用了一个笨办法。在master.c里面,修改valid_write()全部返回1。
- 进入到游戏里面,走动时没有自动提示周围环境。
- 查看move.c,里面在Object成功移动之后,用了command("look")。显然这个命令没有成功执行。我查了许久,发现这个命令本身没有任何错误。直到今天,看了一篇关天NPC结构的文档,才发现在command.c里面,一个主要的函数command_hook()前置了一个属性private……。当时脱口而出:XX……。
- 这同时也是导致所有NPC无法说话,无法收徒,等等的原因。
- 此外,在我将全部文件都改为UTF-8编码的时候,又制造了问题。semote无法使用,技能无法查看。
- 这个问题比较明显,就是data下面以前的两个数据文件现在无法读取了,格式错误。最好的解决办法是找一个正解的数据文件,留着它的头尾,再将无法读取的文件的内容粘贴过去……这也是个笨办法。不过我不知道究竟是怎么样的格式,不得不这样。
- 纯粹是瞎搞。要是早些找到齐全点的资料,就不必白费许多功夫了。在这一点上,不得不承认老师的必要性。在开始时,他将为你节约大片时间……