架设运行服务端弹出脚本错误,大多是M2引擎读取脚本文件失败,问题集中在脚本编码、语法写错、文件路径缺失、数据库不匹配、换行符异常、缺少调用文件这几类,先区分报错弹窗上的提示文字,针对性定位问题。
先看M2控制台报错信息,报错行会标注脚本文件名和行数,例如提示Merchant.txt、QFunction-0.txt、QManage.txt或者怪物、物品脚本,直接定位对应的文本,不要盲目批量替换全部脚本。打开M2引擎日志,日志会记录完整报错堆栈,缺少标签、少括号、变量命名错误、函数调用不存在都会在日志内显示。
文件编码问题是最高发故障,脚本文件必须使用ANSI编码,很多人直接用记事本保存成UTF-8,中文注释会产生乱码,引擎读取的时候直接判定脚本错误。修复方法,右键脚本文件选择打开方式,使用系统记事本打开,点击另存为,底部编码下拉框选择ANSI,覆盖原文件,重启M2引擎。不要使用WPS直接编辑脚本,WPS会自动添加隐藏格式标记,破坏脚本语法。
脚本语法错误,每一条指令格式有固定写法,少写分号、漏写括号、引号不配对、中英文符号混用,都会触发报错。所有脚本指令符号必须使用英文半角符号,中文逗号、中文引号、中文括号,引擎无法识别。条件判断语句,[@main]、[@take]、[@check]标签不能重复,同一个脚本内不能出现两个同名标签。变量名称大小写敏感,自定义变量前后写法不一致,会出现读取异常。删除多余的空行,部分引擎会把大量空白行判定为无效代码,精简多余空行再保存。
文件路径与文件缺失问题,M2读取脚本有固定目录,默认放在Mir200文件夹下。如果脚本引用外部文件,被调用的txt脚本移动、改名、删除,就会报找不到文件的脚本错误。检查QManage、QFunction、NPC脚本、怪物脚本、物品脚本的引用路径,路径不要包含中文、空格、特殊符号,文件夹名称只用英文和数字。手动复制脚本文件的时候,没有把配套附属脚本一起复制,只复制主脚本,缺少子脚本,启动M2直接报错。
数据库匹配问题,DB数据库物品、怪物编号和脚本内调用编号不一致,脚本写的物品ID在DB里面不存在,读取物品脚本的时候触发报错。检查物品数据库StdItems.DB,怪物数据库Monsters.DB,核对脚本里写的物品编号、怪物编号,不存在的编号要么修改脚本,要么在数据库内补齐对应记录。新增自定义物品或者怪物之后,没有重启数据库服务,M2读取不到新增数据,执行脚本指令时报错。
换行符异常,Windows记事本换行符和Linux换行符不同,跨设备复制脚本,会出现换行错乱,一行代码被拆分成多行,引擎解析失败。处理方式,用记事本打开脚本,全部复制内容,新建空白记事本粘贴,保存替换原文件,重置换行格式。直接复制网页、文档里的脚本代码,会附带隐藏不可见字符,这类隐藏字符肉眼看不到,但是引擎解析直接报错,复制之后手动删除多余不可见字符。
引擎版本和脚本不兼容,GOM、GEE、HERO引擎的脚本语法不通用,一套脚本不能直接跨引擎使用。GOM的函数放到GEE引擎运行,会提示未知指令,出现脚本错误。拿到脚本先确认引擎类型,下载对应引擎配套的脚本模板,不要混用不同引擎的脚本。引擎版本过低,脚本使用新版本新增函数,旧引擎不支持该指令,升级引擎或者修改脚本,删掉不支持的函数。
NPC脚本报错单独处理,Merchant.txt记录NPC坐标、外观、脚本文件名,这里填写的脚本名称写错,或者脚本文件不存在,M2加载NPC脚本提示错误。打开Merchant.txt,核对每一行NPC脚本文件名,大小写保持一致,检查NPC脚本文件是否放置在Envir\Npc_def目录。NPC脚本内部标签缺失,缺少[@main]入口标签,加载NPC直接报错。
物品触发脚本、怪物脚本报错,定位Envir目录下的ItemDesc、MonAttack脚本,检查触发段标签。怪物脚本里面的攻击触发、死亡触发,函数参数数量不对,参数多写或者少写,引擎执行到该行直接中断报脚本错误。测试的时候可以临时注释掉可疑代码,在代码行前面加;分号注释,逐段注释,重启M2,找到触发报错的那一行,单独修改,不用一次性重写全部脚本。
权限与读取故障,服务端文件放在桌面、中文目录,例如D:\传奇服务端,文件夹中文名称,部分引擎读取文件会异常,建议把服务端放到D:\MirServer纯英文路径。文件只读属性,引擎无法写入脚本缓存,右键脚本文件属性,取消只读勾选。杀毒软件隔离脚本文件,文件被隔离之后M2读取不到,把MirServer整个目录加入白名单,恢复被隔离的脚本文件。
调试步骤,先关闭M2引擎,不要在引擎运行状态修改脚本,修改脚本必须关闭M2,保存文件之后重新启动。出现报错,先看M2提示的文件名+行数,打开对应脚本,定位该行。优先排查符号、编码、不可见字符,再核对编号、引用文件。分段注释脚本,定位出错代码,找到之后修改语法。修改完成,清空M2缓存,重启服务端测试。
常见误区,修改脚本之后不重启M2,直接进游戏测试,改动不会生效,依旧报旧错误。使用在线文档、WPS编辑脚本,引入隐藏格式字符。脚本内中文注释过多,不做ANSI转码,乱码引发解析失败。跨引擎直接导入脚本,忽略引擎语法差异。
如果修复后M2启动不再报脚本错误,进游戏测试NPC对话、物品拾取、怪物触发,部分脚本加载正常,但是执行触发时报错,属于运行时脚本错误,这类不是启动加载报错,需要在游戏内触发对应功能,查看M2实时日志,定位触发阶段的代码问题。

