From 89343a7a0909e5244a3b69c4db1294de4536243b Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期一, 15 十二月 2025 18:15:22 +0800
Subject: [PATCH] 262 幻境阁系统-客户端 新增仅适用武将解锁的头像和形象的红点移除规则

---
 Main/System/Battle/Skill/SkillBase.cs |  154 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 129 insertions(+), 25 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index c60313e..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;
@@ -141,8 +137,7 @@
         bool safety = caster != null 
                         && skillConfig != null 
                         && tagUseSkillAttack != null 
-                        && battleField != null
-                        && caster.IsDead() == false;
+                        && battleField != null;
 
         
         if (!safety)
@@ -235,6 +230,11 @@
         TeamHero teamHero = caster.teamHero;
         EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, guid, skillConfig, teamHero);
 
+        if (skillConfig.SkinllSFX1 != 0)
+        {
+            battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX1, false);
+        }
+
         if (caster != null)
         {
             // 鎴樻枟绫诲瀷 0-甯歌锛�1-杩炲嚮锛�2-鍙嶅嚮锛�3-杩藉嚮锛�4-瀛愭妧鑳斤紱5-琚姩瑙﹀彂鐨�
@@ -252,11 +252,9 @@
                 hintConfig = DamageNumConfig.Get(BattleConst.BattleChaseAttack);
             }
             
-            if (hintConfig != null)
-            {
-                caster.heroInfoBar.ShowTips(((char)hintConfig.prefix).ToString(), true, false, 1.25f);
-                // Debug.Break();
-            }
+            Hint(caster, hintConfig);
+
+
         }
 
         // 楂樹寒鎵�鏈夋湰娆℃妧鑳界浉鍏崇殑鐩爣
@@ -288,6 +286,14 @@
         }
     }
 
+    protected void Hint(BattleObject battleObject, DamageNumConfig hintConfig)
+    {
+        if (hintConfig != null)
+        {
+            battleObject.heroInfoBar.ShowTips(((char)hintConfig.prefix).ToString(), true, false, 1.25f);
+        }
+    }
+
     // 鍐叉挒鏀诲嚮妯″紡锛堝緟瀹炵幇锛�
     protected void DashCast(Action _onComplete)
     {
@@ -301,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);   
+            }
         });
     }
 
@@ -342,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);   
+            }
         });
     }
 
@@ -357,9 +377,15 @@
         ShadowIllutionCreate(true);
         MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
         {
+            if (skillConfig.CastDistance < 9999 && skillConfig.SkinllSFX2 != 0)
+            {
+                battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX2, false);
+            }
+
             TurnBack(() =>
             {
                 ShadowIllutionCreate(false);
+                
                 CastImpl(() =>
                 {
                     TurnBack(() => 
@@ -578,6 +604,8 @@
     // 鍛戒腑鐩爣鍥炶皟锛氬鐞嗘墍鏈夎鍛戒腑鐨勭洰鏍囷紙鍖呮嫭涓荤洰鏍囥�佸脊灏勭洰鏍囥�佹簠灏勭洰鏍囷級
     protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
     {
+        // Debug.LogError($"Skill {skillConfig.SkillID} hit targets _hitIndex: {_hitIndex} hit {string.Join(", ", hitList.Select(h => h.ObjID + ":" + battleField.battleObjMgr.GetBattleObject((int)h.ObjID)?.teamHero.name))}");
+
         //  閫犳垚浼ゅ鍓嶅厛澶勭悊琛�閲忓埛鏂板寘
         HandleRefreshHP();
 
@@ -633,6 +661,45 @@
                 OnHitEachTargetEx(_hitIndex, exTarget, hurtEx);
             }
         }
+
+        if (0 == _hitIndex)
+        {
+            bool needhint = false;
+
+            for (int i = 0; i < hitList.Count; i++)
+            {
+                var hurt = hitList[i];
+
+                //8-鍑绘檿
+                if ((hurt.AttackTypes & (int)DamageType.Stunned) == (int)DamageType.Stunned)
+                {
+                    needhint = true;
+                    break;
+                }
+
+                for (int j = 0; j < hurt.HurtListEx?.Length; j++)
+                {
+                    var hurtex = hurt.HurtListEx[j];
+                    //8-鍑绘檿
+                    if ((hurtex.AttackTypes & (int)ServerDamageType.Stunned) == (int)ServerDamageType.Stunned)
+                    {
+                        needhint = true;
+                        break;
+                    }
+                }
+
+                if (needhint)
+                    break;
+            }
+
+            if (needhint)
+            {
+                DamageNumConfig hintConfig = DamageNumConfig.Get(BattleConst.BattleStun);
+                Hint(caster, hintConfig);
+            }
+        }
+
+        
     }
 
     // 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
@@ -641,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);
@@ -663,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
@@ -748,7 +815,7 @@
     // 澶勭悊姝讳骸鐩稿叧閫昏緫锛氬垎閰嶆帀钀藉拰缁忛獙
     protected void HandleDead()
     {
-        var deadPackList = BattleUtility.FindDeadPack(packList);
+        List<BattleDeadPack> deadPackList = BattleUtility.FindDeadPack(packList);
         if (deadPackList.Count <= 0) return;
 
         CheckAfterDeadhPack();
@@ -772,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);
             
             // 淇锛氭坊鍔犵┖鍊兼鏌�
@@ -814,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);
@@ -908,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()
     {
@@ -966,6 +1066,9 @@
     // 寮哄埗缁撴潫鎶�鑳斤細绔嬪嵆缁撴潫鎵�鏈夋妧鑳界浉鍏崇殑澶勭悊
     public virtual void ForceFinished()
     {
+        if (isFinished)
+            return;
+
         skillEffect?.ForceFinished();
         
         otherSkillActionList.ForEach(action => action.ForceFinish());
@@ -1127,4 +1230,5 @@
         skillEffect = null;
         packList = null;
     }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0