传奇服务端脚本错误全场景排查:M2日志定位与语法编码路径修复手册

来源: 作者: 点击:
传奇服务端报脚本错误,表现通常是 M2Server 控制台刷红字 [Script Error]、启动卡在某行加载、NPC 点开空白或没反应、登录触发功能直接断、杀怪不爆东西、地图进去卡死。所有脚本类故障第一原则:不看猜,看日志;不改整包,改行号。

一、日志定位:先拿文件名+行号+标签
M2 启动或运行报错时,红色信息里必带三要素:
• 出错文件:如 Market_Def\盟重省-装备回收员.txt、QuestDiary\QFunction-0.txt、MonItems\祖玛教主.txt

- 行号:Line 325、line 105
• 标签/描述:@[装备回收]、Unknown command、Missing ')'、变量未定义

历史记录进 Mir200\Log\ 目录,看 -M2Server-日期.log、ScriptError.log、ErrorLog.txt。Notepad++ 打开对应文件,Ctrl+G 跳行,别全局替换。

二、脚本目录与对应关系
Mir200\Envir\ 下:
• Market_Def\ → NPC 对话脚本(老兵、武器商、活动使者)

• QuestDiary\ → 任务/系统触发(QFunction-0.txt 全局触发、QManage.txt 登录/升级/下线、各活动子目录)

- MonItems\ → 怪物爆率脚本
• Robot_def\ → 机器人定时脚本(RobotManage.txt + 子脚本)

• MapQuest_def\、MapEvent.txt → 地图进入/死亡/触发事件

- Merchant.txt → NPC 编号与脚本文件路径绑定
!Setup.txt 里 QFunctionDir、MarketDefDir 等必须指向真实目录,相对路径和绝对路径不能混用。

三、高频语法错误(占 80% 以上)
1. #IF / #ACT / #ELSEACT / #ENDIF 不闭合:#IF 后必须跟条件,下接 #ACT 执行块,条件分支结束要 #ENDIF;少了直接断解析。
2. [@标签] 写法:标签名顶格,前面不能空格或 Tab;GOTO @领取、CALL [..\QuestDiary\礼包.txt]@领取,目标文件里必须有对应 [@领取],否则报“标签不存在”。
3. 命令大小写与拼写:GIVE、TAKE、CHECKITEM、MAPMOVE、GAMEGOLD 全大写;GIV、Take、ChekItem 全报 Unknown command。GIVE 裁决之杖 1 必须带数量,少参数整段失效。
4. 全角符号:中文逗号“,”括号“()”引号““””、全角空格,引擎不认;Notepad++ 开“显示所有字符”清掉行尾隐藏符。
5. 物品名与 StdItems.DB 不一致:脚本写 GIVE 裁决,库里叫 裁决之杖 → 物品不存在报错,直接抄 DB 里准确名。
6. 爆率文件格式:概率写 100 不是 100%,物品名换行对齐,怪物名和 MonGen / 数据库一致。

四、编码问题:全部 ANSI/GBK
GOM、GEE、Hero、LEG、Blue 等老引擎只认 ANSI。记事本/VS Code 存成 UTF-8 或带 BOM,文件头字节被当乱码,中文标签全废。Notepad++ → 编码 → 转为 ANSI 编码 → 保存(注意是“转为”不是“用 ANSI 打开”)。批量改完再起 M2。

五、变量与资源引用
HUMAN、GLOBAL、GUILD、A/P/S/N 变量使用前在 QManage.txt 或脚本头部 VAR 声明,类型不匹配(字符串当数值比)也报错。脚本里 MAPMOVE 3 312 511,地图号必须在 MapInfo.txt 存在且 Mir200\Map 有对应 .map 文件。Robot_def 里定时标签没在子脚本定义、权限没开“允许自定义机器人脚本”同样不运行或报加载失败。

六、引擎版本不兼容命令
换引擎(Hero→GOM→GEE→Sky)最容易出现整片红字:CHECKONMAP、CALLSUB、SENDMAIL、ThroughHum / AllowThrough、ChangeModeEx / SetHumAbilityStatus 各引擎命名不同;老引擎不认新指令。对照当前引擎命令手册逐条改,别拿混合版硬跑。插件命令还要看 PlugList.txt 里 DLL 是否加载成功。

七、缓存与重载
改完脚本没反应:关 M2 → 删 Mir200\Log\ScriptCache.dat(存在的话)→ 重启控制器。GOM 勾“记录脚本执行日志”、GEE 开 Setup.txt 里 ScriptLog=1,跑一段看 ScriptLog.txt 抓执行中断点。复杂文件用分号 ; 分段注释逐步放开定位。

八、典型报错对照
• Script Error: QFunction-0.txt Line 56 → 跳 56 行查括号/命令/变量

• Unknown command: GIVe → 命令拼错或引擎不支持

- GOTO @back 不存在 → 补 [@back] 标签
• File not found: ..\QuestDiary\充值.txt → 路径/文件名/反斜杠错

• NPC脚本加载失败 福利使者.txt → 编码非 ANSI / Merchant.txt 路径不对 / 头部缺 [@MAIN]

- 地图进入卡死 → MapEvent.txt 坐标越界、地图号错、标签未在 QManage 定义