北大侠客行MUD论坛

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

新客户端 Muder 机器人入门使用二

[复制链接]
发表于 昨天 07:24 AM | 显示全部楼层 |阅读模式
本帖最后由 wendaokoujin 于 2025-7-9 07:25 AM 编辑


漂流任务脚本说明(JavaScript 机器人,片段解析和分享)



以下是漂流任务的 机器人脚本片段,使用 JavaScript 编写,运行于支持脚本自动化的客户端。脚本通过自动识别战斗结果与任务状态,执行划船、返航、交付任务等操作。



注意:本脚本仅为功能片段分享,旨在介绍 JS 脚本的结构与控制流程,不包含全部自动化代码,以遵守使用规范和防止违规。






一、触发机制说明




      
  • 每次漂流“漂流一里”后,基本都会触发一次战斗。

  •   
  • 每次战斗结束时,会根据sys.isfighting()为条件触发一个函数,会输出固定提示语 “自动战斗结束!”

  •   
  • 如下代码:



sys.test('自动战斗结束!')


当检测到战斗结束提示时,会触发一次 async function(),判断是否需要执行漂流流程。






二、漂流参数设置



在进入副本前,通过一个别名命令设置漂流参数,例如:



plset 十七 north 三


此命令将设置以下三个变量,并把值写到屏幕左边的记事:



      

  •     com.vars.pl_count = arg[0]    com.vars.pl_direct = arg[1]
        com.vars.pl_huacount = arg[2]
        sys.note('漂流:'+com.vars.pl_count+'-'+com.vars.pl_direct+'-'+com.vars.pl_huacount,'lightblue')



漂流到第 pl_count 里时,脚本会执行“停下”(ting)操作,并设置:



com.vars.pl_tingflag = true


只有在此标志为 true 时,后续主流程才会被真正执行。






三、关于 async/await 简要说明



asyncawait 是 JavaScript 中用于“异步编程”的关键字,非常适合处理游戏中需要等待的操作(例如:等待战斗、延迟、网络响应等)。




      
  • async:用于声明一个异步函数,表示里面可以使用 await

  •   
  • await:表示“等待”某个操作完成,比如 await sys.sleep(5) 表示等待 5 秒再继续。



使用 async/await 可以让脚本代码看起来像是顺序执行,但实际上能在后台异步处理,不会卡住程序或漏掉消息。



例如:


async function example() {
    console.log("开始执行");
    await sys.sleep(5);
    console.log("等待5秒后继续");
}


在 MUD 脚本中,这种结构非常适合等待系统消息、冷却时间、或重试任务。






四、脚本执行逻辑(功能片段)



async function() {
    if (com.vars.pl_tingflag) {
        com.vars.pl_tingflag = false;
        await sys.sleep(10);

        let is_fighting = sys.isfighting();
        if (is_fighting) {
            return;
        }

        await sys.sleep(5);
        let huacmd = 'hua ' + com.vars.pl_direct;
        let huaflag = '划出了' + com.vars.pl_huacount + '里了';

        sys.send(huacmd);
        await sys.sleep(20);
        await sys.retry(huacmd, huaflag, 8, 30);

        await sys.sleep(3);
        sys.send('xiamao');

        await sys.sleep(3);
        await sys.retry('dalao', '也许你可以返航了。可以使用hua back命令', 4, 30);

        await sys.sleep(5);
        sys.send('hua back');

        await sys.sleep(1);
        sys.send('leave');

        await sys.sleep(6);
        sys.send('give ren xiang');

        await sys.sleep(5);
        sys.send('plb');
    }
}




五、关于 sys.retry 的简要说明



sys.retry(命令, 匹配提示, 下次执行等待的时间, 尝试次数) 是漂流任务脚本中的一个常用函数,用于:




      
  • 发送一个命令(如 hua north);

  •   
  • 监听是否出现预期的输出提示(如 划出了17里了);

  •   
  • 每二次重试等待的指定秒数
  •   
  • 如未匹配成功,自动重发命令,最多重试指定次数;



示例:


await sys.retry('hua north', '划出了17里了', 8, 30)


含义:



      
  • 发送 hua north 命令

  •   
  • 等待是否出现 划出了17里了

  •   
  • 若未出现,则等待8秒再次hua north

  •   
  • 最多重试30次



常见用途:用于网络不稳定或游戏延迟时,确保操作成功被执行。例如:



      
  • 划船到指定距离

  •   
  • 等待系统提示“可以返航了”

  •   
  • 进入副本成功等



建议:搭配 await 使用,避免逻辑错乱或提前继续执行后续操作。






六、逻辑流程图解




      
  1. 战斗结束检测:监听 自动战斗结束! 提示

  2.   
  3. 判断是否为最终一里:是否已设置 pl_tingflag = true

  4.   
  5. 如果是 → 开始执行划船流程

  6.   
  7. 划出目标距离 → 停船 → 确认可返航

  8.   
  9. 执行返航 → 上岸 → 交付漂流瓶






七、说明与建议




      
  • 该脚本采用异步函数结构,确保等待每步完成再继续。

  •   
  • 使用 sys.retry() 方法,增强指令执行的稳定性。

  •   
  • 可扩展日志记录、异常捕获等机制,增强容错与调试能力。

  •   
  • 推荐使用类似 plset 的别名命令进行参数管理,简化控制。






结语:通过 JS 自动化脚本在 MUD 游戏中可实现高度可控的任务流程管理。本文所展示仅为一个片段与思路,希望对其他 JS 脚本开发者有所启发。




北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-10 02:42 AM , Processed in 0.013493 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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