传奇鉴定装备脚本报错原因定位与修正方法

来源: 作者: 点击:
鉴定装备脚本出错表现就几种:点NPC没反应、M2刷红字「脚本错误第X行」、扣了材料没出属性、属性不加角色面板、随机属性固定不变、提示物品不存在。根子不在引擎坏了,多在命令拼错、#IF/#ACT结构断、物品名跟数据库对不上、编码存成UTF-8、改完没重载。按下面顺序修最快。

一、先看M2红字和日志定位行号

别盲翻脚本。M2Server控制台红字一般会带文件名和行号,类似:
Scriptfile'QFunction-0.txt'line105:Syntaxerror
Scriptfile'Market_Def\沙城\鉴定师-3.txt'line22:Commandnotfound

服务端Log目录里翻ScriptError.log或ErrorLog.txt,搜「鉴定」「Identify」也能定位到具体文件和行。

记下三样东西再去改:
哪个文件
第几行
报错类型(命令未定义/参数不足/变量未声明/编码错误)

二、编码必须存ANSI

这是隐性杀手。用记事本另存成UTF-8,中文命令名、路径、标签都可能解析失败,表现就是整段脚本不生效或满屏红字。

改法:
Notepad++打开脚本
编码切到ANSI或GBK
保存
别用Word、WPS改脚本

三、#IF/#ACT结构错了必报

鉴定脚本标准骨架:

[@main]
IF

CHECKITEM鉴定符1
CHECKITEMW裁决之杖
ACT

TAKE鉴定符1
.....属性附加命令
SENDMSG6鉴定成功
ELSESAY

材料不足或装备不在身上

常见结构错误:
IF后没跟条件,直接写文本

ACT写成ACT(老引擎有的认,但别偷懒)

IF和#ACT中间混了空行或全角空格

条件块没闭合,后面标签全乱
if写成小写(部分引擎不认,命令建议全大写)

调试时把#IF段先清空,只留:
IF

ACT

SENDMSG6触发成功
进游戏点一下,有提示说明NPC链路通了,再一步步加条件。

四、装备检测命令用错

鉴定分「背包里鉴定」和「穿在身上鉴定」,命令不一样。

背包检测
CHECKITEM物品名数量
只判断有没有,不判断穿没穿

穿戴检测
CHECKWEAR物品名
或CHECKITEMW物品名(部分引擎)
鉴定身上装备要用这个,用CHECKITEM会判空,脚本直接走#else

属性检测
CHECKITEMATTR物品名属性类型数值
属性类型按引擎手册:攻击/魔法/道术/防御等编号各引擎不完全一样

错误例子:
想鉴定身穿武器,却写CHECKITEM裁决之杖1
→武器在手上不在包里,条件不成立
→表现就是点鉴定没反应、不扣材料

五、物品名必须跟数据库Name一字不差

脚本里写「屠龙」,数据库里是「屠龙(鉴定)」,直接不匹配。
物品ID也一样,CheckItem/TakeItem/Give用的ID必须在StdItems或Item.DB里存在。

核对位置:
DBC2000→StdItems
或Mir200\DB\Item.DB
或MySQL的items表

顺手检查:
鉴定符ID对不对
鉴定后装备ID有没有建
物品「可鉴定」字段/StdMode对不对
装备名别带多余空格

六、材料扣除数量和检测数量不一致

典型写法错误:

IF

CHECKITEM鉴定符1
ACT

TAKE鉴定符2

检测1个扣2个,玩家包里只有1个时条件过了但扣除失败,部分引擎直接中断脚本。
正确是两边一致:

IF

CHECKITEM鉴定符1
ACT

TAKE鉴定符1

多材料就同步改:
CHECKITEM灵魂宝石3
TAKE灵魂宝石3

七、属性附加命令按引擎来,别乱抄

不同引擎鉴定命令不是通用的,GOM、GEE、HERO、BLUE、SKYM2各自有各自写法。
网上抄的ITEMIDENTIFY、REPAIRITEM、ChangeEquipAttr、AddItemAttr不一定你端里认。

排查顺序:
1.看M2报不报「Commandnotfound」
2.翻开你引擎包里的命令手册或脚本示例
3.对照StdItems字段名(MaxDC/MaxAttack/DC等)
4.GOM里属性参数名是MaxAttack不是「攻击力」

鉴定完属性面板不变,一般是少刷属性包:
GOM/GEE可加REFITEM或RECALCPLAYER类重算命令
HERO看是否走QF触发重算
不加刷新,数据库写了但客户端不显示

八、随机属性不随机

写死数值当然不随机:
ChangeEquipAttr攻击3

要用随机变量或引擎Random:
Random5→1~5
部分GOM脚本不支持Random0-5这种写法,只能Random最大值

多档位鉴定常见结构:
IF

Random10
ACT

.....附加属性A
ELSEIF

Random10
ACT

.....附加属性B
ELSE

ACT

.....保底属性

注意#ELSEIF和#ELSE别混用错,条件块要闭合。

九、鉴定标记防重复触发

捡物自动鉴定或双击鉴定卷,不加标记会反复触发。
GOM类常见:
IF

CHECKITEMFLAGIDENTIFY0
ACT

.....属性附加
SETITEMFLAGIDENTIFY1

标记语句放属性附加之后,别放前面,不然属性还没写就锁了。

十、脚本文件位置和重载

NPC鉴定脚本
路径:Mir200\Envir\Market_Def\NPC名-地图号.txt
Merchant.txt里NPC名、地图号、脚本路径要对上,不然点NPC读不到脚本。

触发类(捡物鉴定、使用鉴定卷)
多在QFunction-0.txt的[@PickUp]、[@UseItem]段

改完别直接信「生效了」,去M2点:
控制→重新加载NPC
控制→重新加载QF脚本
或聊天框@reloadnpc/@reloadqf

还不行就关M2删ScriptCache.dat重启。

十一、常见报错对照

M2红字「命令未定义」
→命令你引擎不认,换成本引擎命令

「第X行语法错误」
→全角空格、中文冒号、#IF缺#ACT

点NPC没反应
→脚本没重载/Merchant路径错/编码UTF-8

扣材料不出属性
→属性命令拼错/没REFRESH/物品ID错

鉴定后属性不显示
→没发刷新包/客户端补丁不匹配

随机属性固定
→没用Random/变量没写

重复鉴定同件装备
→缺Identify标记

提示物品不存在
→脚本物品名跟DB的Name不一致

十二、最小调试模板(先跑通再写逻辑)

NPC脚本里先放这段:

[@main]
IF

ACT

SENDMSG6鉴定NPC触发正常

能出黄字,再改:

[@main]
IF

CHECKITEM鉴定符1
CHECKWEAR裁决之杖
ACT

TAKE鉴定符1
SENDMSG6条件通过
ELSESAY

条件不满足

条件通过后再把属性附加命令填进去。哪一步没反应,问题就在那一层。

十三、改脚本安全顺序

备份原脚本文件
Notepad++开,确认ANSI
按M2红字行号改
物品名去数据库抄
命令对照引擎手册
保存
M2重载NPC/QF
小退角色重进点NPC测
别一边游戏跑着一边改QF,容易锁文件

鉴定脚本别追求一次写复杂。先能扣材料、能给固定属性,再加随机、加档位、加标记、加失败返还。多数「脚本错误」就是一行全角空格或CHECKITEM用成了穿戴检测,红字行号对着改基本十分钟以内能好。
[顶部]