传奇脚本错误怎么解决 服务端日志定位与修复实操

来源: 作者: 点击:
传奇脚本错误分服务端报错和客户端弹窗两类,服务端报错看M2控制台或 Log/ErrorLog.txt,会直接写出文件名加行号,比如 Error in Envir/QuestDiary/QFunction-0.txt line 32,拿着这个路径去 Mir200/Envir 下找对应文件,别凭感觉改。客户端弹窗点开先截图,对话框里通常带 NPC 名字、[@标签名] 和行号,对照 Market_Def 里的同名 txt 改。

改之前先把原文件复制一份到别处备份,再关掉 M2Server 所有进程改文本,改完重启引擎,不要热加载半成品脚本。用 Notepad++ 打开报错文件,先点编码菜单看是不是 ANSI,UTF-8 带 BOM 会让中文变乱码、引擎解析到一半崩,统一转 ANSI 或 GBK;再看右下角换行符,传奇 Windows 端只认 CRLF,Linux 格式 LF 会让行号对不上,表现为报 299 行但文件只有 170 行,转成 Windows 格式就能消掉假报错。

语法上盯几条硬规则:#IF/#ACT/#SAY 必须大写顶格,[@main] 这种标签前面不能有空格和制表符;#IF 后面必须有 #ACT 或 #SAY,单写条件不跟动作必错;GIVE 屠龙 1 这种命令物品名和数量都得有,缺数量或缺物品名都报参数错;CHECKBAGITEM 拼错一个字母就是未识别命令;中文标点混进脚本直接挂,所有符号半角英文。

路径和引用错占另一大头。NPC 脚本放 Envir/Market_Def,文件名要和 !NPC_def.txt 里调用的完全一致,大小写敏感;QuestDiary 下子脚本用 CALL [功能/奖励.txt] 调用时,方括号里是相对 QuestDiary 的路径,多写一级少写一级都加载不到;MapQuest_def 里地图触发指向的脚本不存在也会报找不到文件。物品编号核对 StdItems.txt,地图编号核对 MapInfo.txt,技能编号核对 Skill.DB,脚本里 GIVE 380 但库里没 380 这行就报物品不存在。

引擎不兼容是移植版本最常见的坑。GOM 的 MapMove 在 Hero 里得写 ChangeMap,翎风变量系统和 Hero 的 P/G/A 变量不通用,彩虹引擎要在头部 #Include 彩虹脚本库。先确认启动程序是 HeroServer 还是 GOMM2,再去对应引擎的脚本命令手册批量替换不认的命令,别把 GEE 脚本直接塞进 Blue 引擎。

插件类报错提示“命令未识别”但不是拼写错,进 M2Server 点插件管理,看脚本插件、NPC 插件、CallDll 依赖的自定义 dll 有没有勾上,被杀软删了的 dll 从完整包恢复后加白名单。端口冲突报 10048 用 netstat -ano 查占用进程杀掉,Setup.txt 里 GOTO 循环上限调低防内存溢出。

登录就弹脚本错误而进不了游戏的,查 Envir/QuestDiary 里的 Login.txt、QManage.txt 登录段,[@Login] 里引用了没初始化的变量(比如消费积分没在 QManage 里 SET 过)就会执行失败,把变量初始化补上或暂时注释掉这段登录触发,能进游戏再慢慢修。服务端和客户端版本不一致也会让前端解析后端下发的脚本片段失败,两端 Envir 和 Data 脚本对齐再试。

改完用分段注释法收尾:把 QFunction-0.txt 内容按功能段用 ; 注释掉一半,重启看还报不报,不报就往下解注,能精确到哪十几行出问题。复杂逻辑在关键行插 SENDMSG 7 把变量值发自己聊天框,比盲改快得多。最后清一次 Mir200/Log 下的 ScriptCache.dat 再起服,避免旧缓存覆盖新脚本。