这段脚本的核心问题是语法结构不符合引擎规范、变量写法错误、跳转标签格式不对、条件判断逻辑混乱。按引擎标准重写如下:
一、原脚本错误点拆解
1. 变量写法错误
<待存物品><数量> 不是合法变量格式。引擎识别背包物品数量用 CHECKITEM 物品名 数量,持久检测用 CHECKDURA 装备名 数值。
2. 条件判断语法错误
如果[xxx]那么跳转到<xxx> 是伪代码,引擎用 #IF + 检测命令 + #ACT + GOTO 结构。
3. 装备部位写法错误
[自己][衣服][持久] 引擎不支持,检测穿戴装备持久用 CHECKDURA 装备名 数值,或直接检测装备位置持久。
4. 跳转标签格式错误
<自动存物> 不是合法标签,标签必须用 [@标签名] 格式,GOTO 跳转用 GOTO @标签名。
5. 逻辑顺序问题
多条件判断未用 #ELSEIF 或独立 #IF 块,容易穿透执行。
二、标准引擎语法重写(以Hero/GOM引擎为例)
[@主循环]
#IF
CHECKITEM 待存物品 1
#ACT
GOTO @自动存物
#IF
CHECKDURA 衣服 5
#ACT
GOTO @衣服修理
#IF
CHECKDURA 武器 5
#ACT
GOTO @武器修理
#IF
CHECKDURA 头盔 2
#ACT
GOTO @头盔修理
#IF
CHECKDURA 项链 2
#ACT
GOTO @项链修理
#IF
CHECKDURA 左手镯 2
#ACT
GOTO @左镯修理
#IF
CHECKDURA 右手镯 2
#ACT
GOTO @右镯修理
#IF
CHECKDURA 左戒指 2
#ACT
GOTO @左戒修理
#IF
CHECKDURA 右戒指 2
#ACT
GOTO @右戒修理
#IF
CHECKDURA 腰带 2
#ACT
GOTO @腰带修理
#IF
CHECKDURA 鞋子 2
#ACT
GOTO @鞋子修理
#IF
CHECKDURA 宝石 2
#ACT
GOTO @宝石修理
#ELSEACT
GOTO @主循环
[@自动存物]
#IF
CHECKITEM 待存物品 1
#ACT
TAKE 待存物品 0
GIVE 金币 1000
GOTO @主循环
[@衣服修理]
#IF
CHECKDURA 衣服 5
#ACT
REPAIRALL
GOTO @主循环
[@武器修理]
#IF
CHECKDURA 武器 5
#ACT
REPAIRALL
GOTO @主循环
[@头盔修理]
#IF
CHECKDURA 头盔 2
#ACT
REPAIRALL
GOTO @主循环
[@项链修理]
#IF
CHECKDURA 项链 2
#ACT
REPAIRALL
GOTO @主循环
[@左镯修理]
#IF
CHECKDURA 左手镯 2
#ACT
REPAIRALL
GOTO @主循环
[@右镯修理]
#IF
CHECKDURA 右手镯 2
#ACT
REPAIRALL
GOTO @主循环
[@左戒修理]
#IF
CHECKDURA 左戒指 2
#ACT
REPAIRALL
GOTO @主循环
[@右戒修理]
#IF
CHECKDURA 右戒指 2
#ACT
REPAIRALL
GOTO @主循环
[@腰带修理]
#IF
CHECKDURA 腰带 2
#ACT
REPAIRALL
GOTO @主循环
[@鞋子修理]
#IF
CHECKDURA 鞋子 2
#ACT
REPAIRALL
GOTO @主循环
[@宝石修理]
#IF
CHECKDURA 宝石 2
#ACT
REPAIRALL
GOTO @主循环
三、关键命令说明
1. CHECKITEM 物品名 数量:检测背包是否有指定物品及数量
2. CHECKDURA 装备名 数值:检测穿戴装备持久是否小于指定值
3. REPAIRALL:修理全身装备(需NPC支持,部分引擎用 REPAIR)
4. TAKE 物品名 0:删除背包指定物品(0表示全部)
5. GOTO @标签:无条件跳转到指定标签
6. #ELSEACT:条件不成立时执行
四、注意事项
1. 装备名必须与StdItems.DB完全一致,包括空格和标点
2. CHECKDURA检测的是当前持久,小于指定值才触发
3. 若需检测装备位置而非名称,用 CHECKDURA 装备位置 数值(位置代码:0衣服1武器2头盔3项链4左镯5右镯6左戒7右戒8腰带9鞋子10宝石)
4. 修理需NPC支持,纯脚本无法修理,需配合NPC功能
5. 循环逻辑需加延时,否则会卡死,在@主循环开头加DELAY 1000(1秒延时)
五、带延时的完整循环版本
[@主循环]
DELAY 1000
#IF
CHECKITEM 待存物品 1
#ACT
GOTO @自动存物
#IF
CHECKDURA 衣服 5
#ACT
GOTO @衣服修理
#IF
CHECKDURA 武器 5
#ACT
GOTO @武器修理
#IF
CHECKDURA 头盔 2
#ACT
GOTO @头盔修理
#IF
CHECKDURA 项链 2
#ACT
GOTO @项链修理
#IF
CHECKDURA 左手镯 2
#ACT
GOTO @左镯修理
#IF
CHECKDURA 右手镯 2
#ACT
GOTO @右镯修理
#IF
CHECKDURA 左戒指 2
#ACT
GOTO @左戒修理
#IF
CHECKDURA 右戒指 2
#ACT
GOTO @右戒修理
#IF
CHECKDURA 腰带 2
#ACT
GOTO @腰带修理
#IF
CHECKDURA 鞋子 2
#ACT
GOTO @鞋子修理
#IF
CHECKDURA 宝石 2
#ACT
GOTO @宝石修理
#ELSEACT
GOTO @主循环
六、装备位置检测版本(更通用)
[@主循环]
DELAY 1000
#IF
CHECKITEM 待存物品 1
#ACT
GOTO @自动存物
#IF
CHECKDURA 0 5
#ACT
GOTO @修理装备
#IF
CHECKDURA 1 5
#ACT
GOTO @修理装备
#IF
CHECKDURA 2 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 3 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 4 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 5 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 6 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 7 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 8 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 9 2
#ACT
GOTO @修理装备
#IF
CHECKDURA 10 2
#ACT
GOTO @修理装备
#ELSEACT
GOTO @主循环
[@自动存物]
#IF
CHECKITEM 待存物品 1
#ACT
TAKE 待存物品 0
GIVE 金币 1000
GOTO @主循环
[@修理装备]
#ACT
REPAIRALL
GOTO @主循环
七、常见问题修正
1. 若脚本不执行,检查编码是否为ANSI,换行是否为CRLF
2. 若跳转无效,检查标签名是否一致,@符号是否遗漏
3. 若检测不触发,检查装备名或位置代码是否正确
4. 若卡死循环,检查DELAY是否添加,数值是否过小
5. 若修理无效,确认NPC是否支持REPAIRALL命令
八、调试方法
1. 在关键跳转前加SENDMSG 5 正在检测装备持久输出调试信息
2. 用#SAY显示当前检测状态
3. 注释部分代码逐步测试定位错误行
4. 查看M2Server控制台红字报错信息
脚本需放在NPC脚本文件(如Market_Def\修理员.txt)中,并在Merchant.txt中正确挂载NPC。修完后M2重载NPC脚本生效。
传奇脚本报错修正实录:变量检测跳转逻辑与持久判断语法修复
来源:
作者:
点击:

