传奇服务端弹出“脚本错误”或穿戴装备时提示装备脚本错误,先别删版本重装,按 M2 日志指出的文件名+行号回去改,90% 的毛病出在语法符号、编码、数据库字段、触发标签这四块。
一、先锁报错位置:看 M2 日志而不是猜
启动 M2Server 后,点底部“日志”或“控制台”,红色行就是报错。关键信息有三段:
• 文件路径:如 Envir\Market_Def\比奇老兵-3.txt 或 Mir200\Envir\QuestDiary\XXX\QFunction-0.txt
- 行号:Line 15 / 第 18 行
• 错误命令:未知命令 CHECKITEMW、缺少 #ACT、Field 'throw' not found
Hero 引擎看 MirServer\Log\ScriptError.log,GOM 看 M2 控制台,GEE 看 GeeLog\Script.log。
记下来用 Notepad++ 打开那个文件,Ctrl+G 跳行,不要全局搜。
二、装备脚本报错的四个高发点
1. 脚本里写的装备名和 StdItems.DB 对不上
QFunction-0.txt 里 [@TakeOnX] 穿戴触发、NPC 的 GIVE 发装、MapQuest_def 里卖装,只要写“屠龙”但数据库 Name 字段是“屠龙·强化版”,或者多了一个空格、用了全角空格,引擎就报“物品不存在”或脚本中断。
修正:用 DBC2000 或 DB_Commander 打开 StdItems.DB,复制标准 Name 字段,回脚本里整段替换,别手打。
2. 穿戴/取下触发标签写错
装备触发写在 QFunction-0.txt:
[@TakeOnX] 是穿到 X 位置(武器位、衣服位对应编号)
[@TakeOffX] 是取下
错误写法包括标签多下划线([@TakeOn_0])、[@Equip_1001] 里 ID 拼错、#ACT 段里直接 GOTO 跳回自己造成死循环。
修正:标签名严格对照引擎规范;死循环加 BREAK 或改逻辑;#IF 后必须跟条件,再跟 #ACT 或 #ELSEACT,不能 #IF 完直接空行或再来 #IF。
3. 数据库字段缺或越界
M2 启动报 Field 'UniqueItem' not found / Field 'throw' not found,是引擎升级后 StdItems.DB 没加新字段。
用 DBC2000 打开 Mud2\DB\StdItems.DB,按报错字段名手动加一列(类型 Integer,默认 0)。
同时查这一行装备:DuraMax(最大持久)填 0 会穿不上,NeedLevel 负数会异常,Stdmode 填错(武器应是 5、衣服 10 等)会导致类型识别失败,Ac/Dc/Mc 写“4-”缺后半段也会让属性解析崩。
4. 物品 ID 重复或超范围
StdItems.DB 按 ID 排序,两件装备用同一个 ID,或者 ID 超出引擎范围,穿戴时脚本读到的属性是另一条记录的,表现就是“穿上后属性乱跳/问号/再点就脚本错误”。
修正:把后加的自定义装备 ID 改成未占用的数字,全身检索脚本里引用旧 ID 的地方一起换。
三、通用脚本语法错(全角符号/编码/结构)
• 中文标点:,。()“” 全部改成英文 , . ( ) " ',传奇脚本只认半角。
- 编码:记事本另存为 UTF-8 会让 GOM/GEE/Hero 读成乱码,必须用 Notepad++ 转 ANSI(GBK)覆盖保存;若引擎明确要 UTF-8 无 BOM 才选那个,别混用。
• 隐藏字符:从网页/QQ 复制的脚本行首行尾常带不可见控制符,Notepad++ 开“显示所有字符”删掉重打。
- 结构残缺:#IF 后没条件、#ACT 后没命令、GOTO 目标 [@XXX] 不存在、#CALL 调用的外部文件标签没有,都会加载失败。
四、改完后的重载顺序
1. 改完 txt 脚本:M2 里“刷新 NPC”或“重新加载脚本”(不关服也行,看引擎)。
2. 改了 StdItems.DB:必须关 M2 → 存盘 → 开 M2,热重载读不到 DB 改动。
3. 改了客户端显示(StdItems.def 外观):客户端补丁也要换,否则服务端属性对、客户端显示问号。
4. 仍报错就把 Mir200\Log 下 ScriptError.log 清空再起一次,看是不是老日志没刷掉。
五、快速对照表
• 提示“第 X 行 未知命令” → 那行命令拼错或引擎不支持(老引擎用新命令),查引擎命令手册
- 提示“Field XXX not found” → StdItems.DB 缺字段,DBC2000 补列
• 穿装备弹脚本错误但脱下没事 → QFunction-0.txt 的 [@TakeOnX] 段语法或标签错
- NPC 点购买/领取后报错 → Market_Def 里 GIVE/SELL 后物品名不在 StdItems.DB
• 全部装备都异常 → 先查 StdItems.DB 是否字段数错乱、是否 UTF-8 存的 DB 被第三方工具破坏
按“日志行号 → 文件跳转 → 查名称/ID/字段/半角/编码 → 改完按类型重载”这套顺序走,不用通读整套脚本也能把装备脚本错误按件修掉。

