本帖最后由 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 简要说明
async 和 await 是 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 使用,避免逻辑错乱或提前继续执行后续操作。
六、逻辑流程图解
- 战斗结束检测:监听
自动战斗结束! 提示
- 判断是否为最终一里:是否已设置
pl_tingflag = true
- 如果是 → 开始执行划船流程
- 划出目标距离 → 停船 → 确认可返航
- 执行返航 → 上岸 → 交付漂流瓶
七、说明与建议
- 该脚本采用异步函数结构,确保等待每步完成再继续。
- 使用
sys.retry() 方法,增强指令执行的稳定性。
- 可扩展日志记录、异常捕获等机制,增强容错与调试能力。
- 推荐使用类似
plset 的别名命令进行参数管理,简化控制。
结语:通过 JS 自动化脚本在 MUD 游戏中可实现高度可控的任务流程管理。本文所展示仅为一个片段与思路,希望对其他 JS 脚本开发者有所启发。
|