传奇运行日志出现天关统领初始化失败与QFunction脚本报错排查处理方案

来源: 作者: 点击:
日志里最先出现的报错是天关统领Merchant Initalize fail,提示m.PEnvir=nil,这个报错代表对应的NPC环境对象没有正常实例化,服务端加载这个NPC的时候找不到可用的环境句柄,紧接着两条脚本报错分别来自老兵目录下的版本说明员-3.txt第967行,还有QFunction-0.txt第1938行,蛮荒炼武器老板这条提示属于读取数据记录为空,不属于报错,只是没有加载到武器升级配置记录,不用优先处理。
先处理天关统领初始化失败的问题,打开NPC文本文件,先核对NPC头部定义格式,检查NPC名称、形象代码、地图编号、坐标参数有没有写错,很多时候复制粘贴脚本会出现不可见特殊字符,换行符错乱也会导致环境对象初始化失败。检查这个NPC绑定的脚本段,有没有在入口位置调用环境变量,或者提前调用了需要环境对象支持的函数,在NPC初始化阶段,部分内置变量还没有完成加载,直接调用就会出现m.PEnvir=nil。如果这个NPC已经不再使用,可以直接注释掉或者删除对应的NPC配置行,重启服务端之后这条提示就不会继续弹出。
接下来处理Market_Def目录下版本说明员-3.txt第967行脚本错误,定位到指定行数,查看该行以及前后几行代码,重点核对语法格式,检查括号、分号、跳转标签、[@main]、[@return]这类标记是否配对,变量定义有没有缺失,跳转指令指向的标签是否存在,不要出现标签名称大小写不一致、多打空格的情况。部分脚本在编写时会直接读取行会、城堡数据,如果读取行会数据的逻辑没有做空值判断,当行会信息读取数量为0的时候,直接执行后续操作就会触发异常,日志里显示本次启动读取0个行会信息,这个场景很容易引发关联报错。
然后处理QFunction-0.txt第1938行报错,这个文件是全局功能触发脚本,大部分是拾取、登录、死亡、对话、定时器这类全局触发逻辑,出错的位置要查看触发条件,检查有没有调用不存在的自定义函数、读取未定义的文本文件、读取数据表时缺少容错判断。QFunction文件行数多,改动的时候很容易误删符号,或者复制其他脚本片段带入不兼容语法,修改之后不要直接重载NPC,优先重启M2引擎测试,重载脚本有时候不会刷新全局脚本的运行状态,报错会持续复现。
蛮荒炼武器老板读取0条升级武器数据记录,只代表武器升级配置文件内没有录入记录,打开对应武器升级配置文档,确认文件路径和脚本里填写的读取路径保持一致,如果不需要炼武器功能,不用修改,保留原样不会影响服务端稳定运行,想要启用这个功能,按照格式添加武器升级条目即可。
排查的通用步骤可以按照顺序执行,第一步备份Envir整个目录下的Market_Def文件夹,防止修改脚本之后无法回滚。第二步打开报错对应的两个脚本文件,跳转到报错行,清理行内的全角符号、多余空格、换行乱码,核对脚本语法。第三步检查脚本内读取行会、城堡信息的代码段,增加空值判断,读取数量为0的时候跳过后续逻辑,避免空调用。第四步检查天关统领NPC配置,确认脚本路径正确,不存在重复注册同一个NPC。第五步保存所有修改文件,关闭M2进程,重新启动服务端,观察启动日志,查看报错信息是否消失。
还有一类容易忽略的诱因,脚本编码格式问题,记事本直接保存文本默认编码容易出现异常,修改脚本的时候使用文本工具打开,另存为ANSI编码,不要使用UTF8编码,编码不匹配会造成引擎解析脚本错位,报错行号和实际出错位置对不上,反复修改对应行数也无法解决问题。如果修改指定行之后报错行号发生变化,基本就是编码或者隐藏字符导致解析偏移,需要把整个脚本复制到干净的文本窗口重新整理格式。
完成修改启动之后,如果日志不再弹出脚本错误提示,代表问题已经修复,如果报错行号变动,继续顺着新行号定位,优先排查语法和变量调用逻辑,全局脚本文件改动后,每次调整都需要完整重启引擎,只重载NPC脚本无法加载QFunction内的改动内容。