From 6a4a7304eac4b599d9d41eb18dfa12abfbb16c40 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 26 十二月 2025 15:56:21 +0800
Subject: [PATCH] 125 战斗 修复了重复多次计算吸血的问题

---
 Main/System/Battle/Skill/MountBuffSkill.cs |    2 +-
 Main/System/Battle/BattleUtility.cs        |    5 +++--
 Main/System/Battle/Skill/SkillBase.cs      |   27 ++++++++-------------------
 Main/System/Battle/Skill/RebornSkill.cs    |   16 ++++------------
 4 files changed, 16 insertions(+), 34 deletions(-)

diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index d347236..f076f67 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -342,7 +342,7 @@
     }
 
     public static BattleHurtParam CalcBattleHurtParam(SkillBase skillBase, int hitIndex, BattleObject target, 
-        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, BattleDeadPack deadPack)
+        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, BattleDeadPack deadPack, bool bSuckHp = true)
     {
         long suckHp = GetSuckHp(skillBase.tagUseSkillAttack);
         SkillConfig skillConfig = skillBase.skillConfig;
@@ -355,7 +355,8 @@
 
         // 璁$畻鍚歌鍒嗘
         long currentHitSuckHp = 0;
-        List<long> suckHpList = DivideDamageToList(skillConfig.DamageDivide, hitIndex, suckHp, ref currentHitSuckHp);
+        List<long> suckHpList = bSuckHp ? 
+            DivideDamageToList(skillConfig.DamageDivide, hitIndex, suckHp, ref currentHitSuckHp) : new List<long>();
 
         // 璁$畻鍙嶄激鍒嗘
         long currentHitReflectHp = 0;
diff --git a/Main/System/Battle/Skill/MountBuffSkill.cs b/Main/System/Battle/Skill/MountBuffSkill.cs
index 6084fbf..e3e6800 100644
--- a/Main/System/Battle/Skill/MountBuffSkill.cs
+++ b/Main/System/Battle/Skill/MountBuffSkill.cs
@@ -27,7 +27,7 @@
 		OnSkillFinished();
 	}
 
-	protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
+	protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, bool bSuckHp)
 	{
 		//	浠�涔堥兘涓嶅仛 鍙瓑buff
 	}
diff --git a/Main/System/Battle/Skill/RebornSkill.cs b/Main/System/Battle/Skill/RebornSkill.cs
index 591c964..0d2b5ff 100644
--- a/Main/System/Battle/Skill/RebornSkill.cs
+++ b/Main/System/Battle/Skill/RebornSkill.cs
@@ -26,6 +26,8 @@
 			}
 		}
 
+		bool vValue = true;
+
         // 澶勭悊涓荤洰鏍囧垪琛�
         foreach (var hurt in hitList)
         { 
@@ -35,20 +37,10 @@
                 Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
                 continue;
             }
-            OnHitEachTarget(_hitIndex, target, hurt);
+            OnHitEachTarget(_hitIndex, target, hurt, vValue);
+			vValue = false;
         }
 	}
-
-	protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
-    {
-        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, null, null);
-
-        // 鍏堣皟鐢ㄧ洰鏍囧彈浼�
-        target.Hurt(hurtParam);
-        
-        // 鍐嶈皟鐢ㄦ柦娉曡�呭惛琛�/鍙嶄激
-        caster.OnHurtTarget(hurtParam);
-    }
 
     public override void Cast()
     {
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index cfa7c15..c472788 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -609,7 +609,6 @@
         battleField.battleRootNode.skillMaskNode.SetActive(true);
     }
 
-    protected long suckHp = 0;
 
     // 鍛戒腑鐩爣鍥炶皟锛氬鐞嗘墍鏈夎鍛戒腑鐨勭洰鏍囷紙鍖呮嫭涓荤洰鏍囥�佸脊灏勭洰鏍囥�佹簠灏勭洰鏍囷級
     protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
@@ -619,13 +618,7 @@
         //  閫犳垚浼ゅ鍓嶅厛澶勭悊琛�閲忓埛鏂板寘
         HandleRefreshHP();
 
-        suckHp = 0;
-
-        // 缁熻鍚歌鎬婚噺锛堜富鐩爣锛�
-        foreach (var hurt in hitList)
-        {
-            suckHp += hurt.SuckHP;
-        }
+        bool suckHp = true;
 
         // 澶勭悊涓荤洰鏍囧垪琛�
         foreach (var hurt in hitList)
@@ -637,7 +630,9 @@
                 continue;
             }
 
-            OnHitEachTarget(_hitIndex, target, hurt);
+            OnHitEachTarget(_hitIndex, target, hurt, suckHp);
+
+            suckHp = false;
 
             // 澶勭悊璇ョ洰鏍囩殑棰濆鐩爣鍒楄〃锛堝寮瑰皠浼ゅ鐨勫钩鎽婄洰鏍囷級
             if (hurt.HurtListEx != null && hurt.HurtListEx.Length > 0)
@@ -713,7 +708,7 @@
     }
 
     // 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
-    protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
+    protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, bool suckHp)
     {
         // ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
         int objID = (int)target.ObjID;
@@ -726,14 +721,8 @@
             deadPack = null;
         }
 
-        bool clearSuckHp = tagUseSkillAttack.HurtList.ToList().IndexOf(hurt) != 0;
-
         // ============ 鍙傛暟鎵撳寘 ============
-        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack);
-        if (clearSuckHp)
-        {
-            hurtParam.caster.suckHpList.Clear();
-        }
+        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack, suckHp);
 #if UNITY_EDITOR
         PrintHurtParamDebugInfo(hurtParam);
 #endif
@@ -768,13 +757,13 @@
             HurtHPEx = hurtEx.HurtHPEx,
             CurHP = hurtEx.CurHP,
             CurHPEx = hurtEx.CurHPEx,
-            SuckHP = hurtEx.SuckHP,
+            SuckHP = 0,//hurtEx.SuckHP, 鑾峰彇鍏ㄩ儴鍚歌鏃跺凡缁忚绠楄繃 杩欓噷灏变笉鍐嶈绠�
             BounceHP = 0, // HurtEx 娌℃湁鍙嶄激瀛楁
             HurtCountEx = 0,
             HurtListEx = null
         };
 
-        OnHitEachTarget(_hitIndex, target, hurt);
+        OnHitEachTarget(_hitIndex, target, hurt, false);//鑾峰彇鍏ㄩ儴鍚歌鏃跺凡缁忚绠楄繃 杩欓噷灏变笉鍐嶈绠�
     }
 
 #if UNITY_EDITOR

--
Gitblit v1.8.0