From cb018a575005f873135fab3201d1bf6d408e2b6a Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 18 九月 2025 14:50:31 +0800
Subject: [PATCH] 125 【战斗】战斗系统 技能表现修改

---
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs |  106 ++++++++++++++++++++++++++++++++---------------------
 1 files changed, 64 insertions(+), 42 deletions(-)

diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index 9704be3..fd1d6f5 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -6,11 +6,8 @@
 
 public class BattleObjectBuffMgr
 {
-    // buffId, effectId, EffectPlayer
-    private Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict = new Dictionary<uint, Dictionary<int, BattleEffectPlayer>>();
+    private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
 
-
-    //  buffId, buffdata
     private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
 
     private BattleObject battleObject;
@@ -25,17 +22,31 @@
 
     }
 
-    //  澧炲姞buff
-    public void AddBuff(HB428_tagSCBuffRefresh vNetData)
+    public void Run()
     {
-        // BuffBase buffBase = BuffFactory.CreateBuff(vNetData, battleObject);
-        // if (null == buffBase)
-        // {
-        //     return;
-        // }
+        //  璺熼殢BattleObject
+        foreach (var kv in buffEffectDict)
+        {
+            // foreach (var kv2 in effectDict)
+            {
+                BattleEffectPlayer effectPlayer = kv.Value.Key;
+                effectPlayer.transform.position = battleObject.heroRectTrans.position;
+            }
+        }
+    }
 
-        // buffBase.OnAdd();
-        
+    public void RemoveAllBuff()
+    {
+        foreach (var kv in buffEffectDict)
+        {
+            KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair = kv.Value;
+            battleObject.battleField.battleEffectMgr.RemoveEffect(kv.Key, pair.Key);
+        }
+
+        buffEffectDict.Clear();
+        buffDataDict.Clear();
+
+        battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
     }
 
     //  鍒犻櫎buff
@@ -50,18 +61,24 @@
 
         if (buffData != null)
         {
-            Dictionary<int, BattleEffectPlayer> effectDict = null;
+            SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
 
-            if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
+            if (null == skillConfig || skillConfig.BuffEffect <= 0)
             {
-                SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
-                if (null != skillConfig)
+                return;
+            }
+
+            KeyValuePair<BattleEffectPlayer, HashSet<uint>> effectPair;
+
+            if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out effectPair))
+            {
+                effectPair.Value.Remove(vNetData.BuffID);
+
+                if (effectPair.Value.Count == 0)
                 {
-                    BattleEffectPlayer effectPlayer = null;
-                    if (effectDict.TryGetValue(skillConfig.EffectId, out effectPlayer))
-                    {
-                        battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.EffectId, effectPlayer);
-                    }
+                    //  娌℃湁杩欎釜buff浜�
+                    battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.BuffEffect, effectPair.Key);
+                    buffEffectDict.Remove(skillConfig.BuffEffect);
                 }
             }
         }
@@ -70,8 +87,17 @@
         battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
     }
 
+    //  鍒锋柊buff
     public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
     {
+        SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
+
+        if (null == skillConfig)
+        {
+            Debug.LogError("buff瀵瑰簲鐨勬妧鑳戒笉瀛樺湪锛宻killId : " + vNetData.SkillID);
+            return;
+        }
+
         bool isNew = false;
         if (buffDataDict.ContainsKey(vNetData.BuffID))
         {
@@ -86,35 +112,31 @@
         if (isNew)
         {
             BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
-            { 
-                SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
-                if (null != skillConfig && skillConfig.EffectId > 0)
+            {
+                if (null != skillConfig && skillConfig.BuffEffect > 0)
                 {
-                    // Dictionary<uint, Dictionary<int, BattleEffectPlayer>> buffEffectDict
-                    Dictionary<int, BattleEffectPlayer> effectDict = null;
-                    if (buffEffectDict.TryGetValue(vNetData.BuffID, out effectDict))
+                    //  宸茬粡瀛樺湪鐩稿悓鐨刡uff鐗规晥
+                    if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair))
                     {
-                        //  瀛樺湪杩欎釜buffid鐨勭壒鏁堝瓧鍏�
-                        if (effectDict.ContainsKey(skillConfig.EffectId))
-                        {
-                            Debug.LogError("宸插瓨鍦ㄥ悓鏍风殑buff鐗规晥 " + skillConfig.EffectId);
-                        }
-                        else
-                        {
-                            BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
-                            effectDict.Add(skillConfig.EffectId, effect);
-                        }
+                        pair.Value.Add(vNetData.BuffID);
                     }
                     else
                     {
-                        effectDict = new Dictionary<int, BattleEffectPlayer>();
-                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.EffectId, battleObject.heroRectTrans, battleObject.Camp);
-                        effectDict.Add(skillConfig.EffectId, effect);
-                        buffEffectDict.Add(vNetData.BuffID, effectDict);
+                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
+                        HashSet<uint> buffIdSet = new HashSet<uint>();
+                        buffIdSet.Add(vNetData.BuffID);
+                        buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
                     }
                 }
+                battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
             });
             battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
         }
+        else
+        {
+            //  宸茬粡瀛樺湪鐨刡uff 鍒锋柊
+            battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
+        }
     }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0