From bb145d27787e6d54cb4bf0995cf11a41d1c9e67d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 05 九月 2025 15:25:28 +0800
Subject: [PATCH] 125 【战斗】战斗系统 强制结束战斗(haverest)

---
 Main/System/Battle/Skill/SkillBase.cs |   87 +++++++++++++++++++++++++++----------------
 1 files changed, 54 insertions(+), 33 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 247d755..46a4383 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -106,7 +106,7 @@
 		switch (skillConfig.castMode)
 		{
 			case SkillCastMode.Self:
-				CastImpl();
+				CastImpl(OnAttackFinish);
 				break;
 			case SkillCastMode.Enemy:
 				CastToEnemy();
@@ -175,12 +175,8 @@
 						() =>
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, 
+								OnAttackFinish);
 						}
 					, -1f);
 				});
@@ -200,17 +196,13 @@
 			return;
 		}
 
-		var mainHurt = tagUseSkillAttack.HurtList[0];
+		int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
 
-		BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID);
-		if (mainTarget == null)
-		{
-			Debug.LogError("鐩爣涓虹┖ mainTarget == null ObjID : " + mainHurt.ObjID);
-			OnSkillFinished();
-			return;
-		}
+		BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
 
-		MoveToTarget(mainTarget.heroRectTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
+		RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
+
+		MoveToTarget(targetTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
 		{
 			//	鍒颁綅缃浆韬�(涓嶄竴瀹氶潪瑕佽浆韬� 浣嗘槸娴佺▼瑕佸啓)
 			TurnBack(() =>
@@ -222,12 +214,8 @@
 						() =>
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, 
+								OnAttackFinish);
 						}
 					, -1f);
 				});
@@ -256,17 +244,20 @@
 						() =>
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum),
+								Vector2.zero, moveTime, OnAttackFinish);
 						}
 					, -1f);
 				});
 			}, -1f);
 		});
+	}
+
+	protected void OnAttackFinish()
+	{
+		TurnBack(null, 1f);
+		OnAllAttackMoveFinished();
+		caster.motionBase.PlayAnimation(MotionName.idle, true);
 	}
 
 
@@ -294,7 +285,7 @@
 				skillConfig,
 				tagUseSkillAttack
 			);
-		if (skillEffect != null)
+		// if (skillEffect != null)
 		{
 			skillEffect.Play(OnHitTargets);
 		}
@@ -315,7 +306,7 @@
 	/// <param name="times"></param>
 	public virtual void OnMiddleFrameStart(int times)
 	{
-		if (skillEffect != null)
+		// if (skillEffect != null)
 		{
 			skillEffect.OnMiddleFrameStart(times);
 		}
@@ -323,7 +314,7 @@
 
 	public virtual void OnMiddleFrameEnd(int times, int hitIndex)
 	{
-		if (skillEffect != null)
+		// if (skillEffect != null)
 		{
 			skillEffect.OnMiddleFrameEnd(times, hitIndex);
 		}
@@ -334,7 +325,10 @@
 	/// </summary>
 	public virtual void OnFinalFrameStart()
 	{
-
+		// if (skillEffect != null)
+		{
+			skillEffect.OnFinalFrameStart();
+		}
 	}
 
 	/// <summary>
@@ -342,7 +336,12 @@
 	/// </summary>
 	public virtual void OnFinalFrameEnd()
 	{
+		// if (skillEffect != null)
+		{
+			skillEffect.OnFinalFrameEnd();
+		}
 
+		HandleDead();
 	}
 
 
@@ -375,7 +374,7 @@
 
 			OnHitEachTarget(_hitIndex, target, hurt);
 		}
-		HandleDead();
+		
 	}
 
 
@@ -587,7 +586,29 @@
 
 	public virtual void ForceFinished()
 	{
+		skillEffect?.ForceFinished();
 		isFinished = true;
+
+		while (packList.Count > 0)
+		{
+			var pack = packList[0];
+			packList.RemoveAt(0);
+
+			if (pack is CustomHB426CombinePack)
+			{
+				var combinePack = pack as CustomHB426CombinePack;
+				if (combinePack.startTag.Tag.StartsWith("Skill_"))
+				{
+					BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
+					otherSkillAction = combinePack.CreateSkillAction();
+
+					//	寮哄埗缁撴潫鍏朵粬鎶�鑳�
+					otherSkillAction.ForceFinish();
+					return;
+				}
+			}
+			PackageRegedit.Distribute(pack);
+		}
 	}
 
 	public void OnSkillFinished()

--
Gitblit v1.8.0