传奇服务端报脚本错误,表现通常是M2Server控制台刷红字[ScriptError]、启动卡在某行加载、NPC点开空白或没反应、登录触发功能直接断、杀怪不爆东西、地图进去卡死。所有脚本类故障第一原则:不看猜,看日志;不改整包,改行号。
一、日志定位:先拿文件名+行号+标签
M2启动或运行报错时,红色信息里必带三要素:
•出错文件:如Market_Def\盟重省-装备回收员.txt、QuestDiary\QFunction-0.txt、MonItems\祖玛教主.txt
-行号:Line325、line105
•标签/描述:@[装备回收]、Unknowncommand、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全报Unknowncommand。GIVE裁决之杖1必须带数量,少参数整段失效。
4.全角符号:中文逗号“,”括号“()”引号““””、全角空格,引擎不认;Notepad++开“显示所有字符”清掉行尾隐藏符。
5.物品名与StdItems.DB不一致:脚本写GIVE裁决,库里叫裁决之杖→物品不存在报错,直接抄DB里准确名。
6.爆率文件格式:概率写100不是100%,物品名换行对齐,怪物名和MonGen/数据库一致。
四、编码问题:全部ANSI/GBK
GOM、GEE、Hero、LEG、Blue等老引擎只认ANSI。记事本/VSCode存成UTF-8或带BOM,文件头字节被当乱码,中文标签全废。Notepad++→编码→转为ANSI编码→保存(注意是“转为”不是“用ANSI打开”)。批量改完再起M2。
五、变量与资源引用
HUMAN、GLOBAL、GUILD、A/P/S/N变量使用前在QManage.txt或脚本头部VAR声明,类型不匹配(字符串当数值比)也报错。脚本里MAPMOVE3312511,地图号必须在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抓执行中断点。复杂文件用分号;分段注释逐步放开定位。
八、典型报错对照
•ScriptError:QFunction-0.txtLine56→跳56行查括号/命令/变量
•Unknowncommand:GIVe→命令拼错或引擎不支持
-GOTO@back不存在→补[@back]标签
•Filenotfound:..\QuestDiary\充值.txt→路径/文件名/反斜杠错
•NPC脚本加载失败福利使者.txt→编码非ANSI/Merchant.txt路径不对/头部缺[@MAIN]
-地图进入卡死→MapEvent.txt坐标越界、地图号错、标签未在QManage定义
一、日志定位:先拿文件名+行号+标签
M2启动或运行报错时,红色信息里必带三要素:
•出错文件:如Market_Def\盟重省-装备回收员.txt、QuestDiary\QFunction-0.txt、MonItems\祖玛教主.txt
-行号:Line325、line105
•标签/描述:@[装备回收]、Unknowncommand、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全报Unknowncommand。GIVE裁决之杖1必须带数量,少参数整段失效。
4.全角符号:中文逗号“,”括号“()”引号““””、全角空格,引擎不认;Notepad++开“显示所有字符”清掉行尾隐藏符。
5.物品名与StdItems.DB不一致:脚本写GIVE裁决,库里叫裁决之杖→物品不存在报错,直接抄DB里准确名。
6.爆率文件格式:概率写100不是100%,物品名换行对齐,怪物名和MonGen/数据库一致。
四、编码问题:全部ANSI/GBK
GOM、GEE、Hero、LEG、Blue等老引擎只认ANSI。记事本/VSCode存成UTF-8或带BOM,文件头字节被当乱码,中文标签全废。Notepad++→编码→转为ANSI编码→保存(注意是“转为”不是“用ANSI打开”)。批量改完再起M2。
五、变量与资源引用
HUMAN、GLOBAL、GUILD、A/P/S/N变量使用前在QManage.txt或脚本头部VAR声明,类型不匹配(字符串当数值比)也报错。脚本里MAPMOVE3312511,地图号必须在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抓执行中断点。复杂文件用分号;分段注释逐步放开定位。
八、典型报错对照
•ScriptError:QFunction-0.txtLine56→跳56行查括号/命令/变量
•Unknowncommand:GIVe→命令拼错或引擎不支持
-GOTO@back不存在→补[@back]标签
•Filenotfound:..\QuestDiary\充值.txt→路径/文件名/反斜杠错
•NPC脚本加载失败福利使者.txt→编码非ANSI/Merchant.txt路径不对/头部缺[@MAIN]
-地图进入卡死→MapEvent.txt坐标越界、地图号错、标签未在QManage定义

