[MUD修改心得]让MUD更方便
mud吧
全部回复
仅看楼主
level 1
振衣而行 楼主
第一次接触MUD应该是在2000年左右,偶然看到了血海飘香这一款MUD,给我留下了深刻的印象。但因为时间关系并没有玩多久。09年第一次下载了夕阳再现MUD的源码,当时只是抱着玩玩单机的态度,没有深入研究。今年陆陆续续又下载了终极地狱完整版的源码以及海洋2007的源码,自己试着改了一些东西,放在这里留作备忘,一方面也是想抛砖引玉,让MUD更加方便,更容易入手。
玩夕阳再现时使用的是TOMUD客户端,我很喜欢TOMUD显示物品快捷栏、环境快捷栏的功能,以及右键自动菜单,还有非常方便的快捷方向键,可惜后来玩终极地狱和海洋时,这两款MUD都不支持TOMUD,逼着我去研究ZMUD的使用方法。后来发现虽然ZMUD没有TOMUD的那些快捷显示和操作功能,可在其他功能上却更为强大,所以也渐渐喜欢上了这一款工具。
现在还在研究如何让MUD支持TOMUD客户端,虽然有点头绪,但进展很慢,以后若是有什么发现再写吧。今天只先写一下使用ZMUD客户端的情况下的一些心得。
2011年05月28日 13点05分 1
level 1
振衣而行 楼主
下一个功能则是set prompt函数,夕阳是没有这个功能的,地狱和海洋有。地狱中set prompt hp可以实时显示当前的气和精,海洋中set prompt 4可以在每次输入命令时显示当前气、精、经验、潜能。两种应该说各有利弊。我后来对海洋的/feature/message.c文件进行了修改,使set prompt 4可以显示当前气、精、内力、精力、经验和潜能,并且根据气、精(等等)和最大气、精的比例来改变颜色。
其实我更想做的是把地狱中实时显示的功能移植到海洋,可惜还有点问题没解决。
今天先写到这里吧,还有些别的心得明天再写。以后有什么进展就还附在这个帖子后面。
2011年05月28日 13点05分 4
level 1
振衣而行 楼主
折腾了一下,总算把显示解谜的语句搞出来了,只要在look_living的最后加入下面的语句就可以了,至于要加的变量定义为
         mixed inq;
         string *gks;
         int i;
语句为
         inq = obj->query("inquiry");
         if (arrayp(inq) || mapp(inq)) {
         gks = mapp(inq) ? keys(inq) : inq;
             for (i = 0; i < sizeof(gks); i++)
             printf("你可以询问%s关于"+HIC+"%s"+HIW"的问题。\n", obj->query("name"),gks[i]);
     }

2011年05月29日 03点05分 5
level 1
振衣而行 楼主
看一下效果吧:
戚老板最近是爆发横财,所谓是三年不开张,开张管三年。
他看起来有四十多岁。
他看起来气血充盈,并没有受伤。
你可以询问戚长发关于我的钱的问题。
你可以询问戚长发关于宝物的问题。
你可以询问戚长发关于higgling的问题。
你可以询问戚长发关于买卖的问题。
你可以询问戚长发关于翡翠兰的问题。
你可以询问戚长发关于钱的问题。
你可以询问戚长发关于生意的问题。
你可以询问戚长发关于东西的问题。
你可以询问戚长发关于朱睛冰蟾的问题。
你可以询问戚长发关于我的东西的问题。
你可以询问戚长发关于赎的问题。
你可以询问戚长发关于还我钱的问题。
你可以询问戚长发关于讨价还价的问题。
你可以询问戚长发关于天王保命丹的问题。

2011年05月29日 03点05分 6
level 10
ask cheng about all
你从存款中划出一两黄金作为咨询费用交给程药发。
程药发对你说道:你可以向我打听有关改名换姓,离婚,改名的内容!
2011年05月30日 01点05分 7
level 6
LZ不错,很有研究精神!
2011年05月30日 02点05分 8
level 1
振衣而行 楼主
谢谢楼上几位的鼓励!
oh yeah今天下午终于把实时显示当前数值的代码搞出来了,当然都是借鉴的地狱的代码来修改海洋。
首先要在/include/下增加一个message.h文件,直接把地狱的拷贝过去就可以了。
然后要修改/inherit/char/char.c文件,在void heart_beat()的开始增加下面的语句:
if (userp(me) && living(me) && mapp(my["env"]))
{
        prompt = my["env"]["prompt"];
        if (((int)prompt == 1 || (int)prompt == 2 || (int)prompt == 3 || (int)prompt == 4) &&is_waiting_command() && ! me->is_attach_system())
        { write_prompt();}      
}
这个是设定自动取得信息的语句。
2011年05月30日 11点05分 9
level 1
振衣而行 楼主
然后需要修改/clone/user/user.c文件,加入以下语句:
static int attach_flag = 0;              // 是否正在和系统联络
int is_attach_system()
{return attach_flag;}
int attach_system()
{ attach_flag = 1;}
int detach_system()
{attach_flag = 0;}
这个是判断用户是否正在连接系统。
最后的修改最麻烦,需要修改/feature/message.c文件,大段的代码需要从地狱里抄,主要是这么几个函数:string prompt(),void clear_written(),int is_waiting_command(),void receive_snoop(string msg),void write_prompt(),void receive_message(string msgclass, string msg),但这几个函数都不能简单的抄,需要进行一些修改,调试了一下午终于成功了。

2011年05月30日 11点05分 10
level 1
振衣而行 楼主
最后就可以对prompt()中喜欢的函数进行随意修改了,比如我就把参数4改成了实时显示气、精、内力、精力、经验、潜能等所有战斗信息,很方便,因为会每秒自动取得最新数据显示,
而且只占用最下面一行,所以很清楚及时,而且屏幕上很干净,比原来效果好多了。
2011年05月30日 11点05分 11
level 1
振衣而行 楼主
效果图,注意最下面一栏是输入栏,上面显示的精和上面hp指令查出来的已经不一样了
≡——————————————————————————————————≡
   · 精 气 · 10301/ 21601 (100%)     · 精 力 · 4003 / 4003 (+0)
   · 气 血 · 20272/ 20272 (100%)     · 内 力 ·   345 /   345 (+0)
·精力上限·22500 / 15000          ·内力上限·75000 / 25000    
   『 食 物 』 298/ 300[正常]          『 潜 能 』 5456 上限[73500]
   『 饮 水 』 298/ 300[正常]         『 经 验 』 10000
   『 灵药药性 』:无       
   『 普通药性 』:无        
≡———————————————————————————海 洋 II———≡
[气:20272|精:16101|内力:345|精力:4003|经验:10000|潜能:5456]⊙ 
2011年05月30日 11点05分 12
level 6
这个显示真好,这样就不用自己写语句抓了.
2011年05月31日 00点05分 13
level 1
振衣而行 楼主
囧了,我说我怎么没看懂7楼的意思,原来ask还有all这个参数[88]可以用啊。
2011年06月07日 09点06分 15
level 1
在北大侠客行上,可以每走一步都实现小地图,我在海洋2010上也想实现,不过修改go.c语句,似乎不行,楼主可以研究一下吗?
2011年06月09日 01点06分 16
level 1
振衣而行 楼主
16楼,你说的小地图是要作成什么样?
如果是
        北大街
           |
西大街—中央广场—东大街
           |
         南大街
这样的话,用我的方法就可以实现了啊?
2011年06月09日 02点06分 17
level 1
海洋3的map命令好像很多地方的地图不完整,也有错,而侠客行100的map就很全,在哪儿都有。查看两者的map.c一模一样,不知道如何改。
2011年06月09日 15点06分 21
level 1
回17楼,是每走一步,在自动显示的地方描述前,就有小地图,就好像自动look一样,你上北大侠客行,就知道了,我用你的方法修改go.c文件,编译有问题。
2011年06月09日 15点06分 22
level 1
振衣而行 楼主
回22楼。不是修改go.c,是修改look.c...
2011年06月10日 00点06分 23
level 1
楼上,在海洋3中已经有这个功能了,我想实现的是北大侠客行的功能,自动显示小地图,而不是每走一步都要look,太麻烦了。
2011年06月10日 13点06分 24
11年的回复??兄弟,当时整出来没有?这走一步look才有小地图确实有点郁闷哇。。有办法搞定吗?
2013年11月26日 14点11分
昨儿搞到转钟一点,没搞定。。。 今儿中午直接想到在move.c里直接使玩家每move自动发出look的指令,终于搞定!但。。哎,这服务端得多重的负担??
2013年11月27日 05点11分
回复 398754060 :海洋有look.c和lookold.c两个命令 move.c里面默认的是执行look.c 同时l命令指向的是lookold.c 只需要把move里的look替换成lookold即可每步显示小地图
2014年10月11日 17点10分
level 1
楼上,找一个海洋3的源文件,用对比软件对比一下就知道。
2011年06月12日 11点06分 26
level 13
2013年09月11日 13点09分 27
1 2 尾页