脚本报错的表现分为多种,点击NPC直接闪退、NPC对话空白、功能按钮无效、M2控制台弹出红色错误提示、触发功能时人物被断开连接,出现这类现象优先查看M2运行窗口输出日志,日志会标注出错脚本文件名、报错行号,依据提示可以快速定位问题文件,不要盲目批量修改全部脚本文件。
文件路径错误是新手最高发问题,QuestDiary下面的脚本被Npc.txt调用,如果Npc.txt里面填写的脚本文件名、路径和实际目录不匹配,大小写、下划线、符号不一致,引擎读取不到对应文本,点击NPC直接报错退出。打开Mirserver\Mir200\Envir\Npc.txt,核对每一条NPC条目末尾的脚本路径,复制文件名到文件夹核对,文件名不要带中文特殊符号,服务端整体存放路径建议使用纯英文目录,文件夹名称带中文会出现读取失败。
脚本编码格式错误,使用记事本之外的编辑软件修改脚本,保存成UTF‑8编码,传奇引擎只识别ANSI、GB2312编码格式,编码不匹配会出现乱码、标签识别失败、部分命令直接失效。使用编辑器打开脚本,把编码转换为ANSI格式再保存,修改完成之后,在M2面板执行重新加载NPC脚本,不要直接进游戏测试,内存内还保留旧脚本缓存,改动不会生效。
脚本语法错误种类很多,[@main]是NPC对话入口标签,如果漏写[@main],NPC点击之后没有任何对话弹出。#IF条件判断后面必须搭配#ACT执行段或者#ELSEACT否定分支,不能单独写#IF没有后续指令。GOTO跳转的标签,如果脚本内不存在该标签名称,点击NPC直接踢掉人物,也就是点按钮就闪退。CALL调用外部脚本,如果被调用的脚本丢失或者标签缺失,执行到该行直接报错。每一段脚本末尾尽量增加BREAK,防止脚本无限制向下穿透执行其他代码段。
变量书写错误,数值变量和字符变量命令不能混用,CHECKVAR用于数字比对,字符内容比对要使用EQUAL命令,混用之后条件判断永远不生效,M2日志会提示参数不正确。局部变量、全局变量编号不要超出引擎允许范围,变量使用前尽量做清零操作,旧的残留变量数值会干扰功能逻辑,典当、夫妻、记录人物数据的脚本大多容易出现变量越界问题。
引擎版本不兼容,旧版本服务端导入别的版本的脚本,部分命令函数新版本支持,老引擎不识别,或者老脚本语法宽松,新版引擎校验严格,原先可以运行的脚本直接报语法错误。不要跨引擎直接复制脚本,不同系列引擎命令语法存在差异,比如GOM脚本不能直接放到HERO引擎运行,强行导入会出现大量报错,要么找对应引擎版本脚本,要么逐行改写命令语法适配当前引擎。
还有一类间接脚本报错,不是txt脚本本身出错,而是脚本调用物品ID、怪物ID、地图编号,数据库DB里面不存在对应编号。脚本写了Give 骨玉,StdItems.DB里面骨玉ID写错,执行这条指令就直接断开角色。脚本写了刷出某只怪物,Monster.DB没有该怪物记录,刷怪动作触发时M2报怪物数据错误。脚本执行传送,填写地图编号在MapInfo.txt没有注册,点击直接踢出游戏。遇到这类报错,核对数据库、MapInfo配置,保证脚本调用的编号真实存在。
文件缺失或者权限拦截,QuestDiary里面脚本被杀毒软件隔离删除,表面文件夹看着正常,实际文件已经被移除,加载脚本的时候提示文件找不到。部分系统对Mirserver文件夹做读写限制,脚本保存修改无法写入磁盘,修改完依旧运行旧代码。关闭安全软件,把整个服务端目录添加信任,确认脚本文件完整存在。
排错实操步骤,完整备份Mirserver整套目录,关闭全部服务端程序,根据M2日志提示定位脚本文件。打开对应脚本,优先检查入口标签、跳转标签、#IF和#ACT配对,检查编码格式,核对调用的物品、怪物、地图编号。修改保存之后,启动DBServer,再启动M2,执行重新加载NPC、重新加载脚本,进游戏复现报错现象。修改一处测试一处,不要一次性改动大量代码,方便定位到底哪一行产生异常。
遇到找不出具体行号的隐性故障,可以使用注释排查法,把脚本大部分内容使用分号注释,只保留简单弹窗语句,测试NPC是否正常,再逐段取消注释,测试到哪一段出现报错,就确定错误代码位置。有些脚本不会在M2窗口弹出提示,但是功能异常,可以打开M2目录下Error日志文本,里面记录全部后台错误信息,查看详细报错记录定位根源。
单机版本修改脚本,不要直接复制网络上其他版本完整脚本直接覆盖,不同版本数据库ID、地图编号、NPC坐标各不相同,直接覆盖会引发一连串连锁报错,参考命令写法,复制片段再适配自己当前版本的编号参数。修复完成之后,反复多次测试对应NPC全部功能选项,确认点击、提交、传送、领取全部流程不会闪退、不会失效。
1.76传奇单机脚本报错M2提示异常完整排查定位与修复实操教程
来源:
作者:
点击:

