北大侠客行MUD论坛

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

我的武当新人门派任务机器人制作(zmud4.62版)

[复制链接]
发表于 2017-5-29 18:26:28 | 显示全部楼层 |阅读模式
本帖最后由 jesyao 于 2017-5-30 12:53 AM 编辑

当你点开这篇贴子,那么恭喜你加入武当,并真正开始探索侠客行之旅的武当人生。作为武当新人的我在写帖子的时候刚刚达到7w的经验,是真真正正的新人。此帖子也仅仅适用于经验不高于10w的新人,帮助你们度过新手的第一天。阅读这篇文档前,请先确定您使用的客户端为zmud4.62,并且对wiki已经有了初步的阅读。

一、做一个让人喜欢的新人。

1、如果你是现实中的真MM,那么请尽快表明你的身份,你会最快获得大家的喜欢。

2、做一个阅读过wiki的新人,不提烂问题。

3、提问的时候有礼貌,获得帮助记得感谢。

4、别人帮助你是情分,不帮助你才是正常。

5、记得加入QQ群。

   

二、武当的新人门派任务

武当的门派任务共有五种,分别是采气任务、阵法任务、炼丹任务、诵经任务、侠客任务。领取任务时向武当广场冲虚老道要,命令分别是:

1、领取任务:ask chongxu about quest

2、取消任务:ask chongxu about cancel

3、回复任务:ask chongxu about success

   

门派任务要求:

1、采气任务:会基本内功和太极神功(任务成功增加最大内力及太极神功、养生术经验)

2、阵法任务:无(没有看到增加什么好东西)

3、炼丹任务:无(任务成功增加医术经验,门忠)

4、诵经任务:经验大于2000(任务成功增加养生术经验,降低杀气)

5、侠客任务:经验大于5w(不到5w不会分配侠客任务,任务成功增加道德,门忠)

前四种任务没有危险,侠客任务具有危险,任务是随机分配的,但你取消某类任务越多,以后越会分配此类任务。

   

三、武当的新人门派任务机器人制作

Zmud基础教学在这里就不在叙述,请参见糖果的帖子:

http://www.pkuxkx.com/wiki/zmud/newbie


    门派任务机器人追求的目标:1、稳定2、高效3、通用性。


    4.62机器人制作的一些基本原则:

1、触发语句一定要包含2个条件:a:能够判断出是你的触发语句 b:能够判断事件的唯一性。不能够满足以上条件的触发,要增加辅助进行判断,达到要求。(能做多行触发就做多行,不然侠客行第一所精神病医院就是为你准备的)

多行触发见帖子:http://www.pkuxkx.net/forum/viewthread.php?tid=31781&highlight=%B6%E0%D0%D0%B4%A5%B7%A2

2、每一类触发必须统一类(class)的名称,便于管理。

3、只打开必要的触发语句,减少误触发的可能,其他都要用#t-,#t+进行控制开关。

4、所有的汉字包括全角的符号都不要用=”来进行比较。

5、所有涉及到数字、名称等可能会变动的元素,全部用变量代替,再给变量赋值。

6、变量名称必须具有可识别性,通过名称即可知道变量代表意义。

7、涉及到#wa#alarm不正常工作的时候,可以互相替换测试。


    武当门派机器人的结构:

我的武当门派机器人包含以下几个部分

1、接任务部分:主要功能请求任务、放弃任务、回复任务、吃喝、任务间歇打坐、看书、判断自身状态。

2、执行任务部分:主要五个门派任务执行的语句、来去任务地点的处理。

3、战斗部分:包括战斗中涉及的语句处理,恢复,疗伤等。

4、状态部分:提取个人状态信息。

5、治疗部分:治疗、恢复自身状态的部分

6、路径部分:去武当各个地方的路径alias#path数据等

7、其他部分:宏按键、状态栏、按钮等。



北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2017-5-29 18:26:40 | 显示全部楼层
本帖最后由 jesyao 于 2017-6-2 04:37 AM 编辑

(一)阵法机器人

阵法机器人来说,是比较简单的机器人,机器人判断流程如下:

接到任务后,来到校场,获得五行阵的正反信息,获得第一步的入位、计算下一步的方位、等待走位指令,走位直到结束回复任务。

1、关键触发句:


  1. //获取当前方位
  2. Pattern:你按照*的要求从*位走向(*)位。
  3. Command:#var step %1

  4. Pattern:大家从自己现在的位置按照『(*)五行阵』的要求往下走一步。
  5. Command:
  6. //如果变量是zfstep中第一个元素,即是“反”,就是反五行阵。
  7.   那么如果当前位置是 zfstep中第二个元素,也就是“金”的话,下一步就走“木”
  8. #if (@ismember(%1,@zfstep,1)) {               
  9. #if (@ismember(@step,@zfstep,1)=2) {zouwei 木};
  10. #if (@ismember(@step,@zfstep,1)=3) {zouwei 土};
  11. #if (@ismember(@step,@zfstep,1)=4) {zouwei 火};
  12. #if (@ismember(@step,@zfstep,1)=5) {zouwei 金};
  13. #if (@ismember(@step,@zfstep,1)=6) {zouwei 水};
  14. }
  15. //如果变量不是第一个元素,也就是正五行阵
  16.   那么如果当前位置是“金”下一步走位水
  17. {                                          
  18. #if (@ismember(@step,@zfstep,1)=2) {zouwei 水};
  19. #if (@ismember(@step,@zfstep,1)=3) {zouwei 火};
  20. #if (@ismember(@step,@zfstep,1)=4) {zouwei 木};
  21. #if (@ismember(@step,@zfstep,1)=5) {zouwei 土};
  22. #if (@ismember(@step,@zfstep,1)=6) {zouwei 金};
  23. }
复制代码
   涉及到的变量:

zfstep {|||||}     list变量

ismember    自定义函数 详情见mookt的帖子 http://www.pkuxkx.com/forum/viewthread.php?tid=36644&highlight=462%2Bismember

   

(二)采气机器人

采气机器人主要是简单的触发,时间不对的话,加入放弃任务触发,继续接新任务即可。

这里主要问题是涉及到一个小迷宫,可通过五老峰路线绕过迷宫,直接到达天柱峰,避免迷宫影响。


(三)炼丹机器人

炼丹机器人流程简单,主要技术为颜色触发,在建立触发时点击选项页面,选取颜色字符触发,然后再将触发语句复制进触发语句框中,即可。

如果是红色就change L,黄色change H,紫色change M

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2017-5-29 18:26:47 | 显示全部楼层
本帖最后由 jesyao 于 2017-6-2 02:54 AM 编辑

(四)诵经机器人

诵经机器人就比较繁琐,涉及到经书名称,页数等

诵经机器人制作分为几个流程:

1、获取部分:获取诵经地点、诵经书名、章节、内容

2、查经部分:计算诵经页数

3、诵经部分:包括借取经书、读取经书内容,诵经

4、还经部分:还经书(经书丢了去当铺买)、回复任务

具体内容参见 mfan的教学贴http://pkuxkx.net/forum/viewthread.php?tid=26203


补充一下道德经计算页数内容的部分:

我将第十章计算挪到这个触发里判断,就不会出现11-19章不见了的错误了


  1. Pattern: 冲虚道长说道:「今天全派弟子要在(*)熟读典籍,据说要诵唱(*)的第(*)十(*)章
  2. Command:
  3. sj_pos=%1;
  4. sj_book=%2;
  5. sj_item=%2;

  6. //如果%3参数为空,也就是10-19章
  7. #if %null(%3) {sj_page=10};

  8. //20-81章
  9. #if %begins(%3,二) {sj_page=20};
  10. #if %begins(%3,三) {sj_page=30};
  11. #if %begins(%3,四) {sj_page=40};
  12. #if %begins(%3,五) {sj_page=50};
  13. #if %begins(%3,六) {sj_page=60};
  14. #if %begins(%3,七) {sj_page=70};
  15. #if %begins(%3,八) {sj_page=80};
  16. #if %begins(%3,九) {sj_page=90};
  17. #if %begins(%4,一) {#math sj_page @sj_page+1};
  18. #if %begins(%4,二) {#math sj_page @sj_page+2};
  19. #if %begins(%4,三) {#math sj_page @sj_page+3};
  20. #if %begins(%4,四) {#math sj_page @sj_page+4};
  21. #if %begins(%4,五) {#math sj_page @sj_page+5};
  22. #if %begins(%4,六) {#math sj_page @sj_page+6};
  23. #if %begins(%4,七) {#math sj_page @sj_page+7};
  24. #if %begins(%4,八) {#math sj_page @sj_page+8};
  25. #if %begins(%4,九) {#math sj_page @sj_page+9};

  26. //双页章节之后的每章页数递加1页
  27. #if (%pos(上卷,@sj_book)&@sj_page>15) {#math sj_page @sj_page+1};
  28. #if (%pos(上卷,@sj_book)&@sj_page>21) {#math sj_page @sj_page+1};
  29. #if (%pos(上卷,@sj_book)&@sj_page>33) {#math sj_page @sj_page+1};
  30. #if (%pos(上卷,@sj_book)&@sj_page>41) {#math sj_page @sj_page+1};
  31. #if (%pos(上卷,@sj_book)&@sj_page>43) {#math sj_page @sj_page+1};
  32. #if (%pos(下卷,@sj_book)&@sj_page>64) {#math sj_page @sj_page+1};
  33. #if (%pos(下卷,@sj_book)&@sj_page>68) {#math sj_page @sj_page+1};
  34. jie_jing
复制代码
   

计算道德经双页章节第二页的页数

  1. Pattern: 冲虚道长说道:「今天全派弟子要在(*)熟读典籍,据说要诵唱道(*)的第(*)十(*)章~(2~)
  2. Command:
  3. sj_pos=%1;
  4. sj_book=%2;
  5. sj_item=%2;
  6. #if %null(%3) {sj_page=10};
  7. #if %begins(%3,二) {sj_page=20};
  8. #if %begins(%3,三) {sj_page=30};
  9. #if %begins(%3,四) {sj_page=40};
  10. #if %begins(%3,五) {sj_page=50};
  11. #if %begins(%3,六) {sj_page=60};
  12. #if %begins(%3,七) {sj_page=70};
  13. #if %begins(%3,八) {sj_page=80};
  14. #if %begins(%3,九) {sj_page=90};
  15. #if %begins(%4,一) {#math sj_page @sj_page+1};
  16. #if %begins(%4,二) {#math sj_page @sj_page+2};
  17. #if %begins(%4,三) {#math sj_page @sj_page+3};
  18. #if %begins(%4,四) {#math sj_page @sj_page+4};
  19. #if %begins(%4,五) {#math sj_page @sj_page+5};
  20. #if %begins(%4,六) {#math sj_page @sj_page+6};
  21. #if %begins(%4,七) {#math sj_page @sj_page+7};
  22. #if %begins(%4,八) {#math sj_page @sj_page+8};
  23. #if %begins(%4,九) {#math sj_page @sj_page+9};
  24. #if (%pos(上卷,@sj_book)&@sj_page>15) {#math sj_page @sj_page+1};
  25. #if (%pos(上卷,@sj_book)&@sj_page>21) {#math sj_page @sj_page+1};
  26. #if (%pos(上卷,@sj_book)&@sj_page>33) {#math sj_page @sj_page+1};
  27. #if (%pos(上卷,@sj_book)&@sj_page>41) {#math sj_page @sj_page+1};
  28. #if (%pos(上卷,@sj_book)&@sj_page>43) {#math sj_page @sj_page+1};
  29. #if (%pos(下卷,@sj_book)&@sj_page>64) {#math sj_page @sj_page+1};
  30. #if (%pos(下卷,@sj_book)&@sj_page>68) {#math sj_page @sj_page+1};

  31. //双页章节第二页递增1页
  32. sj_page=@sj_page+1;
  33. jie_jing
复制代码
  

这里为了方便,接任务的触发做成一行,实际使用都要多行触发,保证机器人的稳定性。

关于路径问题,我建议像我一样的新手先不要弄遍历了,一个是效率低,另一个就是容易把自己弄伤心了哇~~~ 咔咔。先用现在已经有的路径alias就行了。

具体路径参见:asksky的集成贴 http://pkuxkx.net/forum/thread-40779-1-1.html

诵经机器人搞定了,你就已经对zmud机器人技术有了一定的了解,下面进阶的来了。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2017-5-29 18:26:53 | 显示全部楼层
本帖最后由 jesyao 于 2017-6-16 03:12 AM 编辑

(五)侠客机器人

侠客任务相对来说是比较危险的任务,一旦死亡就有可能会终止机器人的运行,除非你再写一段死后的处理(哈哈~)。所以侠客机器人如何稳定运行就是比较重要啦,把死亡率降到0,就是我们的目标。

  

首先机器人的流程是这样的:

接到任务下山找崔老头,进入迷宫,找到山寨,恢复自身状态,double 内力,杀土匪头,镯子给崔老头,上山回复任务,疗伤,接任务。

   

要想降低死亡率,关键步骤在杀土匪头之前的状态调整,及回复任务后的疗伤阶段。

另外一个难点在村口有时会有土匪挡道,使机器人停止,杀掉土匪后,机器人怎样继续执行。

最大的难点就是如何让机器人自动走这个迷宫,到达土匪头的老窝了。

就以上几个问题我们一起来探讨:

  

1、战斗前的状态调整:



  1. //用say xxx作为触发战斗准备
  2. Say 战斗准备                                    

  3. Pattern:你说道:「战斗准备」  
  4. Command:

  5. //气血或精神受伤,内力满足要求时,开始治疗,并再次检查状态
  6. #if (@qixue_health<100|@jingshen_health<100) {
  7. #if (@neili>@xk_neili) {                        
  8. yun heal;                                       
  9. #wa 1000;
  10. yun inspire;
  11. hp;
  12. say 战斗准备} {yun heal;yun inspire}};

  13. //内力不达到要求时,开始打坐到内力要求值。
  14. #if (@neili<@xk_neili) {                        
  15. #wa 1000;                                   
  16. dazuo [%max(10,%abs(@xk_neili-@neili+100))]};
  17.   
  18. //三项都满足要求时,回复气血30秒(刚刚打坐完,保险起见,需要多次测试,符合自己气血恢复速度,提高机器人效率),开始战斗,jiali max,最短时间杀死土匪头。
  19. #if (@qixue_health=100&@jingshen_health=100&@neili>@xk_neili) {
  20. #wa 30000;                                                      
  21. yun recover;
  22. exert powerup;
  23. jiali max;
  24. kill @zhanghao's tufeitou;
  25. perform dodge.zong}                 
复制代码
   

  

涉及到的变量:xk_neili %eval(@neili_max*2-200)


2、战斗后的治疗:



  1. //判断是否中毒,如果中毒中毒状态为1
  2. Pattern:【%s状态%s】%s(*)
  3. Command:#if %pos("毒",%1) {zhong_du=1} {zhong_du=0}

  4. //如果状态正常,开始接下一个任务
  5. Pattern:你说道:「开始疗伤」
  6. Command:#if (@qixue_health=100&@jingshen_health=100&@zhong_du=0) {user_status=0;#t- zhi_liao;s;kick3}
  7.   
  8. //如果不正常 开始治疗,并打坐回复内力,吐纳回复精力。打坐吐纳期间没有心跳,不会发作,
  9.    这样持续打坐,治疗,再打坐再治疗直到毒状态消失。
  10. {yun heal; yun inspire;#wa 500;dazuo 300}
复制代码

    如果是重伤不能治疗,就吃药,这里就不写了,大家自己加上触发就好了。

  

3、路径的使用及挡道土匪的处理

  

如何使用zmud路径功能

路径是zmud里的一个功能,他可以吧你走过的路线录制、保存并调用。路径的使用分2部分:

1.定义方向:zmud路径功能里的方向只能用一个字符代表,他分不清nenortheast的意思,他认为ne2步: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

   

在村口遇见拦路土匪的处理:
   

  1. //杀掉拦路土匪后触发。
  2. Pattern:经过一段时间后,你终于完全从紧张地战斗氛围中解脱出来。  
  3. Command:
  4. #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个出口

好了这已经足够了:

   


  1. Pattern:^%s这里{唯一|明显}的出口是(*)。$
  2. Command:

  3. //初始化变量
  4. chu1="";                                 
  5. chu2="";
  6. chu3="";
  7. chu4="";
  8. real_chu="";

  9. //处理获取出口信息   
  10. exit=%1;                                

  11. //建立出口list变量   
  12. exit=%replace("%1","、","|");                                
  13. exit=%replace(@exit," 和 ","|");
  14. exit=%trim(@exit);

  15. //获取出口数量   
  16. exitnum=%numwords(@exit,|);
  17. exitnums=%numwords(@exit,|);            

  18. //死路,回头。  
  19. #if (@exitnum=1) {exitnum=0;#echo 没路了,回头;#wa 500;@exit};

  20. //有enter的走enter  
  21. #if %ismember(enter,@exit) {exitnum=0;real_chu=enter};

  22. //出口变量赋值
  23. #loop %numwords(@exit,|) {#var chu%i %word(@exit,%i,|)};

  24. //计算哪一个是来的方向  
  25. stepnum=@ismember(@step,@fang_xiang,1);      
  26. chua1=[@ismember(@chu1,@fang_xiang,1)-1];
  27. chub1=[@ismember(@chu1,@fang_xiang,1)+1];
  28. chua2=[@ismember(@chu2,@fang_xiang,1)-1];
  29. chub2=[@ismember(@chu2,@fang_xiang,1)+1];
  30. chua3=[@ismember(@chu3,@fang_xiang,1)-1];
  31. chub3=[@ismember(@chu3,@fang_xiang,1)+1];
  32. chua4=[@ismember(@chu4,@fang_xiang,1)-1];
  33. chub4=[@ismember(@chu4,@fang_xiang,1)+1];

  34. //筛选有效出口
  35. #if (@chu1<>""&@chu1<>out&@exitnum>0&@chua1<>@stepnum&@chub1<>@stepnum) {real_chu=%additem(@chu1,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
  36. #if (@chu2<>""&@chu2<>out&@exitnum>0&@chua2<>@stepnum&@chub2<>@stepnum) {real_chu=%additem(@chu2,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
  37. #if (@chu3<>""&@chu3<>out&@exitnum>0&@chua3<>@stepnum&@chub3<>@stepnum) {real_chu=%additem(@chu3,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
  38. #if (@chu4<>""&@chu4<>out&@exitnum>0&@chua4<>@stepnum&@chub4<>@stepnum) {real_chu=%additem(@chu4,@real_chu)} {#if (@exitnum>0) {exitnum=[@exitnum-1]}};
  39. #if (@chu1=out|@chu2=out&@exitnums=2) {#if (@chu1=out) {real_chu=@chu2} {real_chu=@chu1}};

  40. //走每一步的间隔时间,网卡的话适当调整
  41. #wa 500;   

  42. //随机走一个有效出口,防止循环路径
  43. step=%word(@real_chu,%random(1,%numwords(@real_chu,|)),|);

  44. //出发。  
  45. @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

祝愿武当新人都玩的轻松愉快。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-5-29 20:17:17 | 显示全部楼层
本帖最后由 xiaodog 于 2017-6-15 08:46 AM 编辑

我靠,武当好叼我服了
投投入武当门下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-5-30 02:19:55 | 显示全部楼层
武当又多了个bt牛鼻子
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-5-31 09:29:47 | 显示全部楼层
膜拜~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-5-31 11:51:22 | 显示全部楼层
zmud的机器人看了就晕,牛鼻子又长长了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-6-1 17:23:08 | 显示全部楼层
这个必须支持一下,此处应该有掌声:)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-6-2 10:38:07 | 显示全部楼层
本帖最后由 longzaitian 于 2017-6-2 02:40 AM 编辑

回复 3# jesyao



我想如果诵经这里对于中文数字的处理可以使用函数的话,应该可以减少一些触发器的数量。

我从网上借鉴了一个函数:

建立一个变量:

变量名:c2n
数值:
  1. %eval(%replace(%replace(%concat("(0+"%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%replace(%1,"零","*0+"),"十","*10+"),"百","*100+"),"千","*1000+"),"万","+0)*10000+(0+"),"亿","+0)*100000000+(0+"),"六","6"),"一","1"),"二","2"),"三","3"),"四","4"),"五","5"),"七","7"),"八","8"),"九","9")"+0)"),"++","+"),"+*","+"))
复制代码



个人愚见,如果说错了,请见谅。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2023-1-30 09:06 AM , Processed in 0.018859 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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