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