From 802642221571f5586999bd3504689171cd607284 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 21 一月 2026 10:54:40 +0800
Subject: [PATCH] 125 战斗 漏传部分
---
Main/System/Battle/Skill/SkillBase.cs | 287 ++++++++++++++++++++++-----------------------------------
1 files changed, 111 insertions(+), 176 deletions(-)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 369de65..f95cfa8 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -24,7 +24,9 @@
protected RectTransform targetNode = null; // 鐩爣鑺傜偣
public BattleObject caster = null; // 鏂芥硶鑰�
protected List<GameNetPackBasic> packList;
- protected List<SkillRecordAction> otherSkillActionList = new List<SkillRecordAction>();
+
+ protected List<RecordAction> currentWaitingSkill = new List<RecordAction>();
+
protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
@@ -63,6 +65,11 @@
}
SafetyCheck();
+ }
+
+ public virtual void AfterAddToQueue()
+ {
+
}
// 璁剧疆鐖禦ecordAction
@@ -187,22 +194,7 @@
return;
}
- if (otherSkillActionList.Count > 0)
- {
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
- {
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- OnSkillFinished();
- }
- else if (moveFinished)
- {
- action.Run();
- }
- }
- }
+
}
protected void ShadowIllutionCreate(bool create)
@@ -492,11 +484,13 @@
return;
}
+ ProcessSubSkill();
+
HandleDead();
skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
skillEffect.Play(OnHitTargets);
- ProcessSubSkill();
+
isPlay = true;
}
@@ -506,53 +500,52 @@
// 鎸塸ackUID鎺掑簭鎵�鏈夊瓙鎶�鑳�
var allSubSkills = new List<(ulong packUID, SkillRecordAction action)>();
- foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
+ List<GameNetPackBasic> removePackList = new List<GameNetPackBasic>();
+
+ foreach (var pack in packList)
{
- SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
- if (recordAction != null)
+ if (pack is HB427_tagSCUseSkill skillPack)
{
- recordAction.fromSkill = this;
- allSubSkills.Add((subSkillPack.packUID, recordAction));
+ SkillConfig ssc = SkillConfig.Get((int)skillPack.SkillID);
+ if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+ {
+ break;
+ }
+ SkillRecordAction skillRecordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic> { skillPack });
+ allSubSkills.Add((skillPack.packUID, skillRecordAction));
+ removePackList.Add(pack);
+ }
+ else if (pack is HB422_tagMCTurnFightObjDead dead)
+ {
+ break;
+ }
+ else if (pack is CustomHB426CombinePack combinePack)
+ {
+ HB427_tagSCUseSkill sp = combinePack.GetMainHB427SkillPack();
+ SkillConfig ssc = SkillConfig.Get((int)sp.SkillID);
+
+ if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+ {
+ break;
+ }
+ SkillRecordAction skillRecordAction = combinePack.CreateSkillAction();
+ allSubSkills.Add((sp.packUID, skillRecordAction));
+ removePackList.Add(pack);
}
}
- tagUseSkillAttack.subSkillList.Clear();
-
- foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
+
+ for (int i = 0; i < removePackList.Count; i++)
{
- SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, subCombinePack.packList);
- if (recordAction != null)
- {
- recordAction.fromSkill = this;
- ulong packUID = subCombinePack.packList.Count > 0 ? GetPackUID(subCombinePack.packList[0]) : 0;
- allSubSkills.Add((packUID, recordAction));
- }
+ packList.Remove(removePackList[i]);
}
- tagUseSkillAttack.subSkillCombinePackList.Clear();
// 鎸塸ackUID鎺掑簭
allSubSkills.Sort((a, b) => a.packUID.CompareTo(b.packUID));
- // 渚濇娣诲姞鍒皉ecordPlayer锛屾瘡涓瓑寰呭墠涓�涓畬鎴�
- RecordAction waitingRecordAction = null;
foreach (var (packUID, recordAction) in allSubSkills)
{
- // 銆愪娇鐢� BattleField.recordPlayer銆�
- // 鍘熷洜锛氬瓙鎶�鑳芥槸鐙珛鐨凷killRecordAction锛屽簲璇ユ槸椤跺眰RecordAction锛岀敱BattleField鐨勪富RecordPlayer绠$悊
- // 閫氳繃璁剧疆鐖跺瓙鍏崇郴鍜學aitingPlay锛屽彲浠ユ帶鍒跺瓙鎶�鑳界殑鎵ц鏃舵満
- if (waitingRecordAction != null)
- {
- // 姣忎釜閮藉簲璇ョ瓑鍓嶄竴涓粨鏉熷悗
- battleField.recordPlayer.ImmediatelyPlay(recordAction, waitingRecordAction, true);
- }
- else
- {
- battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
- }
-
- if (recordAction.IsNeedWaiting())
- {
- waitingRecordAction = recordAction;
- }
+ battleField.recordPlayer.ImmediatelyPlay(recordAction);
+ currentWaitingSkill.Add(recordAction);
}
}
@@ -815,7 +808,14 @@
#endif
// 鍏堣皟鐢ㄧ洰鏍囧彈浼�
- target.Hurt(hurtParam, parentRecordAction);
+ var recordAc = target.Hurt(hurtParam, parentRecordAction);
+
+ if (null != recordAc)
+ {
+ tempDeadPackList.Remove(hurtParam.hurter.hurtObj.ObjID);
+ battleField.recordPlayer.ImmediatelyPlay(recordAc, parentRecordAction, true);
+ currentWaitingSkill.Add(recordAc);
+ }
// 鍐嶈皟鐢ㄦ柦娉曡�呭惛琛�/鍙嶄激
caster.OnHurtTarget(hurtParam);
@@ -965,66 +965,6 @@
foreach (var pack in packsToRemove)
{
packList.Remove(pack);
- }
-
- // 2. 鏀堕泦 subSkillList 涓� packUID 澶т簬姝讳骸鍖呯殑瀛愭妧鑳�
- if (tagUseSkillAttack.subSkillList != null && tagUseSkillAttack.subSkillList.Count > 0)
- {
- var subSkillsToRemove = new List<HB427_tagSCUseSkill>();
- foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
- {
- ulong subSkillUID = GetPackUID(subSkillPack);
- if (subSkillUID > maxDeathPackUID)
- {
- BattleDebug.LogError($"SkillBase.HandleDead: 浠巗ubSkillList鏀堕泦姝讳骸鍚庣殑鍖� - Type: {subSkillPack.GetType().Name}, UID: {subSkillUID}");
- foreach (var deadPack in deadPackList)
- {
- deadPack.packListAfterDeath.Add(subSkillPack);
- }
- subSkillsToRemove.Add(subSkillPack);
- }
- }
-
- // 浠� subSkillList 涓Щ闄よ繖浜涘瓙鎶�鑳�
- foreach (var subSkill in subSkillsToRemove)
- {
- tagUseSkillAttack.subSkillList.Remove(subSkill);
- }
- }
-
- // 3. 鏀堕泦 subSkillCombinePackList 涓� packUID 澶т簬姝讳骸鍖呯殑缁勫悎鍖�
- if (tagUseSkillAttack.subSkillCombinePackList != null && tagUseSkillAttack.subSkillCombinePackList.Count > 0)
- {
- var combinePacksToRemove = new List<CustomHB426CombinePack>();
- foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
- {
- // 鎵惧埌缁勫悎鍖呬腑鐨勬渶灏� packUID锛堢粍鍚堝寘鐨� packUID 浠ョ涓�涓寘涓哄噯锛�
- ulong combinePackUID = 0;
- if (subCombinePack.packList != null && subCombinePack.packList.Count > 0)
- {
- combinePackUID = GetPackUID(subCombinePack.packList[0]);
- }
-
- if (combinePackUID > maxDeathPackUID)
- {
- BattleDebug.LogError($"SkillBase.HandleDead: 浠巗ubSkillCombinePackList鏀堕泦姝讳骸鍚庣殑鍖� - UID: {combinePackUID}, 鍖呭惈 {subCombinePack.packList.Count} 涓瓙鍖�");
- // 灏嗙粍鍚堝寘涓殑鎵�鏈夊寘閮芥坊鍔犲埌 packListAfterDeath
- foreach (var pack in subCombinePack.packList)
- {
- foreach (var deadPack in deadPackList)
- {
- deadPack.packListAfterDeath.Add(pack);
- }
- }
- combinePacksToRemove.Add(subCombinePack);
- }
- }
-
- // 浠� subSkillCombinePackList 涓Щ闄よ繖浜涚粍鍚堝寘
- foreach (var combinePack in combinePacksToRemove)
- {
- tagUseSkillAttack.subSkillCombinePackList.Remove(combinePack);
- }
}
}
@@ -1242,12 +1182,17 @@
if (!skillEffect.IsFinished()) return false;
}
- if (otherSkillActionList.Count > 0)
+ if (currentWaitingSkill.Count > 0)
{
- foreach (var action in otherSkillActionList)
+ if (currentWaitingSkill.Any(s => !s.IsFinished()))
{
- if (!action.IsFinishedForJudge()) return false;
+ return false;
}
+ }
+
+ if (parentRecordAction != null && parentRecordAction.GetInnerRecordPlayer().IsPlaying())
+ {
+ return false;
}
if (isFinished && moveFinished)
@@ -1290,18 +1235,14 @@
}
// 妫�鏌ュ叾浠栨妧鑳藉姩浣滄槸鍚﹀畬鎴�
- if (otherSkillActionList.Count > 0)
+ if (currentWaitingSkill.Count > 0)
{
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
+ if (currentWaitingSkill.Any(s => s.IsFinished()))
{
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- OnSkillFinished();
- }
+ currentWaitingSkill.RemoveAll(s => s.IsFinished());
+ OnSkillFinished();
}
- if (otherSkillActionList.Count > 0)
+ else
{
tempRetValue = false;
}
@@ -1312,6 +1253,9 @@
return false;
}
+
+
+
// 妫�鏌ユ渶缁堝畬鎴愮姸鎬�
if (isFinished && moveFinished)
{
@@ -1321,13 +1265,24 @@
return false;
}
+ // 濡傛灉鑷繁鍐呴儴鐨剅ecora action鐨� inner record player杩樻湁娌℃墽琛屽畬鐨勫寘 涔熸槸杩斿洖false
+ if (parentRecordAction != null && parentRecordAction.GetInnerRecordPlayer().IsPlaying())
+ {
+ return false;
+ }
+
// 鎶�鑳藉畬鍏ㄧ粨鏉燂紝绉婚櫎鎶�鑳芥敞鍐屽苟瑙﹀彂寤惰繜鐨勬浜″垽瀹�
if (battleField != null && caster != null)
{
battleField.RemoveCastingSkill(caster.ObjID, this);
// 浼犻�抪arentRecordAction锛岃姝讳骸鎶�鑳界瓑寰呭綋鍓嶆妧鑳藉畬鎴�
- battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+ DeathRecordAction recordAction = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+ if (null != recordAction)
+ {
+ parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction, parentRecordAction, true);
+ return false;
+ }
}
return true;
@@ -1350,39 +1305,25 @@
}
// 浼犻�抪arentRecordAction锛岃姝讳骸鎶�鑳界瓑寰呭綋鍓嶆妧鑳藉畬鎴�
- battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+ RecordAction rc = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+ if (null != rc)
+ {
+ parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(rc);
+ }
// 1. 寮哄埗缁撴潫鎶�鑳芥晥鏋�
skillEffect?.ForceFinished();
skillEffect = null;
-
- foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
- {
- SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
- recordAction.fromSkill = this;
- otherSkillActionList.Add(recordAction);
-
- // 銆愪娇鐢� BattleField.recordPlayer銆�
- // 鍘熷洜锛氬嵆浣垮湪ForceFinished涓紝瀛愭妧鑳戒篃鏄《灞俁ecordAction锛屽簲璇ョ敱涓籖ecordPlayer绠$悊
- // 杩欎簺瀛愭妧鑳戒細绔嬪嵆琚獸orceFinish锛屼絾浠嶉渶瑕佹纭殑鎾斁鍣ㄤ笂涓嬫枃
- battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
- }
- tagUseSkillAttack.subSkillList.Clear();
- foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
- {
- SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, subCombinePack.packList);
- recordAction.fromSkill = this;
- otherSkillActionList.Add(recordAction);
-
- // 銆愪娇鐢� BattleField.recordPlayer銆�
- // 鍘熷洜锛氬嵆浣垮湪ForceFinished涓紝瀛愭妧鑳戒篃鏄《灞俁ecordAction锛屽簲璇ョ敱涓籖ecordPlayer绠$悊
- battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
- }
- tagUseSkillAttack.subSkillCombinePackList.Clear();
// 2. 寮哄埗缁撴潫鎵�鏈夊瓙鎶�鑳藉姩浣�
- otherSkillActionList.ForEach(action => action.ForceFinish());
- otherSkillActionList.Clear();
+ if (currentWaitingSkill.Count > 0)
+ {
+ foreach (var skill in currentWaitingSkill)
+ {
+ skill.ForceFinish();
+ }
+ currentWaitingSkill.Clear();
+ }
// 3. 娓呯悊 DOTween 鍔ㄧ敾锛堥槻姝㈢Щ鍔ㄥ洖璋冨湪鎴樻枟缁撴潫鍚庢墽琛岋級
if (caster != null && caster.heroRectTrans != null)
@@ -1464,8 +1405,6 @@
}
else
{
- if (pack is CustomB421ActionPack actionPack)
- actionPack.Distribute();
// 銆愪娇鐢� parentRecordAction.innerRecordPlayer銆�
// 鍘熷洜锛欶orceFinished鏃跺墿浣欑殑鍖呬篃鏄妧鑳藉唴閮ㄤ骇鐢熺殑锛屽簲璇ョ敱innerRecordPlayer绠$悊
// 杩欐牱鍙互纭繚鍗充娇寮哄埗缁撴潫锛屽寘鐨勫鐞嗕篃鍦ㄦ纭殑涓婁笅鏂囦腑
@@ -1493,20 +1432,14 @@
}
// 楠岃瘉鍏朵粬鎶�鑳藉姩浣滄槸鍚﹀畬鎴�
- if (otherSkillActionList.Count > 0)
+ if (currentWaitingSkill.Count > 0)
{
- bool hasFinishedAction = false;
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
- {
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- hasFinishedAction = true;
- }
- }
+ bool hasFinishedAction = currentWaitingSkill.All(s => s.IsFinished());
+
if (hasFinishedAction)
{
+ // 淇姝诲惊鐜細瀹屾垚鍚庨渶瑕佹竻绌� currentWaitingSkill
+ currentWaitingSkill.Clear();
continue; // 浣跨敤continue浠f浛閫掑綊璋冪敤
}
return;
@@ -1534,17 +1467,24 @@
protected virtual bool ResolvePackList()
{
+ if (currentWaitingSkill.Count > 0)
+ {
+ return false;
+ }
+
while (packList.Count > 0)
{
var pack = packList[0];
packList.RemoveAt(0);
+
if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
{
BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
- var otherSkillAction = combinePack.CreateSkillAction();
- otherSkillAction.fromSkill = this;
- otherSkillActionList.Add(otherSkillAction);
+ var skillRecordAction = combinePack.CreateSkillAction();
+ skillRecordAction.fromSkill = this;
+ currentWaitingSkill.Add(skillRecordAction);
+ parentRecordAction.GetInnerRecordPlayer().PlayRecord(skillRecordAction);
return false;
}
else if (IsBuffPack(pack))
@@ -1572,11 +1512,6 @@
buffPackCollections.Clear();
continue;
}
-
- if (pack is CustomB421ActionPack actionPack)
- {
- actionPack.Distribute();
- }
else
{
// 銆愪娇鐢� parentRecordAction.innerRecordPlayer銆�
@@ -1594,7 +1529,7 @@
{
tempDropList?.Clear();
tempDeadPackList?.Clear();
- otherSkillActionList?.Clear();
+ currentWaitingSkill?.Clear();
dropPackList?.Clear();
expPackList?.Clear();
buffPackCollections?.Clear();
--
Gitblit v1.8.0