传奇脚本错误与装备脚本错误修正全解

来源: 作者: 点击:
脚本错误分两条线走,先看清楚弹窗归谁家再动手。一条是登录器或客户端窗口弹出的IE式脚本错误,报错内容带“对象为null”“缺少对象”这类字眼,属于系统组件和登录器缓存问题,跟游戏服务端没关系。另一条是M2Server控制台刷红字,报错格式通常是“ScriptError: QuestDiary\XXX.txt Line X”,属于服务端脚本文件本身的语法或逻辑错误。两条线排查方向完全不同,乱改会把能正常运行的服改废。

## 登录器与客户端侧脚本错误修复

打开登录器或游戏窗口就弹脚本错误,标题带“Internet Explorer 脚本错误”或“当前页脚本发生错误”,内容是行号加字符加对象为空,问题出在Windows系统的IE脚本内核上。传奇登录器的公告、列表、活动页面都是用WebBrowser控件渲染的,底层调的就是系统IE组件,哪怕你平时不用IE,这个内核依然在后台运行。

先做最快的一步。Win+R输入inetcpl.cpl打开Internet属性,切到高级栏,勾选“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(其他)”,取消勾选“显示每个脚本错误的通知”。这一步不能根治问题,但能先把弹窗压住让你进游戏。

真正的修复从清缓存开始。关掉游戏,进登录器目录删掉Cache、Temp、ScriptCache、UserData这几个文件夹。然后回到Internet属性,常规栏点删除浏览历史记录,临时Internet文件、Cookie、历史记录全部勾上删干净。很多玩家更新登录器之后开始弹脚本错误,就是因为旧的js和html缓存文件没被新文件覆盖,脚本执行时读到了过期对象。

如果清完缓存还弹,就需要重新注册脚本宿主DLL。用管理员权限打开CMD,依次执行这几条命令,每条回车看到“DllRegisterServer 成功”再执行下一条:

regsvr32 jscript.dll
regsvr32 vbscript.dll
regsvr32 scrrun.dll
regsvr32 mshtml.dll
regsvr32 actxprxy.dll
regsvr32 shdocvw.dll

Win10和Win11系统默认关闭了IE功能,需要去“启用或关闭Windows功能”里把Internet Explorer 11勾回来,WebBrowser控件才找得到脚本引擎。

杀毒软件误删登录器文件也是一个常见原因。去隔离区翻一下login.js、script.dat、Mir.exe这些文件有没有被拦截,有的话恢复并加入信任列表。整个登录器目录最好挪到纯英文无空格的路径下,中文路径会让脚本里的相对路径解析失败,返回空对象触发报错。右键登录器选属性,兼容性栏勾上“以管理员身份运行”和“Windows 7兼容模式”。

## 服务端M2脚本错误修复

M2Server控制台出现红色报错,格式是“ScriptError: 文件名 Line 行号: 错误类型”,拿到文件名和行号后直接去Mir200\Envir目录下找对应文件。用Notepad++打开,Ctrl+G跳转到报错行,重点检查五件事。

第一,段头标签[@Main]是否顶格写。前面有空格的话,引擎会把这一行当作普通文本跳过,[@Main]下面的所有逻辑都不会被执行。第二,#IF、#ACT、#SAY这些关键字是否独立成行,有没有和后面的命令挤在同一行。第三,括号和引号是不是英文半角,中文输入法打出来的全角符号引擎无法识别。第四,GOTO或CALL指向的@标签是否存在,跳转目标被删掉或者名字改了都会报错。第五,变量有没有先用MOV或VARINTEGER声明过,没声明就直接用的变量会导致逻辑中断。

编码格式是最容易被忽视的坑。所有QuestDiary和Market_Def目录下的.txt脚本必须保存为ANSI(GBK)格式。用记事本另存为UTF-8会带BOM头,引擎读到BOM头就把后面的中文全部当乱码处理,报“无法获取属性”或者“对象为null”。用Notepad++打开脚本,编码菜单选“转为ANSI”,保存覆盖。同时开启“显示空格与制表符”,把行尾多余的全角空格和制表符混用全部清掉。

报错“script error, load fail”并带路径的情况,是引擎在指定路径找不到被调用的脚本文件。比如报错指向\功能NPC\功能NPC\功能NPC.txt,去QuestDiary目录下看这个文件是不是真的存在。文件丢失且该功能不再使用的话,去MerChant.txt里找到调用这个NPC的行,删掉或者注释掉即可。如果文件还在但报错,检查文件名的大小写和报错路径是否完全一致,Windows虽然不区分大小写但引擎的路径匹配是严格按字符串来的。

CALL外部脚本报“文件未找到”或“标签未找到”,检查#CALL语句里的路径。传奇脚本的相对路径基准是QuestDiary目录,双反斜杠才是正确写法。中文文件夹名“登陆”和“登录”不是同一个目录,复制粘贴时最容易出这个错。目标文件里也确实要有[@领取]这个标签,文件存在但标签名对不上同样会报错。

## 装备脚本错误的修正

装备脚本错误的表现集中在三种:装备穿不上、属性不生效、显示异常。装备的穿戴条件、属性数值、特效触发都在QuestDiary下的装备脚本文件和StdItems.txt数据库里定义。

装备无法穿戴,先查穿戴条件脚本的语法。正确的格式是[@标签]开头,#IF后面跟条件,#ACT后面跟执行命令。常见错误是少了#IF关键字,条件判断直接暴露在标签下面,引擎把它当无效文本跳过。条件参数本身也有规范,职业名称要用引擎识别的标准写法,“战士”不要写成“武士”,“等级>=40”不要写成“等级>40”,差一个等号,刚好40级的玩家就穿不上。

属性不生效的情况,打开StdItems.txt找到对应装备的条目。字段之间必须用半角空格分隔,攻击属性的格式是“攻击=50-100”,不能写成“攻击=50100”也不能用逗号或波浪号代替横杠。同一行里不能出现重复的属性字段,比如两个“攻击=”并存,引擎取第一个还是报错取决于具体实现,删掉重复的。

装备显示异常或显示为未知物品,检查脚本里的图标ID参数。icon后面的数字要和客户端resource文件夹里的图标资源ID对应,ID错了就显示不出来或者显示成别的装备图标。装备名称字段不能有多余空格和特殊符号,服务端写“龙纹剑”,客户端资源文件里也必须是完全一致的“龙纹剑”,多一个空格就匹配不上。

特殊装备涉及穿戴触发技能或特效的,检查OnEquip事件绑定的技能命令拼写。比如火球术的触发命令写成了“火球树”,技能ID填错,特效就不会触发。找一件属性正常的同类装备做对照,对比两者的脚本结构,参数位置和命令格式的差异一眼就能看出来。

改完脚本后必须完全关闭M2Server再重新启动,不能只点重载。Mir200\Log目录下的ScriptCache.dat如果有就删掉,强制引擎重新编译所有脚本。客户端那边也删掉Cache和Temp目录,让客户端重新拉取物品信息。用小号测试,不要用GM号,GM权限可能绕过部分穿戴条件判定,测出来的结果不准确。