From 073d737eca624884fec4d43c5d3f41355cdbeb72 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 19 十一月 2025 18:41:43 +0800
Subject: [PATCH] 125 战斗 死亡角色卡死问题

---
 Main/System/Battle/BattleField/BattleField.cs |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 28d632a..11dfb92 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -64,6 +64,9 @@
     protected int redTeamIndex = 0;
     protected int blueTeamIndex = 0;
 
+    // 璁板綍姝e湪澶勭悊姝讳骸鐨勮鑹睮D锛岄槻姝㈤噸澶嶅鐞�
+    private HashSet<uint> processingDeathObjIds = new HashSet<uint>();
+
     public BattleField(string _guid)
     {
         guid = _guid;
@@ -78,7 +81,7 @@
         battleTweenMgr = new BattleTweenMgr();
         recordPlayer = new RecordPlayer();
 
-        
+        processingDeathObjIds = new HashSet<uint>();
     }
 
     public virtual void Init(int _MapID, int _FuncLineID, JsonData _extendData,
@@ -95,6 +98,9 @@
 
         redTeamIndex = 0;
         blueTeamIndex = 0;
+
+        // 閲嶇疆姝讳骸澶勭悊璁板綍
+        processingDeathObjIds.Clear();
 
         battleEffectMgr.Init(this);
         battleTweenMgr.Init(this);
@@ -182,6 +188,9 @@
         battleEffectMgr.Release();
         battleTweenMgr.Release();
         recordPlayer.Release();
+
+        // 娓呯悊姝讳骸澶勭悊璁板綍
+        processingDeathObjIds.Clear();
     }
 
     public virtual void Run()
@@ -355,8 +364,37 @@
     {
         if (deadPackList.Count > 0)
         {
-            DeathRecordAction recordAction = new DeathRecordAction(this, deadPackList);
-            recordPlayer.ImmediatelyPlay(recordAction);
+            // 杩囨护鎺夋鍦ㄥ鐞嗘浜$殑瑙掕壊锛岄伩鍏嶉噸澶嶅鐞�
+            List<HB422_tagMCTurnFightObjDead> validDeadList = new List<HB422_tagMCTurnFightObjDead>();
+            
+            foreach (var deadPack in deadPackList)
+            {
+                // 妫�鏌ユ槸鍚﹀凡缁忓湪澶勭悊姝讳骸
+                if (processingDeathObjIds.Contains(deadPack.ObjID))
+                {
+                    Debug.LogWarning($"OnObjsDead: 瑙掕壊姝e湪澶勭悊姝讳骸锛屽拷鐣ラ噸澶嶆浜℃秷鎭� ObjID={deadPack.ObjID}");
+                    continue;
+                }
+                
+                BattleObject battleObj = battleObjMgr.GetBattleObject((int)deadPack.ObjID);
+                if (battleObj == null)
+                {
+                    Debug.LogWarning($"OnObjsDead: 鎵句笉鍒拌鑹� ObjID={deadPack.ObjID}");
+                    continue;
+                }
+                
+                // 娣诲姞鍒板鐞嗕腑鍒楄〃
+                processingDeathObjIds.Add(deadPack.ObjID);
+                validDeadList.Add(deadPack);
+                // Debug.LogError("prepare death : " + deadPack.ObjID);
+            }
+            
+            // 鍙鐞嗘湁鏁堢殑姝讳骸娑堟伅
+            if (validDeadList.Count > 0)
+            {
+                DeathRecordAction recordAction = new DeathRecordAction(this, validDeadList);
+                recordPlayer.ImmediatelyPlay(recordAction);
+            }
         }
     }
 
@@ -480,6 +518,12 @@
         if (battleObj != null)
         {
             battleObj.OnReborn(vNetData);
+            
+            // 浠庢浜″鐞嗗垪琛ㄤ腑绉婚櫎璇ヨ鑹�
+            if (processingDeathObjIds.Remove(vNetData.ObjID))
+            {
+                Debug.Log($"OnObjReborn: 瑙掕壊澶嶆椿锛屼粠姝讳骸澶勭悊鍒楄〃绉婚櫎 ObjID={vNetData.ObjID}");
+            }
         }
         else
         {
@@ -541,6 +585,9 @@
         battleObjMgr.DestroyTeam(BattleCamp.Blue);
         SetBattleStartState();
         SetBattleMode(BattleMode.Stop);
+        
+        // 娓呯悊姝讳骸澶勭悊璁板綍
+        processingDeathObjIds.Clear();
     }
 
     //娓呭満鏁屾柟浣嗕笉缁堟鎴樻枟锛岀敤浜庡垏鎹富绾緽OSS鎴樻枟鍚庯紝姝e父鏄剧ず鏁屾柟
@@ -552,6 +599,9 @@
         battleObjMgr.HaveRest(BattleCamp.Blue);
         battleObjMgr.DestroyTeam(BattleCamp.Blue);
         SetBattleStartState();
+        
+        // 娓呯悊姝讳骸澶勭悊璁板綍
+        processingDeathObjIds.Clear();
     }
 
     public bool IsBattleEnd()

--
Gitblit v1.8.0