自己架设传奇M2Server脚本错误原因与排查解决方法

来源: 作者: 点击:
M2Server启动或运行期间弹出脚本错误,是架设过程中最常见的问题之一。脚本错误不等于整个服务端报废,大部分情况都能在十分钟内定位并修复。错误的本质只有两种:要么引擎找不到它要找的文件,要么找到了但看不懂里面写的指令。

### 文件缺失型错误:script error, load fail

这类报错的特征是在M2Server控制台看到类似“script error, load fail: \功能脚本\功能脚本.txt@领取奖励”的提示。报错信息里通常会直接给出缺失文件的完整路径,比如D:\Mirserver\Mir200\Envir\QuestDiary\功能脚本\功能脚本.txt。

处理方式分两步走。先按报错路径去文件夹里找对应文件,如果文件确实不存在,说明版本本身就不完整或者被删改过。这种情况在论坛下载的免费版本里非常普遍,发布者为了缩减体积会刻意清理掉用不到的脚本文件。解决办法是在MerChant.txt里找到调用该NPC的配置行直接删除,这样引擎启动时就不会再去加载那个不存在的脚本了。如果文件存在但还是报错,检查Merchant.txt里写的路径是否和实际存放路径完全一致,包括盘符、大小写和斜杠方向。

### 语法与逻辑型错误:脚本死循环、变量未定义

当M2Server提示“脚本死循环”时,问题出在goto跳转命令上。引擎默认的goto循环次数限制通常写在!Setup.txt文件里,参数叫ScriptGotoCountLimit,默认值一般是10。如果脚本里的循环跳转次数超过这个数,引擎就会主动中断并报错。可以在!Setup.txt里把这个值调大到50000以内,重启M2后一般能缓解。但如果调大之后还是频繁报错,说明脚本本身的逻辑就有问题,常见的有两种:一是一个#act下面放了多个goto命令指向不同标签,二是在GetRandomText这类赋值命令后没有先清空变量,导致空值情况下变量继承了上次的内容形成无限循环。

变量相关的报错则更琐碎。M2Server提示“变量未定义”或“变量类型不匹配”,说明脚本里调用了一个引擎压根不认识的变量名,或者把数字型变量和字符型变量混着用了。全局变量需要在Variables.txt里提前定义好,私人变量可以直接赋值使用。自定义变量还要区分HUMAN(玩家私有)和GLOBAL(全局)两种类型,类型标错了也会报错。脚本里写mov G88 5是给数字型变量赋值数字,写mov S0 屠龙刀是给字符型变量赋值文字,交叉赋值就会触发错误。

### 报错后直接修正的方式

M2Server控制台自带重读脚本的功能,修完脚本后不用重启整个服务端。在M2的命令输入框打@重读NPC,指定地图编号和NPC名称就能让修改立刻生效。如果修改的是登录脚本QManage.txt或功能脚本QFunction-0.txt,则需要用@重读登录脚本或@重读功能脚本这类命令。