prettysucker 发表于 2011-8-8 03:02:55

求教如何在lua中直接执行speedwalk?

如题 如何在lua中直接执行speedwallk呢
不能用 DoAfterSpeedWalk(),因为它是等一会再执行的

我想要的是,在wait模块中执行一段speedwalk,我开始写的是
            
            wait.make (function ()
          --    DoAfterSpeedWalk(2, "(out)se")   我开始这么写,但是有问题,因为在它等2秒的时候,后面的代码就开始执行了,然后都乱了
                wait.time(2);    Execute("out;s;e")    我现在这么写的能用,但这不是speedwalk,每一步中间没有停顿,步子长了可能会不稳定
                repeat
                  Send "bangchu"
                  local li, wi = wait.regexp ("^\\>?\\s?你擦擦手,厨房的杂务全做完了。$")
                until string.find (li, "你擦擦手,厨房的杂务全做完了。")
                wait.time(5)
                Execute("w;n;enter")         这里也是很土的写法,怎么在这里执行speedwalk呢,而且要保证speedwalk完了以后,后面的代码才执行
                wait.time(2)
                EndOfOneJobInOneDay(currentTime)
            end)

北大侠客行MUD,中国最好的MUD

[ 本帖最后由 prettysucker 于 2011-8-8 03:03 AM 编辑 ]

littleknife 发表于 2011-8-8 06:19:03

我没用过lua自带的wait模块。一是对这个模块没细研究感觉麻烦。二是wait用线程技术完成等待,由于线程的东西太复杂而又经常和DoAfter冲突所以最终放弃wait模块。

不过我解决wait是用的自定义触发模式。如果楼主只是想解决行走间隔问题可以考虑下。

另外最近推出的《一个脚本走天下》模块包含城际互联脚本,也可以用do_walkgo函数去完成一系列行走问题。


当然,仁者见仁智者见智,每个人有不同的喜好。我的一点建议,希望能对楼主有所帮助。

lzkd 发表于 2011-8-8 06:55:19

就我之前的研究speedwalk最好还是少用.因为一旦启用,很容易造成机器人不可控的后果
lua自带的wait模块,有大型机器人里,容易产生奇怪的错误(意思是,不是次次错,10-20次里就出一次错,让人抓狂)

在大型机器人中的行走,个人建议考虑#ok功能,具体可以参考maper的领悟机器人

prettysucker 发表于 2011-8-8 07:24:49

多谢各位,我再去研究研究。ttk_03
其实我想做的只是一个很小的机器人,并且初学mush+lua,看到网站介绍这个用wait模块可以少写触发器感觉很酷很灵活的样子,所以硬着头皮调试了好久,没想到结局这么地悲剧ttk_01

labaz 发表于 2011-8-8 08:31:41

你首先要明白speedwalk的用途,再决定是否用和怎么用。
这个是为那些不允许使用快速行走的mud而使用的。北侠里基本没这个需求吧。

prettysucker 发表于 2011-8-8 09:11:27

原帖由 labaz 于 2011-8-8 08:31 AM 发表 http://www.pkuxkx.net/forum/images/common/back.gif
你首先要明白speedwalk的用途,再决定是否用和怎么用。
这个是为那些不允许使用快速行走的mud而使用的。北侠里基本没这个需求吧。

ttk_01什么都不明白什么也不知道的时候,看到什么就用什么了嘛

fantom 发表于 2011-8-8 10:01:39

DoAfterSpeedWalk的时间,你要累积起来。
例如,你想在2秒后执行look, 在look之后2秒执行eat。那要这样写
DoAfterSpeedWalk(2,"look")
DoAfterSpeedWalk(4,"eat") .这里的延时是4,就是和前面的累加起来的。如果还想在eat后面做动作,依次累加

用wait模块是比较好的。
Execute("w;n;enter")         这里也是很土的写法,怎么在这里执行speedwalk呢,而且要保证speedwalk完了以后,后面的代码才执行

快速行走用execute就这样写:Execute("#wn(enter)")
另外要保证走完之后代码才执行,一般来说用wait来延时就可以了。
如果想精确,就用wait.regexp, 用走到目的地后的描述来判断。



[ 本帖最后由 fantom 于 2011-8-8 10:07 AM 编辑 ]

prettysucker 发表于 2011-8-8 13:15:11

原帖由 fantom 于 2011-8-8 10:01 AM 发表 images/common/back.gif
DoAfterSpeedWalk的时间,你要累积起来。
例如,你想在2秒后执行look, 在look之后2秒执行eat。那要这样写
DoAfterSpeedWalk(2,"look"images/smilies/default/wink.gif
DoAfterSpeedWalk(4,"eat"images/smilies/default/wink.gif .这里的延时是4,就是和前面的累加起来的。如果 ...

多谢images/smilies/tsj/tk_01.gif等我有劲的时候试试

[ 本帖最后由 prettysucker 于 2011-8-8 01:16 PM 编辑 ]
页: [1]
查看完整版本: 求教如何在lua中直接执行speedwalk?