From 78a9b0e3a368d2b59fd6559a2be1f50d32040ea0 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 18 十一月 2025 18:14:49 +0800
Subject: [PATCH] 125 战斗 tagAim=6的支持 持续buff层级永远在最前

---
 Main/System/Battle/SkillEffect/NormalSkillEffect.cs               |    6 +-
 Main/System/Battle/SkillEffect/NoEffect.cs                        |    6 +-
 Main/System/Battle/Skill/SkillFactory.cs                          |    3 +
 Main/System/Battle/BattleUtility.cs                               |    7 +++
 Main/System/Battle/Skill/SkillBase.cs                             |   16 ++++---
 Main/System/Battle/SkillEffect/DotSkillEffect.cs                  |    4 +-
 Main/System/Battle/SkillEffect/SkillEffect.cs                     |    4 +
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs |    8 ++--
 Main/System/Battle/SkillEffect/BulletSkillEffect.cs               |    4 +-
 Main/Component/UI/Effect/BattleEffectPlayer.cs                    |    2 
 Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs           |    5 ++
 Main/System/Battle/SkillEffect/SkillEffectFactory.cs              |   13 +++---
 12 files changed, 47 insertions(+), 31 deletions(-)

diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 8dbbc57..2867856 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -222,7 +222,7 @@
             bool isHeroFront = funcIsHeroFront();
 
             int finalSortingOrder = isHeroFront ?
-                (isEffectFront ? BattleConst.ActiveHeroActionSortingOrder : BattleConst.ActiveHeroBackSortingOrder) : (isEffectFront ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder);
+                (isEffectFront ? BattleConst.ActiveHeroActionSortingOrder + 1 : BattleConst.ActiveHeroBackSortingOrder) : (isEffectFront ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder);
 
 
             blocker.SetSortingOrder(finalSortingOrder);
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
index 142b60f..6c423ae 100644
--- a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -7,7 +7,7 @@
 
 	private bool isCast = false;
 
-	public int fromSkillId = 0;
+	public SkillBase fromSkill = null;
 
 	public SkillRecordAction(BattleField _battleField, BattleObject _caster, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> packList)
 		: base(RecordActionType.Skill, _battleField, _caster)
@@ -53,14 +53,14 @@
 		if (isCast)
 			return;
 
-		if (fromSkillId > 0)
+		if (fromSkill != null)
 		{
-			BattleDebug.LogError("cast skill from skill : " + fromSkillId);
+			BattleDebug.LogError("cast skill from skill : " + fromSkill.skillConfig.SkillID);
 		}
 
 		// Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
 
-		skillBase.fromSkillId = fromSkillId;
+		skillBase.fromSkill = fromSkill;
 
 		skillBase.Cast();
 
diff --git a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
index 0b40886..d1eb653 100644
--- a/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjectLayerMgr.cs
@@ -29,6 +29,11 @@
             rendererAdjuster.SetSortingOrder(sortingOrder);
         }
         battleObj.heroInfoBar.maxXpGO.SetSortingOrder(sortingOrder + 5);
+
+        for (int i = 0; i < effectPlayers.Count; i++)
+        {
+            effectPlayers[i]?.ApplySortingOrder();
+        }
     }
 
     public void AddEffect(BattleEffectPlayer effectPlayer)
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 091b9fe..1305c3e 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -150,7 +150,7 @@
         return stringBuild.ToString();
     }
 
-    public static int GetMainTargetPositionNum(BattleObject caster, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> targetList, SkillConfig skillConfig)
+    public static int GetMainTargetPositionNum(SkillBase skillBase, BattleObject caster, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> targetList, SkillConfig skillConfig)
     {
         int returnIndex = 0;
         //  鏍规嵁鏁屾柟琛�閲忛樀钀� 瀛樻椿浜烘暟鏉ラ�夋嫨
@@ -272,6 +272,11 @@
             case 5:
                 returnIndex = caster.teamHero.positionNum;
                 break;
+            case 6:
+                //  璺熼殢涓绘妧鑳界殑鐩爣
+                var fromSkill = skillBase.fromSkill;
+                returnIndex = GetMainTargetPositionNum(fromSkill, fromSkill.caster, fromSkill.tagUseSkillAttack.HurtList.ToList(), fromSkill.skillConfig);
+                break;
             default:
                 Debug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閫夋嫨涓荤洰鏍� 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " TagAim " + skillConfig.TagAim);
                 returnIndex = 0;
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 08a3515..be236e3 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -17,18 +17,18 @@
                                                         189f / 255f);
 
     protected SkillEffect skillEffect;
-    protected HB427_tagSCUseSkill tagUseSkillAttack;
+    public HB427_tagSCUseSkill tagUseSkillAttack;
     public SkillConfig skillConfig;
     protected bool isFinished = false;
     protected BattleField battleField = null; // 鎴樺満
     protected RectTransform targetNode = null; // 鐩爣鑺傜偣
-    protected BattleObject caster = null; // 鏂芥硶鑰�
+    public BattleObject caster = null; // 鏂芥硶鑰�
     protected List<GameNetPackBasic> packList;
     protected List<SkillRecordAction> otherSkillActionList = new List<SkillRecordAction>();
     protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
     protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
     protected bool moveFinished = false;
-    public int fromSkillId;
+    public SkillBase fromSkill;
     public bool isPlay = false;
 
     private float MoveSpeed = 750f;
@@ -219,7 +219,7 @@
             return;
         }
 
-        int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
+        int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(this, caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
         BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
         RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
 
@@ -340,17 +340,19 @@
     {
         HandleDead();
         
-        skillEffect = SkillEffectFactory.CreateSkillEffect(caster, skillConfig, tagUseSkillAttack);
+        skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
         skillEffect.Play(OnHitTargets);
         foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
         {
             SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
+            recordAction.fromSkill = this;
             otherSkillActionList.Add(recordAction);
             battleField.recordPlayer.ImmediatelyPlay(recordAction);
         }
         foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
         {
             SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, subCombinePack.packList);
+            recordAction.fromSkill = this;
             otherSkillActionList.Add(recordAction);
             battleField.recordPlayer.ImmediatelyPlay(recordAction);
         }
@@ -881,7 +883,7 @@
             if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
             {
                 var otherSkillAction = combinePack.CreateSkillAction();
-                otherSkillAction.fromSkillId = skillConfig.SkillID;
+                otherSkillAction.fromSkill = this;
                 otherSkillAction.ForceFinish();
             }
             else
@@ -962,7 +964,7 @@
             {
                 BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
                 var otherSkillAction = combinePack.CreateSkillAction();
-                otherSkillAction.fromSkillId = skillConfig.SkillID;
+                otherSkillAction.fromSkill = this;
                 otherSkillActionList.Add(otherSkillAction);
                 return false;
             }
diff --git a/Main/System/Battle/Skill/SkillFactory.cs b/Main/System/Battle/Skill/SkillFactory.cs
index 185e2bb..10678d2 100644
--- a/Main/System/Battle/Skill/SkillFactory.cs
+++ b/Main/System/Battle/Skill/SkillFactory.cs
@@ -71,10 +71,11 @@
 			case 5:
 			case 6:
 			case 14:
+			case 15:
 				skill = new MountBuffSkill(_caster, skillConfig, vNetData, packList, battleField);
 				break;
 			default:
-				Debug.LogError("瓒呭嚭浜嗘妧鑳界被鍨嬭寖鍥� 璇锋鏌ラ厤缃�, 鐩墠鏆傛椂鍙敮鎸佹敾鍑荤被鍨嬬殑鎶�鑳�");
+				Debug.LogError("瓒呭嚭浜嗘妧鑳界被鍨嬭寖鍥� 璇锋鏌ラ厤缃�, 鐩墠鏆傛椂鍙敮鎸佹敾鍑荤被鍨嬬殑鎶�鑳� " + skillConfig.SkillType);
 				break;
 		}
 
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 4d8362e..603fff8 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -18,8 +18,8 @@
     private int scatterTotalTargets = 0;
 
 
-    public BulletSkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
-        : base(_skillConfig, _caster, _tagUseSkillAttack)
+    public BulletSkillEffect(SkillBase _skillBase, SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+        : base(_skillBase, _skillConfig, _caster, _tagUseSkillAttack)
     {
 
     }
diff --git a/Main/System/Battle/SkillEffect/DotSkillEffect.cs b/Main/System/Battle/SkillEffect/DotSkillEffect.cs
index 5cd0fdd..e1a860c 100644
--- a/Main/System/Battle/SkillEffect/DotSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/DotSkillEffect.cs
@@ -13,8 +13,8 @@
     // protected BattleObject caster;
     // protected List<BattleObject> targets; // 鐩爣鍒楄〃
 
-    public DotSkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
-        : base(_skillConfig, _caster, _tagUseSkillAttack)
+    public DotSkillEffect(SkillBase _skillBase, SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+        : base(_skillBase, _skillConfig, _caster, _tagUseSkillAttack)
     {
 
     }
diff --git a/Main/System/Battle/SkillEffect/NoEffect.cs b/Main/System/Battle/SkillEffect/NoEffect.cs
index d86a4a7..6f0c5c2 100644
--- a/Main/System/Battle/SkillEffect/NoEffect.cs
+++ b/Main/System/Battle/SkillEffect/NoEffect.cs
@@ -13,8 +13,8 @@
     // protected BattleObject caster;
     // protected List<BattleObject> targets; // 鐩爣鍒楄〃
 
-    public NoEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
-        : base(_skillConfig, _caster, _tagUseSkillAttack)
+    public NoEffect(SkillBase _skillBase, SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+        : base(_skillBase, _skillConfig, _caster, _tagUseSkillAttack)
     {
 
     }
@@ -22,7 +22,7 @@
 
     public override void OnMiddleFrameEnd(int times, int hitIndex)
     {
-        int mainTargetIndex = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
+        int mainTargetIndex = BattleUtility.GetMainTargetPositionNum(skillBase, caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
 
         BattleCamp battleCamp = skillConfig.TagFriendly == 1 ? caster.Camp : caster.GetEnemyCamp();
 
diff --git a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
index 172d5f6..ae1fa16 100644
--- a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
@@ -11,8 +11,8 @@
     // protected BattleObject caster;
     // protected List<BattleObject> targets; // 鐩爣鍒楄〃
 
-    public NormalSkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
-        : base(_skillConfig, _caster, _tagUseSkillAttack)
+    public NormalSkillEffect(SkillBase _skillBase, SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+        : base(_skillBase, _skillConfig, _caster, _tagUseSkillAttack)
     {
 
     }
@@ -21,7 +21,7 @@
     public override void OnMiddleFrameEnd(int times, int hitIndex)
     {
 
-        int mainTargetIndex = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
+        int mainTargetIndex = BattleUtility.GetMainTargetPositionNum(skillBase, caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
 
         BattleCamp battleCamp = skillConfig.TagFriendly == 1 ? caster.Camp : caster.GetEnemyCamp();
 
diff --git a/Main/System/Battle/SkillEffect/SkillEffect.cs b/Main/System/Battle/SkillEffect/SkillEffect.cs
index 6932b1c..f588b5b 100644
--- a/Main/System/Battle/SkillEffect/SkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/SkillEffect.cs
@@ -4,6 +4,7 @@
 
 public class SkillEffect
 {
+    protected SkillBase skillBase;
     protected SkillConfig skillConfig;
     protected BattleObject caster;
     protected HB427_tagSCUseSkill tagUseSkillAttack;// 鐩爣鍒楄〃
@@ -14,8 +15,9 @@
 
     protected Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit;
 
-    public SkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+    public SkillEffect(SkillBase _skillBase, SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
     {
+        skillBase = _skillBase;
         skillConfig = _skillConfig;
         caster = _caster;
         tagUseSkillAttack = _tagUseSkillAttack;
diff --git a/Main/System/Battle/SkillEffect/SkillEffectFactory.cs b/Main/System/Battle/SkillEffect/SkillEffectFactory.cs
index 1a79c8c..65ac7ad 100644
--- a/Main/System/Battle/SkillEffect/SkillEffectFactory.cs
+++ b/Main/System/Battle/SkillEffect/SkillEffectFactory.cs
@@ -4,26 +4,27 @@
 
 public static class SkillEffectFactory
 {
-    public static SkillEffect CreateSkillEffect(BattleObject caster, SkillConfig skillConfig, HB427_tagSCUseSkill tagUseSkillAttack)
+    public static SkillEffect CreateSkillEffect(SkillBase skillBase, BattleObject caster, SkillConfig skillConfig, HB427_tagSCUseSkill tagUseSkillAttack)
     {
 
         switch (skillConfig.effectType)
         {
             case SkillEffectType.Bullet:
-                return new BulletSkillEffect(skillConfig, caster, tagUseSkillAttack);
+                return new BulletSkillEffect(skillBase,skillConfig, caster, tagUseSkillAttack);
             case SkillEffectType.Direct:
-                return new NormalSkillEffect(skillConfig, caster, tagUseSkillAttack);
+                return new NormalSkillEffect(skillBase, skillConfig, caster, tagUseSkillAttack);
             // case SkillEffectType.BuffEffect:
             //     return new BuffSkillEffect(skillConfig, caster, targets);
             // case SkillEffectType.StageEffect:
             //     return new StageSkillEffect(skillConfig, caster, targets);
             case SkillEffectType.DOTEffect:
-                return new DotSkillEffect(skillConfig, caster, tagUseSkillAttack);
+                return new DotSkillEffect(skillBase,skillConfig, caster, tagUseSkillAttack);
             case SkillEffectType.NoEffect:
-                return new NoEffect(skillConfig, caster, tagUseSkillAttack);
+            case SkillEffectType.None:
+                return new NoEffect(skillBase, skillConfig, caster, tagUseSkillAttack);
             default:
                 UnityEngine.Debug.LogError("Unknown Skill Effect Type " + skillConfig.effectType + " skill id is " + skillConfig.SkillID);
-                return new NoEffect(skillConfig, caster, tagUseSkillAttack);
+                return new NoEffect(skillBase, skillConfig, caster, tagUseSkillAttack);
                 break;
         }
         return null;

--
Gitblit v1.8.0