From e3631d3e1590b5d955a21257a00ec661a5877eb1 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 04 十一月 2025 16:31:41 +0800
Subject: [PATCH] 0312 装备拾取调整:单武将攻击先掉落装备,不管中间发生几次攻击,几次技能 几次掉落都不弹装备,待下一个武将(含敌我)开始攻击前处理装备

---
 Main/System/Equip/EquipModel.cs                    |   81 ++++++++++++++++++++++----
 Main/System/Main/AutoFightModel.cs                 |    1 
 Main/System/Battle/RecordPlayer/RecordAction.cs    |    8 ++
 Main/System/Battle/RecordPlayer/RecordPlayer.cs    |    2 
 Main/Common/EventName.cs                           |    1 
 Main/System/Equip/ItemsOnFloor.cs                  |    5 +
 Main/System/Equip/FloorItemCell.cs                 |   11 ---
 Main/System/Equip/EquipExchangeCell.cs             |   15 +++++
 Main/System/Battle/BattleField/StoryBattleField.cs |   10 +--
 9 files changed, 102 insertions(+), 32 deletions(-)

diff --git a/Main/Common/EventName.cs b/Main/Common/EventName.cs
index 15df307..4b7b3c2 100644
--- a/Main/Common/EventName.cs
+++ b/Main/Common/EventName.cs
@@ -15,4 +15,5 @@
 	public const string BATTLE_CAST_SKILL = "BATTLE_CAST_SKILL";//鏂芥斁鎶�鑳�
 	
 	public const string BATTLE_END = "BATTLE_END";//鎴樻枟缁撴潫
+	public const string RECORDPLAYER_END = "RECORDPLAYER_END"; //鎴樻枟灏忕墖娈电粨鏉�
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
index aa18fce..f4279e7 100644
--- a/Main/System/Battle/BattleField/StoryBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -154,6 +154,7 @@
         base.OnSettlement(turnFightStateData);
         if (battleState == StoryBattleState.Battle)
         {
+            EquipModel.Instance.CalcAllFloorItems();
             BattleManager.Instance.MainFightRequest(4);
         }
     }
@@ -163,6 +164,7 @@
     {
         base.HaveRest();
         battleState = StoryBattleState.Break;
+        EquipModel.Instance.CalcAllFloorItems();
         BattleManager.Instance.MainFightRequest(0);
     }
 
@@ -220,13 +222,7 @@
                 //鍐嶆鏌ヤ竴娆℃湁娌¤澶囨湭澶勭悊
                 if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count > 0)
                 {
-                    //鏋勫缓鎵�鏈夌墿鍝�
-                    List<int> dropList = new List<int>();
-                    foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems())
-                    {
-                        dropList.Add(item.gridIndex);
-                    }
-                    EquipModel.Instance.NotifyItemDrop(dropList, null);
+                    EquipModel.Instance.CalcAllFloorItems();
                     BattleDebug.LogError("RequestFight: 瑁呭鏈鐞�");
                     return false;
                 }
diff --git a/Main/System/Battle/RecordPlayer/RecordAction.cs b/Main/System/Battle/RecordPlayer/RecordAction.cs
index 7a992ab..bc5ee39 100644
--- a/Main/System/Battle/RecordPlayer/RecordAction.cs
+++ b/Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -38,4 +38,12 @@
         isFinish = true;
     }
 
+    public virtual string GetBattleFieldGuid()
+    {
+        if (battleField == null)
+        {
+            return string.Empty;
+        }
+        return battleField.guid;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 2d26c5f..1281256 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -149,10 +149,12 @@
 
         if (currentRecordAction != null && currentRecordAction.IsFinished())
         {
+            var guid = currentRecordAction.GetBattleFieldGuid();
             BattleDebug.LogError("record action " + currentRecordAction.GetType() + " play finished");
             currentRecordAction = null;
             isWaitingNextAction = true;
             waitTimer = 0f;
+            EventBroadcast.Instance.Broadcast<string>(EventName.RECORDPLAYER_END, guid);
             return;
         }
 
diff --git a/Main/System/Equip/EquipExchangeCell.cs b/Main/System/Equip/EquipExchangeCell.cs
index c0703d1..28fdc6e 100644
--- a/Main/System/Equip/EquipExchangeCell.cs
+++ b/Main/System/Equip/EquipExchangeCell.cs
@@ -172,6 +172,21 @@
             uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
             uieffect.Play();
         }
+
+        //浜屾澶勭悊鏀惧ぇ鏁堟灉
+        await UniTask.Delay(100);
+        if (effectID == 0)
+        {
+            uieffect.Stop();
+        }
+        else
+        {
+            uieffect.Stop();
+            uieffect.effectId = effectID;
+            //璁$畻楂樺害缂╂斁姣斾緥 鐗规晥鏄剧ず渚濊禆rect鐨勬帓鐗�
+            uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
+            uieffect.Play();
+        }
     }
 
 
diff --git a/Main/System/Equip/EquipModel.cs b/Main/System/Equip/EquipModel.cs
index 97ec59d..a0f8ec5 100644
--- a/Main/System/Equip/EquipModel.cs
+++ b/Main/System/Equip/EquipModel.cs
@@ -27,12 +27,15 @@
 
     public List<int> lastDropIndexs = new List<int>(); //涓婁竴娆℃帀钀界墿鍝佺储寮�
 
+    int lastAttackHeroID = 0;
+
     public override void Init()
     {
         DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult;
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += BeforePlayerDataInitialize;
-        EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
         EventBroadcast.Instance.AddListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
+        EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
+        EventBroadcast.Instance.AddListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
         ParseConfig();
     }
 
@@ -41,6 +44,8 @@
         DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult;
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= BeforePlayerDataInitialize;
         EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
+        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
+        EventBroadcast.Instance.RemoveListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
     }
 
 
@@ -82,6 +87,7 @@
         return -1;
     }
 
+    //琛ㄧ幇鎺夎惤鍜屾嬀鍙栧垎绂诲紑锛屽厛鎺夎惤绛夋湰姝﹀皢鍥炲悎瀹屽叏缁撴潫鍐嶆嬀鍙�
     void OnDropEvent(string guid, BattleDrops drops, Action action)
     {
         if (!string.IsNullOrEmpty(guid))
@@ -93,21 +99,57 @@
         action?.Invoke();
     }
 
+    //鎷惧彇鏃舵満涓轰笅涓�姝﹀皢锛堝惈鏁屾垜锛夋敾鍑� 鎴栬�� 鏈疆缁撶畻锛圡ainFightRequest 鍓嶏級
+    void OnSkillCast(string guid, SkillConfig skillConfig, TeamHero teamHero)
+    {
+        bool checkDrop = false;
+        if (!string.IsNullOrEmpty(guid))
+            return;
+
+        //闃茶寖鍥炴敹鎶ラ敊
+        if (teamHero == null)
+            checkDrop = true;
+        //鍙�氱煡鐜╁姝﹀皢鐨勬垬鏂�
+        else if (teamHero.NPCID != 0)
+            checkDrop = true;
+        else if (teamHero.heroId != lastAttackHeroID)
+        {
+            lastAttackHeroID = teamHero.heroId;
+            checkDrop = true;
+        }
+
+        if (checkDrop)
+        {
+            CalcAllFloorItems();
+        }
+    }
+
+
+    void RecordPlayerEnd(string guid)
+    {
+        if (!string.IsNullOrEmpty(guid))
+            return;
+
+        CalcAllFloorItems();
+    }
+
+
     //鎺夎惤閫氱煡
     public void NotifyItemDrop(List<int> indexs, RectTransform rect)
     {
         // 鐣岄潰涓嶆樉绀哄垯绔嬪嵆澶勭悊
-        if (!UIManager.Instance.IsOpened<HomeWin>())
-        {
-            for (int i = 0; i < indexs.Count; i++)
-            {
-                CalcFloorEquip(indexs[i]);
-            }
-        }
-        else
-        {
-            OnItemDropEvent?.Invoke(indexs, rect);
-        }
+        // if (!UIManager.Instance.IsOpened<HomeWin>())
+        // {
+        //     for (int i = 0; i < indexs.Count; i++)
+        //     {
+        //         CalcFloorEquip(indexs[i]);
+        //     }
+        // }
+        // else
+        // {
+        //     OnItemDropEvent?.Invoke(indexs, rect);
+        // }
+        OnItemDropEvent?.Invoke(indexs, rect);
     }
 
     public void CalcFloorEquip(int itemIndex)
@@ -119,7 +161,6 @@
         if (item == null)
             return;
 
-
         //闈炶嚜鍔ㄦā寮忎笅锛岀瓫閫夎澶囨墦寮�瑁呭鎿嶄綔鐣岄潰
         if (IsEquip(item))
         {
@@ -131,6 +172,20 @@
         }
     }
 
+    //澶勭悊鎵�鏈夋帀钀界殑鐗╁搧
+    public void CalcAllFloorItems()
+    {
+        if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count == 0)
+        {
+            return;
+        }
+        //鏋勫缓鎵�鏈夌墿鍝�
+        foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems())
+        {
+            CalcFloorEquip(item.gridIndex);
+        }
+    }
+
     private void OnEquipResult(HA814_tagMCMakeItemAnswer info)
     {
         if (info.MakeType != (int)MakeType.EquipOP)
diff --git a/Main/System/Equip/FloorItemCell.cs b/Main/System/Equip/FloorItemCell.cs
index 6706b9a..110e517 100644
--- a/Main/System/Equip/FloorItemCell.cs
+++ b/Main/System/Equip/FloorItemCell.cs
@@ -62,9 +62,6 @@
         else
         {
             this.transform.localPosition = startPos;
-            // 鎵嬪姩鐐瑰嚮鎴栬�呰嚜鍔ㄦā寮忎笅澶勭悊
-            // EquipModel.Instance.CalcFloorEquip(itemIndex);
-            // itemIndex = -1;
         }
     }
 
@@ -76,15 +73,11 @@
 
     void CompleteDrop()
     {
-        EquipModel.Instance.CalcFloorEquip(itemIndex);
+        // 鎺夎惤鍚庣洿鎺ユ嬀鍙� 鏀规垚浜嗘湰姝﹀皢鏀诲嚮瀹屽叏缁撴潫鍚庢垨鑰呭洖鍚堢粨鏉熷悗
+        // EquipModel.Instance.CalcFloorEquip(itemIndex);
         isPlaying = false;
         itemIndex = -1;
     }
-
-    // void OnDisable()
-    // {
-    //     CompleteDrop();
-    // }
 }
 
 
diff --git a/Main/System/Equip/ItemsOnFloor.cs b/Main/System/Equip/ItemsOnFloor.cs
index 5bc8e96..6861534 100644
--- a/Main/System/Equip/ItemsOnFloor.cs
+++ b/Main/System/Equip/ItemsOnFloor.cs
@@ -40,7 +40,8 @@
     //涓荤晫闈㈠垏鎹㈡ā寮忚Е鍙�
     private void OnEnable()
     {
-        //bug璁板綍锛氬啀闃茶寖涓�娆★紝閲嶇櫥閿�姣佸悗鎰忓鐨勬敞鍐屼簡澶氭锛屽悗缁鏌ヨ繑鍥炵櫥褰曠晫闈㈠啀杩涘叆娓告垙鐨勬儏鍐�
+        //bug璁板綍锛氬洜涓烘柇绾块噸杩炵洿鎺ラ攢姣佺晫闈㈠鑷碠nEnable浜屾瑙﹀彂涓棿娌℃湁瑙﹀彂OnDisable锛屽嚭鐜板娆℃帀钀界殑鐜拌薄
+        // 宸茬粡璋冩暣鏂嚎閲嶈繛閫昏緫锛屽悗缁瀵熻繑鍥炵櫥褰曠晫闈㈡儏鍐�
         EquipModel.Instance.OnItemDropEvent -= NotifyPlayItemDrop;
         PackManager.Instance.DeleteItemEvent -= DeleteDropItem;
         //涓荤晫闈㈡墦寮�鍜屾樉闅愰兘瑕佸埛鏂�
@@ -110,7 +111,7 @@
             if (item.isActiveAndEnabled)
             {
                 //闃茶寖涓�鐩存挱鏀炬帀钀藉姩鐢�,鏌愮鍘熷洜琚墦鏂簡鍚庣画鐨勭晫闈㈡樉绀猴紝杩欓噷鐩存帴瑙﹀彂鎵撳紑鐣岄潰
-                EquipModel.Instance.CalcFloorEquip(i);
+                // EquipModel.Instance.CalcFloorEquip(i);
                 continue;
             }
 
diff --git a/Main/System/Main/AutoFightModel.cs b/Main/System/Main/AutoFightModel.cs
index 7507453..27b651a 100644
--- a/Main/System/Main/AutoFightModel.cs
+++ b/Main/System/Main/AutoFightModel.cs
@@ -95,7 +95,6 @@
         ParseConfig();
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit;
         BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
-        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
         EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
 
     }

--
Gitblit v1.8.0