传奇服务端脚本错误解决路径固定为“看 M2 红字 / Log 日志 → 锁文件行号 → 分类修语法/编码/变量/路径 → 清缓存重载”。脚本全在 Mir200\Envir 下:Market_Def\(NPC对话)、QuestDiary\(QFunction-0.txt、QManage.txt、任务活动)、MapQuest_def\、MonItems\(爆率)。改完必须 M2 菜单【控制】→【重新加载】→ 选 QFunction / Market / 所有NPC,或游戏内 GM 输 @reloadnpc、@reloadqfunction,只存文件不重载无效。
一、先读报错:三个关键信息不能漏
M2Server 控制台红字或 Mir200\Log\ 下 -M2Server-日期.log、SystemLog.txt、ScriptError.log 里记录格式:
[Error] Scriptfile 'QFunction-0.txt' line 56 : Unknown command 'MOAB' 或 NPC脚本加载失败: Market_Def\福利使者.txt
提取:出错文件名 → Line 行号 → 错误类型(Unknown command / variable not defined / GOTO @xxx 不存在 / Syntax error / File not found)。Notepad++ 按 Ctrl+G 跳行。
二、编码与换行符(最高频隐形坑)
所有 .txt 脚本必须 ANSI(简体即 GBK),换行 Windows CRLF。UTF-8、UTF-8 BOM、Unix LF 会导致中文乱码、命令识别失败、NPC 空白、启动 Script Error。
修:Notepad++ 打开 → 格式/编码菜单 → 转为 ANSI → 转为 Windows (CR LF) → 覆盖保存;删行尾全角空格、零宽字符、隐藏 BOM(视图→显示所有字符核对)。严禁用 Windows 记事本直接改,易写进 BOM。
三、语法结构错误(#IF/#ACT 配对与标签)
• #IF 必须配 #ACT 或 #ELSEACT,多分支用 #ELSEIF,结尾 BREAK / GOTO / CLOSE 终止,缺闭合会整段失效。
- [@标签] 顶格独占一行;GOTO @xxx、#CALL [\QuestDiary\子目录\文件.txt] @段 目标必须真实存在,同目录标签名不可重复。
• 命令全大写、参数空格分隔:MOV D0 100 不能写 MOVD0 100,GIVE 屠龙 1 不能写 giveitem 屠龙 1,字符串带空格用英文双引号 "沃玛号角"。
- 符号全英文半角,中文括号、中文逗号、全角空格必报 Syntax error。
四、变量未定义 / 作用域错
P0-P9 临时、D0-D9 / N$ 个人持久、G0-G9 全局、S0-S9 字符串。未 MOV 初始化直接 CHECK/EQUAL/CALC 报 variable not defined;自定义 HUMAN/GLOBAL 变量需在 QManage.txt 或文件头用 VAR Integer HUMAN XXX 声明;老引擎全局变量上限 G0-G499,超了直接崩。跨会话数据别用 P 系临时变量。
五、资源名与数据库不一致
GIVE / CHECKITEM / TAKE 物品名严格等于 StdItems.DB;MAPMOVE 地图号在 MapInfo.txt;MONGEN 怪物名在 Monster.txt;MonItems\怪物.txt 爆率文件存在且格式 物品名 数量 概率(1/N 分母)。多一个空格、简繁体差异都算不存在。
六、路径与 #CALL 引用错
!Setup.txt 里 QFunctionDir、脚本主目录指向正确 Envir;#CALL 用相对路径 [\QuestDiary\活动\攻城.txt] @开始,..\\ 层级数对数;Market_Def 里 NPC 文件名、Merchant.txt 挂载名、脚本内 [@main] 三者对应。路径别用中文目录。
七、引擎命令不兼容
GOM / GEE / Hero / Blue / LEG 命令集不同:#CALLSUB(GOM) ≠ #CALL(GEE);Hero 不支持 CHECKONMAP;老引擎不认 #SENDMAIL。复制别版脚本先对命令表,插件命令(如 945Engine.dll、Gompj.dll)要在 PlugList.txt 加载对应插件。
八、缓存不生效处理
改完重载仍报错:关 M2 → 删 Mir200\Log\ScriptCache.dat(存在的话)→ 按顺序启 DBServer、LoginGate、M2Server;或直接在 M2 点【重新加载所有脚本】。
九、标准排查顺序(照做一遍)
1. 抄 M2 红字:文件 + 行号 + 错误类型
2. Notepad++ 跳行,开“显示所有字符”
3. 查编码 ANSI + CRLF + 隐藏符
4. 查 #IF/#ACT 配对、BREAK/GOTO、标签唯一
5. 查命令拼写、参数个数、引号、引擎支持
6. 查变量是否 MOV/VAR 初始化、作用域
7. 查物品/地图/怪物名与 DB 一致
8. 查 #CALL 路径真实存在
9. M2 重载对应脚本 → 小退角色重登测
10. 仍不明:分段加 ; 注释逐步取消定位,或删 ScriptCache.dat 重启 M2
十、典型报错速查
• Unknown command 'XXX' → 拼错 / 引擎不支持 / 插件没挂
• variable not defined → 变量没 MOV/VAR 声明
• GOTO @xxx 不存在 → 标签漏写或拼写不一致
• NPC脚本加载失败 → 非 ANSI / 头部 [@main] 缺失 / Merchant.txt 路径错
• File not found → #CALL 路径错或文件没建
• Syntax error → 缺括号、中文符号、#IF 无 #ACT、行尾隐藏符
• Type Mismatch → 数字加引号 / 字符串没引号 / 变量类型混用
传奇服务端脚本错误解决实操:M2日志定位编码修正与命令标签修复全流程
来源:
作者:
点击:

