回复 10楼 的帖子
mush是有一次性的临时触发器的 回复9楼,就是设置了单行多命令才会解释分号啊!如果我按着你的做法写了带正则的b (.*)
那么如果我b {e;s;e} 或则 b (e;s;e)
会被解释成b {e,换行,s,换行e,会出错吧,无论发送给游戏,脚本,变量,命令解释器都会这样的吧 原帖由 randomcho 于 2011-6-30 10:33 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
算了 我就举个例子吧。
比如我想走到某个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 原帖由 randomcho 于 2011-6-30 10:37 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
回复9楼,就是设置了单行多命令才会解释分号啊!
如果我按着你的做法写了带正则的b (.*)
那么如果我b {e;s;e} 或则 b (e;s;e)
会被解释成b {e,换行,s,换行e,会出错吧,无论发送给游戏,脚本,变量,命令解释器都会 ...
b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w就是其后面的全部参数而已。 原帖由 labaz 于 2011-6-30 10:36 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
mush是有一次性的临时触发器的
哥哥,跑题了。我们不是讨论临时触发啊,虽然zmud也有。555版本开始就支持。
能仔细琢磨下我所表达的意思,帮我搞定它把。我苦恼死了。 原帖由 littleknife 于 2011-6-30 10:41 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w就是其后面的全部参数而已。
那么以后这个b的内容就不能被重复利用了!每次都得写啊,我就是想把b 这个alias做成一个自定义的动作模块,然后通过b (path),来执行path.如果用函数加载alias,那么以后每次都要写。重复啊 原帖由 littleknife 于 2011-6-30 10:38 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
你的问题其实是行走暂停的问题,可以参考城际互联插件的写法。其核心思想是:自定义触发式行走。
就是你发出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 编辑 ] 原帖由 littleknife 于 2011-6-30 10:41 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
b (.*) 的alias对应的是脚本解释器,因为我添加的alias,是用函数AddAlias做的,所以先去运行的是cmd_bbb()函数,w就是其后面的全部参数而已。
还是不明白,我自己去坐坐实验吧.mush的语法 函数真实头痛,手册看了一遍又一遍,还是稀里糊涂 原帖由 randomcho 于 2011-6-30 10:33 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
比如我想走到某个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就没执行渡河命令呢? 挖坑啦。
我来解释一下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中进行的。