北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 4246|回复: 7

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

[复制链接]
发表于 2011-8-8 03:02:55 | 显示全部楼层 |阅读模式
如题 如何在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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-8 06:19:03 | 显示全部楼层
我没用过lua自带的wait模块。一是对这个模块没细研究感觉麻烦。二是wait用线程技术完成等待,由于线程的东西太复杂而又经常和DoAfter冲突所以最终放弃wait模块。

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

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


当然,仁者见仁智者见智,每个人有不同的喜好。我的一点建议,希望能对楼主有所帮助。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-8 06:55:19 | 显示全部楼层
就我之前的研究speedwalk最好还是少用.因为一旦启用,很容易造成机器人不可控的后果
lua自带的wait模块,有大型机器人里,容易产生奇怪的错误(意思是,不是次次错,10-20次里就出一次错,让人抓狂)

在大型机器人中的行走,个人建议考虑#ok功能,具体可以参考maper的领悟机器人
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-8-8 07:24:49 | 显示全部楼层
多谢各位,我再去研究研究。
其实我想做的只是一个很小的机器人,并且初学mush+lua,看到网站介绍这个用wait模块可以少写触发器感觉很酷很灵活的样子,所以硬着头皮调试了好久,没想到结局这么地悲剧
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-8-8 08:31:41 | 显示全部楼层
你首先要明白speedwalk的用途,再决定是否用和怎么用。
这个是为那些不允许使用快速行走的mud而使用的。北侠里基本没这个需求吧。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-8-8 09:11:27 | 显示全部楼层
原帖由 labaz 于 2011-8-8 08:31 AM 发表
你首先要明白speedwalk的用途,再决定是否用和怎么用。
这个是为那些不允许使用快速行走的mud而使用的。北侠里基本没这个需求吧。


什么都不明白什么也不知道的时候,看到什么就用什么了嘛
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-8-8 13:15:11 | 显示全部楼层
原帖由 fantom 于 2011-8-8 10:01 AM 发表
DoAfterSpeedWalk的时间,你要累积起来。
例如,你想在2秒后执行look, 在look之后2秒执行eat。那要这样写
DoAfterSpeedWalk(2,"look"
DoAfterSpeedWalk(4,"eat" .  这里的延时是4,就是和前面的累加起来的。如果 ...


多谢等我有劲的时候试试

[ 本帖最后由 prettysucker 于 2011-8-8 01:16 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 03:35 AM , Processed in 0.013982 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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