传奇架设时脚本错误主要集中在M2Server启动加载阶段、NPC对话触发、QFunction/QManage事件、QuestDiary任务脚本、Robot_def机器人脚本、MonItems爆率脚本和MapEvent地图事件这几块。表现形式为M2控制台弹红字、NPC点击无反应、登录即崩、杀怪不触发、传送坐标黑屏、引擎直接退出。处理顺序必须是先看日志、再对文件、后改代码,不要凭感觉整包替换。
一、先读报错日志锁定文件与行号
M2启动或运行时报错,第一现场在Mir200\Log\目录,重点看-M2Server-日期.log、ScriptError.log、ErrorLog.txt。典型格式:
ScriptError:QFunction-0.txtLine56
FailedtoloadNPC:盟重省-装备回收员.txt@[回收]第325行
Unknowncommand:GIVe
记录下三样东西:出错文件名、行号、标签名(如[@Main]、[@回收])。用Notepad++打开对应文件,Ctrl+G跳行,不要全局瞎改。
二、脚本存放路径与调用关系核对
NPC对话脚本→Mir200\Envir\Market_Def
任务/功能脚本→Mir200\Envir\QuestDiary
登录/下线/死亡等系统事件→QManage-0.txt、QFunction-0.txt(在QuestDiary根或Envir下,看引擎约定)
机器人定时器→Mir200\Envir\Robot_def(RobotManage.txt+各定时脚本)
爆率脚本→Mir200\Envir\MonItems
地图事件→MapEvent.txt、MapQuest_def
!Setup.txt里QFunctionDir、MarketDefDir等路径必须和实际目录一致。CALL[..\QuestDiary\充值.txt]这种写法,路径层级、文件夹名、反斜杠、文件名一个字母都不能差,Linux环境还区分大小写。
三、编码问题:全部转ANSI/GBK
老引擎(GOM、GEE、Hero、LEG、SKY等)只认ANSI。用UTF-8或带BOM的UTF-8保存,中文变乱码、命令解析失败、标签认不出。记事本打开→另存为→编码选ANSI覆盖;Notepad++用“编码→转为ANSI编码”。已经乱码的行删掉重写,别直接留着。批量改完再启M2。
四、语法结构错误(出现频率最高)
1.条件块不闭合:#IF必须配#ACT或#SAY,结尾#ENDIF;#IF后不能直接写对话文字,也不能缺#ACT。
2.标签写法:[@MAIN]、[@回收]必须顶格,前面不能空格或Tab;GOTO@MAIN必须有对应[@MAIN]段落,否则报GOTO标签不存在。
3.符号全半角:逗号、括号、引号、冒号全用英文半角,中文“,”或“()”直接解析失败。Notepad++开“显示所有字符”能看见多余空格和全角符。
4.命令大写与空格:GIVE、MAPMOVE、CHECKITEM、SET、MOV全大写,命令与参数间一个空格,不能多不能少。GIVe、giveitem、MOVD0100都算错。
5.文件结尾留空行:最后一行补个回车,否则引擎报“文件意外结束”。
五、变量、物品名、数据库引用错误
脚本里GIVE裁决,但StdItems.DB里叫裁决之杖→物品不存在报错。打开Mud2\DB\StdItems.DB抄准确名称。
HUMAN、GLOBAL、GUILD变量使用前要在QManage或脚本头部VAR定义,自定义变量名拼错也报未定义。
MonItems爆率文件里物品名、概率数值超范围同样报错。
行会相关脚本检查GuildConfig.txt是否空了,DBServer.ini里DatabaseName、UserID、Password是否和HeroDB/MySQL一致。
六、引擎版本不兼容命令
换引擎(LEG换GOM、Hero换SKY、老1108换新GOM)后大面积红字,本质是命令集不同:穿人命令Hero是ThroughHum,GOM是AllowThrough;无敌命令Sky用SetHumAbilityStatus,GOM用ChangeModeEx;CALL写法、计时单位(毫秒/秒)也不同。对照当前引擎的脚本命令手册逐条改,别拿网上下载的混合版硬跑。
七、跳转死循环与GotoCountLimit
脚本里多个GOTO嵌套、指向不存在标签会形成死循环。!Setup.txt里ScriptGotoCountLimit默认10,复杂跳转不够用就调大(如5000),但根因还是逻辑乱,尽量用CALL替代多层GOTO。
八、缓存与重载
部分引擎会缓存脚本,改完没反应就关M2→删Mir200\Log\ScriptCache.dat(有则删)→重启控制器。GEE改Setup.txt里ScriptLog=1,GOM勾“记录脚本执行日志”,跑一段时间看ScriptLog.txt抓慢脚本和频繁执行段。
九、机器人脚本专项
RobotManage.txt里执行时间格式错、调用的@标签在子脚本里没定义、权限没开(“允许自定义机器人脚本”未勾)都会不运行或报错。跨版本迁移要把机器人主脚本和依赖变量文件一起搬,先跑简化版再做完整功能。
十、改动习惯
每次动脚本前复制原文件备一份;大文件用分段注释(行首加;)逐步放开定位错误行;数据库、StdItems、MonItems、MapInfo和脚本一起核对,单改一边必出事。
一、先读报错日志锁定文件与行号
M2启动或运行时报错,第一现场在Mir200\Log\目录,重点看-M2Server-日期.log、ScriptError.log、ErrorLog.txt。典型格式:
ScriptError:QFunction-0.txtLine56
FailedtoloadNPC:盟重省-装备回收员.txt@[回收]第325行
Unknowncommand:GIVe
记录下三样东西:出错文件名、行号、标签名(如[@Main]、[@回收])。用Notepad++打开对应文件,Ctrl+G跳行,不要全局瞎改。
二、脚本存放路径与调用关系核对
NPC对话脚本→Mir200\Envir\Market_Def
任务/功能脚本→Mir200\Envir\QuestDiary
登录/下线/死亡等系统事件→QManage-0.txt、QFunction-0.txt(在QuestDiary根或Envir下,看引擎约定)
机器人定时器→Mir200\Envir\Robot_def(RobotManage.txt+各定时脚本)
爆率脚本→Mir200\Envir\MonItems
地图事件→MapEvent.txt、MapQuest_def
!Setup.txt里QFunctionDir、MarketDefDir等路径必须和实际目录一致。CALL[..\QuestDiary\充值.txt]这种写法,路径层级、文件夹名、反斜杠、文件名一个字母都不能差,Linux环境还区分大小写。
三、编码问题:全部转ANSI/GBK
老引擎(GOM、GEE、Hero、LEG、SKY等)只认ANSI。用UTF-8或带BOM的UTF-8保存,中文变乱码、命令解析失败、标签认不出。记事本打开→另存为→编码选ANSI覆盖;Notepad++用“编码→转为ANSI编码”。已经乱码的行删掉重写,别直接留着。批量改完再启M2。
四、语法结构错误(出现频率最高)
1.条件块不闭合:#IF必须配#ACT或#SAY,结尾#ENDIF;#IF后不能直接写对话文字,也不能缺#ACT。
2.标签写法:[@MAIN]、[@回收]必须顶格,前面不能空格或Tab;GOTO@MAIN必须有对应[@MAIN]段落,否则报GOTO标签不存在。
3.符号全半角:逗号、括号、引号、冒号全用英文半角,中文“,”或“()”直接解析失败。Notepad++开“显示所有字符”能看见多余空格和全角符。
4.命令大写与空格:GIVE、MAPMOVE、CHECKITEM、SET、MOV全大写,命令与参数间一个空格,不能多不能少。GIVe、giveitem、MOVD0100都算错。
5.文件结尾留空行:最后一行补个回车,否则引擎报“文件意外结束”。
五、变量、物品名、数据库引用错误
脚本里GIVE裁决,但StdItems.DB里叫裁决之杖→物品不存在报错。打开Mud2\DB\StdItems.DB抄准确名称。
HUMAN、GLOBAL、GUILD变量使用前要在QManage或脚本头部VAR定义,自定义变量名拼错也报未定义。
MonItems爆率文件里物品名、概率数值超范围同样报错。
行会相关脚本检查GuildConfig.txt是否空了,DBServer.ini里DatabaseName、UserID、Password是否和HeroDB/MySQL一致。
六、引擎版本不兼容命令
换引擎(LEG换GOM、Hero换SKY、老1108换新GOM)后大面积红字,本质是命令集不同:穿人命令Hero是ThroughHum,GOM是AllowThrough;无敌命令Sky用SetHumAbilityStatus,GOM用ChangeModeEx;CALL写法、计时单位(毫秒/秒)也不同。对照当前引擎的脚本命令手册逐条改,别拿网上下载的混合版硬跑。
七、跳转死循环与GotoCountLimit
脚本里多个GOTO嵌套、指向不存在标签会形成死循环。!Setup.txt里ScriptGotoCountLimit默认10,复杂跳转不够用就调大(如5000),但根因还是逻辑乱,尽量用CALL替代多层GOTO。
八、缓存与重载
部分引擎会缓存脚本,改完没反应就关M2→删Mir200\Log\ScriptCache.dat(有则删)→重启控制器。GEE改Setup.txt里ScriptLog=1,GOM勾“记录脚本执行日志”,跑一段时间看ScriptLog.txt抓慢脚本和频繁执行段。
九、机器人脚本专项
RobotManage.txt里执行时间格式错、调用的@标签在子脚本里没定义、权限没开(“允许自定义机器人脚本”未勾)都会不运行或报错。跨版本迁移要把机器人主脚本和依赖变量文件一起搬,先跑简化版再做完整功能。
十、改动习惯
每次动脚本前复制原文件备一份;大文件用分段注释(行首加;)逐步放开定位错误行;数据库、StdItems、MonItems、MapInfo和脚本一起核对,单改一边必出事。

