From 2d3a60767d0cd69c8dec97e39937bcd0c667be1c Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 12 十一月 2025 18:54:57 +0800
Subject: [PATCH] 125 战斗 血条&护盾1护盾2表现

---
 Main/System/Battle/Skill/SkillBase.cs |  163 ++++++++++++++++++++++++-----------------------------
 1 files changed, 74 insertions(+), 89 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 0caf1c4..7fb0d75 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -489,25 +489,6 @@
     // 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
     protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
     {
-        // ============ 绗竴姝�:璁$畻浼ゅ鍒嗗竷 ============
-        List<int> damageDivide = new List<int>();
-        if (_hitIndex == 0 && skillConfig.DamageDivide.Length <= 0)
-        {
-            damageDivide.Add(10000);
-        }
-        else
-        {
-            if (skillConfig.DamageDivide.Length <= _hitIndex)
-            {
-                Debug.LogError("鎶�鑳戒激瀹冲垎甯冮厤缃敊璇� skillId: " + skillConfig.SkillID + " hitIndex: " + _hitIndex);
-                damageDivide.Add(10000);
-            }
-            else
-            {
-                damageDivide = skillConfig.DamageDivide[_hitIndex].ToList();
-            }
-        }
-
         // 璁$畻鎬讳激瀹冲拰鍒嗘浼ゅ鍒楄〃
         long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
         List<long> damageList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalDamage);
@@ -515,29 +496,21 @@
         long totalSuckHp = suckHp;
         List<long> suckHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalSuckHp);
 
+        long totalReflectHp = hurt.BounceHP;
+        List<long> reflectHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalReflectHp);
 
-        // ============ 绗簩姝�:鍒锋柊瀹為檯琛�閲� ============
-        long fromHp = target.teamHero.curHp;
-        
-
-
-        // ============澶勭悊鍙嶄激 ===============
-        //  涔熻鎸夋瘡涓�鍑诲钩鍧囩畻 鏈�鍚庤琛ラ綈浼ゅ
-
-        long reflectHp = hurt.BounceHP;
-
-
-        List<long> reflectHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, reflectHp);
-        // long currentSuckHp = suckHp / tagUseSkillAttack.HurtCount;
-
-        // 璁$畻褰撳墠杩欎竴鍑荤殑瀹為檯浼ゅ(鎵�鏈夊垎娈典激瀹充箣鍜�)
+        // 璁$畻褰撳墠杩欎竴鍑荤殑鍚勯」鏁板��
         long currentHitDamage = 0;
         foreach (long dmg in damageList)
         {
             currentHitDamage += dmg;
         }
 
-
+        long currentHitSuckHp = 0;
+        foreach (long suck in suckHpList)
+        {
+            currentHitSuckHp += suck;
+        }
 
         long currentHitReflectHp = 0;
         foreach (long reflect in reflectHpList)
@@ -545,54 +518,74 @@
             currentHitReflectHp += reflect;
         }
 
-        long shieldValue = target.buffMgr.GetShieldValue();
-
-        long remainSheild = shieldValue - currentHitDamage;
-
-        long toShieldValue = Math.Max(0, shieldValue - currentHitDamage);
-
-        long shieldRecieveDamage = shieldValue - toShieldValue;
-
-        // if (shieldValue > 0 && remainSheild >= 0)
-        // {
-        //     currentHitDamage = 0;
-        //     target.buffMgr.ReduceShieldValue(currentHitDamage);
-        // }
-        // else if (shieldValue > 0 && remainSheild < 0)
-        // {
-        //     currentHitDamage = Math.Abs(remainSheild);
-        //     target.buffMgr.ClearShield();
-        // }
-
-        long toHp = fromHp; //Math.Max(0, fromHp - currentHitDamage);
-
+        // ============ 绗簩姝�:鑾峰彇鐩爣褰撳墠鐘舵�� ============
+        long fromHp = target.teamHero.curHp;
+        long maxHp = target.teamHero.maxHp;
+        long fromShieldValue = target.buffMgr.GetShieldValue();
 
         // 鍒ゆ柇鏄不鐤楄繕鏄激瀹�
-        bool isHealing = ((hurt.AttackTypes & (int)ServerDamageType.Recovery) != 0 || 
-                          (hurt.AttackTypes & (int)ServerDamageType.DamageReverse) != 0) &&
-                         (hurt.AttackTypes & (int)ServerDamageType.Damage) == 0 &&
-                         (hurt.AttackTypes & (int)ServerDamageType.Realdamage) == 0 &&
-                         (hurt.AttackTypes & (int)ServerDamageType.SuckHpReverse) == 0 &&
-                         (hurt.AttackTypes & (int)ServerDamageType.SelfHarm) == 0;
+        bool isHealing = BattleUtility.IsHealing(hurt);
+
+        // ============ 绗笁姝�:璁$畻鐩爣琛�閲忓拰鎶ょ浘鍙樺寲 ============
+        long toHp;
+        long toShieldValue;
 
         if (isHealing)
         {
-            // 娌荤枟閫昏緫锛氱洿鎺ュ姞琛�锛屼笉鑰冭檻鎶ょ浘
-            toHp = Math.Min(target.teamHero.maxHp, fromHp + currentHitDamage);
+            // 娌荤枟閫昏緫锛氱洿鎺ュ姞琛�锛屾姢鐩句笉鍙�
+            toHp = Math.Min(maxHp, fromHp + currentHitDamage);
+            toShieldValue = fromShieldValue;
         }
         else
         {
-            // 浼ゅ閫昏緫锛氬厛鎵f姢鐩撅紝鍐嶆墸琛�
-            if (remainSheild < 0)
+            // 浼ゅ閫昏緫锛氬厛鎵f姢鐩撅紝鎶ょ浘涓嶈冻鍐嶆墸琛�
+            if (fromShieldValue >= currentHitDamage)
             {
-                // 鐩捐鎵撶牬
-                toHp = Math.Max(0, fromHp + remainSheild);
+                // 鎶ょ浘瓒冲鎵垮彈鎵�鏈変激瀹�
+                toShieldValue = fromShieldValue - currentHitDamage;
+                toHp = fromHp;
+            }
+            else
+            {
+                // 鎶ょ浘涓嶈冻锛屽厛鎵e畬鎶ょ浘锛屽墿浣欎激瀹虫墸琛�
+                long remainingDamage = currentHitDamage - fromShieldValue;
+                toShieldValue = 0;
+                toHp = Math.Max(0, fromHp - remainingDamage);
             }
         }
 
-
-        // 鏇存柊鐩爣琛�閲�
+        // ============ 绗洓姝�:鏇存柊鐩爣瀹為檯琛�閲� ============
         target.teamHero.curHp = toHp;
+
+        // ============ 绗簲姝�:璁$畻骞舵洿鏂版柦娉曡�呰閲忓彉鍖� ============
+        long casterFromHp = caster.teamHero.curHp;
+        long casterMaxHp = caster.teamHero.maxHp;
+        long casterToHp = casterFromHp;
+
+        // 澶勭悊鍚歌
+        if (currentHitSuckHp > 0)
+        {
+            casterToHp = Math.Min(casterMaxHp, casterToHp + currentHitSuckHp);
+        }
+
+        // 澶勭悊鍙嶄激(鏂芥硶鑰呭彈鍒颁激瀹�)
+        if (currentHitReflectHp > 0)
+        {
+            long casterShieldValue = caster.buffMgr.GetShieldValue();
+            if (casterShieldValue >= currentHitReflectHp)
+            {
+                // 鏂芥硶鑰呮姢鐩捐冻澶�,琛�閲忎笉鍙�
+            }
+            else
+            {
+                // 鏂芥硶鑰呮姢鐩句笉瓒�,鎵h
+                long remainingReflect = currentHitReflectHp - casterShieldValue;
+                casterToHp = Math.Max(0, casterToHp - remainingReflect);
+            }
+        }
+
+        // 鏇存柊鏂芥硶鑰呰閲�
+        caster.teamHero.curHp = casterToHp;
 
 #if UNITY_EDITOR
         BattleDebug.LogError(
@@ -600,37 +593,32 @@
             $"鏀诲嚮鑰�: {caster.teamHero.name}\n" +
             $"鐩爣: {target.teamHero.name}\n" +
             $"鎶�鑳�: {skillConfig.SkillName} (绗瑊_hitIndex}鍑�)\n" +
-            $"浼ゅ: {currentHitDamage} 瀹為檯鍙楀埌浼ゅ: {fromHp-toHp} (鎬讳激瀹�: {totalDamage})\n" +
-            $"鎵夸激鍓嶆姢鐩惧��: {shieldValue}\n" +
-            $"鎵夸激鍚庢姢鐩惧��: {toShieldValue}\n" +
-            $"鎶ょ浘鎵垮彈浼ゅ: {shieldRecieveDamage}\n" +
+            $"浼ゅ: {currentHitDamage} (鎬讳激瀹�: {totalDamage})\n" +
+            $"鍚歌: {currentHitSuckHp}\n" +
             $"鍙嶄激: {currentHitReflectHp}\n" +
-            $"琛�閲忓彉鍖�: {fromHp} -> {toHp}\n" +
-            $"鎶�鑳藉寘閲岀殑琛�閲忔槸: {GeneralDefine.GetFactValue(hurt.CurHP, hurt.CurHPEx)}\n"
+            $"鐩爣鎶ょ浘鍙樺寲: {fromShieldValue} -> {toShieldValue}\n" +
+            $"鐩爣琛�閲忓彉鍖�: {fromHp} -> {toHp}\n" +
+            $"鏂芥硶鑰呰閲忓彉鍖�: {casterFromHp} -> {casterToHp}\n"
         );
 #endif
 
-        
-        bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1;
-
-        // ============ 绗笁姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
+        // ============ 绗叚姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
         int objID = (int)target.ObjID;
         tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
         tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
 
-
-        //  鍙傛暟鎵撳寘
+        // ============ 绗竷姝�:鍙傛暟鎵撳寘骞惰皟鐢ㄧ洰鏍嘓urt ============
         BattleHurtParam hurtParam = new BattleHurtParam()
         {
             casterObj = caster,
             hurtObj = target,
             damageList = damageList,
-            suckHpList = suckHpList, //suckHpList,
-            reflectHpList = reflectHpList,
+            suckHpList = suckHpList,      // 鐢ㄤ簬casterDamageList椋樺瓧
+            reflectHpList = reflectHpList, // 鐢ㄤ簬casterDamageList椋樺瓧
             fromHp = fromHp,
             toHp = toHp,
-            maxHp = target.teamHero.maxHp,
-            fromShieldValue = shieldValue,
+            maxHp = maxHp,
+            fromShieldValue = fromShieldValue,
             toShieldValue = toShieldValue,
             battleDrops = battleDrops,
             hurt = hurt,
@@ -639,10 +627,7 @@
             skillConfig = skillConfig
         };
 
-        // ============ 绗洓姝�:鎵ц琛ㄧ幇(椋樺瓧銆佸姩鐢荤瓑) ============
         target.Hurt(hurtParam);
-
-
     }
 
     // 澶勭悊HP鍒锋柊鍖咃紙绠�鍖栭�昏緫锛�

--
Gitblit v1.8.0