一次回合制游戏的bug修复记录
今天遇到一个bug,很有意思。
玩家通过吃宠物获得了超级重生技能(大概率击杀后立刻复活)
被敌人套上减伤害的debuff之后,使用多段攻击技能攻击玩家。玩家被击杀,自动复活,又被击杀,又复活,又被击杀,这次没复活,玩家死了。
玩家死亡之后退出战斗,结果发现自己在战斗过程中被套上的debuff没有清除,依旧存在。
============以下是分析============
查看相关战斗逻辑后发现,系统会在玩家死亡后执行卸载各种效果的操作
但是会检查玩家状态,如果玩家处于死亡后仍旧停留在战斗画面状态
则不会清除玩家的各种效果 ,也就是说不会重置玩家的debuff。
然后在查看超级重生技能的逻辑后发现,在重生技能概率生效时
首先会修改玩家状态为上文中的死亡后不退场状态
然后执行加血操作,这样就完成了复活的逻辑。
但是在逻辑执行结束之后,并没有取消这个状态。
大概知道了流程,也就有了修复方法。
目前想到的方案是在玩家死亡后调用卸载效果函数时进行额外的检测
如果玩家处于死亡后不退场状态,但是已经没有存活队友时,仍旧执行对效果的卸载
之前还想过在触发复活效果之后在下一回合开始前清除死亡后不退场效果
但是在遇到类似这次的情况下,仍旧会出现问题。遇到会在一次行动回合中进行多次攻击结算的技能伤害,又会产生这次的bug。
因此最后决定采用第一种方案,在死亡后执行的处理函数中进行额外的判断。
本来还考虑过在检测到玩家死亡同时存在死亡后不退场状态同时场上无存活队友时,把玩家的状态进行重置,不过又考虑到在战斗开始时,战斗模块会自动重置所有玩家的状态,所以这一步不处理也无妨。
同时在查看逻辑代码的时候,感觉这个bug可能不是偶发性情况。按照逻辑来看,只要是执行了复活之后,玩家都处于死亡后不退场的状态,如果这个时候遭到了非被动技能的debuff技能攻击,那么就会出现和这次一样的情况。
复现条件还是很宽松的。同时因为技能效果表现多种多样,不能够完全保证让debuff都设置为被动效果,所以可能还会有其它类似的组合条件出现。
从业时间尚短,经验欠缺,很多方面难免考虑不够周全。如果大家有其他思路,期待大家留言,一起交流。