先区分报错类型,一类是引擎启动时加载数据报错,一类是游戏运行过程中读写存档报错,还有一类是脚本、物品、怪物配置读取失败,不同类型处理方式不一样,优先保存备份,所有修复操作之前,把Mir200整个目录以及数据库文件复制一份单独存放,避免修复操作直接破坏原有数据。
启动M2的时候弹出加载物品数据库、怪物数据库、技能数据库失败,先打开DB工具,打开对应的db文件,查看表结构,检查最后一行数据,很多时候是末尾多了空行、缺少分隔符、字段数量不对,或者某一行参数填写了超出范围的数值。打开db逐条核对,删除空白行,修正异常参数,保存之后重新启动M2。如果db文件损坏无法打开,找到资源内原始备份db文件覆盖,覆盖之后重新调整之前修改过的装备、怪物参数。
存档类报错,玩家登录提示读取人物数据失败、存档损坏,先在服务端Mir200\Save文件夹找到对应账号或者角色的存档文件,这类存档文件记录角色等级、装备、金币、背包内容。先查看存档文件大小,文件大小为0代表存档已经损坏,无法直接修复,只能后台新建角色补发对应的物品。文件大小正常但是读取报错,用记事本打开存档文本,检查里面的换行、标记符,存档里面的标记字段缺失、乱码,会导致引擎解析中断,找到损坏的角色记录,直接删除这条存档记录,让玩家重新创建角色。
脚本数据报错,M2日志持续输出脚本读取错误,打开Mir200\Envir目录下面的脚本文件,检查脚本编码,引擎只识别ANSI编码,用记事本打开脚本,另存为的时候选择ANSI编码。检查脚本里面的标点,全角逗号、引号、括号都会造成解析失败,全部替换为半角符号,删除多余空行和无效注释。修改完成之后,在M2管理菜单执行重载脚本命令,观察日志是否还会报错,重载无效就重启M2。
地图数据加载报错,日志提示地图文件读取失败、地图索引错误,核对服务端Map文件夹内的地图文件,检查地图编号和地图参数配置表里面的编号是否对应,地图文件丢失直接放回原版地图文件。使用地图编辑器打开地图,检查地图门点、触发器坐标,坐标超出地图范围、重复门点会持续报错,删掉无效门点,重新保存地图文件。
网关和引擎交互数据异常,表现为玩家频繁掉线、发包报错、数据不同步,先把所有网关全部关闭,再重新依次启动,顺序为数据库、登录网关、角色网关、游戏网关、M2。查看网关日志,出现数据包长度异常,检查M2参数里面的数据包限制,调整最大发包长度,同时核对客户端补丁和服务端版本,版本不匹配会持续产生异常数据包。
共享数据库多分区场景,两区同时读写同一张数据表,容易出现数据锁死报错,报错之后先把所有分区全部关闭,等待数据库释放锁,再逐个启动。想要避免这类问题,二区单独使用一套数据库,不要共用角色存档表。
M2参数配置错误引发的数据异常,打开M2选项,核对游戏参数、爆率参数、刷新参数,数值填写负数、超出上限,引擎加载的时候直接报错。爆率文件Envir\MonItems里面的文件格式错误,比如爆率数值大于100、缺少换行,加载怪物爆率的时候提示数据出错,打开对应的爆率文本,修正格式,删除无效行,重载爆率文件。
修复完成之后,不要直接对外开放,先本地登录测试,新建角色,打怪、拾取物品、切换地图、下线重登,确认存档可以正常读写,没有新的报错日志。批量出现角色存档损坏,大多是异常关闭服务端导致,不要直接点窗口关闭,正常流程是先停止M2,再关闭网关,最后关闭数据库,强制结束进程极易损坏存档。
还有一类是索引缓存问题,引擎加载数据之后会在内存缓存索引,修改db、爆率、地图配置之后,缓存不会自动刷新,修改完文件必须重载或者重启M2,否则M2依旧读取旧的缓存数据,看起来像是修改没有生效,或者持续报错。
如果db文件大量损坏,没有备份,就需要对照原版模板,重新录入物品、怪物数据,不要直接导入格式不兼容的db文件,不同引擎的db结构不能混用,导入之后会直接触发全量数据报错。日常维护养成定时备份习惯,定期复制db、存档、数据库文件,备份文件标注时间,一旦出现数据出错,可以直接回滚到上一个正常版本,减少重建数据的工作量。
启动M2的时候弹出加载物品数据库、怪物数据库、技能数据库失败,先打开DB工具,打开对应的db文件,查看表结构,检查最后一行数据,很多时候是末尾多了空行、缺少分隔符、字段数量不对,或者某一行参数填写了超出范围的数值。打开db逐条核对,删除空白行,修正异常参数,保存之后重新启动M2。如果db文件损坏无法打开,找到资源内原始备份db文件覆盖,覆盖之后重新调整之前修改过的装备、怪物参数。
存档类报错,玩家登录提示读取人物数据失败、存档损坏,先在服务端Mir200\Save文件夹找到对应账号或者角色的存档文件,这类存档文件记录角色等级、装备、金币、背包内容。先查看存档文件大小,文件大小为0代表存档已经损坏,无法直接修复,只能后台新建角色补发对应的物品。文件大小正常但是读取报错,用记事本打开存档文本,检查里面的换行、标记符,存档里面的标记字段缺失、乱码,会导致引擎解析中断,找到损坏的角色记录,直接删除这条存档记录,让玩家重新创建角色。
脚本数据报错,M2日志持续输出脚本读取错误,打开Mir200\Envir目录下面的脚本文件,检查脚本编码,引擎只识别ANSI编码,用记事本打开脚本,另存为的时候选择ANSI编码。检查脚本里面的标点,全角逗号、引号、括号都会造成解析失败,全部替换为半角符号,删除多余空行和无效注释。修改完成之后,在M2管理菜单执行重载脚本命令,观察日志是否还会报错,重载无效就重启M2。
地图数据加载报错,日志提示地图文件读取失败、地图索引错误,核对服务端Map文件夹内的地图文件,检查地图编号和地图参数配置表里面的编号是否对应,地图文件丢失直接放回原版地图文件。使用地图编辑器打开地图,检查地图门点、触发器坐标,坐标超出地图范围、重复门点会持续报错,删掉无效门点,重新保存地图文件。
网关和引擎交互数据异常,表现为玩家频繁掉线、发包报错、数据不同步,先把所有网关全部关闭,再重新依次启动,顺序为数据库、登录网关、角色网关、游戏网关、M2。查看网关日志,出现数据包长度异常,检查M2参数里面的数据包限制,调整最大发包长度,同时核对客户端补丁和服务端版本,版本不匹配会持续产生异常数据包。
共享数据库多分区场景,两区同时读写同一张数据表,容易出现数据锁死报错,报错之后先把所有分区全部关闭,等待数据库释放锁,再逐个启动。想要避免这类问题,二区单独使用一套数据库,不要共用角色存档表。
M2参数配置错误引发的数据异常,打开M2选项,核对游戏参数、爆率参数、刷新参数,数值填写负数、超出上限,引擎加载的时候直接报错。爆率文件Envir\MonItems里面的文件格式错误,比如爆率数值大于100、缺少换行,加载怪物爆率的时候提示数据出错,打开对应的爆率文本,修正格式,删除无效行,重载爆率文件。
修复完成之后,不要直接对外开放,先本地登录测试,新建角色,打怪、拾取物品、切换地图、下线重登,确认存档可以正常读写,没有新的报错日志。批量出现角色存档损坏,大多是异常关闭服务端导致,不要直接点窗口关闭,正常流程是先停止M2,再关闭网关,最后关闭数据库,强制结束进程极易损坏存档。
还有一类是索引缓存问题,引擎加载数据之后会在内存缓存索引,修改db、爆率、地图配置之后,缓存不会自动刷新,修改完文件必须重载或者重启M2,否则M2依旧读取旧的缓存数据,看起来像是修改没有生效,或者持续报错。
如果db文件大量损坏,没有备份,就需要对照原版模板,重新录入物品、怪物数据,不要直接导入格式不兼容的db文件,不同引擎的db结构不能混用,导入之后会直接触发全量数据报错。日常维护养成定时备份习惯,定期复制db、存档、数据库文件,备份文件标注时间,一旦出现数据出错,可以直接回滚到上一个正常版本,减少重建数据的工作量。

