M2提示“脚本错误”不是单一故障,本质是引擎在加载或执行Mir200\Envir下的脚本文件时遇到语法、命令、结构、资源、编码任何一项不匹配,直接在控制台刷红字,对应NPC点不开、任务不触发、爆率失效、登录脚本中断。按下面顺序拆。
一、先读报错信息,锁定文件与行号
M2Server控制台红字格式通常为:
[错误] 脚本错误: NPC名称-地图坐标 第X行: [@标签] 描述
或 Scriptfile 'QFunction-0.txt' line 88: Unknown command
同时 Mir200\Log\M2Server-日期.log、ErrorLog.txt 会落盘记录。提取三个关键值:文件名、行号、命令名。
常见文件归属:
• Market_Def\*.txt → NPC对话、功能商人、老兵、回收员
- QuestDiary\\.txt → 任务、登录触发、升级触发、活动系统
• QManage.txt / QFunction.txt / QMission.txt → 登录、攻击、死亡、捡物等全局触发
- MonItems\*.txt → 怪物爆率脚本
• MapInfo.txt / MapEvent.txt → 地图进入事件
二、语法格式类错误(占比最高)
1. 全角半角混用:#IF、,、“” 写成中文,引擎只认英文半角 #IF、,、""。Notepad++ → 视图 → 显示所有字符,清掉行尾全角空格。
2. 命令拼写/大小写:GIVE 写成 GivE、MOVD0 100 缺空格写成 MOVD0100、CALL 路径格式错。对照引擎命令表修。
3. 参数缺失或多余:GIVE 屠龙(少数量)、CHECKGAMEGOLD >(少数值)、SetOnTimer 1 1(少触发脚本参数),严格按 命令 参数1 参数2 … 空格分隔。
4. 结构未闭合:每个 #IF 必须配 #ACT/#ELSEACT,结尾 #ENDIF;@标签 段结束加 BREAK;#SAY 块里不能塞未定义标签。Hero/Legend引擎 #IF 与 #ACT 间不允许空行。
5. 跳转标签丢失:GOTO @VIP1 但全文无 [@VIP1],或拼写 [@Main] 写成 [@MAINN],加载即报。
三、编码与文件加载错误
所有 .txt 脚本必须 ANSI(GBK),Windows记事本默认存成 UTF-8+BOM 会让中文变乱码、命令解析失败。修复:记事本/Notepad++ 打开 → 另存为 → 编码选 ANSI。
相对路径调用如 #CALL [..\QuestDiary\充值.txt] @Start,确认目标文件真实存在、文件夹名无误、!Setup.txt 里 QFunctionDir 指向正确。
四、变量与资源未定义
1. 自定义变量未声明:用 HUMAN/GLOBAL/S0~S99 前需在 QManage 或 QuestDiary 对应文件里 VAR Integer HUMAN 变量名 / VAR String GLOBAL 变量名,否则报“变量不存在”;重复声明报“变量已存在”。
2. 物品/怪物/地图不存在:GIVE 屠龙刀 1 但 StdItems.DB 里叫“屠龙”;MAPMOVE 333 但 Map3.map 不存在;爆率文件引用怪名拼错。核对 DBC 数据库与 MonItems 目录。
3. 全局变量作用域错:A0~A9 临时、G0~G9 全局、S 系列字符串,跨文件调用未初始化直接比较会触发无效判定。
五、引擎版本不兼容
老 Hero/Legend 脚本搬进 GOM/GEE/翎风,新增命令(CALC、LuaCall、OpenUpgradeDialog 参数变化)老引擎不认;高版本 @OnMapEnterEx 旧版只认 @OnMapEnter;V8/翎风混 Lua 时 LuaScripts 目录报错需单独查。换引擎必须对照新版命令手册逐文件扫。
六、缓存与重载处理
改完脚本别直接信“热加载”:部分引擎会缓存 Mir200\Log\ScriptCache.dat,需关 M2 → 删缓存 → 重启;或 M2控制台 → 重新加载脚本(Reload NPC / Reload Quest)。登录期 QManage 改动建议全服重启,避免变量状态分裂。
七、典型报错对照速查
• Unknown command 'XXXX' → 命令拼错或引擎不支持
• Incorrect number of arguments for function → 参数数量不对
- Unfinished string → 引号未闭合、编码乱码
• GOTO @xxx 不存在 → 标签缺失
• 变量 HUMAN xxx 不存在 → 未 VAR 声明
- NPC脚本加载失败: 某某.txt → 路径/编码/头部 @MAIN 缺失
• Monster Drop Script Line XX: Unknown Item ID → 爆率文件物品名不在库
八、批量排查顺序(实操流程)
1. 抄下M2红字文件名+行号 → 进对应 Envir 子目录打开 txt
2. Notepad++ 显示所有字符 → 查全角、行尾空格、缺 BREAK
3. 核对 #IF/#ACT/#ENDIF 配对、[@标签] 存在性
4. 核对命令拼写+参数个数(对照引擎 CHM 命令表)
5. 确认物品/地图/怪物名与 DBC、Map、MonItems 一致
6. 确认变量已 VAR 声明、作用域正确
7. 文件转 ANSI → 删 ScriptCache → 重启或重载
8. 仍不明就分段注释(; 开头)缩到最小可复现脚本定位断点
无备份且文件损坏时,从同版本干净服务端按原文件名(含“-0”后缀、大小写)复制替换,再逐段合回自改逻辑,避免直接覆盖丢功能。
热血传奇M2引擎脚本错误全排查:报错定位与NPC任务触发修复实操
来源:
作者:
点击:

