当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇脚本报错修正实录:变量检测跳转逻辑与持久判断语法修复

热度:
这段脚本的核心问题是语法结构不符合引擎规范、变量写法错误、跳转标签格式不对、条件判断逻辑混乱。按引擎标准重写如下:

一、原脚本错误点拆解
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.循环逻辑需加延时,否则会卡死,在@主循环开头加DELAY1000(1秒延时)

五、带延时的完整循环版本

[@主循环]
DELAY1000
#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@主循环


六、装备位置检测版本(更通用)

[@主循环]
DELAY1000
#IF
CHECKITEM待存物品1
#ACT
GOTO@自动存物

#IF
CHECKDURA05
#ACT
GOTO@修理装备

#IF
CHECKDURA15
#ACT
GOTO@修理装备

#IF
CHECKDURA22
#ACT
GOTO@修理装备

#IF
CHECKDURA32
#ACT
GOTO@修理装备

#IF
CHECKDURA42
#ACT
GOTO@修理装备

#IF
CHECKDURA52
#ACT
GOTO@修理装备

#IF
CHECKDURA62
#ACT
GOTO@修理装备

#IF
CHECKDURA72
#ACT
GOTO@修理装备

#IF
CHECKDURA82
#ACT
GOTO@修理装备

#IF
CHECKDURA92
#ACT
GOTO@修理装备

#IF
CHECKDURA102
#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.在关键跳转前加SENDMSG5正在检测装备持久输出调试信息
2.用#SAY显示当前检测状态
3.注释部分代码逐步测试定位错误行
4.查看M2Server控制台红字报错信息

脚本需放在NPC脚本文件(如Market_Def\修理员.txt)中,并在Merchant.txt中正确挂载NPC。修完后M2重载NPC脚本生效。
[顶部]