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/SkillEffect/BulletSkillEffect.cs |  181 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 156 insertions(+), 25 deletions(-)

diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 1160b31..ee71f5e 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -12,13 +12,18 @@
     // protected List<BattleObject> targets; // 鐩爣鍒楄〃
 
     protected List<BulletCurve> bulletCurves = new List<BulletCurve>();
+    
+    // 鏁e皠鎶�鑳藉嚮涓鏁板櫒锛岀敤浜庡垽鏂槸鍚︽墍鏈夌洰鏍囬兘宸插嚮涓�
+    private int scatterHitCount = 0;
+    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)
     {
 
     }
+    
 
 
     public override void OnMiddleFrameEnd(int times, int index)
@@ -43,7 +48,7 @@
             if (skillConfig.Scattering == 1)
             {
                 //  鏁e皠
-                ShotEachTargets(index);
+                ScatterShot(index);
             }
             else
             {
@@ -89,7 +94,7 @@
         {
             // 鑻agCount鐩爣涓暟涓�1~5涓紝浠h〃闅忔満浣滅敤浜庢晫鏂规垨鎴戞柟x涓灏嗭紝姝ゆ椂鎵�鏈夎闅忔満鍒扮殑瀵硅薄閮戒负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
             ShotEachTargets(index);
-        }   
+        }
     }
 
     // 1    瀵逛綅锛�
@@ -123,7 +128,7 @@
 
         BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
 
-        if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
+        if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
         {
             ShotEachTargets(index);
         }
@@ -167,11 +172,11 @@
     private void ShotToIndex(BattleCamp camp, int targetIndex, int bulletIndex)
     {
         RectTransform targetTransform = caster.battleField.GetTeamNode(camp, targetIndex);
-        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp, caster.teamHero.modelScale);
 
         RectTransform effectTrans = effectPlayer.transform as RectTransform;
 
-        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
         {
             if (isFinish)
                 return;
@@ -181,8 +186,8 @@
 
             BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
             //  棣栧厛鏄洰鏍囪韩涓婄垎鐐�
-            PlayExplosionEffect(skillConfig.ExplosionEffectId, targetTransform, caster.Camp);
-            PlayExplosionEffect(skillConfig.ExplosionEffect2, targetTransform, caster.Camp);
+            PlayExplosionEffect(skillConfig.ExplosionEffectId, targetTransform, caster.Camp, 1f);
+            PlayExplosionEffect(skillConfig.ExplosionEffect2, targetTransform, caster.Camp, 1f);
 
             foreach (var hurt in hitList)
             {
@@ -193,7 +198,8 @@
                     continue;
                 }
 
-                PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+                PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
             }
 
             // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
@@ -214,7 +220,7 @@
 
         BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
 
-        if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
+        if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
         {
             ShotEachTargets(index);
         }
@@ -293,16 +299,46 @@
         ShotToIndex(caster.Camp, caster.teamHero.positionNum, index);
     }
 
-    protected void ShotToTarget(BattleObject target, int bulletIndex)
+    //  鏁e皠
+    private void ScatterShot(int index)
     {
-        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
-
-        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+        // 鍙湪绗竴娆″彂灏勬椂鍒濆鍖栨暎灏勮鏁板櫒
+        if (index == 0)
         {
-            if (isFinish)
-                return;
-            
+            scatterHitCount = 0;
+            // 鎬诲嚮涓暟 = 鍙戝皠娆℃暟 脳 鐩爣鏁伴噺
+            scatterTotalTargets = skillConfig.ActiveFrames.Length * tagUseSkillAttack.HurtList.Length;
+        }
+        
+        // 澶勭悊鏁e皠閫昏緫
+        for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
+        {
+            var hurt = tagUseSkillAttack.HurtList[i];
+            BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+            if (target == null)
+            {
+                Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+                // 鐩爣涓虹┖鏃跺噺灏戝搴斿彂灏勬鏁扮殑鎬荤洰鏍囨暟
+                if (index == 0) scatterTotalTargets--;
+                continue;
+            }
+            ScatterShot(target, hurt, index, i);
+        }
+    }
 
+    private void ScatterShot(BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, int bulletIndex, int order)
+    {
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp, caster.teamHero.modelScale);
+
+        bool shotToSelf = target.ObjID == caster.ObjID;
+
+        effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+        var tempOrder = order;
+
+        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans,
+            new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, bulletIndex, (index, hitList) =>
+        {
             foreach (var hurt in hitList)
             {
                 BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
@@ -312,9 +348,10 @@
                     continue;
                 }
 
-                PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp);
-                PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp);
-                PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+                PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
             }
 
             // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
@@ -322,7 +359,11 @@
             // 鍑讳腑灏遍攢姣佸瓙寮�
             caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
 
-            if (bulletIndex >= skillConfig.ActiveFrames.Length - 1)
+            // 澧炲姞鏁e皠鍑讳腑璁℃暟
+            scatterHitCount++;
+            
+            // 鍒ゆ柇鏄惁鎵�鏈夊彂灏勬鏁扮殑鎵�鏈夌洰鏍囬兘宸插嚮涓�
+            if (scatterHitCount >= scatterTotalTargets)
             {
                 isFinish = true;
             }
@@ -331,12 +372,102 @@
         bulletCurves.Add(bulletCurve);
     }
 
-    protected void PlayExplosionEffect(int effectId, Transform parent, BattleCamp camp)
+    protected void ShotToTarget(BattleObject target, int bulletIndex)
+    {
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp, caster.teamHero.modelScale);
+
+        bool shotToSelf = target.ObjID == caster.ObjID;
+
+        effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+        int bounceHitIndex = 0;
+
+        int tempBulletIndex = bulletIndex;
+
+        var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
+        {
+            if (skillConfig.BulletPath == 4)
+            {
+                if (bounceHitIndex >= hitList.Count)
+                {
+                    return;
+                }
+                var hurt = hitList[bounceHitIndex++];
+                BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+                if (targetObj != null)
+                {
+                    PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                }
+                else
+                {
+                    Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+                }
+
+                // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+                onHit?.Invoke(index, new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt });
+
+                if (bounceHitIndex >= tagUseSkillAttack.HurtList.Length)
+                {
+                    caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
+                }
+
+                if (isFinish)
+                    return;
+
+                if (tempBulletIndex >= skillConfig.ActiveFrames.Length - 1 && bounceHitIndex >= hitList.Count)
+                {
+                    isFinish = true;
+                }
+            }
+            else
+            {
+                foreach (var hurt in hitList)
+                {
+                    BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+                    if (targetObj == null)
+                    {
+                        Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+                        continue;
+                    }
+
+                    PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                    PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp, targetObj.teamHero.modelScale);
+                }
+
+                // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+                onHit?.Invoke(index, hitList);
+                // 鍑讳腑灏遍攢姣佸瓙寮�
+
+                caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
+
+                if (isFinish)
+                    return;
+
+                if (bulletIndex >= skillConfig.ActiveFrames.Length - 1)
+                {
+                    isFinish = true;
+                }
+            }
+
+
+        });
+
+        bulletCurves.Add(bulletCurve);
+    }
+
+    
+
+    protected void PlayExplosionEffect(int effectId, Transform parent, BattleCamp camp, float _scaleRatio)
     {
         if (effectId <= 0)
             return;
 
-        var effect = caster.battleField.battleEffectMgr.PlayEffect(caster, effectId, parent, camp);
+        var effect = caster.battleField.battleEffectMgr.PlayEffect(caster, effectId, parent, camp, _scaleRatio);
         if (effect != null)
         {
             effect.transform.localRotation = parent.localRotation;
@@ -383,7 +514,7 @@
 
     public override bool IsFinished()
     {
-        bool isCurveFinish = false;
+        bool isCurveFinish = bulletCurves.Count <= 0;
 
         foreach (var bulletCurve in bulletCurves)
         {

--
Gitblit v1.8.0