yyl
12 小时以前 073d737eca624884fec4d43c5d3f41355cdbeb72
Main/System/Battle/BattleField/BattleField.cs
@@ -64,6 +64,9 @@
    protected int redTeamIndex = 0;
    protected int blueTeamIndex = 0;
    // 记录正在处理死亡的角色ID,防止重复处理
    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: 角色正在处理死亡,忽略重复死亡消息 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();
    }
    //清场敌方但不终止战斗,用于切换主线BOSS战斗后,正常显示敌方
@@ -552,6 +599,9 @@
        battleObjMgr.HaveRest(BattleCamp.Blue);
        battleObjMgr.DestroyTeam(BattleCamp.Blue);
        SetBattleStartState();
        // 清理死亡处理记录
        processingDeathObjIds.Clear();
    }
    public bool IsBattleEnd()