yua 发表于 2024-7-22 09:19:43

Paotin++新手慕容任务辅助设计思路

本帖最后由 yua 于 2024-8-16 10:26 PM 编辑

前言:
本人并非北侠纯新人,但Paotin++是纯新手,到现在为止3周时间,从ZMUD转学而来,在群里各位大佬指导下,完成了从练功到慕容仆人一系列机器人编写,个人感觉基本完成了Paotin++入门(并没有)。
本次为了熟悉游戏+熟悉客户端,选择重新练个号,并且选择了“仰慕已久,难以下手”的日月东方系,本来第一篇应该是《Paotin++日月神教0-10w新手教学》,但考虑到正常新人不会来日月,适用性很窄,恰好最近刚用慕容机器人升到了10级,所以选择了每个新人都爱恨交加的慕容仆人1000,日月新手机器后续补上。
其实在Paotin++下基础的慕容机器人技术含量并不高,知识点完全没超出炮爷的超新手教学及大师的明教新手教学等,我就是在现有几篇文章指导下完成本机器,在此鸣谢几位前辈!如新手阅读本篇有困难,可反复参阅前几篇内容。本人无编程基础,水平有限,机器也还有缺陷,主要一方面给通过新手任务的兄弟们一些参考;另外也是记录下自己的学习过程,有些技术点还没掌握,借此与各位大师请教学习。

慕容仆人1000机器人1.0设计思路:主要是以下6个步骤,但是在机器设计中是环环相扣的。
1、接任务
2、出发到达任务区域
3、在任务区域搜寻
4、与家贼战斗
5、结束遍历返回苏州
6、检查状态准备接任务

1、接任务
接任务做触发是基本操作,本篇就不详述了,如果不会,请先学习其他几篇新手教学,避免误触可以使用#class 或 单次触发。这里最关键的是抓取区域及地点,并保存在指定变量中:
#action {^仆人叹道:家贼难防,有人偷走了少爷的信件,据传曾在『%1的%2』附近出现,你去把它找回来吧!} {
    #var mr_area %1;
    #var mr_place %2;注意事项:如果在#class下嵌套了一层,这里需要使用%%1,%%2,套一层穿一件衣服。(本知识点来自于炮爷)
      
这时候有同学要问了,图片的任务怎么办?图片机器肯定是没办法识别的,那些字人看着都费劲,这里就需要手工输入,然后模拟仆人给机器一个信息。
这里需要2个指令:#var 变量名 变量值;#show 内容,show后面的文字可以正常被机器触发。比如,仆人给出图片地点:姑苏慕容的小路,我们可以输入:#var mr_area 姑苏慕容;
#var mr_place 小路;每次输还是有点麻烦,(其实初级慕容机器不使用后面的地点,只输入区域也可以,考虑后续扩展性,我还是保留在这,比如:某些地图太大或者分散,为了提高效率可以分别搜索,这种情况mr_place就有用了), 有个简化的小技巧,建个别名如下:
#alias va {
    #var mr_area {%1};
    #var mr_place {%2};
};这样每次只需要输入: va 姑苏慕容 小路,就完成了变量赋值。
然后我们做一个别名,比如mrdd(慕容地点)如下:
#alias {mrdd} {#show 仆人叹道:家贼难防,有人偷走了少爷的信件,据传曾在『$mr_area的$mr_place』附近出现,你去把它找回来吧!};完善一下上面的别名:
#alias va {#var mr_area {%1};#var mr_place {%2};mrdd};这样每次只要悠闲的输入:va 姑苏慕容 小路
屏幕上就会显示:
仆人叹道:家贼难防,有人偷走了少爷的信件,据传曾在『姑苏慕容的小路』附近出现,你去把它找回来吧!然后机器就按照正常模式触发启动了。

接任务环节还需要增加几个触发,比如任务cd接任务失败等待等,都是基本的触发,大家自行发挥。
到此基本完成了接任务环节的设计,为了第二步区域移动,我们最好是先移动到逍遥行节点,苏州这里是沧浪亭,在前面的任务触发里加一段,} {busy.Wait {sw;n;n}};
在沧浪亭待命。

2、出发到任务区域
区域节点间的移动,全靠Paotin++逍遥游解决了,我们只需要帮它确定区域,也就是上一步保存的$mr_area,这里需要的命令是#switch 和 #case,根据不同区域,执行不同的逍遥游节点。
在上一个触发下再加一段:
#switch {"%1"}{
    #case {"闽中"} {xiaoyao.GotoThen 闽中 {回调代码};注意Switch内参数需要加双引号,可以是”%1”,”%%1”,或者变量”$mr_area”(注意符号!新手Paotin第一注意事项,注意中文英文输入),与case内参数进行匹配。逍遥行 有两种方式,xiaoyao.Goto,就是到了以后手动确认状态进行搜索,新手做到这种程度就可以了;还有一种是使用xiaoyao.GotoThen {} 这个命令,可以在逍遥行到达地点后直接开始添加一些命令辅助搜索。

固定路径的录制,各个客户端都大同小异,这个需要大家自己录制,慕容机器录制路径注意事项如下:

1、起始点和结束点必须是同一点,且必须为逍遥行路径点;
2、可以按个人喜好,从上至下,从左到右等,路径重复在所难免,不必在意;
3、有人拦路且进入后只有1格的房间,建议放弃,例如:客店内室,衙门等,增加处理难度;
4、初级机器人以下几个地点建议放弃:西湖梅庄、西湖红花会、姑苏慕容、杭州提督府,共同点是涉及守卫处理、迷宫、坐船等,建议放弃或手工接管。

好了,假设我们完成了闽中地区的路径录制,可以使用path.Walk {路径}或path.WalkSteps {列表路径}进行辅助搜索,现在我们的代码变成了这样:(为避免违反北侠规则,此部分代码删除)


现在可以正常搜索家贼了,无论是手动搜索还是辅助搜索路径,主要就是发现家贼并停下,下面是遇到家贼的触发,这里有两种方式,一是传统的抓触发:
#action {%s$user发现的%s慕容世家家贼%s} {
    kill $user's murong jiazei;二是Paotin++专属命令map.FocusNPC :
map.FocusNPC {
   {name}{$user发现的 慕容世家家贼}
   } command {
      kill 1% 2%};但是运行几次后我发现有时候逍遥行没结束,在路上就遇到家贼了,然后我们一套连招就出去了,然后逍遥行又把我们带走了,所以这里用#class限制一下时机。
#alias search.jiazei {
    #class search.jiazei open;
      #action {%s$user发现的%s慕容世家家贼%s} {
            #undelay walk.Resume;
            kill $user's murong jiazei;
            #class search.jiazei kill};
    #class search.jiazei close;
};然后在搜寻前启动这个别名。触发后,立刻停止脚步,然后对家贼叫杀,开始进入战斗环节。
3、与家贼战斗
{kill $user's murong jiazei;
pfm0;
jiazei;
<blockquote>#ticker qishi {okLog 气势 $char[气势];#if {$char[气势] > 8} {$pfm1};我的完整进入战斗后命令如下,顺便也分享下个人战斗思路,仅供参考:
首先,战斗的触发要提前准备好,我个人是放在了了ID文件里,ID默认Pfm别名,我个人一般都是2个首字母,方便手操及后续机器编写。例如:
#alias {lh} {perform riyue-dao.lianhuan};
#alias {xm} {perform riyue-jian.xuanmu};
#alias {cm} {perform pixie-jian.cimu};其次,任务机器pfm最好用变量代替,方便切换不同ID使用,paotin小技巧如下,放到任务机器人里,也可以扩展到其他用途:
#switch {"$char[档案][门派]"} {
    #case {"日月神教"}{
      #var pfm0 {fy}
      #var pfm1 {xm}
      #var pfm2 {lh}
   };
   #case {"明教"} {
       #var pfm1 {yf}
       #var pfm2 {sh}                                 
       };
   };战斗放pfm,我个人喜欢设置定时器,从对敌人叫杀开始激活:
#ticker pfm {#if {$char[气势] > 8} {pfm1};
                   #if {$char[气势] > 20} {pfm2};
                  } 5};看代码好像第2个没啥用,确实是优先主pfm,一旦主pfm cd,或者被下武器等异常情况,备用pfm就有用了。
战斗开始放的PFM0一般指0气势可以释放的技能,或者如果你的pfm能一招秒了家贼,这里就set ForceAct 1,强发pfm,秒不了门派还是正常用气势发吧,正常一轮可以发2-3次pfm。

打死家贼后,我们搜身,然后恢复快速行走,回到出发点
如果是没打过?没打过我们的机器人就断了,我们初级机器人处理不了这种情况,做好你的战斗触发,尽量保住你的小命。

但是运行几十次后,我发现所有人的家贼死了,都是这句话,结果别人家贼死了,我们扭身就回去交任务了,所以,我们也用#class控制下范围,我们开打后才开始监控这句话,避免误触发。或者你可用“你从慕容世家家贼的尸体身上搜出一封信件。”这句做结束触发,更保险点。
<blockquote>#alias jiazei {5.如果一切顺利的话,你就成功揣着信回到区域起始点,这时我们要做个判断,因为我们找了一圈,有可能没找到家贼,这时候我们要不就再找一次,要不就回去报告失败。我们初级机器人不涉及重新找的环节,只有两个状态,毕竟前期慕容CD很短,损失很小,多找一圈得不偿失。如果想多次搜索可以多设置几个状态,这里就不展开了。
因为前面定义了两个状态:接任务job=0,完成任务job=1。
<blockquote>#alias {job.check} {#delay 3 {#if {"$job" == "1"} {okLog <147>任务完成Ok;xiaoyao.GotoThen 沧浪亭 {donemr};l};这样,你就可以用逍遥行回到苏州了,根据是否拿到了信,去领取奖励或是报告失败,donemr和failmr是成功和失败ask puren的别名,调试机器时比较方便。这样就算成功运行了一次任务机器人。等待几秒就可以再次接取任务了,但是,在此之前我们还是评估下自身状态,如果你空血空内力出去,大概率有去无回了。

6、检查状态准备接任务
如果你做个慕容任务,你就知道慕容茶馆是无法打坐的,所以我们无论成功还是失败,交完任务都sw一步,到南大街上打坐恢复,这里新建别名hp.check。
#action {^仆人在你的耳边悄声说道%*} {<font color="#569cd6" face="Consolas, Courier New, monospace"><span style="white-space: pre;">#delay 3 {sw;hp.check}};</span></font>Hp.check的具体内容如下,具体数值根据个人情况调整,仅供参考,因为慕容家贼不涉及下毒的情况,2条判断足够,其他任务还需要考虑精神上限等。
#alias hp.check {okLog 状态确认;
    #if {$char[气血健康度]<98} {yun heal};
    #if {$char[内力百分比]<50} {dazuo max};
    #else {ne;askmr};这样,你就会恢复好状态,然后ne进入茶馆,开始下一个任务。

以上,你就会拥有一个辅助慕容机器人了,减小一些你的工作量,但你要时不时看看机器人,输入地点,或者挂了,或者卡住了(卡顿或其他原因不明),所以还有很大优化空间,后面也会继续更新,希望对有些同学有所帮助吧。



yua 发表于 2024-7-22 10:04:21

本帖最后由 yua 于 2024-7-22 10:57 AM 编辑

后续优化:
这个机器并不完善,但应该可以辅助减少大家的工作量,目前还存在一些问题:
1、逍遥行以外的地点坐船目前不好处理;
2、守卫的处理,目前也不好处理,待实现和测试;
3、迷宫的处理,黑诏这类固定迷宫,我觉得不算迷宫,正常录制路径就好,但是杭州提督府这种,大概思路有了,待实现:需要l 四个方向,抓描述,删除陷阱的出口,随机走1步,继续look,重复直到找到花丛,感觉跟破阵有点类似,技术也可以用于后续护镖解决乱入;
4、雁荡山的疯和尚,比守卫还复杂点,还会跟随,所以可能中间的几段路都需要加bot处理。
5、其他

jarlyyn 发表于 2024-7-22 11:09:06

没事不要用 XX主流任务 机器人 这样的标题捅wiz G点...

可以改名为 从 XXX任务 看 xxx客户端 制作任务机器的流程。

oldhorse 发表于 2024-7-23 14:59:04

学习,正要开始弄慕容机器,正好

mirai 发表于 2024-7-23 17:55:02

本帖最后由 mirai 于 2024-7-23 06:04 PM 编辑

学习了!!!感谢分享心得
页: [1]
查看完整版本: Paotin++新手慕容任务辅助设计思路