yyl
2 天以前 ff0163176f59bdd935543b23fabd2ea777603f4a
125 战斗 修复血量溢出时有护盾的问题
2个文件已修改
30 ■■■■ 已修改文件
Main/System/Battle/BattleUtility.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/BattleHeroInfoBar.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleUtility.cs
@@ -399,11 +399,13 @@
                if (hurter.fromShieldValue >= currentHitDamage)
                {
                    hurter.toHp = hurter.fromHp;
                    target.teamHero.curHp = hurter.toHp; // 保持一致性
                }
                else
                {
                    long remainingDamage = currentHitDamage - hurter.fromShieldValue;
                    hurter.toHp = Math.Max(0, hurter.fromHp - remainingDamage);
                    target.teamHero.curHp = hurter.toHp; // 保持一致性
                }
            }
        }
@@ -472,7 +474,8 @@
        caster.toHp = casterToHp;
        caster.toShieldValue = casterToShield;
        skillBase.caster.teamHero.curHp = caster.toHp; // 保持一致性
        return caster;
    }
    
Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -94,13 +94,20 @@
        long curHp = battleObject.teamHero.curHp;
        long maxHp = battleObject.teamHero.maxHp;
        
        // 记录设置前的护盾值
        float oldShield1Value = sliderShield1.value;
        float oldShield2Value = sliderShield2.value;
        // 护盾1的值 = min(当前血量 + 护盾值, maxHp) / maxHp
        float shield1Value = maxHp > 0 ? Mathf.Min((float)(curHp + shieldValue), (float)maxHp) / (float)maxHp : 0;
        // 护盾2的值 = max(当前血量 + 护盾值 - maxHp, 0) / maxHp
        float shield2Value = maxHp > 0 ? Mathf.Max((float)(curHp + shieldValue - maxHp), 0f) / (float)maxHp : 0;
        
        sliderShield1.value = shield1Value;
        sliderShield2.value = shield2Value;
        sliderShield1.value = shieldValue > 0 ? shield1Value : 0;
        sliderShield2.value = shieldValue > maxHp ? shield2Value : 0;
        // 打印设置护盾时的状态
        // Debug.LogError($"[BattleHeroInfoBar.SetBattleObject] 设置护盾 - curHp: {curHp}, shieldValue: {shieldValue}, maxHp: {maxHp}, shield1前: {oldShield1Value}, shield1后: {shield1Value}, shield2前: {oldShield2Value}, shield2后: {shield2Value}");
    }
    
    public void SetActive(bool active)
@@ -131,13 +138,23 @@
        long curHp = battleObject.teamHero.curHp;
        long maxHp = battleObject.teamHero.maxHp;
        
        // 记录设置前的护盾值
        float oldShield1Value = sliderShield1.value;
        float oldShield2Value = sliderShield2.value;
        // 护盾1的值 = min(当前血量 + 护盾值, maxHp) / maxHp
        float shield1Value = maxHp > 0 ? Mathf.Min((float)(curHp + shieldValue), (float)maxHp) / (float)maxHp : 0;
        // 护盾2的值 = max(当前血量 + 护盾值 - maxHp, 0) / maxHp
        float shield2Value = maxHp > 0 ? Mathf.Max((float)(curHp + shieldValue - maxHp), 0f) / (float)maxHp : 0;
        
        sliderShield1.value = shield1Value;
        sliderShield2.value = shield2Value;
        sliderShield1.value = shieldValue > 0 ? shield1Value : 0;
        sliderShield2.value = shieldValue > maxHp ? shield2Value : 0;
        UpdateHP(curHp, curHp, maxHp, false);
        // 打印刷新护盾时的状态
        // Debug.LogError($"[BattleHeroInfoBar.RefreshBuff] 设置护盾 - curHp: {curHp}, shieldValue: {shieldValue}, maxHp: {maxHp}, shield1前: {oldShield1Value}, shield1后: {shield1Value}, shield2前: {oldShield2Value}, shield2后: {shield2Value}");
    }
    
    /// <summary>