teleck 发表于 2024-6-3 13:26:59

Paotin++ 关于BotStep的应用于类似华山巡山任务场景的说明

本帖最后由 teleck 于 2024-6-3 01:34 PM 编辑

# 前言

BotStep 是一个API,它允许你插入一个机器人行走步骤。具体在使用Paotin++进入xkx MUD后中输入:
HELP path.BotStep即可看到如下解释信息:## 别名 path.BotStep <机器人名称> [<机器人参数> ...]
    插入一个机器人行走步骤。
    接到本指令时,PaoTin++ 会进行如下处理:
      - 1: 暂停路径录制;
      - 2: 在路径中插入一个机器人步骤;
      - 3: 自动调用机器人行走;
      - 4: 机器人行走完成后,自动恢复录制。
    按照约定,符合本规范的机器人必须发射以下事件之一:
      - map/walk/continue: 代表机器人成功结束运行,通过该区域
      - map/walk/failed:   代表机器人遇到了无法逾越的障碍,放弃行走
    本命令会监听以上事件并做相应处理。

# 应用示例
下方代码,是具体在北侠mud里,主要依赖BotStep实现的华山巡山任务的一个机器片段:#var job-xunshan {true};
#alias {map.XunShan} {
    #local cmd {%1};
    $cmd;
    #if { @isTrue{$job-xunshan} } {
      #action {^你在%*巡弋,尚未发现敌踪。}{
            
            #delay {2} {event.Emit map/walk/continue map.XunShan;
            okLog 该继续了。;};
      };

      #action {^你的动作还没有完成,不能移动。}{
            okLog %1 没动。;
            #delay {5} {busy.Wait {okLog %1 没走成,再来。;%1}};
      };
    };
    #else {
      event.Emit map/walk/continue map.XunShan;
    };
};

#alias {bs} {path.BotStep XunShan};

这段代码,定义了两个别名bs和map.XunShan。
就这个两个别名分别说明如下:
1. bs 是为了在录制路径时候使用方便而使用的,根据上文“解释”,XunShan是机器人的名称。
2. map.XunShan 是BotStep需要的别名,必须以“map.”开头,并在其中通过:
   event.Emit map/walk/continue map.XunShan
   或者:
   event.Emit map/walk/failed map.XunShan

来实现具体机器人的完成动作。

假设,代码是按照paotin的玩家自定义模块要求,在一个var/plugins/XunShan.tin的文件里。
使用这个机器的时候,按如下步奏:
1. LM XunShan
2. 在华山你想要的位置开始,点击屏幕录制路径或者用“path.Trace"指令开始路径录制;
3. 在命令行中输入”bs“,会出现如下交互信息:
   已经暂停路径录制,将会在机器人运行结束后自动继续。 取消录制请使用 {path.Cancel},完成录制请使用 {path.Finish}。

4. 游戏里出现“你在xxx巡弋,尚未发现敌踪”这样的信息后,触发机器人行走完成事件“map/walk/continue”,并出现相应的提示。
5. 在不需要机器人行走的时候,输入正常的"n s e w"方向即可,路径会正常录制。
6. 第3步、第5步循环使用,直至路径录制完成(path.Finsih,或者点击屏幕上的相应位置)。

   录制完的路径,会保存在“var/data/map-path.tin"文件中,内容如:
   {华山的客厅-华山的华山脚下} {XunShan/n;XunShan/n;略...}

7. 使用的话,执行:
path.Walk 华山的客厅-华山的华山脚下
8. 补充说明:具体做机器的时候还需要再加入泼皮拦路之类的因素和相关处理,这里就不展开写了。


kickuhead 发表于 2024-6-5 18:04:53

感谢萝卜兄分享,学习了
页: [1]
查看完整版本: Paotin++ 关于BotStep的应用于类似华山巡山任务场景的说明