From 45d3d873a7740886fa09f35c9fea2830f4563072 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 11 二月 2026 11:04:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into h5version

---
 Main/System/Battle/Skill/SkillBase.cs |   58 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 8f6daea..3988cad 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -19,6 +19,8 @@
     protected SkillEffect skillEffect;
     public HB427_tagSCUseSkill tagUseSkillAttack;
     public SkillConfig skillConfig;
+
+    public SkillSkinConfig skillSkinConfig;
     protected bool isFinished = false;
     protected BattleField battleField = null; // 鎴樺満
     protected RectTransform targetNode = null; // 鐩爣鑺傜偣
@@ -57,6 +59,21 @@
         tagUseSkillAttack = vNetData;
         battleField = _battleField;
         packList = _packList;
+
+        if (_caster is HeroBattleObject heroBattleObject)
+        {
+            skillSkinConfig = skillConfig.GetSkillSkinConfig(heroBattleObject.teamHero.SkinID);
+
+            if (null == skillSkinConfig)
+            {
+                Debug.LogError("鎵句笉鍒版妧鑳界毊鑲よ〃 " + "skillId: " + skillConfig.SkillID + " skinId: " + heroBattleObject.teamHero.SkinID);
+            }
+        }
+        else
+        {
+            skillSkinConfig = skillConfig.GetOriginSkinConfig();
+        }
+        
 
         // 娉ㄥ唽姝e湪閲婃斁鐨勬妧鑳�
         if (battleField != null && caster != null)
@@ -249,9 +266,9 @@
         // 鍛芥牸閲婃斁鎶�鑳芥椂 teamHero 涓� null锛岀洃鍚櫒浼氭纭鐞嗭紙宸叉湁 null 妫�鏌ワ級
         EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, guid, skillConfig, teamHero);
 
-        if (skillConfig.SkinllSFX1 != 0)
+        if (skillSkinConfig.SkinllSFX1 != 0)
         {
-            battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX1, false);
+            battleField.soundManager.PlayEffectSound(skillSkinConfig.SkinllSFX1, false);
         }
 
         if (caster != null)
@@ -280,7 +297,7 @@
         HighLightAllTargets();
 
         // 鏍规嵁閲婃斁妯″紡鎵ц鐩稿簲閫昏緫
-        switch (skillConfig.castMode)
+        switch (skillSkinConfig.castMode)
         {
             case SkillCastMode.None:
             case SkillCastMode.Self:
@@ -299,7 +316,7 @@
                 DashCast(OnAttackFinish);
                 break;
             default:
-                Debug.LogError("寮哄埗缁撴潫鎶�鑳� 鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹俻lease鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
+                Debug.LogError("寮哄埗缁撴潫鎶�鑳� 鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹俻lease鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillSkinConfig.CastPosition);
                 ForceFinished();
                 break;
         }
@@ -323,7 +340,7 @@
     // 瀵规晫鏂归噴鏀炬妧鑳斤細绉诲姩鍒版晫鏂瑰尯鍩熻繘琛屾敾鍑�
     protected void CastToEnemy()
     {
-        RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
+        RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillSkinConfig);
         ExecuteMoveAndCastSequence(target, () =>
         {
             if (skillConfig.ClientTriggerTiming == 1)
@@ -371,7 +388,7 @@
     // 瀵瑰弸鏂归噴鏀炬妧鑳斤細绉诲姩鍒板弸鏂瑰尯鍩熻繘琛屾不鐤楁垨澧炵泭
     protected void CastToAllies()
     {
-        RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
+        RectTransform target = battleField.GetTeamNode(caster.Camp, skillSkinConfig);
         ExecuteMoveAndCastSequence(target, () =>
         {
             if (skillConfig.ClientTriggerTiming == 1)
@@ -394,11 +411,11 @@
     private void ExecuteMoveAndCastSequence(RectTransform target, Action onReturnComplete)
     {
         ShadowIllutionCreate(true);
-        MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
+        MoveToTarget(target, new Vector2(skillSkinConfig.CastDistance, 0), () =>
         {
-            if (skillConfig.CastDistance < 9999 && skillConfig.SkinllSFX2 != 0)
+            if (skillSkinConfig.CastDistance < 9999 && skillSkinConfig.SkinllSFX2 != 0)
             {
-                battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX2, false);
+                battleField.soundManager.PlayEffectSound(skillSkinConfig.SkinllSFX2, false);
             }
 
             TurnBack(() =>
@@ -427,7 +444,7 @@
     // 绉诲姩鍒扮洰鏍囦綅缃細澶勭悊瑙掕壊鐨勭Щ鍔ㄥ姩鐢诲拰閫昏緫
     protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null, float speed = 750f)
     {
-        if (skillConfig.CastDistance >= 9999)
+        if (skillSkinConfig.CastDistance >= 9999)
         {
             _onComplete?.Invoke();
             return;
@@ -445,7 +462,7 @@
     // 杞韩閫昏緫锛氭牴鎹妧鑳介厤缃鐞嗚鑹茶浆鍚�
     protected void TurnBack(Action _onComplete, float forward)
     {
-        if (skillConfig.CastDistance < 0)
+        if (skillSkinConfig.CastDistance < 0)
         {
             caster.SetFacing(forward);
         }
@@ -476,7 +493,7 @@
     // 鎵ц鎶�鑳介噴鏀惧姩鐢诲拰閫昏緫锛氭挱鏀炬柦娉曞姩浣滃苟鎻愪緵鍥炶皟
     protected TrackEntry CastImpl(Action onComplete = null)
     {
-        return caster.PlaySkillAnimation(skillConfig, this, tagUseSkillAttack.BattleType == 4, onComplete);
+        return caster.PlaySkillAnimation(skillConfig, skillSkinConfig, this, tagUseSkillAttack.BattleType == 4, onComplete);
     }
 
     // 鎶�鑳藉紑濮嬪洖璋冿細澶勭悊姝讳骸銆佸瓙鎶�鑳姐�佹妧鑳芥晥鏋滃垵濮嬪寲
@@ -494,7 +511,7 @@
         //  鍐嶅鐞� 鍐呭祵鎶�鑳�
         ProcessSubSkill();
 
-        skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
+        skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, skillSkinConfig, tagUseSkillAttack);
         skillEffect.Play(OnHitTargets);
         
 
@@ -513,7 +530,8 @@
             if (pack is HB427_tagSCUseSkill skillPack)
             {
                 SkillConfig ssc = SkillConfig.Get((int)skillPack.SkillID);
-                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+                SkillSkinConfig sscSkin = ssc.GetOriginSkinConfig();
+                if (!string.IsNullOrEmpty(sscSkin.SkillMotionName))
                 {
                     break;
                 }
@@ -533,8 +551,8 @@
             {
                 HB427_tagSCUseSkill sp = combinePack.GetMainHB427SkillPack();
                 SkillConfig ssc = SkillConfig.Get((int)sp.SkillID);
-
-                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+                SkillSkinConfig sscSkin = ssc.GetOriginSkinConfig();
+                if (!string.IsNullOrEmpty(sscSkin.SkillMotionName))
                 {
                     break;
                 }
@@ -883,7 +901,7 @@
 #if UNITY_EDITOR
     private void PrintHurtParamDebugInfo(BattleHurtParam hurtParam)
     {
-        bool isLastHit = hurtParam.hitIndex >= hurtParam.skillConfig.DamageDivide.Length - 1;
+        bool isLastHit = hurtParam.hitIndex >= hurtParam.skillSkinConfig.DamageDivide.Length - 1;
         
         long currentHitDamage = hurtParam.hurter.damageList != null ? hurtParam.hurter.damageList.Sum() : 0;
         long currentHitSuckHp = hurtParam.caster.suckHpList != null ? hurtParam.caster.suckHpList.Sum() : 0;
@@ -898,7 +916,7 @@
             $"鏀诲嚮鑰�: {hurtParam.caster.casterObj.GetName()} (ObjID:{hurtParam.caster.casterObj.ObjID})\n" +
             $"鐩爣: {hurtParam.hurter.hurtObj.GetName()} (ObjID:{hurtParam.hurter.hurtObj.ObjID})\n" +
             $"鎶�鑳�: {hurtParam.skillConfig.SkillName} (ID:{hurtParam.skillConfig.SkillID})\n" +
-            $"鍑绘暟: 绗瑊hurtParam.hitIndex + 1}鍑� / 鍏眥hurtParam.skillConfig.DamageDivide.Length}鍑�" + (isLastHit ? " [鏈�鍚庝竴鍑籡" : " [涓棿鍑籡") + "\n" +
+            $"鍑绘暟: 绗瑊hurtParam.hitIndex + 1}鍑� / 鍏眥hurtParam.skillSkinConfig.DamageDivide.Length}鍑�" + (isLastHit ? " [鏈�鍚庝竴鍑籡" : " [涓棿鍑籡") + "\n" +
             $"\n" +
             $"========== 鐩爣鍙椾激鏁版嵁 ==========\n" +
             $"浼ゅ: {currentHitDamage} / 鎬讳激瀹�: {totalDamage}\n" +
@@ -1204,7 +1222,7 @@
         if (moveFinished)
         {
             //  濡傛灉鎶�鑳芥湁鍔ㄧ敾锛圫killMotionName涓嶄负绌猴級锛岄渶瑕佺瓑寰呭姩鐢绘挱鏀惧畬鎴�
-            if (skillConfig != null && !string.IsNullOrEmpty(skillConfig.SkillMotionName))
+            if (skillSkinConfig != null && !string.IsNullOrEmpty(skillSkinConfig.SkillMotionName))
             {
                 if (!isMotionCompleted)
                 {
@@ -1608,7 +1626,7 @@
             return false;
         }
 
-        if (string.IsNullOrEmpty(skillConfig.SkillMotionName))
+        if (string.IsNullOrEmpty(skillSkinConfig.SkillMotionName))
         {
             return true;
         }

--
Gitblit v1.8.0