当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

热度:
传奇脚本错误分服务端报错和客户端弹窗两类,服务端报错看M2控制台或Log/ErrorLog.txt,会直接写出文件名加行号,比如ErrorinEnvir/QuestDiary/QFunction-0.txtline32,拿着这个路径去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,脚本里GIVE380但库里没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内容按功能段用;注释掉一半,重启看还报不报,不报就往下解注,能精确到哪十几行出问题。复杂逻辑在关键行插SENDMSG7把变量值发自己聊天框,比盲改快得多。最后清一次Mir200/Log下的ScriptCache.dat再起服,避免旧缓存覆盖新脚本。
[顶部]