脚本运行错误不是一个单一问题,它至少分属三个完全不同的层面:浏览器内核层面的脚本执行失败、传奇登录器与客户端层面的脚本报错、传奇服务端M2引擎层面的脚本红字。不同层面的报错格式、触发场景、修复路径完全不同,把这三类混在一起处理只会浪费时间。
## 浏览器与客户端层面的脚本错误
这类错误的典型表现是打开登录器、游戏窗口或网页时弹出警告框,标题带“Internet Explorer 脚本错误”或“当前页的脚本发生错误”,内容包含“对象为null”“对象不支持此属性或方法”“缺少对象”等字眼。传奇登录器的公告、列表、活动页面都依赖系统IE的WebBrowser控件渲染,底层调用的是JScript和VBScript引擎。
最直接的处理方式是压制弹窗而非修复根源。打开Internet属性,高级栏中勾选“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(其他)”,取消勾选“显示每个脚本错误的通知”。这能让弹窗不再出现,但不解决脚本执行失败本身。
清理缓存是更实质的一步。关闭游戏后删除登录器目录下的Cache、Temp、ScriptCache文件夹,然后在Internet属性中删除浏览历史记录、临时Internet文件、Cookie。旧的JS文件与更新后的页面代码不兼容时,脚本会尝试访问已被删除的对象,触发null报错。
如果清缓存后仍然报错,需要重新注册脚本宿主组件。用管理员权限打开CMD,依次执行regsvr32 jscript.dll、regsvr32 vbscript.dll、regsvr32 mshtml.dll、regsvr32 scrrun.dll,每条命令看到“DllRegisterServer 成功”再执行下一条。Win10和Win11默认关闭了IE功能,需要在“启用或关闭Windows功能”中把Internet Explorer 11勾选回来,WebBrowser控件才能找到脚本引擎。
杀毒软件误删登录器文件也是常见原因。去隔离区检查login.js、script.dat、Mir.dat等文件是否被拦截,恢复后加入信任列表。整个客户端目录最好放在纯英文无空格路径下,中文路径会导致脚本相对路径解析失败。右键登录器选属性,勾选“以管理员身份运行”和“Windows 7兼容模式”。
## 服务端M2脚本错误的定位与修正
M2Server控制台出现红色报错时,报错格式通常包含文件名和行号,例如“ScriptError: QuestDiary\QFunction-0.txt Line 56: Unknown command”。拿到这两个信息后直接定位文件,用Notepad++打开并按Ctrl+G跳转到对应行号。
重点检查五个方面。第一,段头标签[@Main]必须顶格写,前面有空格的话引擎会跳过整段逻辑。第二,#IF、#ACT、#SAY等关键字是否独立成行,有没有和后续命令挤在一起。第三,括号和引号必须是英文半角,中文输入法打出的全角符号引擎无法识别。第四,GOTO或CALL指向的@标签是否存在,跳转目标被改名或删除都会报错。第五,变量有没有先用MOV或VARINTEGER声明过,未声明直接使用会导致逻辑中断。
编码格式是最容易被忽视的坑。QuestDiary和Market_Def目录下的所有.txt文件必须保存为ANSI或GBK格式。用记事本另存为UTF-8会带BOM头,引擎读到BOM头会把后面的中文当作乱码处理,报“无法获取属性”或“对象为null”。用Notepad++打开脚本,编码菜单选“转为ANSI”,保存覆盖。同时开启“显示空格与制表符”,把行尾多余的全角空格和制表符混用清理干净。
报错“文件未找到”并附带路径的情况,是引擎在指定位置找不到被调用的脚本文件。检查#CALL语句中的相对路径,传奇脚本的基准目录是QuestDiary,双反斜杠才是正确写法。中文文件夹名“登陆”和“登录”不是同一个目录,复制粘贴时最容易出这个错。目标文件里也必须有对应的@标签,文件存在但标签名对不上同样会报错。
变量重复定义是传奇单机版的高频报错。报错提示“变量赠送记录啊已存在,变量类型:HUMAN,脚本命令:VAR”时,说明QManage.txt中同一个HUMAN变量被VAR命令重复创建。HUMAN类型变量用于记录单个玩家的数据,重复定义会导致引擎无法识别。打开QManage.txt,搜索报错中的变量名,删除重复的VAR语句,只保留一处。如果变量名包含中文,建议改为英文大写如ZSJL,同时修改所有调用该变量的语句保持一致。
ADDSKILL命令参数缺失也是常见问题。该命令需要三个必填参数:技能名称、技能等级、技能熟练度。报错显示只填了两个参数时,在第三个位置补充熟练度数值,建议填1000到5000确保技能可正常使用。技能名称的大小写需要与引擎识别的名称完全一致。
修改完成后必须完全关闭M2Server再重新启动,不能只点重载。Mir200\Log目录下的ScriptCache.dat文件如果存在就删掉,强制引擎重新编译所有脚本。
## 装备DB与触发脚本的错误修正
装备穿不上、属性不生效、显示异常,根源集中在StdItems.DB或StdItems.txt的字段配置和QFunction触发脚本的语法上。
用DBC2000或记事本打开StdItems数据库文件,逐行核对报错装备。Name字段不能有前后空格或不可见字符,必须与脚本调用完全一致。StdMode(标准模式)字段决定装备类型,武器=5,衣服=10,项链=2,手镯=3,戒指=4,鞋子=6,腰带=7,填错直接导致加载失败。AC、MAC、DC、MC等属性字段必须是纯整数,空值填0,不能填字母或负号。NeedJob职业限制字段中,1代表战士,2代表法师,4代表道士,7代表通用。
QFunction.txt或ItemScript.txt中的穿戴触发标签也容易出错。标签名拼写错误、#IF和#ACT未成对出现、缺少BREAK导致死循环、引用的技能ID超出Magics.txt范围,都会触发报错。改完文件编码必须转为ANSI,UTF-8带BOM会导致中文乱码和脚本解析失败。
如果上述排查都没有找到问题,用管理员CMD执行sfc /scannow修复系统文件,检查磁盘错误。新建一个本地管理员账户测试登录器能否正常运行,如果新账户正常,说明原账户的配置文件已损坏。

