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 ++++++++++++++++++++++++++++++++++------
 1 files changed, 68 insertions(+), 13 deletions(-)

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)

--
Gitblit v1.8.0