传奇电脑脚本错误修复实用技巧:从弹窗到M2日志全链路排查

来源: 作者: 点击:
电脑上跑传奇碰到脚本错误,先别急着重装系统,也别盲目换登录器。报错分两条线:一条是服务端 M2Server 控制台刷红字 ScriptError,一条是客户端登录器或游戏窗口弹 IE 式脚本错误对话框。两端分开查,效率最高。

服务端侧先看 M2Server-日期.log 和控制台实时输出,报错格式通常是“ScriptError: QuestDiary\QFunction-0.txt Line 56: CommandSyntaxError”或“QManage.txt 第 88 行 变量未定义”。拿到文件名+行号,进 Mir200\Envir 对应目录,用 Notepad++ 按 Ctrl+G 跳行。 到了那一行优先看五件事:#IF/#ACT/#SAY 是否独立成行、括号和引号是不是英文半角、GOTO/CALL 指向的 @标签 存不存在、变量有没有先用 MOV / VAR INTEGER HUMAN 声明、命令名拼错没有(CHECKLEVELEX 写成 CHECKLEVEL 这种)。段头 [@Main] 必须顶格,前面有空格引擎直接当普通文本跳过,后面逻辑全乱。

编码问题是隐形杀手。所有 QuestDiary、Market_Def 下的 .txt 必须 ANSI(GBK) 保存,用记事本另存为 UTF-8 会带 BOM 头,中文变乱码,引擎读到乱码段就抛“无法获取属性/对象为 null”。Notepad++ 打开→编码→转为 ANSI→保存覆盖,顺手开“显示空格与制表符”,把行尾黄色全角空格、制表符混用全清掉。

CALL 外部脚本报“文件未找到”或“标签未找到”,查 #CALL[..\登陆\登陆脚本.txt]@领取 这种语句:双反斜杠、相对路径基于 QuestDiary、目标文件真在那个文件夹、目标文件里确实有 [@领取]。中文文件夹“登陆”和“登录”不是同一个,复制粘贴最容易出现这坑。

客户端登录器弹“当前页脚本发生错误 / 对象不支持此属性或方法 / 缺少对象”,是内嵌 IE 网页(公告、活动、客服)调 JScript/VBScript 时系统组件没注册。管理员 CMD 依次执行:
regsvr32 jscript.dll
regsvr32 vbscript.dll
regsvr32 mshtml.dll
regsvr32 scrrun.dll
回车看到“注册成功”再继续,全跑完重启机器。 Win10/Win11 进“控制面板→Internet 选项→高级”勾“禁用脚本调试”、取消“显示每个脚本错误的通知”,能压住弹窗;IE11 组件被关了的去“启用或关闭 Windows 功能”里重新勾上。客户端根目录的 Cache、Temp、ScriptCache 删掉,老缓存 JS 和新脚本抢对象也会报 null。

登录器本身损坏或杀软误删也会一开窗口就错。检查目录里 Login.exe、Mir.exe、Mir.dat、UI.pak、Data\*.pak 是否齐全,360/火绒隔离区恢复被删文件加信任,整个客户端挪到纯英文无空格路径(D:\MirClient),右键登录器选管理员身份+Win7 兼容模式。登录器版本必须跟服务端引擎同族,GOM 配 GOM、GEE 配 GEE、HERO 配 HERO,跨引擎抄脚本必弹窗。

进游戏点 NPC 才报错而 M2 启动不报,多半是 Market_Def 里那个 NPC 的 .txt 在 [@main] 前过早读了地图环境(PEnvir nil)或 parent 指向已删除的父 NPC。把 NPC 文件里 [@main] 之前的 MAP、CHECKMAP、GetParent 类调用全移到 [@main] 段内第一行之后,确认被引用的父 NPC 文件在 Market_Def 对应地图子目录里没被改名。

改完服务端脚本别只点重载,复杂改动直接关 M2 删 Mir200\Log 下的 ScriptCache.dat(有就删)再起 M2;客户端那边删缓存后重开登录器。变量类报错在 QManage.txt 的 [@Login] 段头部补 MOV S10 空串、MOV N1 0、VAR INTEGER HUMAN 消费积分 这种初始化,比逐处改调用省事。

系统层实在查不出,管理员 CMD 跑 sfc /scannow 修系统文件,chkdsk C: /f 查盘,新建一个本地管理员账户开登录器能进就是原账户配置损坏。IPv6 在老引擎下偶尔干扰列表读取,网卡属性里取消 IPv6 勾选只留 IPv4 也能消掉一类诡异脚本超时。