关于遍历的进阶研究
本帖最后由 suxxx 于 2013-10-14 06:36 PM 编辑遍历,是侠客行做任务最强大的辅助技术之一,遍历用的好,可以很大程度上取代pp和helpme find的作用,甚至很多时候遍历做任务比pp再找npc要快的多。
关于遍历的基础知识,论坛上已经有很多文章了,大家不妨搜索“遍历”就能找到,
前辈tianyue有一篇zmud7.21的文章介绍,在这里http://www.pkuxkx.net/forum/thread-5017-1-1.html
我师父静电也有一篇zmud4.62很详细的文章介绍,在这里http://pkuxkx.net/forum/thread-31038-1-1.html
遍历,如果用zmud,可以用list和path两种方法来实现,各有所长,我个人是倾向于用path,录制路径非常方便。
前辈们的文章基本都已经介绍了怎么制作遍历和运行遍历,不过一些进阶问题没有阐述,这两天服务器没开,闲着也是闲着,我就来讲讲遍历的一些进阶用法,和大家探讨探讨吧。
遍历创建起来了,能运行了,我们很快会遇到下列问题:
1. 按上述两位前辈的遍历,我们遍历的时候是否发现经常跑过头,还需要用#back回去找npc? 在网速时快时慢的时候是否遍历运行会出错?
这个问题主要是因为慢速行走时间设置那个数字造成的,这个数字的意思是我们遍历行走每一步等待的时间,达到这个时间就继续下一步。
每步时间限制如果设的时间长,遍历运行会很慢,设的时间短,网速慢的时候,又会过快发出指令,导致多走几步。其实这里有更好的解决办法,那就是两位前辈说的去掉“时限到时放弃行走”这个选项,我这里是仍然勾选,数字不妨填大点,比如10000,然后用一个trigger来触发行走下一步:
#trigger {^ 这里*的出口是} {#wa 50;#ok}
这个trigger的作用就是只要每一步行走成功,马上就继续下一步,如果网速慢,绝不会提前发出行走命令导致走过头,如果网速快,遍历速度也会大大提高,几秒就可走完全部路程找到npc。以前的北侠是不需要#wa 50的,但是最近一次修改把npc信息和出口信息顺序换掉了,所以我们需要给电脑50毫秒时间获取npc信息。
2. 遍历找到npc,杀完以后能否自动继续行动?甚至自动回去交任务?
这个当然是可以的,首先遍历最好是做成一个环形,就是从哪里出发就到哪里结束,比如用逍遥行,那就是遍历的起点和终点都设在地区的节点房间。其次,两位前辈文章中遇到npc,用#stop停下来,建议改成#pause,那么杀完npc以后,只要用#step命令就可以自动继续回到起点了。最后,如何在遍历回到起点以后还能继续回去交任务呢?这里我提供一个我的做法,需要配合逍遥行。首先在遍历路径最后加一个(dbl)命令,这个dbl命令我在逍遥行里定义了:
#if !%isnumber( @dbl) {set action @dbl} {#if @dbl=1 {play dongbula} {#case %random {sing2} {sing3} {sing4} {sing5} {sing6} {sing7}}}
作用是如果dbl变量为1,则弹奏冬不拉,如果变量为其他数字,则做某些动作,如果不是数字,则设置action变量为dbl变量值。(这里你问我为什么要弹冬不拉,我只能回答这是我个人的恶趣味,您不用这样子,哈哈哈),在我修改的alucar前辈的逍遥行里,每个gt命令走完也会运行这个dbl命令,那么我们就可以配合一些trigger来实现遍历或者gt完以后自动行动下一步了。举例说明一下:
比如胡一刀任务,接任务的时候,#var dbl 遍历xxx;gt xxx ,再设一个 #trigger {设定环境变量:action = "遍历(*)"} {#var dbl {gt hyd};bianli %1},在gt到xxx地区以后,根据trigger就会自动开始遍历了,而遍历结束以后,又会根据当前dbl变量自动回胡一刀交任务了。
3. 走路可以自动运行了,是不是开心了?马上你又会被一帮子拦路的npc困扰了,这些家伙总是拦住我们的去路,让我们的遍历中断,何其痛苦啊。难道我们的遍历到这里需要手动么?不,我们机器人是不会被困难打倒的!
开始我的办法是在遍历里加入(#killall xxxx;#wa 5000)这样的命令来在走到这种房间的时候停下来杀人然后继续走。很快我就发现这方法效率实在是低啊,时间设的短了或者网速不好,可能人还没杀完,后续走路路径就发出去了,如果时间设的长,那效率多低啊。其实这个问题稍微动动脑子,解决也不难。
#trigger {^你想(*)收*@npc_c为弟子} {killall @npc}
#trigger {^你想收谁作弟子?} {#ok}
#trigger {@npc_c死了。} {#say 稍等3秒....;#wa 3000;#ok}
#alias clear_block {npc=%1;npc_c=%2;shou %1}
好了,你可以在你的path里要杀人的房间加一个(clear_block a b),其中a是npc的英文名字,b是中文名字,那么在遇到npc的时候会自动杀,如果那个房间npc已经被杀,就会自动继续下一步。
什么?你说你的触发和护镖里收谁做弟子的冲突了? 大哥,您用class开关一下就可以了,这个不用我教了吧。。。
4. 好了,遍历的自动化是不是完善度很高了?各位的自动任务机器人是不是有希望了?什么?您问我要我做的机器人?不好意思啊,让我研究研究可以,让我把这些机器人做出来,我很懒啊,到现在我自己也没做好,到现在遍历路径都没录完整呢。
最后,强烈推荐所有zmud7.21用户使用alucar前辈的逍遥游来走路,他的帖子在这:http://pkuxkx.net/forum/thread-18005-1-1.html
我修改的逍遥游版本,帖子在这:http://pkuxkx.net/forum/thread-33445-1-2.html
北大侠客行MUD,中国最好的MUD 呵呵,板凳 ,收藏,慢慢研究 小小师姐又发研究文章了啊,一定要顶。师姐是基于path遍历情况下,能考虑一下list遍历情况么? 你们都太牛了。 {:7_279:}顶起,再慢慢看 好,研究遍历对自动化的意义很大。 list遍历非常容易做啊
做好路径后,用这里明显的出口是 xxx来做trigger走下一步。
好处是不受网络快慢的干扰,遍利速度跟网速成正比,发现目标可以随意停下,不会跑过格子
直接找到目标开杀,也不需要什么dummy
缺点是如果目标乱跑,follow他时需要记录下他跑的路径,不然会找不到回去的路。但是用path会有一样问题吧。有前辈有什么好的方案么,只有开发GPS么? 用前面第一条的办法,path同样不受网络快慢困扰,不会跑过格子。用path的好处就是录制路径非常快捷方便吧。 记得有path和list互转的函数,糖果前辈的教学贴里总结过用list更自由,比如遍历找到npc后简化后续返回路径,当然要用list的话最好自行开发录路径的命令 我更喜欢当伸手党。
但师姐的帖子一定要顶