传奇装备鉴定脚本配置与报错修复指南

来源: 作者: 点击:
传奇装备鉴定脚本通常包含“拾取触发”与“NPC鉴定”两类逻辑,常见于GOM、GEE引擎。脚本错误多由触发条件缺失、变量冲突或文件路径错误导致。以下为完整脚本结构与排错方案。

一、鉴定脚本核心逻辑与存放路径

鉴定功能需配合物品数据库(StdItems.DB)与触发脚本共同实现。脚本文件必须存放于服务端Mir200\Envir目录下,具体路径取决于触发方式:

脚本类型 存放路径 触发条件

拾取自动鉴定 QuestDiary\拾取鉴定\AutoIdentify.txt 玩家拾取装备瞬间触发

NPC手动鉴定 Market_Def\鉴定大师.txt 点击NPC对话触发

全局触发 Market_Def\QFunction-0.txt 物品双击事件(@StdModeFunc)

二、拾取自动鉴定脚本示例(GOM引擎)

以下为标准的拾取鉴定脚本结构,需在M2引擎中开启“全局拾取触发”选项。
; 拾取鉴定脚本 (保存为 AutoIdentify.txt)
[@PickUpItem]
#IF
; 条件1:仅鉴定武器、衣服、首饰(StdMode 1/2/3)
CheckItemType 1
CheckItemType 2
CheckItemType 3
; 条件2:检测装备是否已鉴定(自定义标志)
CheckItemFlagIdentify 0
#ACT
; 调用鉴定子程序
GOTO @DoIdentify
BREAK

[@DoIdentify]
#ACT
; 随机生成品质(1-100)
Random 100
; 极品概率 10%
#IF
Random < 10
#ACT
SetItemParam MaxAttack + Random 5
SetItemParam MaxDefense + Random 3
SetItemParam Luck + 1
SetItemFlagIdentify 1
SENDMSG 6 恭喜!【<$CURRTEMNAME>】鉴定为极品!
BREAK
; 优秀概率 30%
#IF
Random < 30
#ACT
SetItemParam MaxAttack + Random 3
SetItemFlagIdentify 1
SENDMSG 6 【<$CURRTEMNAME>】鉴定为优秀。
BREAK
; 普通概率 60%
#ACT
SetItemFlagIdentify 1
SENDMSG 6 【<$CURRTEMNAME>】鉴定为普通。
BREAK


三、NPC手动鉴定脚本示例

在Market_Def目录下创建NPC脚本,提供单件或全身鉴定服务。
; NPC鉴定脚本 (鉴定大师.txt)
[@main]
欢迎使用鉴定服务,请选择:\
<鉴定身上装备/@IdentifyAll> 费用:1000金币\
<鉴定手中武器/@IdentifyWeapon> 费用:500金币\

[@IdentifyAll]
#IF
CheckGold 1000
#ACT
Take 金币 1000
; 遍历装备栏(1-13为装备位)
SetIdentifyItem 1
SetIdentifyItem 2
...
SetIdentifyItem 13
SENDMSG 6 全身装备鉴定完成!
BREAK

[@IdentifyWeapon]
#IF
CheckGold 500
CheckItemWear 1 ; 检测武器栏是否有装备
#ACT
Take 金币 500
SetIdentifyItem 1
SENDMSG 6 武器鉴定完成!
BREAK


四、常见脚本错误与修正方案

1. 拾取不触发鉴定

• 原因:M2未加载全局脚本,或@PickUpItem标签被其他脚本覆盖。

• 解决:在M2控制台勾选“启用全局拾取脚本”,并检查QuestDiary目录下是否有同名脚本冲突。

2. 鉴定后无属性加成

• 原因:属性参数名错误(如将MaxAttack误写为Attack),或StdItems.DB中未定义该字段。

• 解决:核对数据库字段名,确保SetItemParam后的参数与数据库严格一致。使用Random N而非Random 1-N格式。

3. 重复鉴定同一装备

• 原因:未设置鉴定标记,导致脚本每次拾取都执行。

• 解决:在鉴定逻辑末尾必须添加SetItemFlagIdentify 1,并在触发条件中检测CheckItemFlagIdentify 0。

4. 脚本报错“Not a valid command”

• 原因:命令拼写错误(如CheckItemType写成CheckItemTpye),或引擎版本不支持该命令。

• 解决:使用Notepad++等工具检查语法,GOM1108引擎需使用老版本命令格式。

5. 变量冲突导致属性错乱

• 原因:多个鉴定脚本共用全局变量(如P0-P9),导致数值覆盖。

• 解决:改用私有变量(如S0-S9)或自定义变量(如MOV N$鉴定数值 <$STR(N0)>),避免跨脚本冲突。

五、调试与重载流程

1. 修改脚本:使用ANSI编码保存文件,避免UTF-8乱码。
2. 重载脚本:在M2点击“重载NPC脚本”或“重载全局脚本”,无需重启服务端。
3. 查看日志:若报错,检查Mir200\Log目录下的ScriptError.log,定位错误行数。

注意:若鉴定涉及新属性(如元素伤害),需先在M2\查看\列表信息二\物品规则中启用对应参数,否则脚本生效但客户端不显示。