yyl
6 天以前 fd865ddcd03a76ca2fb2794b2a8639e33492c661
125 战斗 bug堆栈的一些防错
3个文件已修改
65 ■■■■ 已修改文件
Main/System/Battle/BattleField/BattleField.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleUtility.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/BattleHeroInfoBar.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs
@@ -657,7 +657,7 @@
        foreach (var obj in blueTeam)
        {
            if (obj is MinggeBattleObject)
            if (obj == null || obj is not HeroBattleObject)
            {
                continue;
            }
@@ -674,7 +674,7 @@
        {
            foreach (var obj in blueTeam)
            {
                if (obj is MinggeBattleObject)
                if (obj == null || obj is not HeroBattleObject)
                {
                    continue;
                }
Main/System/Battle/BattleUtility.cs
@@ -114,16 +114,25 @@
        string result = string.Empty;
        //  如果是闪避或免疫 则只显示对应文字,不显示数字
        if (damage.IsType(DamageType.Dodge) || damage.IsType(DamageType.Immune) || damage.IsType(DamageType.CompletelyDodge))
        if (config != null)
        {
            result += (char)config.prefix;
            //  如果是闪避或免疫 则只显示对应文字,不显示数字
            if (damage.IsType(DamageType.Dodge) || damage.IsType(DamageType.Immune) || damage.IsType(DamageType.CompletelyDodge))
            {
                result += (char)config.prefix;
            }
            else
            {
                result = ConvertToArtFont(config, damage.damage);
            }
        }
        else
        {
            result = ConvertToArtFont(config, damage.damage);
            result = damage.damage.ToString();
            Debug.LogError("找不到对应的伤害数字配置 attackType : " + damage.attackType);
        }
        return result;
    }
Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -295,7 +295,49 @@
    /// </summary>
    public void UpdateDamage(BattleDmgInfo dmgInfo)
    {
        // 加入队列
        // 验证数据有效性,防止空引用
        if (dmgInfo?.battleHurtParam == null)
            return;
        // 检查受击者对象有效性
        if (dmgInfo.battleHurtParam.hurter?.hurtObj != null)
        {
            var hurtObj = dmgInfo.battleHurtParam.hurter.hurtObj;
            // 检查对象是否已被销毁
            if (hurtObj == null || hurtObj.Equals(null))
            {
                Debug.LogWarning($"[UpdateDamage] 受击者对象已被销毁,跳过伤害更新");
                return;
            }
            // 验证是否能安全获取 maxHp(间接检查 HeroBattleObject 内部状态)
            if (hurtObj is HeroBattleObject && hurtObj.GetMaxHp() <= 0)
            {
                Debug.LogWarning($"[UpdateDamage] 受击者 maxHp 无效,跳过伤害更新");
                return;
            }
        }
        // 检查施法者对象有效性
        if (dmgInfo.battleHurtParam.caster?.casterObj != null)
        {
            var casterObj = dmgInfo.battleHurtParam.caster.casterObj;
            // 检查对象是否已被销毁
            if (casterObj == null || casterObj.Equals(null))
            {
                Debug.LogWarning($"[UpdateDamage] 施法者对象已被销毁,跳过伤害更新");
                return;
            }
            // 验证是否能安全获取 maxHp
            if (casterObj is HeroBattleObject && casterObj.GetMaxHp() <= 0)
            {
                Debug.LogWarning($"[UpdateDamage] 施法者 maxHp 无效,跳过伤害更新");
                return;
            }
        }
        // 数据验证通过,加入队列
        damageUpdateQueue.Enqueue(dmgInfo);
    }