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