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

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

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

别盲翻脚本。M2Server控制台红字一般会带文件名和行号,类似:
Scriptfile 'QFunction-0.txt' line 105: Syntax error
Scriptfile 'Market_Def\沙城\鉴定师-3.txt' line 22: Command not found

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

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

二、编码必须存ANSI

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

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

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

鉴定脚本标准骨架:

[@main]
IF

CHECKITEM 鉴定符 1
CHECKITEMW 裁决之杖
ACT

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

材料不足或装备不在身上

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

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

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

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

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

ACT

SENDMSG 6 触发成功
进游戏点一下,有提示说明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报不报「Command not found」
2. 翻开你引擎包里的命令手册或脚本示例
3. 对照 StdItems 字段名(MaxDC / MaxAttack / DC 等)
4. GOM里属性参数名是 MaxAttack 不是「攻击力」

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

八、随机属性不随机

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

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

多档位鉴定常见结构:
IF

Random 10
ACT

.....附加属性A
ELSEIF

Random 10
ACT

.....附加属性B
ELSE

ACT

.....保底属性

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

九、鉴定标记防重复触发

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

CHECKITEMFLAGIDENTIFY 0
ACT

.....属性附加
SETITEMFLAGIDENTIFY 1

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

十、脚本文件位置和重载

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

SENDMSG 6 鉴定NPC触发正常

能出黄字,再改:

[@main]
IF

CHECKITEM 鉴定符 1
CHECKWEAR 裁决之杖
ACT

TAKE 鉴定符 1
SENDMSG 6 条件通过
ELSESAY

条件不满足

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

十三、改脚本安全顺序

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

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