传奇服务端报 ![Exception] TPlayObject::GainExp-> 0 的含义与排查处理

来源: 作者: 点击:
这条信息出现在 M2Server 的运行日志里,意思是玩家对象在执行获得经验(GainExp)这个函数时触发了程序异常,后面的 -> 0 一般代表传入的经验值参数出了问题(例如算出来是0或者发生了数据溢出)。虽然单个出现通常不影响程序运行,但如果刷屏说明经验计算逻辑有毛病。

首要检查 M2 里的经验倍数设置。在 M2 选项-参数设置-经验里,杀怪经验倍数、行会经验倍数等不要填得过大,有的引擎上限很低,填几万倍会导致整数溢出或直接算出 0,从而抛出这个异常。把它改回常见的 1-100 倍之间试试。

检查怪物数据库(Monster.DB)里对应怪物的经验值字段。如果手抖填了负数,或者填了一个超大的异常数值,引擎在计算时会出错并触发该提示。挨个核对最近改过的怪物经验,恢复成正常正整数。

查看是否使用了自定义脚本给予经验,比如用 CalcVar 计算变量后给 EXP,或者给的经验公式是 怪物经验*倍数,若公式里变量为空、除法分母为 0,也会让经验值变成 0 或非法,进而报错。检查 QuestDiary 或 QFunction 里涉及 GiveExp、CalcExp 的脚本段。

部分版本的引擎在玩家满级后继续杀怪给经验时,如果满级处理代码写得不严谨,也会反复弹出这个 0 值异常。可以在 M2 参数里设置满级不再获得经验,或者检查升级经验文件(Exps.ini 或 !Setup.txt 里的等级经验行)是否设置到了正确的等级上限,防止越界计算。

若是某张特定地图或某种特定怪物打死必出这行字,就重点查那张地图的刷怪文件和该怪物的经验设定;若是所有人杀任何怪都偶尔出,大概率是全局经验倍数或某个全局脚本变量污染导致。改完对应数值,重读脚本或重启 M2 后观察日志是否还刷。