传奇显示脚本错误传奇装备脚本错误修正方法按日志行号与命令规范排查

来源: 作者: 点击:
传奇服务端弹出“脚本错误”或在穿戴、打造、回收、掉落装备时触发异常,引擎控制台(M2Server)和 Mir200\Log\M2Server-日期.log 里一定会给出三段关键信息:出错文件名(如 QFunction-0.txt、Market_Def\装备使者.txt、QuestDiary\装备触发\xxx.txt)、标签名([@StdMode0]、[@UseItemEx]、[@Main])、行号(Line xx)。先抄下这三段,再按下面模块修,不要全局重写脚本。

一、先定位文件物理路径与加载关系
装备相关脚本分布位置:
• NPC兑换/发放:Mir200\Envir\Market_Def\对应NPC名.txt

• 穿戴/拾取/使用触发:Mir200\Envir\QuestDiary\自定义目录\xxx.txt,全局事件在 QFunction.txt / QFunction-0.txt

- 装备附加属性/触发特效:Mir200\Envir\ItemScript.txt 或 Item 目录下同名文件(如 屠龙.txt)
• 怪物爆装备:Mir200\Envir\MonItems\怪物名.txt、MonDrop.txt

- 合成/强化/鉴定:Mir200\Envir\QuestDiary\合成类目录\xxx.txt
• 物品基础库:Mir200\Envir\StdItems.txt 或 Mud2\DB\StdItems.DB

报错写“Failed to load xxx.txt”就是路径错、文件名多空格、放错目录、或引擎没加载该 QuestDiary 子目录。把文件挪到引擎实际读取的目录,文件名和 MapQuest_def / Merchant.txt 里定义的 NPC 文件名严格一致。

二、基础语法与编码(占报错 60% 以上)
1. 编码:所有 .txt 脚本必须用 ANSI(GBK/GB2312),不能用 UTF-8、UTF-8 BOM、Unicode。用 Notepad++ 打开 → 编码 → 转为 ANSI 编码 → 保存,重启 M2 或点“重读 NPC 脚本 / 重读 QF 脚本”。用系统记事本另存为时也必须选 ANSI。
2. 标点:全用英文半角,中文“,”、“;”、“()”必炸,全部替换。行首行尾多余空格、Tab、空行删掉。
3. 标签与结构:
• [@标签名] 顶格写,前面不能有空格/Tab

• #IF 后必须紧跟 #ACT / #SAY / #ELSEACT,中间夹普通文本会断链

- 单段逻辑结束加 BREAK,多段嵌套结束加 #ENDIF
• GOTO @xxx 必须存在对应 [@xxx],标签不重复

4. 命令大小写:GIVE、CHECKITEM、TAKE、MAPMOVE、SET、MOV、SENDMSG 等全大写,写 Give / Checkitem 直接 Unknown command。命令与参数间一个空格,不多不少。

三、装备专属错误逐类修正
1. 物品名/ID 不匹配
GIVE 屠龙 1、CHECKITEM 雷霆战甲 1 里的名字必须和 StdItems.DB / StdItems.txt 里一字不差(含括号、空格、全角符号)。数据库里叫“雷霆战甲”,脚本写“雷霆铠甲”→ 引擎找不到物品 ID → 脚本错误。批量新增装备后 ID 重复、空行、字段错位也会全域报错,进 DBC2000 / 文本对齐清一遍。
2. 参数数量/格式错
• GIVE 装备名 数量 → 数量必填正整数,写 GIVE 屠龙 或 GIVE 屠龙 1 2 都错

• @GiveItem 装备ID 数量 持久 → 三参缺一不可,且用 ID 不用中文名

- 属性值超范围(攻击上限、持久 DuraMax、爆率 0-100)填负或超限 → 参数无效报错
3. StdItems 字段错
StdMode(装备类型)、DuraMax、AC、MAC、Weight 字段数不一致、缺字段、类型冲突(防具写 PoisonAttack)→ 加载即报错。对照同版本同类型装备行对齐。
4. 触发类脚本(QFunction / ItemScript)
• [@StdMode0] 对应武器、[@StdMode1~28] 对应各装备位,标签拼错(@StdMode_0)不生效

• ADDBUFF 麻痹 1 10 里 buff 名必须在 Buff 配置里存在

- Magic0=100,1,5 魔法编号必须在 Magics.txt 范围内,持续时间 0 会异常
5. 合成/回收逻辑断点
正确顺序:#IF CHECKITEM 材料1 1 → #ACT TAKE 材料1 1 → GIVE 成品 1 → BREAK。漏 TAKE、概率写 101、材料名错、没 BREAK 继续往下执行 → 弹脚本错误。
6. 引擎命令不兼容
HERO、GOM、GEE、BLUE、翎风命令集不同。GOM 的 BindAttr、GEE 的扩展触发写到 HERO 里直接 Unknown command。拿不准就查当前引擎命令表,或用引擎自带脚本转换工具批处理。

四、变量与逻辑冲突
• HUMAN / GLOBAL / N / S / M 变量首次用之前必须初始化(MOV S10 0、VAR HUMAN 变量名)

• 未赋值直接参与 EQUAL / SMALL / LARGE 判断 → 变量未定义报错

• 两段脚本都写 [@Main]、[@GetEquip] → 跳转错乱,加前缀区分(@War_GetEquip)

五、改完生效动作
1. M2Server → 重新加载 → 重读 QF 脚本 / 重读 NPC 脚本 / 重读 Merchant
2. 仍不行就全量重启 DBServer → LoginGate → M2Server → GameGate
3. 改 StdItems.DB 必须重启 DBServer,热重载读不到新条目
4. 客户端显示属性不对还要用 Label 工具重生成 Mir2\Data\StdItems.def,保证服务端 ID 和客户端补丁一一对应

六、快速隔离法
报错不知道哪段时:把疑似文件改名 .bak → 重载脚本 → 不报了就说明病在这文件 → 分段注释(; 开头)往下放,定位到具体行再改。改前先备原文件。

按“日志行号 → 文件 → 编码/标点 → 命令拼写 → 物品名/参数 → 标签结构 → 引擎兼容”这个顺序走,装备脚本错误都能落到具体行修掉,不用重做整套脚本。