From ad58c25ad98e333336afcd22ad8ab7e8c5f1ada9 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 21 一月 2026 17:44:28 +0800
Subject: [PATCH] 125 战斗 修复偶尔死亡会触发多次死亡技能的问题

---
 Main/System/Battle/Skill/SkillBase.cs |   58 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 27 insertions(+), 31 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index f758506..cb2e13e 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -484,9 +484,11 @@
             return;
         }
 
-        ProcessSubSkill();
-
+        //  鍏堟妸姝讳骸鍖呮敹闆嗕簡
         HandleDead();
+
+        //  鍐嶅鐞� 鍐呭祵鎶�鑳�
+        ProcessSubSkill();
 
         skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
         skillEffect.Play(OnHitTargets);
@@ -545,7 +547,11 @@
         foreach (var (packUID, recordAction) in allSubSkills)
         {
             battleField.recordPlayer.ImmediatelyPlay(recordAction);
-            currentWaitingSkill.Add(recordAction);
+
+            if (recordAction.IsNeedWaiting())
+            {
+                currentWaitingSkill.Add(recordAction);
+            }
         }
     }
 
@@ -914,27 +920,26 @@
         List<BattleDeadPack> deadPackList = BattleUtility.FindDeadPack(packList);
         if (deadPackList.Count <= 0) return;
 
-        // 鎵惧埌鏈�澶х殑姝讳骸鍖� packUID锛堝寘鎷浜″寘鍜屾浜¤Е鍙戞妧鑳斤級
+        foreach (var deadPack in deadPackList)
+        {
+            packList.Remove(deadPack.deadPack);
+            packList.Remove(deadPack.deadTriggerSkill);
+        }
+
+        // 鎵惧埌鏈�澶х殑姝讳骸鍖� packUID
+        BattleDeadPack lastBattleDeadPack = null;
         ulong maxDeathPackUID = 0;
         foreach (var deadPack in deadPackList)
         {
             if (deadPack.deadPack != null && deadPack.deadPack.packUID > maxDeathPackUID)
             {
                 maxDeathPackUID = deadPack.deadPack.packUID;
-            }
-            
-            if (deadPack.deadTriggerSkill != null)
-            {
-                var skillPack = deadPack.deadTriggerSkill.GetMainHB427SkillPack();
-                if (skillPack != null && skillPack.packUID > maxDeathPackUID)
-                {
-                    maxDeathPackUID = skillPack.packUID;
-                }
+                lastBattleDeadPack = deadPack;
             }
         }
         
         // 濡傛灉鎵惧埌浜嗘浜″寘锛屾敹闆嗘墍鏈� packUID > maxDeathPackUID 鐨勫寘
-        if (maxDeathPackUID > 0)
+        if (maxDeathPackUID > 0 && lastBattleDeadPack != null)
         {
             BattleDebug.LogError($"SkillBase.HandleDead: 鎵惧埌姝讳骸鍖咃紝maxDeathPackUID = {maxDeathPackUID}锛屽紑濮嬫敹闆嗘浜″悗鐨勫寘");
             
@@ -946,26 +951,19 @@
                 if (packUID > maxDeathPackUID)
                 {
                     // 鎺掗櫎缁忛獙鍖呭拰鎺夎惤鍖咃紝瀹冧滑灞炰簬褰撳墠姝讳骸浜嬩欢鐨勪竴閮ㄥ垎锛屼笉鏄�"姝讳骸鍚�"鐨勫寘
-                    if (pack is HB405_tagMCAddExp || 
+                    if (pack is HB405_tagMCAddExp expPack && expPack.Source == 2 || 
                         (pack is H0704_tagRolePackRefresh h0704 && h0704.PackType == (byte)PackType.DropItem && h0704.IsBind == 1))
                     {
                         continue; // 璺宠繃缁忛獙鍖呭拰鎺夎惤鍖咃紝璁� CheckAfterDeadhPack() 澶勭悊瀹冧滑
                     }
                     
                     BattleDebug.LogError($"SkillBase.HandleDead: 浠巔ackList鏀堕泦姝讳骸鍚庣殑鍖� - Type: {pack.GetType().Name}, UID: {packUID}");
-                    foreach (var deadPack in deadPackList)
-                    {
-                        deadPack.packListAfterDeath.Add(pack);
-                    }
+                    lastBattleDeadPack.packListAfterDeath.Add(pack);
                     packsToRemove.Add(pack);
                 }
             }
-            
-            // 浠� packList 涓Щ闄よ繖浜涘寘
-            foreach (var pack in packsToRemove)
-            {
-                packList.Remove(pack);
-            }
+
+            packList.RemoveAll(p => packsToRemove.Contains(p));
         }
 
         CheckAfterDeadhPack();
@@ -992,8 +990,8 @@
         // 鏋勯�燘attleDrops骞剁紦瀛�
         for (int i = 0; i < deadPackList.Count; i++)
         {
-            BattleDeadPack battleDeadPack = deadPackList[i];
-            int objID = (int)battleDeadPack.deadPack.ObjID;
+            BattleDeadPack bdp = deadPackList[i];
+            int objID = (int)bdp.deadPack.ObjID;
             BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject(objID);
             
             // 淇锛氭坊鍔犵┖鍊兼鏌�
@@ -1253,9 +1251,6 @@
             return false;
         }
 
-
-
-
         // 妫�鏌ユ渶缁堝畬鎴愮姸鎬�
         if (isFinished && moveFinished)
         {
@@ -1280,7 +1275,8 @@
                 DeathRecordAction recordAction = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
                 if (null != recordAction)
                 {
-                    parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction, parentRecordAction, true);
+                    parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction);
+                    tempDeadPackList.Clear();
                     return false;
                 }
             }

--
Gitblit v1.8.0