M2提示“脚本错误”不是单一故障,本质是引擎在加载或执行Mir200\Envir下的脚本文件时遇到语法、命令、结构、资源、编码任何一项不匹配,直接在控制台刷红字,对应NPC点不开、任务不触发、爆率失效、登录脚本中断。按下面顺序拆。
一、先读报错信息,锁定文件与行号
M2Server控制台红字格式通常为:
[错误]脚本错误:NPC名称-地图坐标第X行:[@标签]描述
或Scriptfile'QFunction-0.txt'line88:Unknowncommand
同时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、MOVD0100缺空格写成MOVD0100、CALL路径格式错。对照引擎命令表修。
3.参数缺失或多余:GIVE屠龙(少数量)、CHECKGAMEGOLD>(少数值)、SetOnTimer11(少触发脚本参数),严格按命令参数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对应文件里VARIntegerHUMAN变量名/VARStringGLOBAL变量名,否则报“变量不存在”;重复声明报“变量已存在”。
2.物品/怪物/地图不存在:GIVE屠龙刀1但StdItems.DB里叫“屠龙”;MAPMOVE333但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控制台→重新加载脚本(ReloadNPC/ReloadQuest)。登录期QManage改动建议全服重启,避免变量状态分裂。
七、典型报错对照速查
•Unknowncommand'XXXX'→命令拼错或引擎不支持
•Incorrectnumberofargumentsforfunction→参数数量不对
-Unfinishedstring→引号未闭合、编码乱码
•GOTO@xxx不存在→标签缺失
•变量HUMANxxx不存在→未VAR声明
-NPC脚本加载失败:某某.txt→路径/编码/头部@MAIN缺失
•MonsterDropScriptLineXX:UnknownItemID→爆率文件物品名不在库
八、批量排查顺序(实操流程)
1.抄下M2红字文件名+行号→进对应Envir子目录打开txt
2.Notepad++显示所有字符→查全角、行尾空格、缺BREAK
3.核对#IF/#ACT/#ENDIF配对、[@标签]存在性
4.核对命令拼写+参数个数(对照引擎CHM命令表)
5.确认物品/地图/怪物名与DBC、Map、MonItems一致
6.确认变量已VAR声明、作用域正确
7.文件转ANSI→删ScriptCache→重启或重载
8.仍不明就分段注释(;开头)缩到最小可复现脚本定位断点
无备份且文件损坏时,从同版本干净服务端按原文件名(含“-0”后缀、大小写)复制替换,再逐段合回自改逻辑,避免直接覆盖丢功能。
一、先读报错信息,锁定文件与行号
M2Server控制台红字格式通常为:
[错误]脚本错误:NPC名称-地图坐标第X行:[@标签]描述
或Scriptfile'QFunction-0.txt'line88:Unknowncommand
同时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、MOVD0100缺空格写成MOVD0100、CALL路径格式错。对照引擎命令表修。
3.参数缺失或多余:GIVE屠龙(少数量)、CHECKGAMEGOLD>(少数值)、SetOnTimer11(少触发脚本参数),严格按命令参数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对应文件里VARIntegerHUMAN变量名/VARStringGLOBAL变量名,否则报“变量不存在”;重复声明报“变量已存在”。
2.物品/怪物/地图不存在:GIVE屠龙刀1但StdItems.DB里叫“屠龙”;MAPMOVE333但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控制台→重新加载脚本(ReloadNPC/ReloadQuest)。登录期QManage改动建议全服重启,避免变量状态分裂。
七、典型报错对照速查
•Unknowncommand'XXXX'→命令拼错或引擎不支持
•Incorrectnumberofargumentsforfunction→参数数量不对
-Unfinishedstring→引号未闭合、编码乱码
•GOTO@xxx不存在→标签缺失
•变量HUMANxxx不存在→未VAR声明
-NPC脚本加载失败:某某.txt→路径/编码/头部@MAIN缺失
•MonsterDropScriptLineXX:UnknownItemID→爆率文件物品名不在库
八、批量排查顺序(实操流程)
1.抄下M2红字文件名+行号→进对应Envir子目录打开txt
2.Notepad++显示所有字符→查全角、行尾空格、缺BREAK
3.核对#IF/#ACT/#ENDIF配对、[@标签]存在性
4.核对命令拼写+参数个数(对照引擎CHM命令表)
5.确认物品/地图/怪物名与DBC、Map、MonItems一致
6.确认变量已VAR声明、作用域正确
7.文件转ANSI→删ScriptCache→重启或重载
8.仍不明就分段注释(;开头)缩到最小可复现脚本定位断点
无备份且文件损坏时,从同版本干净服务端按原文件名(含“-0”后缀、大小写)复制替换,再逐段合回自改逻辑,避免直接覆盖丢功能。

