传奇架设时脚本错误主要集中在 M2Server 启动加载阶段、NPC 对话触发、QFunction/QManage 事件、QuestDiary 任务脚本、Robot_def 机器人脚本、MonItems 爆率脚本和 MapEvent 地图事件这几块。表现形式为 M2 控制台弹红字、NPC 点击无反应、登录即崩、杀怪不触发、传送坐标黑屏、引擎直接退出。处理顺序必须是先看日志、再对文件、后改代码,不要凭感觉整包替换。
一、先读报错日志锁定文件与行号
M2 启动或运行时报错,第一现场在 Mir200\Log\ 目录,重点看 -M2Server-日期.log、ScriptError.log、ErrorLog.txt。典型格式:
Script Error: QFunction-0.txt Line 56
Failed to load NPC: 盟重省-装备回收员.txt @ [回收] 第 325 行
Unknown command: 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报错定位与常见语法路径编码处理
来源:
作者:
点击:

