一、先读报错信息锁定文件与行号
启动GameSrv/M2Server/引擎控制器时,控制台红字或Log目录下的ScriptError.log、Script.log会给出完整线索,格式通常是:
Scriptfile'QFunction-0.txt'line56:CommandSyntaxError(Missing')')
记录三样东西:文件名、Line行号、错误描述。对应路径表:
Mir200\Envir\Market_Def\→NPC对话脚本(如比奇老兵-0.txt)
Mir200\Envir\QuestDiary\→QFunction-0.txt、QManage-0.txt、各功能模块脚本
Mir200\Envir\MonItems\→怪物爆率脚本
Mir200\Envir\Robot_def\或QuestDiary\RobotManage\→机器人定时脚本
用Notepad++打开对应文件,Ctrl+G跳到行号,不要凭感觉全目录搜。
二、编码与文件格式错误(最高频)
所有脚本文件必须保存为ANSI或GBK。用UTF-8尤其是带BOM的,中文变乱码、命令识别失败、登录触发直接断。
记事本打开→另存为→编码选ANSI;Notepad++用“编码→转为ANSI编码”。
路径禁止中文、空格、全角符号,MirServer整体放D:\MirServer最稳。
三、语法结构类错误
1.条件块不完整
IF下面必须跟条件命令,再跟#ACT或#ELSEACT,缺一段就报Syntaxerror。
错误:
IF
CHECKITEM金条1
(没有#ACT)
正确:
IF
CHECKITEM金条1
ACT
GIVE金币1000
2.标签与跳转
[@Main]、[@Login]、[@每日扣点]必须独立成行,格式严格[@标签名],GOTO@标签名的目标必须同文件存在,大小写敏感,“@A400”写成“@A40O”直接断。
3.括号与符号
()[]{}成对,禁用中文括号“()”;参数之间用英文半角空格,命令尾多空格也会解析异常。
CALL引用写法:CALL[QManage.txt]@Label,不是CALLQ_Manage.txt@Label。
4.注释
单行//,多行/.../;Hero/GOM某些版本不支持#开头注释,写#会当命令解析。
四、命令与引擎不匹配
GOM/GEE/Hero/LEG/BLUE命令集不同,混抄必错:
-GOM提示信息用MSG或SendMsg,GEE用SendCenterMsg
•GOMCALLSUB在GEE改CALL
•Hero的TAKEITEM在GOM是TAKE
-LEG需在头部#DEFINEUSER_CMD1开启辅助触发
•BLUE怪物死亡触发文件固定命名MonDie.txt,不能自定义
确认引擎类型(看M2目录图标或“关于”)→打开服务端自带的脚本命令说明.txt→逐条替换。
五、数据库与参数关联错误
GIVE/CHECKITEM/RECYCLAITEM后的物品名必须和StdItems.DB(Item.txt)完全一致,“强效疗伤药”写成“疗伤药(强效)”就报“道具不存在”。
MONGEN/MOBPLACE刷怪名查Monster.DB;MAPMOVE/MapEvent地图号查MapInfo.txt;NPC编号查Merchant.txt/Npc.txt。
爆率文件数字超范围、概率写100%而不是100、坐标超出地图边界,都会让进图卡死或报错。
变量作用域:HUMAN个人、GLOBAL全局、S/N/A临时;未LOADVAR/VAR声明直接调用报“变量未定义”;机器人脚本里HUMAN变量不在作用域就改GLOBAL或遍历在线玩家。
六、引用路径与机器人脚本特例
CALL、LOADVAR、SAVEVAR引用外部txt用相对路径,如..\QuestDiary\数据\xxx.txt,绝对路径D:\...在部分引擎会被拦。
RobotManage.txt格式:分钟脚本文件,放QuestDiary\RobotManage\;AutoRunRobot.txt写法AutoRunRobotRunOnDay00:00@标签名,第二个字段必须是Robot不是NPC,时间0:00写成00:00,多一个参数都不行。M2“选项→机器人设置”勾启用,间隔别设太死,否则整点不触发。
七、缓存与重载
改完脚本别只点“重载脚本”,部分引擎缓存ScriptCache.dat:
关闭M2→删Mir200\Log\ScriptCache.dat(存在的话)→重启M2。
QFunction/QManage改动建议整服重启,热加载容易残留旧变量。
八、分段注释法兜底
日志不指名行号时,把疑似脚本段首加//逐段注释,分段起M2,哪段注释后不报错就是哪段;再在该段内二分缩小到具体行。改前先备份整个Envir目录,用WinMerge对比原始版差异。
九、常见报错速查表
•LineX:Unknowncommand→命令拼错或引擎不支持,查命令手册
•LineX:Missing'#ACT'→#IF块没闭合
•Filenotfound→CALL/LOADVAR路径错或文件没放
-道具XXX不存在→Item.txt名称不一致
•标签@XXXnotfound→GOTO/CALL目标标签缺失
•编码乱码→UTF-8转ANSI
•NPC点开空白→Market_Def文件名与Merchant.txt配置不匹配
按“日志行号→编码→语法→命令引擎匹配→数据库参数→缓存重启”顺序走,绝大多数脚本错误都能在十分钟内外解决。
启动GameSrv/M2Server/引擎控制器时,控制台红字或Log目录下的ScriptError.log、Script.log会给出完整线索,格式通常是:
Scriptfile'QFunction-0.txt'line56:CommandSyntaxError(Missing')')
记录三样东西:文件名、Line行号、错误描述。对应路径表:
Mir200\Envir\Market_Def\→NPC对话脚本(如比奇老兵-0.txt)
Mir200\Envir\QuestDiary\→QFunction-0.txt、QManage-0.txt、各功能模块脚本
Mir200\Envir\MonItems\→怪物爆率脚本
Mir200\Envir\Robot_def\或QuestDiary\RobotManage\→机器人定时脚本
用Notepad++打开对应文件,Ctrl+G跳到行号,不要凭感觉全目录搜。
二、编码与文件格式错误(最高频)
所有脚本文件必须保存为ANSI或GBK。用UTF-8尤其是带BOM的,中文变乱码、命令识别失败、登录触发直接断。
记事本打开→另存为→编码选ANSI;Notepad++用“编码→转为ANSI编码”。
路径禁止中文、空格、全角符号,MirServer整体放D:\MirServer最稳。
三、语法结构类错误
1.条件块不完整
IF下面必须跟条件命令,再跟#ACT或#ELSEACT,缺一段就报Syntaxerror。
错误:
IF
CHECKITEM金条1
(没有#ACT)
正确:
IF
CHECKITEM金条1
ACT
GIVE金币1000
2.标签与跳转
[@Main]、[@Login]、[@每日扣点]必须独立成行,格式严格[@标签名],GOTO@标签名的目标必须同文件存在,大小写敏感,“@A400”写成“@A40O”直接断。
3.括号与符号
()[]{}成对,禁用中文括号“()”;参数之间用英文半角空格,命令尾多空格也会解析异常。
CALL引用写法:CALL[QManage.txt]@Label,不是CALLQ_Manage.txt@Label。
4.注释
单行//,多行/.../;Hero/GOM某些版本不支持#开头注释,写#会当命令解析。
四、命令与引擎不匹配
GOM/GEE/Hero/LEG/BLUE命令集不同,混抄必错:
-GOM提示信息用MSG或SendMsg,GEE用SendCenterMsg
•GOMCALLSUB在GEE改CALL
•Hero的TAKEITEM在GOM是TAKE
-LEG需在头部#DEFINEUSER_CMD1开启辅助触发
•BLUE怪物死亡触发文件固定命名MonDie.txt,不能自定义
确认引擎类型(看M2目录图标或“关于”)→打开服务端自带的脚本命令说明.txt→逐条替换。
五、数据库与参数关联错误
GIVE/CHECKITEM/RECYCLAITEM后的物品名必须和StdItems.DB(Item.txt)完全一致,“强效疗伤药”写成“疗伤药(强效)”就报“道具不存在”。
MONGEN/MOBPLACE刷怪名查Monster.DB;MAPMOVE/MapEvent地图号查MapInfo.txt;NPC编号查Merchant.txt/Npc.txt。
爆率文件数字超范围、概率写100%而不是100、坐标超出地图边界,都会让进图卡死或报错。
变量作用域:HUMAN个人、GLOBAL全局、S/N/A临时;未LOADVAR/VAR声明直接调用报“变量未定义”;机器人脚本里HUMAN变量不在作用域就改GLOBAL或遍历在线玩家。
六、引用路径与机器人脚本特例
CALL、LOADVAR、SAVEVAR引用外部txt用相对路径,如..\QuestDiary\数据\xxx.txt,绝对路径D:\...在部分引擎会被拦。
RobotManage.txt格式:分钟脚本文件,放QuestDiary\RobotManage\;AutoRunRobot.txt写法AutoRunRobotRunOnDay00:00@标签名,第二个字段必须是Robot不是NPC,时间0:00写成00:00,多一个参数都不行。M2“选项→机器人设置”勾启用,间隔别设太死,否则整点不触发。
七、缓存与重载
改完脚本别只点“重载脚本”,部分引擎缓存ScriptCache.dat:
关闭M2→删Mir200\Log\ScriptCache.dat(存在的话)→重启M2。
QFunction/QManage改动建议整服重启,热加载容易残留旧变量。
八、分段注释法兜底
日志不指名行号时,把疑似脚本段首加//逐段注释,分段起M2,哪段注释后不报错就是哪段;再在该段内二分缩小到具体行。改前先备份整个Envir目录,用WinMerge对比原始版差异。
九、常见报错速查表
•LineX:Unknowncommand→命令拼错或引擎不支持,查命令手册
•LineX:Missing'#ACT'→#IF块没闭合
•Filenotfound→CALL/LOADVAR路径错或文件没放
-道具XXX不存在→Item.txt名称不一致
•标签@XXXnotfound→GOTO/CALL目标标签缺失
•编码乱码→UTF-8转ANSI
•NPC点开空白→Market_Def文件名与Merchant.txt配置不匹配
按“日志行号→编码→语法→命令引擎匹配→数据库参数→缓存重启”顺序走,绝大多数脚本错误都能在十分钟内外解决。

