北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: randomcho

请教mushclient个问题

[复制链接]
发表于 2011-6-30 22:36:47 | 显示全部楼层

回复 10楼 的帖子

mush是有一次性的临时触发器的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-6-30 22:37:56 | 显示全部楼层
回复9楼,就是设置了单行多命令才会解释分号啊!
如果我按着你的做法写了带正则的b (.*)
那么如果我b {e;s;e} 或则 b (e;s;e)
会被解释成b {e,换行,s,换行e,会出错吧,无论发送给游戏,脚本,变量,命令解释器都会这样的吧
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-6-30 22:38:56 | 显示全部楼层
原帖由 randomcho 于 2011-6-30 10:33 PM 发表
算了 我就举个例子吧。
比如我想走到某个room去。从出发地-->目的地的
路径是这样e;e;然后渡河;渡河好后再走s;e;s
就这么简单;如果用zmud我可以用一个alias解决,方法就是1楼得列子。
#TR {你渡过河了} {#sa 执行 ...


你的问题其实是行走暂停的问题,可以参考城际互联插件的写法。其核心思想是:自定义触发式行走。

就是你发出e;e;后,发一个自定义命令,如:set no_more walkgo,然后通过屏幕来抓取这个“设定。。。”然后再给个暂停命令。
具体可参考http://pkuxkx.com/forum/viewthread.php?tid=18161&extra=page%3D&page=1
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-6-30 22:41:24 | 显示全部楼层
原帖由 randomcho 于 2011-6-30 10:37 PM 发表
回复9楼,就是设置了单行多命令才会解释分号啊!
如果我按着你的做法写了带正则的b (.*)
那么如果我b {e;s;e} 或则 b (e;s;e)
会被解释成b {e,换行,s,换行e,会出错吧,无论发送给游戏,脚本,变量,命令解释器都会 ...


b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w[1]就是其后面的全部参数而已。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-6-30 22:41:56 | 显示全部楼层
原帖由 labaz 于 2011-6-30 10:36 PM 发表
mush是有一次性的临时触发器的



哥哥,跑题了。我们不是讨论临时触发啊,虽然zmud也有。555版本开始就支持。

能仔细琢磨下我所表达的意思,帮我搞定它把。我苦恼死了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-6-30 22:45:03 | 显示全部楼层
原帖由 littleknife 于 2011-6-30 10:41 PM 发表


b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w[1]就是其后面的全部参数而已。



那么以后这个b的内容就不能被重复利用了!每次都得写啊,我就是想把b 这个alias做成一个自定义的动作模块,然后通过b (path),来执行path.如果用函数加载alias,那么以后每次都要写。重复啊
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-6-30 23:07:44 | 显示全部楼层
原帖由 littleknife 于 2011-6-30 10:38 PM 发表


你的问题其实是行走暂停的问题,可以参考城际互联插件的写法。其核心思想是:自定义触发式行走。

就是你发出e;e;后,发一个自定义命令,如:set no_more walkgo,然后通过屏幕来抓取这个“设定。。。”然后再 ...


这种做法我在我的mud里也是这么做的。
我是这么做的,我举个例子:
palace["长安城"]={''e;s;e;/ddd();e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e"}
那么这里我自己写了个path_resume()解释(就是用for i,#table )
,path里遇到/代表调用函数,暂停后面的命令然后ddd()函数里有个set no_teach pathresume,
通过触发然后继续走后面的。
但是我考虑到走路太多会输入过多,因为偶的遍历是快速的。
我还设计了path里没有函数就一次执行20个命令,然后休息下,再做下20个。
如果path里遇到有函数,那么暂停。就像例子里的path一样,函数在第4个。
然后函数完成后,以函数为起点,走下面20个。
但是我如果我用别人的路径
palace["长安城"]={''e;s;e;/ddd();e;e;a-to-b;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e;e"}
他的path里含有alias a-to-b,假设这个alias里面的路很长,可能会造成输入过多。
我可能还有调用path_resume()这个函数。那么会不会出问题,我对函数这块就是高不清楚。
我lua而是现学的。
所以我想放弃函数的做法,用alias来解决问题

[ 本帖最后由 randomcho 于 2011-6-30 11:09 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-6-30 23:17:08 | 显示全部楼层
原帖由 littleknife 于 2011-6-30 10:41 PM 发表


b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w[1]就是其后面的全部参数而已。


还是不明白,我自己去坐坐实验吧.mush的语法 函数真实头痛,手册看了一遍又一遍,还是稀里糊涂
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-7-1 07:28:41 | 显示全部楼层
原帖由 randomcho 于 2011-6-30 10:33 PM 发表
比如我想走到某个room去。从出发地-->目的地的
路径是这样e;e;然后渡河;渡河好后再走s;e;s
就这么简单;如果用zmud我可以用一个alias解决,方法就是1楼得列子。
#TR {你渡过河了} {#sa 执行渡河后动作;temp} 1  (这句最后的1代表class)
#alias aaa {e;e;bbb {s;e;s}}
#alias bbb {#t+1;duhe;#alias temp %-1} (因为我敲aaa的时候会执行bbb {s;e;s},那么这里%-1就是e;s;e,也就是会生成一个alias temp {e;s;e})
那么我敲下aaa,就会自动渡河,然后渡河完成后再走e;s;e




详细说明下思路,我比较笨。没看懂。。。抱歉。我怎么看着执行了aaa 然后定义了bbb就没执行渡河命令呢?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2012-5-15 10:39:56 | 显示全部楼层
挖坑啦。

我来解释一下randomcho的思路,这是zmud常用的做法,通过alias内容的变更,改变下一步的动作。

#TR {你渡过河了} {#sa 执行渡河后动作;temp} 1
{你渡过河了}这是个触发内容,相当于funciton(n,l,w)中的l,{#sa 执行渡河后动作}就是注释,temp就是alias,通过其他命令更改temp的内容来切换。
#alias aaa {e;e;bbb {s;e;s}}
这个是先执行e;e,然后渡河后执行s;e;s (如何渡河在bbb中设置)
#alias bbb {#t+1;duhe;#alias temp %-1}
先是打开1触发组,就是上述{你渡过河了},然后执行duhe命令,再将bbb后的内容赋值给temp

整体的顺序就应该是aaa,duhe,赋值temp,触发{你渡过河了},执行temp。

这种方式应该也算是面向对象的吧,可以在mushclient中进行的。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 05:03 PM , Processed in 0.010062 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表