jesyao 发表于 2017-5-29 18:26:28

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

本帖最后由 jesyao 于 2017-5-30 12:53 AM 编辑

当你点开这篇贴子,那么恭喜你加入武当,并真正开始探索侠客行之旅的武当人生。作为武当新人的我在写帖子的时候刚刚达到7w的经验,是真真正正的新人。此帖子也仅仅适用于经验不高于10w的新人,帮助你们度过新手的第一天。阅读这篇文档前,请先确定您使用的客户端为zmud4.62,并且对wiki已经有了初步的阅读。一、做一个让人喜欢的新人。1、如果你是现实中的真MM,那么请尽快表明你的身份,你会最快获得大家的喜欢。2、做一个阅读过wiki的新人,不提烂问题。3、提问的时候有礼貌,获得帮助记得感谢。4、别人帮助你是情分,不帮助你才是正常。5、记得加入QQ群。    二、武当的新人门派任务武当的门派任务共有五种,分别是采气任务、阵法任务、炼丹任务、诵经任务、侠客任务。领取任务时向武当广场冲虚老道要,命令分别是:1、领取任务:ask chongxu about quest2、取消任务:ask chongxu about cancel3、回复任务: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%A22、每一类触发必须统一类(class)的名称,便于管理。3、只打开必要的触发语句,减少误触发的可能,其他都要用#t-,#t+进行控制开关。4、所有的汉字包括全角的符号都不要用“=”来进行比较。5、所有涉及到数字、名称等可能会变动的元素,全部用变量代替,再给变量赋值。6、变量名称必须具有可识别性,通过名称即可知道变量代表意义。7、涉及到#wa,#alarm不正常工作的时候,可以互相替换测试。
    武当门派机器人的结构:我的武当门派机器人包含以下几个部分1、接任务部分:主要功能请求任务、放弃任务、回复任务、吃喝、任务间歇打坐、看书、判断自身状态。2、执行任务部分:主要五个门派任务执行的语句、来去任务地点的处理。3、战斗部分:包括战斗中涉及的语句处理,恢复,疗伤等。4、状态部分:提取个人状态信息。5、治疗部分:治疗、恢复自身状态的部分6、路径部分:去武当各个地方的路径alias及#path数据等7、其他部分:宏按键、状态栏、按钮等。

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

jesyao 发表于 2017-5-29 18:26:40

本帖最后由 jesyao 于 2017-6-2 04:37 AM 编辑

(一)阵法机器人阵法机器人来说,是比较简单的机器人,机器人判断流程如下:接到任务后,来到校场,获得五行阵的正反信息,获得第一步的入位、计算下一步的方位、等待走位指令,走位直到结束回复任务。1、关键触发句:
//获取当前方位
Pattern:你按照*的要求从*位走向(*)位。
Command:#var step %1

Pattern:大家从自己现在的位置按照『(*)五行阵』的要求往下走一步。
Command:
//如果变量是zfstep中第一个元素,即是“反”,就是反五行阵。
那么如果当前位置是 zfstep中第二个元素,也就是“金”的话,下一步就走“木”
#if (@ismember(%1,@zfstep,1)) {               
#if (@ismember(@step,@zfstep,1)=2) {zouwei 木};
#if (@ismember(@step,@zfstep,1)=3) {zouwei 土};
#if (@ismember(@step,@zfstep,1)=4) {zouwei 火};
#if (@ismember(@step,@zfstep,1)=5) {zouwei 金};
#if (@ismember(@step,@zfstep,1)=6) {zouwei 水};
}
//如果变量不是第一个元素,也就是正五行阵
那么如果当前位置是“金”下一步走位水
{                                          
#if (@ismember(@step,@zfstep,1)=2) {zouwei 水};
#if (@ismember(@step,@zfstep,1)=3) {zouwei 火};
#if (@ismember(@step,@zfstep,1)=4) {zouwei 木};
#if (@ismember(@step,@zfstep,1)=5) {zouwei 土};
#if (@ismember(@step,@zfstep,1)=6) {zouwei 金};
}   涉及到的变量:zfstep {反|金|木|水|火|土}   list变量ismember    自定义函数 详情见mookt的帖子 http://www.pkuxkx.com/forum/viewthread.php?tid=36644&highlight=462%2Bismember   (二)采气机器人采气机器人主要是简单的触发,时间不对的话,加入放弃任务触发,继续接新任务即可。这里主要问题是涉及到一个小迷宫,可通过五老峰路线绕过迷宫,直接到达天柱峰,避免迷宫影响。
(三)炼丹机器人炼丹机器人流程简单,主要技术为颜色触发,在建立触发时点击选项页面,选取颜色字符触发,然后再将触发语句复制进触发语句框中,即可。如果是红色就change L,黄色change H,紫色change M。

jesyao 发表于 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章不见了的错误了
Pattern: 冲虚道长说道:「今天全派弟子要在(*)熟读典籍,据说要诵唱(*)的第(*)十(*)章
Command:
sj_pos=%1;
sj_book=%2;
sj_item=%2;

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

//20-81章
#if %begins(%3,二) {sj_page=20};
#if %begins(%3,三) {sj_page=30};
#if %begins(%3,四) {sj_page=40};
#if %begins(%3,五) {sj_page=50};
#if %begins(%3,六) {sj_page=60};
#if %begins(%3,七) {sj_page=70};
#if %begins(%3,八) {sj_page=80};
#if %begins(%3,九) {sj_page=90};
#if %begins(%4,一) {#math sj_page @sj_page+1};
#if %begins(%4,二) {#math sj_page @sj_page+2};
#if %begins(%4,三) {#math sj_page @sj_page+3};
#if %begins(%4,四) {#math sj_page @sj_page+4};
#if %begins(%4,五) {#math sj_page @sj_page+5};
#if %begins(%4,六) {#math sj_page @sj_page+6};
#if %begins(%4,七) {#math sj_page @sj_page+7};
#if %begins(%4,八) {#math sj_page @sj_page+8};
#if %begins(%4,九) {#math sj_page @sj_page+9};

//双页章节之后的每章页数递加1页
#if (%pos(上卷,@sj_book)&@sj_page>15) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>21) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>33) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>41) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>43) {#math sj_page @sj_page+1};
#if (%pos(下卷,@sj_book)&@sj_page>64) {#math sj_page @sj_page+1};
#if (%pos(下卷,@sj_book)&@sj_page>68) {#math sj_page @sj_page+1};
jie_jing   计算道德经双页章节第二页的页数Pattern: 冲虚道长说道:「今天全派弟子要在(*)熟读典籍,据说要诵唱道(*)的第(*)十(*)章~(2~)
Command:
sj_pos=%1;
sj_book=%2;
sj_item=%2;
#if %null(%3) {sj_page=10};
#if %begins(%3,二) {sj_page=20};
#if %begins(%3,三) {sj_page=30};
#if %begins(%3,四) {sj_page=40};
#if %begins(%3,五) {sj_page=50};
#if %begins(%3,六) {sj_page=60};
#if %begins(%3,七) {sj_page=70};
#if %begins(%3,八) {sj_page=80};
#if %begins(%3,九) {sj_page=90};
#if %begins(%4,一) {#math sj_page @sj_page+1};
#if %begins(%4,二) {#math sj_page @sj_page+2};
#if %begins(%4,三) {#math sj_page @sj_page+3};
#if %begins(%4,四) {#math sj_page @sj_page+4};
#if %begins(%4,五) {#math sj_page @sj_page+5};
#if %begins(%4,六) {#math sj_page @sj_page+6};
#if %begins(%4,七) {#math sj_page @sj_page+7};
#if %begins(%4,八) {#math sj_page @sj_page+8};
#if %begins(%4,九) {#math sj_page @sj_page+9};
#if (%pos(上卷,@sj_book)&@sj_page>15) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>21) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>33) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>41) {#math sj_page @sj_page+1};
#if (%pos(上卷,@sj_book)&@sj_page>43) {#math sj_page @sj_page+1};
#if (%pos(下卷,@sj_book)&@sj_page>64) {#math sj_page @sj_page+1};
#if (%pos(下卷,@sj_book)&@sj_page>68) {#math sj_page @sj_page+1};

//双页章节第二页递增1页
sj_page=@sj_page+1;
jie_jing这里为了方便,接任务的触发做成一行,实际使用都要多行触发,保证机器人的稳定性。关于路径问题,我建议像我一样的新手先不要弄遍历了,一个是效率低,另一个就是容易把自己弄伤心了哇~~~ 咔咔。先用现在已经有的路径alias就行了。具体路径参见:asksky的集成贴 http://pkuxkx.net/forum/thread-40779-1-1.html。诵经机器人搞定了,你就已经对zmud机器人技术有了一定的了解,下面进阶的来了。

jesyao 发表于 2017-5-29 18:26:53

本帖最后由 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的出口,一定要走enter2、绝对不能走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,怪不得道德涨的这么慢!!!{:7_282:} 我自己测试的数据如下:技能等级:全部 175级。经验支持最大等级:195级,死亡率:0http://wx1.sinaimg.cn/mw690/8718f9cely1fgbf7xaxvsj20i90bndgk.jpg 祝愿武当新人都玩的轻松愉快。

xiaodog 发表于 2017-5-29 20:17:17

本帖最后由 xiaodog 于 2017-6-15 08:46 AM 编辑

我靠,武当好叼我服了
投投入武当门下

huajiang 发表于 2017-5-30 02:19:55

武当又多了个bt牛鼻子

pakeh 发表于 2017-5-31 09:29:47

膜拜~

zues 发表于 2017-5-31 11:51:22

zmud的机器人看了就晕,牛鼻子又长长了。

qiutian 发表于 2017-6-1 17:23:08

这个必须支持一下,此处应该有掌声:)

longzaitian 发表于 2017-6-2 10:38:07

本帖最后由 longzaitian 于 2017-6-2 02:40 AM 编辑

回复 3# jesyao



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

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

建立一个变量:

变量名:c2n
数值:
%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)"),"++","+"),"+*","+"))


个人愚见,如果说错了,请见谅。
页: [1] 2
查看完整版本: 我的武当新人门派任务机器人制作(zmud4.62版)