编写传奇脱机脚本,本质上是向游戏角色下达一套自动执行的指令序列。整个过程涉及脚本存放路径、核心命令、逻辑结构以及调试运行四个环节。
**第一步:编写前的准备与路径确认**
编写前首先确认服务端引擎类型,常见的有GOM、HERO、Blue三种,不同引擎的部分命令存在差异,需对应调整。脚本文件通常以.txt格式保存,编写工具推荐使用Notepad++,它能显示语法高亮,避免拼写错误。
脱机脚本主要存放在两个核心路径下:机器人脚本位于`mirserver\Mir200\Envir\Robot_def\AutoRunRobot.txt`,任务类脚本通常放在`mirserver\Mir200\Envir\QuestDiary`文件夹中。编写前先备份原有文件,避免误覆盖导致服务端异常。
**第二步:掌握脚本的核心命令体系**
传奇脚本命令分为检测类型和执行类型两类。检测命令用于判断条件是否成立,执行命令用于触发具体动作,两者必须按顺序组合。
**基础结构关键字:**
- `[@MAIN]`:脚本入口标识,用于定义触发点
- `#IF`:条件检测段,所有检测命令必须写在此下方
- `#ACT`:执行段,条件成立后执行的命令
- `#ELSEACT`:条件不成立时的执行段
- `\`:对话框换行符
**常用检测命令:**
- `CHECKLEVELEX > 等级`:检测当前人物等级
- `CHECKBAGGAGE`:检测背包是否已满
- `CHECKITEM 物品名 数量`:检测背包是否有指定物品
- `CHECKGOLD 数量`:检测金币是否达标
- `CHECKHP > 百分比`:检测当前血量
**常用执行命令:**
- `MAP 地图名`:将人物移动到指定地图
- `GIVE 物品名 数量`:给予指定物品
- `TAKE 物品名 数量`:取走指定物品
- `MONCLEAR 地图名`:清空指定地图的怪物
**第三步:编写自动刷怪的基础脚本**
以服务端脱机脚本为例,编写一个自动判断等级、背包状态并执行刷怪的脚本结构如下:
```
[@StartOffline]
#IF
CHECKLEVELEX > 30
#ACT
MAP 猪洞七层
#SAY
等级达标,开始传送至挂机地图
#ELSEACT
#ELSESAY
等级不足,无法进入挂机地图
```
`CHECKLEVELEX > 30`是检测等级是否超过30级,满足条件则执行`MAP`指令传送,不满足则显示提示语。`#SAY`和`#ELSESAY`用于在游戏对话框输出文字,方便调试或提示。
**第四步:整合背包检测与循环逻辑**
更完整的脚本需要加入背包空间检测与循环执行逻辑。下面是一个结合多条件判断的挂机脚本框架:
```
[@AutoFarm]
#IF
CHECKBAGGAGE
CHECKLEVELEX > 35
#ACT
MAP 牛魔寺庙
MONGEN 牛魔将军 5 10
#SAY
背包有空间,开始刷怪
#ELSEACT
MAP 比奇城
#ELSESAY
背包已满,回城清理
```
`CHECKBAGGAGE`检测背包是否有空位,`MONGEN`命令用于召唤指定数量和范围的怪物。当背包满时,`ELSEACT`分支会将角色传送回城。不同引擎对`MONGEN`的参数支持可能不同,实际编写时需参照对应引擎的文档。
**第五步:客户端脱机脚本的坐标与拾取配置**
如果是针对客户端操作的脱机脚本,编写方式有所区别。客户端脚本通过模拟坐标点击和画面识别实现自动化,核心参数包括:
**移动与目标锁定:**
- `+move X,Y`:移动至指定坐标
- `+target 怪物ID或名称`:锁定目标
- `+back 安全点坐标`:返回预设安全点
**战斗与拾取:**
- `+skill 技能名,目标`:释放技能
- `+loop 次数,命令组`:循环执行命令组,填0为无限循环
- `+pickup 物品名`:拾取指定物品,支持模糊匹配
- `+condition HP<百分比`:条件触发命令,如血量过低时喝药
一个法师自动刷怪的组合命令示例:
```
+loop 0,+target 野猪,+attack,+sleep 1000,+skill 火墙,+sleep 2000,+condition HP<50,+usepotion 超级金疮药,+sleep 3000,+pickupall
```
这段命令循环执行锁定野猪、攻击、施放火墙、血量低于50%时喝药、拾取所有物品的操作。`+sleep`用于设置命令间隔的毫秒数,防止操作过快被服务器判定为异常。
**第六步:脚本调试与常见错误排查**
编写完成后将.txt脚本文件放入对应路径,启动服务端或辅助工具加载执行。排查脚本问题时,重点检查以下几点:
- 确认`#IF`下的检测命令与`#ACT`下的执行命令没有混用位置
- 检查`[@MAIN]`等入口标识是否拼写准确
- 查看服务端M2控制台是否有报错日志
- 客户端脚本注意坐标是否超出地图实际范围

