From f236bbc6384c1f4b5a16739e4124ab832090ddc3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 15 十二月 2025 11:21:30 +0800
Subject: [PATCH] 125 战斗 新增死亡触发技能支持

---
 Main/System/Battle/Define/BattleDeadPack.cs.meta                                             |   11 +
 Main/Config/ConfigManager.cs                                                                 |   60 ------
 Main/System/Battle/BattleUtility.cs                                                          |   47 ++++
 Main/System/Battle/Define/BattleDeadPack.cs                                                  |   32 +++
 Main/System/Battle/Define/SkillTriggerTiming.cs.meta                                         |   11 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB422_tagMCTurnFightObjDead.cs |    2 
 Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs.meta                      |   11 +
 Main/System/Battle/RecordPlayer/RecordActionType.cs                                          |    2 
 Main/System/Battle/Define/BattleDmgInfo.cs                                                   |    2 
 Main/System/Battle/BattleField/BattleField.cs                                                |   19 +
 Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs                           |   47 +++++
 Main/System/Battle/BattleObject/BattleObject.cs                                              |   33 ++-
 Main/System/Battle/Skill/SkillBase.cs                                                        |   83 +++++++--
 Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs                            |  117 +++++++++----
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs                            |    9 +
 Main/System/Battle/Define/SkillTriggerTiming.cs                                              |    9 +
 16 files changed, 358 insertions(+), 137 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 97d68ae..c073e9a 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -40,14 +40,10 @@
         HashSet<Type> configTypes = new HashSet<Type>() {
             typeof(ADAwardConfig),
             typeof(BattleMapConfig),
-            typeof(ChestsAwardConfig),
-            typeof(CTGConfig),
             typeof(DailyTaskConfig),
-            typeof(DamageNumConfig),
             typeof(DirtyWordConfig),
             typeof(DungeonConfig),
             typeof(DungeonOpenTimeConfig),
-            typeof(FaceConfig),
             typeof(FamilyDonateConfig),
             typeof(FightPowerRatioConfig),
             typeof(FirstChargeConfig),
@@ -62,28 +58,14 @@
             typeof(ItemConfig),
             typeof(LineupRecommendConfig),
             typeof(LLMJConfig),
-            typeof(MainChapterConfig),
             typeof(MainLevelConfig),
             typeof(ModelConfig),
-            typeof(NPCConfig),
-            typeof(NPCExConfig),
-            typeof(NPCLineupConfig),
-            typeof(OrderInfoConfig),
-            typeof(PlayerAttrConfig),
-            typeof(PlayerFaceConfig),
-            typeof(PriorBundleConfig),
+            typeof(PlayerLVConfig),
             typeof(RandomNameConfig),
             typeof(SignInConfig),
-            typeof(StoreConfig),
-            typeof(SuccessConfig),
-            typeof(SysInfoConfig),
             typeof(TianziConfig),
             typeof(TitleConfig),
             typeof(TitleStarUpConfig),
-            typeof(TreasureSetConfig),
-            typeof(TreeLVConfig),
-            typeof(WindowSearchConfig),
-            typeof(XBGetItemConfig),
             typeof(ZhanlingConfig)
         };
 
@@ -238,22 +220,14 @@
         ClearConfigDictionary<ADAwardConfig>();
         // 娓呯┖ BattleMapConfig 瀛楀吀
         ClearConfigDictionary<BattleMapConfig>();
-        // 娓呯┖ ChestsAwardConfig 瀛楀吀
-        ClearConfigDictionary<ChestsAwardConfig>();
-        // 娓呯┖ CTGConfig 瀛楀吀
-        ClearConfigDictionary<CTGConfig>();
         // 娓呯┖ DailyTaskConfig 瀛楀吀
         ClearConfigDictionary<DailyTaskConfig>();
-        // 娓呯┖ DamageNumConfig 瀛楀吀
-        ClearConfigDictionary<DamageNumConfig>();
         // 娓呯┖ DirtyWordConfig 瀛楀吀
         ClearConfigDictionary<DirtyWordConfig>();
         // 娓呯┖ DungeonConfig 瀛楀吀
         ClearConfigDictionary<DungeonConfig>();
         // 娓呯┖ DungeonOpenTimeConfig 瀛楀吀
         ClearConfigDictionary<DungeonOpenTimeConfig>();
-        // 娓呯┖ FaceConfig 瀛楀吀
-        ClearConfigDictionary<FaceConfig>();
         // 娓呯┖ FamilyDonateConfig 瀛楀吀
         ClearConfigDictionary<FamilyDonateConfig>();
         // 娓呯┖ FightPowerRatioConfig 瀛楀吀
@@ -282,50 +256,22 @@
         ClearConfigDictionary<LineupRecommendConfig>();
         // 娓呯┖ LLMJConfig 瀛楀吀
         ClearConfigDictionary<LLMJConfig>();
-        // 娓呯┖ MainChapterConfig 瀛楀吀
-        ClearConfigDictionary<MainChapterConfig>();
         // 娓呯┖ MainLevelConfig 瀛楀吀
         ClearConfigDictionary<MainLevelConfig>();
         // 娓呯┖ ModelConfig 瀛楀吀
         ClearConfigDictionary<ModelConfig>();
-        // 娓呯┖ NPCConfig 瀛楀吀
-        ClearConfigDictionary<NPCConfig>();
-        // 娓呯┖ NPCExConfig 瀛楀吀
-        ClearConfigDictionary<NPCExConfig>();
-        // 娓呯┖ NPCLineupConfig 瀛楀吀
-        ClearConfigDictionary<NPCLineupConfig>();
-        // 娓呯┖ OrderInfoConfig 瀛楀吀
-        ClearConfigDictionary<OrderInfoConfig>();
-        // 娓呯┖ PlayerAttrConfig 瀛楀吀
-        ClearConfigDictionary<PlayerAttrConfig>();
-        // 娓呯┖ PlayerFaceConfig 瀛楀吀
-        ClearConfigDictionary<PlayerFaceConfig>();
-        // 娓呯┖ PriorBundleConfig 瀛楀吀
-        ClearConfigDictionary<PriorBundleConfig>();
+        // 娓呯┖ PlayerLVConfig 瀛楀吀
+        ClearConfigDictionary<PlayerLVConfig>();
         // 娓呯┖ RandomNameConfig 瀛楀吀
         ClearConfigDictionary<RandomNameConfig>();
         // 娓呯┖ SignInConfig 瀛楀吀
         ClearConfigDictionary<SignInConfig>();
-        // 娓呯┖ StoreConfig 瀛楀吀
-        ClearConfigDictionary<StoreConfig>();
-        // 娓呯┖ SuccessConfig 瀛楀吀
-        ClearConfigDictionary<SuccessConfig>();
-        // 娓呯┖ SysInfoConfig 瀛楀吀
-        ClearConfigDictionary<SysInfoConfig>();
         // 娓呯┖ TianziConfig 瀛楀吀
         ClearConfigDictionary<TianziConfig>();
         // 娓呯┖ TitleConfig 瀛楀吀
         ClearConfigDictionary<TitleConfig>();
         // 娓呯┖ TitleStarUpConfig 瀛楀吀
         ClearConfigDictionary<TitleStarUpConfig>();
-        // 娓呯┖ TreasureSetConfig 瀛楀吀
-        ClearConfigDictionary<TreasureSetConfig>();
-        // 娓呯┖ TreeLVConfig 瀛楀吀
-        ClearConfigDictionary<TreeLVConfig>();
-        // 娓呯┖ WindowSearchConfig 瀛楀吀
-        ClearConfigDictionary<WindowSearchConfig>();
-        // 娓呯┖ XBGetItemConfig 瀛楀吀
-        ClearConfigDictionary<XBGetItemConfig>();
         // 娓呯┖ ZhanlingConfig 瀛楀吀
         ClearConfigDictionary<ZhanlingConfig>();
     }
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB422_tagMCTurnFightObjDead.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB422_tagMCTurnFightObjDead.cs
index 9d44132..60d3216 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB422_tagMCTurnFightObjDead.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB422_tagMCTurnFightObjDead.cs
@@ -15,7 +15,7 @@
         // 鐢辨妧鑳藉幓閫氱煡鎴樺満姝讳骸 battleField.OnObjsDead(deadList)
 #if UNITY_EDITOR
         BattleDebug.LogError("缂栬緫鍣ㄤ笅鐨勬浜℃祴璇�");
-        battleField?.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>(){vNetData});
+        battleField?.OnObjsDead(new List<BattleDeadPack>(){ new BattleDeadPack(){ deadPack = vNetData}});
 #endif
         if (!vNetPack.commonMark)
             battleField?.DistributeNextPackage();
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index e933973..dcc0fda 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -4,6 +4,7 @@
 using LitJson;
 using DG.Tweening;
 using System.IO;
+using System.Linq;
 
 
 public class BattleField
@@ -440,33 +441,35 @@
         }
     }
 
-    public virtual void OnObjsDead(List<HB422_tagMCTurnFightObjDead> deadPackList)
+    public virtual void OnObjsDead(List<BattleDeadPack> deadPackList)
     {
         if (deadPackList.Count > 0)
         {
             // 杩囨护鎺夋鍦ㄥ鐞嗘浜$殑瑙掕壊锛岄伩鍏嶉噸澶嶅鐞�
-            List<HB422_tagMCTurnFightObjDead> validDeadList = new List<HB422_tagMCTurnFightObjDead>();
+            List<BattleDeadPack> validDeadList = new List<BattleDeadPack>();
             
             foreach (var deadPack in deadPackList)
             {
+                var objID = deadPack.deadPack.ObjID;
                 // 妫�鏌ユ槸鍚﹀凡缁忓湪澶勭悊姝讳骸
-                if (processingDeathObjIds.Contains(deadPack.ObjID))
+                if (processingDeathObjIds.Contains(objID))
                 {
-                    Debug.LogWarning($"OnObjsDead: 瑙掕壊姝e湪澶勭悊姝讳骸锛屽拷鐣ラ噸澶嶆浜℃秷鎭� ObjID={deadPack.ObjID}");
+                    Debug.LogWarning($"OnObjsDead: 瑙掕壊姝e湪澶勭悊姝讳骸锛屽拷鐣ラ噸澶嶆浜℃秷鎭� ObjID={objID}");
                     continue;
                 }
                 
-                BattleObject battleObj = battleObjMgr.GetBattleObject((int)deadPack.ObjID);
+                BattleObject battleObj = battleObjMgr.GetBattleObject((int)objID);
                 if (battleObj == null)
                 {
-                    Debug.LogWarning($"OnObjsDead: 鎵句笉鍒拌鑹� ObjID={deadPack.ObjID}");
+                    Debug.LogWarning($"OnObjsDead: 鎵句笉鍒拌鑹� ObjID={objID}");
                     continue;
                 }
                 
                 // 娣诲姞鍒板鐞嗕腑鍒楄〃
-                processingDeathObjIds.Add(deadPack.ObjID);
+                processingDeathObjIds.Add(objID);
                 validDeadList.Add(deadPack);
-                // Debug.LogError("prepare death : " + deadPack.ObjID);
+
+
             }
             
             // 鍙鐞嗘湁鏁堢殑姝讳骸娑堟伅
diff --git a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
index b98b95a..8095661 100644
--- a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -1,14 +1,21 @@
 using UnityEngine;
 using System.Collections.Generic;
 using Cysharp.Threading.Tasks;
+using System;
 
 
 //  濡傛灉杩欎釜Action鍗′綇浜� 澶ф鐜囨槸鍥犱负 鍔ㄤ綔琚叾浠栧姩浣滀腑鏂簡 瀵艰嚧娌℃湁鍥炶皟
 public class DeathRecordAction : RecordAction
 {
-    protected List<HB422_tagMCTurnFightObjDead> deadPackList = new List<HB422_tagMCTurnFightObjDead>();
+    protected List<BattleDeadPack> deadPackList = new List<BattleDeadPack>();
 
-    public DeathRecordAction(BattleField _battleField, List<HB422_tagMCTurnFightObjDead> _deadPackList)
+    protected Dictionary<BattleDeadPack, SkillRecordAction> deathActionDict = new Dictionary<BattleDeadPack, SkillRecordAction>();
+
+    protected Dictionary<BattleDeadPack, Func<bool>> deadActionStatesDict = new Dictionary<BattleDeadPack, Func<bool>>();
+
+    protected Dictionary<int, bool> dropStateDict = new Dictionary<int, bool>();
+
+    public DeathRecordAction(BattleField _battleField, List<BattleDeadPack> _deadPackList)
         : base(RecordActionType.Death, _battleField, null)
     {
         deadPackList = _deadPackList;
@@ -17,61 +24,94 @@
 
     public override void Run()
     {
+        //  璇ユ鐨勬甯告
+        //  鏈夋妧鑳界殑鍒欐寜鐓ч『搴忔挱鏀炬浜℃妧鑳� 鍚庡啀姝e父姝�
         if (isFinish)
-        {
             return;
-        }
 
-        base.Run();
 
         if (!isRunOnce)
         {
             isRunOnce = true;
-            bool isLastOne = false;
-            int index = 0;
-            int total = deadPackList.Count;
 
-            bool canFind = true;
-
-            foreach (var deadPack in deadPackList)
+            foreach (var battleDeadPack in deadPackList)
             {
-                BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID);
-                if (null != deadObj)
+                if (battleDeadPack.deadTriggerSkill != null)
                 {
-                    if (deadObj.IsDead())
+                    var skillAction = battleDeadPack.deadTriggerSkill.CreateSkillAction();
+                    if (null != skillAction)
                     {
-                        index++;
-                        continue;
+                        deathActionDict.Add(battleDeadPack, skillAction);
                     }
-                    PerformDrop(deadObj);
-                    // Debug.LogError("start death : " + deadObj.ObjID);
-                    deadObj.OnDeath(() =>
-                    {
-                        // Debug.LogError("death callback : " + deadObj.ObjID);
-                        index++;
-
-                        isLastOne = index >= total;
-
-                        if (isLastOne)
-                        {
-                            // UniTaskExtension.DelayTime((GameObject)null, 0.3f / battleField.speedRatio, () =>
-                            // {
-                            isFinish = true;
-                            // });
-                        }
-                    });
                 }
                 else
                 {
-                    canFind = false;
+                    deadActionStatesDict.Add(battleDeadPack, CreateDeadActionState(battleDeadPack));
+                }
+            }
+        }
+        else
+        {
+            List<BattleDeadPack> finishedKeys = new List<BattleDeadPack>();
+            foreach (var kv in deathActionDict)
+            {
+                if (!kv.Key.isPlaySkill)
+                {
+                    // battleField.recordPlayer.ImmediatelyPlay(kv.Value);
+                    kv.Key.isPlaySkill = true;
+                }
+
+                if (!kv.Value.IsFinished())
+                {
+                    kv.Value.Run();
+                }
+                else
+                {
+                    deadActionStatesDict.Add(kv.Key, CreateDeadActionState(kv.Key, true));
+                    finishedKeys.Add(kv.Key);
+                }
+                break;
+            }
+
+            foreach (var key in finishedKeys)
+            {
+                deathActionDict.Remove(key);
+            }
+
+            int completeNum = 0;
+
+            foreach (var kv in deadActionStatesDict)
+            {
+                if (kv.Value())
+                {
+                    completeNum++;
                 }
             }
 
-            if (!canFind)
+            if (completeNum == deadPackList.Count)
             {
                 isFinish = true;
             }
         }
+    }
+
+    private Func<bool> CreateDeadActionState(BattleDeadPack deadPack, bool withoutAnime = false)
+    {
+        BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.deadPack.ObjID);
+        if (null == deadObj)
+        {
+            return () => true;
+        }
+
+        PerformDrop(deadObj);
+
+        bool isComplete = false;
+
+        deadObj.OnDeath(() => {
+            isComplete = true;
+        }, withoutAnime);
+
+        return () => isComplete;
     }
 
     public override void ForceFinish()
@@ -81,7 +121,7 @@
         //  鐩存帴缁撴潫
         foreach (var deadPack in deadPackList)
         {
-            BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID);
+            BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.deadPack.ObjID);
             if (null != deadObj)
             {
                 PerformDrop(deadObj);
@@ -97,6 +137,11 @@
         //  鍙湁涓荤嚎鎺夎惤鐗╁搧
         if (battleField.MapID == 1 || battleField.MapID == 2)
         {
+            if (dropStateDict.ContainsKey(deadObj.ObjID))
+            {
+                return;
+            }
+            dropStateDict.Add(deadObj.ObjID, true);
             deadObj.PerformDrop();
         }
     }
diff --git a/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs
new file mode 100644
index 0000000..214d4fa
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs
@@ -0,0 +1,47 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System;
+
+
+//  濡傛灉杩欎釜Action鍗′綇浜� 澶ф鐜囨槸鍥犱负 鍔ㄤ綔琚叾浠栧姩浣滀腑鏂簡 瀵艰嚧娌℃湁鍥炶皟
+public class RebornRecordAction : RecordAction
+{
+    private Action actionCallback;
+
+    public RebornRecordAction(BattleField _battleField, BattleObject rebornObj, Action _callback)
+        : base(RecordActionType.Reborn, _battleField, null)
+    {
+        actionCallback = _callback;
+    }
+
+
+    public override void Run()
+    {
+        
+        if (isFinish)
+            return;
+
+
+        if (!isRunOnce)
+        {
+            isRunOnce = true;
+            actionCallback?.Invoke();
+            actionCallback = null;
+            isFinish = true;
+        }
+    }
+            
+
+    public override void ForceFinish()
+    {
+        isFinish = true;
+
+        if (!isRunOnce)
+        {
+            actionCallback?.Invoke();
+            actionCallback = null;
+        }
+
+        base.ForceFinish();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs.meta b/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs.meta
new file mode 100644
index 0000000..a4e685e
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/RebornRecordAction.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f3b108ec07cfc874390fe314c3d33475
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
index 6c423ae..44e77c1 100644
--- a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -26,6 +26,15 @@
 		return skillBase.IsFinished();
 	}
 
+	public bool IsFinishedForJudge()
+	{
+		if (null == skillBase)
+		{
+			return true;
+		}
+		return skillBase.IsFinishedForJudge();
+	}
+
     public override void ForceFinish()
     {
 		//  璁剧疆缁撴潫flag 璁板緱娓呯┖motionBase閲岀殑浜嬩欢
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 0c0377d..41176c9 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -344,7 +344,7 @@
             {
                 PushDropItems(battleHurtParam.battleDrops);
             }
-            battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { battleHurtParam.deadPack });
+            battleField.OnObjsDead(new List<BattleDeadPack>() { battleHurtParam.deadPack });
 
         }
         else
@@ -436,15 +436,23 @@
         battleField.battleTweenMgr.OnPlayTween(tween);
     }
 
-    public virtual void OnDeath(Action _onDeathAnimationComplete)
+    public virtual void OnDeath(Action _onDeathAnimationComplete, bool withoutAnime = false)
     {
         buffMgr.RemoveAllBuff();
         battleField.soundManager.PlayEffectSound(teamHero.heroConfig.DeathSFX, false);
-        motionBase.PlayDeadAnimation(() =>
+        if (withoutAnime)
         {
             SetDeath();
             _onDeathAnimationComplete?.Invoke();
-        });
+        }
+        else
+        {
+            motionBase.PlayDeadAnimation(() =>
+            {
+                SetDeath();
+                _onDeathAnimationComplete?.Invoke();
+            });
+        }
     }
 
     public void SetDeath()
@@ -465,13 +473,18 @@
     public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData)
     {
         // 澶勭悊澶嶆椿閫昏緫
-        battleField.OnObjReborn((uint)ObjID);
+        RebornRecordAction recordAction = new RebornRecordAction(battleField, this, () =>
+        {
+            battleField.OnObjReborn((uint)ObjID);
 
-        teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx);
-        // Debug.LogError("OnReborn " + teamHero.curHp);
-        teamHero.isDead = false;
-        heroGo.SetActive(true);
-        motionBase.ResetForReborn();
+            teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx);
+            heroRectTrans.anchoredPosition = Vector2.zero;
+            // Debug.LogError("OnReborn " + teamHero.curHp);
+            teamHero.isDead = false;
+            heroGo.SetActive(true);
+            motionBase.ResetForReborn();
+        });
+        battleField.recordPlayer.InsertRecord(recordAction);
     }
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 75513bb..2b0d59d 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -324,7 +324,7 @@
     }
 
     public static BattleHurtParam CalcBattleHurtParam(SkillBase skillBase, int hitIndex, BattleObject target, 
-        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack)
+        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, BattleDeadPack deadPack)
     {
         long suckHp = GetSuckHp(skillBase.tagUseSkillAttack);
         SkillConfig skillConfig = skillBase.skillConfig;
@@ -646,20 +646,55 @@
         return null;
     }
 
-    public static List<HB422_tagMCTurnFightObjDead> FindDeadPack(List<GameNetPackBasic> packList)
+    public static List<BattleDeadPack> FindDeadPack(List<GameNetPackBasic> packList)
     {
-        List<HB422_tagMCTurnFightObjDead> deadPacks = new List<HB422_tagMCTurnFightObjDead>();
+        List<BattleDeadPack> deadPacks = new List<BattleDeadPack>();
         for (int i = 0; i < packList.Count; i++)
         {
             var pack = packList[i];
             //	瀵绘壘姝讳骸鍖� 鎵惧埌姝讳骸鍖呬箣鍚庤鎵炬帀钀藉寘 涓嶈兘瓒呰繃鎶�鑳藉寘
             if (pack is HB422_tagMCTurnFightObjDead deadPack)
             {
-                deadPacks.Add(deadPack);
+                deadPacks.Add(new BattleDeadPack { deadPack = deadPack });
             }
-            else if (pack is CustomHB426CombinePack)
+            else if (pack is CustomHB426CombinePack combinePack)
             {
-                break;
+                if (deadPacks.Count > 0)
+                {
+                    HB427_tagSCUseSkill hB427_TagSCUseSkill = combinePack.GetMainHB427SkillPack();
+
+                    if (null == hB427_TagSCUseSkill)
+                    {
+                        break;
+                    }
+                    else
+                    {
+                        var skillID = hB427_TagSCUseSkill.SkillID;
+                        var skillConfig = SkillConfig.Get((int)skillID);
+
+                        if ((SkillTriggerTiming)skillConfig.ClientTriggerTiming == SkillTriggerTiming.Death)
+                        {
+                            for (int j = 0 ; j < deadPacks.Count; j ++)
+                            {
+                                var parentPack = deadPacks[j];
+
+                                if (parentPack.IsOwnSkill(hB427_TagSCUseSkill))
+                                {
+                                    parentPack.SetDeathSkill(combinePack);
+                                    break;
+                                }
+                            }
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                }
+                else
+                {
+                    break;
+                }
             }
         }
         // Debug.LogError("find dead pack " + deadPacks.Count);
diff --git a/Main/System/Battle/Define/BattleDeadPack.cs b/Main/System/Battle/Define/BattleDeadPack.cs
new file mode 100644
index 0000000..6313df2
--- /dev/null
+++ b/Main/System/Battle/Define/BattleDeadPack.cs
@@ -0,0 +1,32 @@
+
+
+using System;
+
+public class BattleDeadPack
+{
+    public HB422_tagMCTurnFightObjDead deadPack;
+
+    public CustomHB426CombinePack deadTriggerSkill;
+
+    public bool isPlaySkill = false;
+
+    public bool IsOwnSkill(HB427_tagSCUseSkill hB427_TagSCUseSkill)
+    {
+        if (deadTriggerSkill != null)
+        {
+            return false;
+        }
+
+        if (deadPack != null)
+        {
+            return deadPack.ObjID == hB427_TagSCUseSkill.ObjID;
+        }
+
+        return false;
+    }
+
+    public void SetDeathSkill(CustomHB426CombinePack combinePack)
+    {
+        deadTriggerSkill = combinePack;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/BattleDeadPack.cs.meta b/Main/System/Battle/Define/BattleDeadPack.cs.meta
new file mode 100644
index 0000000..733b04a
--- /dev/null
+++ b/Main/System/Battle/Define/BattleDeadPack.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3a6717392be38c64ebe4554403650c8d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index 596a637..1e828ca 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -529,7 +529,7 @@
     public HB427_tagSCUseSkill.tagSCUseSkillHurt hurt;
     public HB427_tagSCUseSkill hB427_TagSCUseSkill;
     public int hitIndex;
-    public HB422_tagMCTurnFightObjDead deadPack;
+    public BattleDeadPack deadPack;
     public SkillConfig skillConfig;
 
 
diff --git a/Main/System/Battle/Define/SkillTriggerTiming.cs b/Main/System/Battle/Define/SkillTriggerTiming.cs
new file mode 100644
index 0000000..0a081d9
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTriggerTiming.cs
@@ -0,0 +1,9 @@
+
+
+public enum SkillTriggerTiming
+{
+    None,
+
+    Death = 1, //姝讳骸瑙﹀彂
+
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/SkillTriggerTiming.cs.meta b/Main/System/Battle/Define/SkillTriggerTiming.cs.meta
new file mode 100644
index 0000000..10bd404
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTriggerTiming.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 45fcec403bdee7141a854305dfa66975
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/RecordPlayer/RecordActionType.cs b/Main/System/Battle/RecordPlayer/RecordActionType.cs
index fbc5588..8aa66c0 100644
--- a/Main/System/Battle/RecordPlayer/RecordActionType.cs
+++ b/Main/System/Battle/RecordPlayer/RecordActionType.cs
@@ -14,4 +14,6 @@
     RoundChange,//鍥炲悎鍒囨崲
 
     PreloadRes,//棰勫姞杞借祫婧�
+
+    Reborn, //  澶嶆椿
 }
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 956779a..dcc5639 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -34,7 +34,7 @@
     private float MoveSpeed = 750f;
 
     private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
-    private Dictionary<int, HB422_tagMCTurnFightObjDead> tempDeadPackList = new Dictionary<int, HB422_tagMCTurnFightObjDead>();
+    private Dictionary<int, BattleDeadPack> tempDeadPackList = new Dictionary<int, BattleDeadPack>();
 
     protected List<HB428_tagSCBuffRefresh> buffCollections = new List<HB428_tagSCBuffRefresh>();
 
@@ -43,10 +43,6 @@
     public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
     {
         caster = _caster;
-        if (null == caster)
-        {
-            throw new Exception("SkillBase caster is null ");
-        }
         skillConfig = _skillCfg;
         tagUseSkillAttack = vNetData;
         battleField = _battleField;
@@ -311,12 +307,19 @@
         RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
         ExecuteMoveAndCastSequence(target, () =>
         {
-            // ShadowIllutionCreate(true);
-            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+            if (skillConfig.ClientTriggerTiming == 1)
             {
-                // ShadowIllutionCreate(false);
                 OnAttackFinish();
-            }, MoveSpeed);
+            }
+            else
+            {
+                // ShadowIllutionCreate(true);
+                MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+                {
+                    // ShadowIllutionCreate(false);
+                    OnAttackFinish();
+                }, MoveSpeed);   
+            }
         });
     }
 
@@ -352,12 +355,19 @@
         RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
         ExecuteMoveAndCastSequence(target, () =>
         {
-            // ShadowIllutionCreate(true);
-            MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+            if (skillConfig.ClientTriggerTiming == 1)
             {
-                // ShadowIllutionCreate(false);
                 OnAttackFinish();
-            }, MoveSpeed);
+            }
+            else
+            {
+                // ShadowIllutionCreate(true);
+                MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+                {
+                    // ShadowIllutionCreate(false);
+                    OnAttackFinish();
+                }, MoveSpeed);   
+            }
         });
     }
 
@@ -698,7 +708,7 @@
         // ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
         int objID = (int)target.ObjID;
         tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
-        tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
+        tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
 
         // ============ 鍙傛暟鎵撳寘 ============
         BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack);
@@ -720,7 +730,7 @@
         // ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
         int objID = (int)target.ObjID;
         tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
-        tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
+        tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
 
         // ============ 鍙傛暟鎵撳寘锛堝皢 tagSCUseSkillHurtEx 杞崲涓� tagSCUseSkillHurt锛�============
         HB427_tagSCUseSkill.tagSCUseSkillHurt hurt = new HB427_tagSCUseSkill.tagSCUseSkillHurt
@@ -805,7 +815,7 @@
     // 澶勭悊姝讳骸鐩稿叧閫昏緫锛氬垎閰嶆帀钀藉拰缁忛獙
     protected void HandleDead()
     {
-        var deadPackList = BattleUtility.FindDeadPack(packList);
+        List<BattleDeadPack> deadPackList = BattleUtility.FindDeadPack(packList);
         if (deadPackList.Count <= 0) return;
 
         CheckAfterDeadhPack();
@@ -829,7 +839,8 @@
         // 鏋勯�燘attleDrops骞剁紦瀛�
         for (int i = 0; i < deadPackList.Count; i++)
         {
-            int objID = (int)deadPackList[i].ObjID;
+            BattleDeadPack battleDeadPack = deadPackList[i];
+            int objID = (int)battleDeadPack.deadPack.ObjID;
             BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject(objID);
             
             // 淇锛氭坊鍔犵┖鍊兼鏌�
@@ -871,7 +882,8 @@
         }
 
         // 淇锛氶伩鍏嶅湪閬嶅巻鏃朵慨鏀归泦鍚堬紝鍏堟敹闆嗗悗鍒犻櫎
-        var deadPacksToRemove = new List<GameNetPackBasic>(deadPackList.Cast<GameNetPackBasic>());
+        var deadPacksToRemove = new List<GameNetPackBasic>(deadPackList.Select(d => d.deadPack));
+        deadPacksToRemove.AddRange(deadPackList.Where(d => d.deadTriggerSkill != null).Select(d => d.deadTriggerSkill));
         foreach (var deadPack in deadPacksToRemove)
         {
             packList.Remove(deadPack);
@@ -965,6 +977,37 @@
             packList.RemoveAt(removeIndexList[i]);
     }
 
+
+    public virtual bool IsFinishedForJudge()
+    {
+        if (!isPlay) return false;
+
+        if (skillEffect != null)
+        {
+            if (!skillEffect.IsFinished()) return false;
+        }
+
+        if (otherSkillActionList.Count > 0)
+        {
+            foreach (var action in otherSkillActionList)
+            {
+                if (!action.IsFinishedForJudge()) return false;
+            }
+        }
+
+        if (isFinished && moveFinished)
+        {
+            if (packList.Count > 0)
+            {
+                return false;
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
     // 妫�鏌ユ妧鑳芥槸鍚﹀畬鎴愶細缁煎悎妫�鏌ユ墍鏈夊畬鎴愭潯浠�
     public virtual bool IsFinished()
     {
@@ -1023,6 +1066,9 @@
     // 寮哄埗缁撴潫鎶�鑳斤細绔嬪嵆缁撴潫鎵�鏈夋妧鑳界浉鍏崇殑澶勭悊
     public virtual void ForceFinished()
     {
+        if (isFinished)
+            return;
+
         skillEffect?.ForceFinished();
         
         otherSkillActionList.ForEach(action => action.ForceFinish());
@@ -1184,4 +1230,5 @@
         skillEffect = null;
         packList = null;
     }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0