| 本帖最后由 jesyao 于 2017-6-16 03:12 AM 编辑 
 
 (五)侠客机器人 侠客任务相对来说是比较危险的任务,一旦死亡就有可能会终止机器人的运行,除非你再写一段死后的处理(哈哈~)。所以侠客机器人如何稳定运行就是比较重要啦,把死亡率降到0,就是我们的目标。    首先机器人的流程是这样的: 接到任务下山找崔老头,进入迷宫,找到山寨,恢复自身状态,double 内力,杀土匪头,镯子给崔老头,上山回复任务,疗伤,接任务。     要想降低死亡率,关键步骤在杀土匪头之前的状态调整,及回复任务后的疗伤阶段。 另外一个难点在村口有时会有土匪挡道,使机器人停止,杀掉土匪后,机器人怎样继续执行。 最大的难点就是如何让机器人自动走这个迷宫,到达土匪头的老窝了。 就以上几个问题我们一起来探讨:    1、战斗前的状态调整: 
 复制代码
//用say xxx作为触发战斗准备
Say 战斗准备                                     
Pattern:你说道:「战斗准备」  
Command:
//气血或精神受伤,内力满足要求时,开始治疗,并再次检查状态
#if (@qixue_health<100|@jingshen_health<100) {
#if (@neili>@xk_neili) {                        
yun heal;                                        
#wa 1000;
yun inspire;
hp;
say 战斗准备} {yun heal;yun inspire}};
//内力不达到要求时,开始打坐到内力要求值。
#if (@neili<@xk_neili) {                        
#wa 1000;                                   
dazuo [%max(10,%abs(@xk_neili-@neili+100))]};
  
//三项都满足要求时,回复气血30秒(刚刚打坐完,保险起见,需要多次测试,符合自己气血恢复速度,提高机器人效率),开始战斗,jiali max,最短时间杀死土匪头。
#if (@qixue_health=100&@jingshen_health=100&@neili>@xk_neili) { 
#wa 30000;                                                       
yun recover;
exert powerup;
jiali max;
kill @zhanghao's tufeitou;
perform dodge.zong}                 
    涉及到的变量:xk_neili %eval(@neili_max*2-200) 
 2、战斗后的治疗: 
 复制代码
//判断是否中毒,如果中毒中毒状态为1
Pattern:【%s状态%s】%s(*)
Command:#if %pos("毒",%1) {zhong_du=1} {zhong_du=0}
//如果状态正常,开始接下一个任务
Pattern:你说道:「开始疗伤」
Command:#if (@qixue_health=100&@jingshen_health=100&@zhong_du=0) {user_status=0;#t- zhi_liao;s;kick3} 
  
//如果不正常 开始治疗,并打坐回复内力,吐纳回复精力。打坐吐纳期间没有心跳,不会发作,
   这样持续打坐,治疗,再打坐再治疗直到毒状态消失。
{yun heal; yun inspire;#wa 500;dazuo 300}
如果是重伤不能治疗,就吃药,这里就不写了,大家自己加上触发就好了。
    3、路径的使用及挡道土匪的处理    如何使用zmud路径功能 路径是zmud里的一个功能,他可以吧你走过的路线录制、保存并调用。路径的使用分2部分: 1.定义方向:在zmud路径功能里的方向只能用一个字符代表,他分不清ne是northeast的意思,他认为ne是2步:n是一步,e是一步,所以我们可以用h代表ne,你走ne的时候路径录制的就是h。所以第一步把所有的方向录入进去,应该是18个左右,键盘快用光了。 2.录制路径:在起点打开路径功能点录制路径,然后你就出发,到终点点击停止录制,保存为一个路径名称,接着就可以调用了。 3.路径调用:比如武当到武当村的路径名称为 wd-wdc调用格式如下:  .wd-wdc 注意前面的点,表示这是路径,并且快速行走。那么从武当村到武当还需要录制一遍么?其实是不需要的,只需要再加一个点就是返回路径:..wd-wdc 就返回武当了。 慢步走:#slow .wd-wdc  当慢走时选项里有时间,时间以内输入#ok,就执行下一步,时间以外,就停止行走。其他的请参见相关页面: http://www.pkuxkx.net/forum/viewthread.php?tid=2612&highlight=%23step      在村口遇见拦路土匪的处理:
 复制代码//杀掉拦路土匪后触发。
Pattern:经过一段时间后,你终于完全从紧张地战斗氛围中解脱出来。  
Command:
#if (@xk_site=1&@xk_busy=1) {#if (@xk_job=1) {se;w;#var xk_busy 0} {se;w;#sl .wdc-wd;#var xk_busy 0}} {look}
    在这里抓取房间信息“村口”,如果房间信息是村口 xk_site=1 如果不是就是0,如果打过土匪,xk_busy=1,没打过就是0,这两个状态可根据你自己的方式抓取,比如“你正忙着呢,无法移动!”“逃跑失败”#var xk_busy 1;等等。Xk_job 侠客任务状态,状态1:从武当来执行任务,状态2:执行完任务回武当,状态0,没执行任务。根据这三个状态量,进行判断下一步的行动。      4.如何自动走迷宫: 每个迷宫都有自己的特点或者说规律,只要找出规律我们就可以编制走迷宫的机器人了,那么侠客任务的迷宫有什么特点呢: 1、有enter的出口,一定要走enter 2、绝对不能走out的出口 3、不走回头路 4、最多只有4个出口 好了这已经足够了:     复制代码
Pattern:^%s这里{唯一|明显}的出口是(*)。$
Command:
//初始化变量
chu1="";                                  
chu2="";
chu3="";
chu4="";
real_chu="";
//处理获取出口信息   
exit=%1;                                
//建立出口list变量   
exit=%replace("%1","、","|");                                
exit=%replace(@exit," 和 ","|");
exit=%trim(@exit);
//获取出口数量   
exitnum=%numwords(@exit,|);
exitnums=%numwords(@exit,|);            
//死路,回头。  
#if (@exitnum=1) {exitnum=0;#echo 没路了,回头;#wa 500;@exit};
//有enter的走enter  
#if %ismember(enter,@exit) {exitnum=0;real_chu=enter};
//出口变量赋值
#loop %numwords(@exit,|) {#var chu%i %word(@exit,%i,|)};
//计算哪一个是来的方向  
stepnum=@ismember(@step,@fang_xiang,1);      
chua1=[@ismember(@chu1,@fang_xiang,1)-1];
chub1=[@ismember(@chu1,@fang_xiang,1)+1];
chua2=[@ismember(@chu2,@fang_xiang,1)-1];
chub2=[@ismember(@chu2,@fang_xiang,1)+1];
chua3=[@ismember(@chu3,@fang_xiang,1)-1];
chub3=[@ismember(@chu3,@fang_xiang,1)+1];
chua4=[@ismember(@chu4,@fang_xiang,1)-1];
chub4=[@ismember(@chu4,@fang_xiang,1)+1];
//筛选有效出口
#if (@chu1<>""&@chu1<>out&@exitnum>0&@chua1<>@stepnum&@chub1<>@stepnum) {real_chu=%additem(@chu1,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}}; 
#if (@chu2<>""&@chu2<>out&@exitnum>0&@chua2<>@stepnum&@chub2<>@stepnum) {real_chu=%additem(@chu2,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
#if (@chu3<>""&@chu3<>out&@exitnum>0&@chua3<>@stepnum&@chub3<>@stepnum) {real_chu=%additem(@chu3,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
#if (@chu4<>""&@chu4<>out&@exitnum>0&@chua4<>@stepnum&@chub4<>@stepnum) {real_chu=%additem(@chu4,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
#if (@chu1=out|@chu2=out&@exitnums=2) {#if (@chu1=out) {real_chu=@chu2} {real_chu=@chu1}};
//走每一步的间隔时间,网卡的话适当调整
#wa 500;   
//随机走一个有效出口,防止循环路径
step=%word(@real_chu,%random(1,%numwords(@real_chu,|)),|); 
//出发。  
@step              
     涉及到的变量:fang_xiang {p|north|south|p|east|west|p|northeast|southwest|p|northwest|southeast|p|enter|out|P} 为什么变量是这样,中间加个P,在论坛里有答案。      五、其他问题: 其实还有一些想说的细节,但是论坛里其实都有,就不说了。 机器人就是挂机用的,稳定啊稳定,才是最重要的,可能机器人的效率不高,但是能够稳定的运行才是关键。 小技巧:这里不走第三个enter,就可以变成刷道德的机器人了,直到被抓进监狱,出来杀土匪头,前提带好出狱的银子,怎么做大家自己考虑吧。 已经被cut,怪不得道德涨的这么慢!!!     我自己测试的数据如下: 技能等级:全部 175级。经验支持最大等级:195级,死亡率:0  
 祝愿武当新人都玩的轻松愉快。 |