鉴定脚本是传奇服务端里最容易被改坏也最容易被忽略的一块。很多GM开服后发现装备鉴定出来的属性飘忽不定、鉴定界面点了没反应、或者洗练后属性不生效,排查半天最后发现是QFunction-0.txt或者Market_Def里的鉴定触发脚本被覆盖了。这篇就把鉴定脚本的修复思路从头捋一遍,按步骤操作,基本能覆盖九成以上的鉴定异常。
一、先确认鉴定脚本到底在哪几个文件里
迷失版本的鉴定系统通常不是单一脚本,而是分布在三个位置:QFunction-0.txt负责鉴定按钮的回调触发,Market_Def目录下的鉴定NPC脚本负责鉴定界面和费用扣除,EnvirQuestDiary里的鉴定数据文本负责属性池和概率配置。修复前先用文本编辑器的查找功能,把这三个文件里带“鉴定”“jianding”“Identify”关键字的段落全部定位出来,列个清单,否则改了一处漏了两处,问题照样复现。

常见的鉴定触发写法是[@IdentifyItem]或者[@鉴定装备]这类标签,不同版本命名不一样。如果服务端里搜不到任何鉴定相关标签,那说明脚本本身缺失,不是修复而是补写,这种情况优先从同版本的服务端里拷一份对照,不要自己凭空造。
二、鉴定无反应的三个高频原因及排查顺序
玩家点鉴定按钮没反应,是修复请求里占比最高的一类。排查不要乱试,按下面顺序走,基本三步内能锁定:
第一步:检查QFunction-0.txt里鉴定标签是否被注释或删除。用查找定位[@鉴定]相关标签,看标签下方是否有#ACT和#SAY段落。如果标签存在但内容为空,或者整段被;注释掉,那就是脚本被误删,从备份恢复即可。
第二步:检查鉴定NPC的Market_Def脚本是否指向了正确的触发标签。NPC脚本里通常有一行@鉴定装备的跳转,如果这里写的标签名和QFunction里实际标签名差一个字,点击就会静默失败。这种拼写错误在汉化过的版本里特别常见。
第三步:检查变量是否超限。鉴定脚本常用$GLOBAL或$STR变量存属性池,如果变量名和其他系统冲突,赋值会失败。在M2Server的变量查看器里逐个核对鉴定用到的变量当前值,异常的直接重置。
| 现象 | 优先排查点 | 修复动作 |
|---|---|---|
| 点击无任何提示 | 标签跳转名 | 对齐标签拼写 |
| 提示“条件不满足” | CHECKITEM/CHECKGOLD条件 | 核对材料与金币判定 |
| 鉴定后属性不显示 | 属性赋值段 | 检查CHANGEITEMADDVALUE顺序 |
上面这张表是排查时的对照速查,实际操作时建议从第一行往下逐项排除,不要跳步。特别是第三行“属性不显示”,很多人以为是脚本没执行,其实是属性赋值写在了鉴定成功提示之后,被后续的#SAY截断了执行流程。
三、属性池配置错误导致的鉴定结果异常
鉴定出来的属性全是0、或者永远只出同一档属性,问题基本出在属性池配置上。迷失版本的鉴定属性池一般写在QuestDiary下的文本文件里,格式多为“属性名 最小值 最大值 权重”。修复时重点看两处:一是权重列是否全为0,权重全0会导致随机取值时永远命中第一行;二是最小值和最大值是否写反,写反后取值函数会返回最小值兜底,表现出来就是属性恒定不变。
另外要留意属性名和引擎支持的动力名称是否一致。比如“攻击速度”写成“攻速”,脚本不报错但属性加不上,这种隐性错误只能靠逐条比对引擎的属性名称表来发现。建议把属性池导出成表格,和引擎文档的属性列表做一次全量核对,一次性把错别字清干净。
四、鉴定费用与材料扣除逻辑的修复
费用扣除是鉴定脚本里最容易写出逻辑漏洞的部分。典型问题是鉴定失败了材料照扣、或者扣了材料但鉴定没执行。修复时把扣费段和鉴定执行段的顺序理清楚:正确顺序应该是先判定材料和金币是否足够,再执行扣除,最后执行鉴定赋值。如果扣除写在鉴定赋值后面,一旦赋值段报错中断,材料已经扣了但属性没加上,玩家就会投诉。
还有一个细节是鉴定失败时的退还逻辑。如果版本设定鉴定有失败率,脚本里必须有对应的退还分支,通常用GIVE把材料还给玩家。很多修复案例里失败分支是空的,玩家材料白丢,这种要在#ELSEACT里补上退还语句。
五、修复后的验证流程
脚本改完不要直接开服,按下面的验证流程走一遍:先用GM号给自己刷一件白装,手动点鉴定,确认界面正常弹出、费用正确扣除、属性正常显示;然后连续鉴定十次,观察属性是否在合理区间内波动,排除权重写死的情况;最后用普通账号测试一次材料和金币不足时的提示是否正常。三步都通过,再把脚本同步到正式区。
验证时建议开着M2Server的脚本调试日志,鉴定过程中如果有标签跳转失败或者变量赋值异常,日志里会有记录,比凭现象猜要快得多。日志里出现“label not found”就是标签名对不上,出现“variable out of range”就是变量超限,按提示直接定位。
六、预防鉴定脚本再次损坏的日常维护建议
鉴定脚本出问题,多半是后期加功能时被覆盖的。建议每次改动鉴定相关脚本前,单独把QFunction-0.txt和鉴定NPC脚本各存一份带日期的备份,命名里带上版本号。另外合区或者更新补丁时,优先比对鉴定脚本的差异,不要整包覆盖,整包覆盖是鉴定脚本丢失的头号原因。养成改前备份、改后验证的习惯,比出了问题再抢救省事得多。