From d90b3f1814240745b59c16af6c3e4aebe3451244 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 14 八月 2025 10:43:47 +0800
Subject: [PATCH] 125 【战斗】战斗系统 掉落部分 技能特效部分

---
 Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs                    |    4 
 Main/System/Battle/Define/BattleDrops.cs.meta                                |   11 
 Main/Common/EventName.cs                                                     |    2 
 Main/Component/UI/Effect/BattleEffectPlayer.cs.meta                          |   11 
 Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs              |    2 
 Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs            |    2 
 Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs      |   23 +
 Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs.meta |   11 
 Main/System/Battle/BattleField/StoryBattleField.cs                           |    5 
 Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs             |    2 
 Main/System/Battle/SkillEffect/BulletSkillEffect.cs                          |    4 
 Main/System/Battle/BattleField/BattleField.cs                                |   31 -
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                              |    2 
 Main/System/Battle/BattleObject/BattleObject.cs                              |   21 +
 Main/System/Battle/Skill/SkillBase.cs                                        |  210 ++++++++-----
 Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs              |    2 
 Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs           |    2 
 Main/System/Battle/BattleEffectMgr.cs                                        |   26 
 Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs            |   20 -
 Main/System/Battle/Define/BattleDrops.cs                                     |   14 
 Main/Component/UI/Effect/BattleEffectPlayer.cs                               |  458 ++++++++++++++++++++++++++++++
 21 files changed, 714 insertions(+), 149 deletions(-)

diff --git a/Main/Common/EventName.cs b/Main/Common/EventName.cs
index ad3cc1f..fa6d616 100644
--- a/Main/Common/EventName.cs
+++ b/Main/Common/EventName.cs
@@ -9,4 +9,6 @@
 	public const string BATTLE_DAMAGE_TAKEN = "BATTLE_DAMAGE_TAKEN";//閫犳垚浼ゅ
 	
     public const string DISPLAY_BATTLE_UI = "DISPLAY_BATTLE_UI";//鏄剧ず鎴樻枟UI
+	
+    public const string BATTLE_DROP_ITEMS = "BATTLE_DROP_ITEMS";//鎺夎惤鐗╁搧
 }
\ No newline at end of file
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
new file mode 100644
index 0000000..1a09695
--- /dev/null
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -0,0 +1,458 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Spine.Unity;
+using UnityEngine;
+using Spine;
+using UnityEngine.UI;
+using System.Linq;
+
+// 鐗规晥鎾斁鍣紝瀵硅薄姹犵鐞嗭細unity鐗规晥鍜宻pine鐗规晥閮芥槸鍋氬ソ鐨勯鍒朵綋
+// unity鐗规晥棰勫埗浣撴槸鐗规晥甯堝湪鍒朵綔鐨勬椂鍊欑敓鎴愮殑锛寀nity鐗规晥蹇呴』鎸傝浇璁剧疆鎾斁鏃堕暱鑴氭湰 EffectTime
+// spine鐗规晥鏄壒鏁堝笀鍒朵綔鐨勫姩鐢绘枃浠跺彲鐩存帴鍔犺浇鐢紝鍒朵綔鎴愰鍒朵綋鍙鍔燘oneFollower涔嬬被鐨勮繘琛岄�昏緫澶勭悊
+public class BattleEffectPlayer : MonoBehaviour
+{
+    [SerializeField]
+    private int m_EffectID;
+    public int effectId
+    {
+        get
+        {
+            return m_EffectID;
+        }
+        set
+        {
+            if (value != m_EffectID)
+            {
+                isInit = false;
+                m_EffectID = value;
+            }
+        }
+    }
+
+
+
+    public EffectConfig effectConfig;
+
+    public float speedRate = 1f;
+
+
+
+
+    [Header("鎾斁瀹屾瘯绔嬪嵆鍥炴敹")]
+    public bool isReleaseImmediately = false;  //鐣岄潰鐗规晥涓�鑸笉闇�瑕佽嚜鎴戦攢姣侊紝璺熼殢鐣岄潰鎴栬�呯埗瀵硅薄閿�姣佸氨琛�
+
+    public Action<BattleEffectPlayer> onDestroy;
+
+    [HideInInspector] public Canvas canvas = null;
+
+    [HideInInspector] public GameObject effectTarget = null;
+
+    protected EffectPenetrationBlocker blocker = null;
+
+    protected bool isInit = false;
+
+    protected List<ParticleSystem> particleList = new List<ParticleSystem>();
+
+    protected List<Animator> animatorList = new List<Animator>();
+
+    protected List<Renderer> rendererList = new List<Renderer>();
+
+    protected GameObject spineContainer;
+
+    protected SkeletonGraphic spineComp;
+    protected Spine.AnimationState spineAnimationState;
+
+    public GameObjectPoolManager.GameObjectPool pool;
+
+    public Action onComplete;
+
+    protected virtual void OnEnable()
+    {
+        if (spineComp != null)
+        {
+            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+            spineComp.enabled = false;
+        }
+    }
+
+
+    protected void InitComponent(bool showLog = true)
+    {
+        Clear();
+        if (effectId <= 0)
+        {
+            effectConfig = null;
+#if UNITY_EDITOR
+            if (showLog)
+            {
+                Debug.LogError("BattleEffectPlayer effectId is not set");
+                UnityEditor.Selection.activeGameObject = gameObject;
+                UnityEditor.EditorGUIUtility.PingObject(gameObject);
+            }
+#endif
+            return;
+        }
+
+        effectConfig = EffectConfig.Get(effectId);
+
+        if (null == effectConfig)
+        {
+#if UNITY_EDITOR
+            Debug.LogError("could not find effect config, effect id is " + effectId);
+            UnityEditor.Selection.activeGameObject = gameObject;
+            UnityEditor.EditorGUIUtility.PingObject(gameObject);
+#endif
+            return;
+        }
+
+        //  鍒濆鍖杝pine缁勪欢
+        if (effectConfig != null && effectConfig.isSpine != 1)
+        {
+            GameObject spineContainerPrefab = ResManager.Instance.LoadAsset<GameObject>("UIComp", "SpineContainer");
+            spineContainer = GameObject.Instantiate(spineContainerPrefab, transform);
+        }
+        //  鏈夌壒鏁堝彲鑳藉甫spine鍙堝甫unity鐗规晥鐨勬儏鍐�
+        spineComp = gameObject.GetComponentInChildren<SkeletonGraphic>(true);
+    }
+
+    protected virtual void Clear()
+    {
+        particleList.Clear();
+        animatorList.Clear();
+        rendererList.Clear();
+        spineComp = null;
+        spineAnimationState = null;
+        if (null != spineContainer)
+            GameObject.DestroyImmediate(spineContainer);
+        spineContainer = null;
+        pool = null;
+    }
+
+    public virtual void Stop()
+    {
+        if (null != effectTarget)
+        {
+            // 濡傛灉浣跨敤浜嗙壒鏁堥鍒朵綋姹狅紝鍒欏綊杩樺埌姹犱腑
+            if (pool != null)
+            {
+                pool.Release(effectTarget);
+            }
+            effectTarget = null;
+        }
+
+        isInit = false;
+
+        Clear();
+        onComplete?.Invoke();
+    }
+
+    public virtual void Play(bool showLog = true)
+    {
+        if (!isInit)
+        {
+            InitComponent(showLog);
+            isInit = true;
+        }
+        else
+        {
+            //閬垮厤閲嶅鍒涘缓
+            if (!this.gameObject.activeSelf)
+            {
+                this.gameObject.SetActive(true);
+            }
+            return;
+        }
+
+        if (EffectMgr.IsNotShowBySetting(effectId))
+        {
+            return;
+        }
+
+        if (null != effectTarget)
+        {
+            if (pool != null)
+                pool.Release(effectTarget);
+            effectTarget = null;
+        }
+
+        if (!this.gameObject.activeSelf)
+        {
+            this.gameObject.SetActive(true);
+        }
+
+        PlayEffect();
+        
+
+    }
+
+    protected virtual void PlayEffect()
+    {
+        if (null == effectConfig)
+        {
+            Debug.LogError("BattleEffectPlayer effectConfig is null, effect id is " + effectId);
+            return;
+        }
+
+        if (effectConfig.isSpine != 0)
+        {
+            PlaySpineEffect();
+        }
+        else
+        {
+            PlayUnityEffect();
+        }
+        
+    }
+
+    protected void PlaySpineEffect()
+    {
+        //  杩欓噷鏄函spine鐨勯�昏緫
+
+        if (spineComp == null)
+        {
+            Debug.LogError("BattleEffectPlayer spineComp is null, effect id is " + effectId);
+            return;
+        }
+
+        SkeletonDataAsset skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/BattleSpine/" + effectConfig.packageName, effectConfig.fxName);
+        spineComp.skeletonDataAsset = skeletonDataAsset;
+        spineComp.Initialize(true);
+        spineComp.raycastTarget = false;
+        spineComp.timeScale = speedRate;
+
+        spineAnimationState = spineComp.AnimationState;
+        spineAnimationState.Complete -= OnSpineAnimationComplete;
+        spineAnimationState.Complete += OnSpineAnimationComplete;
+
+        Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
+        spineAnimationState.SetAnimation(0, animation, false);
+    }
+
+    protected void PlayUnityEffect()
+    {
+        //  杩欓噷鏄函unity鐗规晥鐨勯�昏緫
+
+        var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
+        if (effectPrefab == null)
+        {
+            Debug.LogError($"鍔犺浇UI鐗规晥澶辫触: {effectConfig.packageName}");
+            return;
+        }
+
+        if (spineComp != null)
+        {
+            spineComp.enabled = true;
+        }
+
+        // 浠庣壒鏁堥鍒朵綋姹犺幏鍙栫壒鏁�
+        pool = GameObjectPoolManager.Instance.RequestPool(effectPrefab);
+        effectTarget = pool.Request();
+        // 璁剧疆鐖惰妭鐐瑰拰浣嶇疆
+        effectTarget.transform.SetParent(transform);
+        effectTarget.transform.localPosition = Vector3.zero;
+        effectTarget.transform.localScale = Vector3.one;
+        effectTarget.transform.localRotation = Quaternion.identity;
+        effectTarget.name = $"Effect_{effectConfig.fxName}";
+
+        //鎸傝浇缁勪欢鍚� 寮�濮嬫敹闆�
+        particleList.AddRange(gameObject.GetComponentsInChildren<ParticleSystem>(true));
+        animatorList.AddRange(gameObject.GetComponentsInChildren<Animator>(true));
+        rendererList.AddRange(gameObject.GetComponentsInChildren<Renderer>(true));
+
+        OnUnityAnimationComplete();
+
+        if (null == canvas)
+            canvas = GetComponentInParent<Canvas>();
+
+        // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
+        blocker = effectTarget.AddMissingComponent<EffectPenetrationBlocker>();
+
+        //  濡傛灉娌℃湁canvas鐨勮瘽 姝e父鏄洜涓轰笉鍦˙attleWin涓嬮潰鐨勮妭鐐� 鎰忔�濆氨鏄綋鍓嶆病鏈夋樉绀� 绛夊埌鍒囧洖鎴樻枟鐨勬椂鍊欏啀閫氳繃BattleField.UpdateCanvas鏉ユ洿鏂�
+        if (canvas != null)
+        {
+            blocker.SetParentCanvas(canvas);
+        }
+
+        SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
+
+    }
+
+    protected void OnDestroy()
+    {
+        if (onDestroy != null)
+        {
+            onDestroy.Invoke(this);
+            onDestroy = null;
+        }
+        // 鍋滄鐗规晥骞跺綊杩樺埌姹犱腑 
+        Stop();
+
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.Complete -= OnSpineAnimationComplete;
+        }
+    }
+
+    //鍗曟鎾斁瀹屾瘯灏变細瑙﹀彂锛屽嵆浣挎槸寰幆
+    protected virtual void OnSpineAnimationComplete(Spine.TrackEntry trackEntry)
+    {
+        if (isReleaseImmediately)
+        {
+            spineComp.enabled = false;
+            Stop();
+        }
+    }
+
+
+    private void OnUnityAnimationComplete()
+    {
+        var timeObj = effectTarget.GetComponent<EffectTime>();
+        if (!timeObj.isLoop)
+        {
+            this.SetWait(timeObj.playTime);
+            this.DoWaitRestart();
+            this.OnWaitCompelete(OnEffectComplete);
+        }
+    }
+
+    private void OnEffectComplete(Component comp)
+    {
+        this.DoWaitStop();
+        if (isReleaseImmediately)
+            Stop();
+    }
+
+
+    //  鍒涘缓鍚庣殑鐗规晥浼氳嚜鍔ㄩ殣钘� 闇�瑕佹墜鍔ㄨ皟鐢≒lay鎵嶈兘鎾斁
+    public static BattleEffectPlayer Create(int effectId, Transform parent, bool createNewChild = false)
+    {
+        // 鐩存帴鍒涘缓鐗规晥鎾斁鍣紝涓嶄娇鐢ㄥ璞℃睜
+        BattleEffectPlayer BattleEffectPlayer = null;
+
+        if (createNewChild)
+        {
+            GameObject newGo = new GameObject("BattleEffectPlayer_" + effectId);
+            newGo.transform.SetParent(parent, false);
+            BattleEffectPlayer = newGo.AddComponent<BattleEffectPlayer>();
+        }
+        else
+        {
+            BattleEffectPlayer = parent.AddMissingComponent<BattleEffectPlayer>();
+        }
+
+        BattleEffectPlayer.effectId = effectId;
+        BattleEffectPlayer.SetActive(true);
+        return BattleEffectPlayer;
+    }
+
+    /// <summary>
+    /// 璁剧疆娓告垙瀵硅薄婵�娲荤姸鎬�
+    // /// </summary>
+    // public void SetActive(bool active)
+    // {
+    //     if (gameObject != null)
+    //     {
+    //         gameObject.SetActive(active);
+    //     }
+    // }
+
+    public void Pause()
+    {
+        if (effectTarget == null) return;
+
+        // Spine鍔ㄧ敾
+        // var spineGraphics = effectTarget.GetComponentsInChildren<SkeletonGraphic>(true);
+        // foreach (var sg in spineGraphics)
+        if (spineComp != null)
+        {
+            spineComp.timeScale = 0f;
+        }
+
+        // Animator鍔ㄧ敾
+        foreach (var animator in animatorList)
+        {
+            animator.speed = 0f;
+        }
+
+        // 绮掑瓙鐗规晥
+        foreach (var ps in particleList)
+        {
+            ps.Pause();
+        }
+    }
+
+    public void Resume()
+    {
+        if (effectTarget == null) return;
+
+        if (spineComp != null)
+        {
+            spineComp.timeScale = speedRate;
+        }
+
+        // Animator鍔ㄧ敾
+        foreach (var animator in animatorList)
+        {
+            animator.speed = speedRate;
+        }
+
+        // 绮掑瓙鐗规晥
+        foreach (var ps in particleList)
+        {
+            ps.Play();
+        }
+    }
+
+    public bool IsFinish()
+    {
+        if (effectTarget == null) return true;
+
+        // Spine鍔ㄧ敾
+        if (!spineComp.AnimationState.GetCurrent(0).IsComplete)
+        {
+            return false;
+        }
+
+        // Animator鍔ㄧ敾
+        foreach (var animator in animatorList)
+        {
+            AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
+
+            //  寰幆鍔ㄧ敾涓嶈�冭檻缁撴潫鐨勯棶棰�
+            if (!stateInfo.loop && stateInfo.normalizedTime < 1f)
+            {
+                return false;
+            }
+        }
+
+        // 绮掑瓙鐗规晥
+        foreach (var ps in particleList)
+        {
+            if (ps.IsAlive())
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /// <summary>
+    /// 璁剧疆閬僵锛堟敮鎸丷ectMask2D銆丮ask銆丼moothMask绛夛級
+    /// </summary>
+    public void SetMask(RectTransform maskArea = null)
+    {
+        if (effectTarget == null || blocker == null)
+            return;
+
+        // 浼樺厛浣跨敤浼犲叆鐨刴askArea
+        if (maskArea != null)
+        {
+            blocker.PerformMask(maskArea);
+            return;
+        }
+    }
+
+
+}
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs.meta b/Main/Component/UI/Effect/BattleEffectPlayer.cs.meta
new file mode 100644
index 0000000..ee8537d
--- /dev/null
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 040308ab06e08de4ab5b2b8d0f192131
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleEffectMgr.cs b/Main/System/Battle/BattleEffectMgr.cs
index c4607d7..3d2899a 100644
--- a/Main/System/Battle/BattleEffectMgr.cs
+++ b/Main/System/Battle/BattleEffectMgr.cs
@@ -6,7 +6,7 @@
 {
     private BattleField battleField;
 
-    private Dictionary<int, List<EffectPlayer>> effectDict = new Dictionary<int, List<EffectPlayer>>();
+    private Dictionary<int, List<BattleEffectPlayer>> effectDict = new Dictionary<int, List<BattleEffectPlayer>>();
 
     public void Init(BattleField _battleField)
     {
@@ -15,9 +15,9 @@
 
     public void PauseGame()
     {
-        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict)
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
         {
-            foreach (EffectPlayer effectPlayer in kvPair.Value)
+            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
             {
                 if (effectPlayer != null)
                 {
@@ -29,9 +29,9 @@
 
     public void ResumeGame()
     {
-        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict)
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
         {
-            foreach (EffectPlayer effectPlayer in kvPair.Value)
+            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
             {
                 if (effectPlayer != null)
                 {
@@ -41,14 +41,14 @@
         }
     }
 
-    public EffectPlayer PlayEffect(int ObjID, int effectId, Transform parent)
+    public BattleEffectPlayer PlayEffect(int ObjID, int effectId, Transform parent)
     {
         if (!effectDict.ContainsKey(effectId))
         {
-            effectDict[effectId] = new List<EffectPlayer>();
+            effectDict[effectId] = new List<BattleEffectPlayer>();
         }
 
-        EffectPlayer effectPlayer = EffectPlayer.Create(effectId, parent);
+        BattleEffectPlayer effectPlayer = BattleEffectPlayer.Create(effectId, parent);
         effectPlayer.onDestroy += OnEffectDestroy;
         if (effectPlayer != null)
         {
@@ -57,9 +57,9 @@
         return effectPlayer;
     }
 
-    public void RemoveEffect(int effectId, EffectPlayer effectPlayer)
+    public void RemoveEffect(int effectId, BattleEffectPlayer effectPlayer)
     {
-        List<EffectPlayer> effectPlayers = null;
+        List<BattleEffectPlayer> effectPlayers = null;
 
         if (effectDict.TryGetValue(effectId, out effectPlayers))
         {
@@ -73,7 +73,7 @@
         }
     }
 
-    protected void OnEffectDestroy(EffectPlayer effectPlayer)
+    protected void OnEffectDestroy(BattleEffectPlayer effectPlayer)
     {
         if (effectDict.ContainsKey(effectPlayer.effectId))
         {
@@ -87,9 +87,9 @@
 
     public void HaveRest()
     {
-        foreach (KeyValuePair<int, List<EffectPlayer>> kvPair in effectDict)
+        foreach (KeyValuePair<int, List<BattleEffectPlayer>> kvPair in effectDict)
         {
-            foreach (EffectPlayer effectPlayer in kvPair.Value)
+            foreach (BattleEffectPlayer effectPlayer in kvPair.Value)
             {
                 if (effectPlayer != null)
                 {
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 0fd1e13..7eb387d 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -170,12 +170,21 @@
             case BattleMode.Record:
                 operationAgent = new RecordModeOperationAgent(this);
                 break;
+            case BattleMode.Stop:
+                operationAgent = new StopModeOperationAgent(this);
+                break;
             default:
                 operationAgent = new HandModeOperationAgent(this);
                 break;
         }
 
         Debug.LogError("battleMode is " + battleMode.ToString());
+    }
+
+    public virtual void AutoSetBattleMode()
+    {
+        //  闄や簡涓荤嚎閮芥槸鎴樻姤 涓荤嚎鐨勫唴瀹瑰湪StoryBattleField閲�
+        SetBattleMode(BattleMode.Record);
     }
 
     public virtual void PlayRecord(RecordAction recordAction)
@@ -188,7 +197,7 @@
         recordPlayer.PlayRecord(recordList);
     }
 
-    protected virtual void ResumeGame()
+    public virtual void ResumeGame()
     {
         battleObjMgr.ResumeGame();
         recordPlayer.ResumeGame();
@@ -196,7 +205,7 @@
         battleTweenMgr.ResumeGame();
     }
 
-    protected virtual void PauseGame()
+    public virtual void PauseGame()
     {
         //  鎬庝箞閫氱煡鐣岄潰鏆傚仠浜嗗憿锛�
 
@@ -382,14 +391,6 @@
         };
     }
 
-    public void OnObjDropItem(int positionNum, ItemModel item)
-    {
-        // 澶勭悊鎺夎惤鐗╁搧
-        //鏃犺濡備綍鍥惧眰搴旇鍦ㄤ汉鐗╀笂闈� 鎵�浠ヨ繖閲屽簲璇ユ湁涓寕鐐�
-        // YYL TODO
-
-
-    }
 
     public void OnObjReborn(HB423_tagMCTurnFightObjReborn vNetData)
     {
@@ -405,12 +406,6 @@
         }
     }
 
-    public void OnObjDropExp(BattleObject battleObject)
-    {
-        // 澶勭悊鎺夎惤缁忛獙
-        // YYL TODO
-        battleObject.DropExp();
-    }
 
     public virtual void OnBattleEnd(JsonData turnFightStateData)
     {
@@ -429,6 +424,8 @@
 
         battleEffectMgr.HaveRest();
         battleTweenMgr.HaveRest();
+
+        SetBattleMode(BattleMode.Stop);
     }
 
     public bool IsBattleEnd()
@@ -440,4 +437,4 @@
     {
 
     }
-}
\ No newline at end of file
+}
diff --git a/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs
new file mode 100644
index 0000000..d7f9f8f
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+
+//	record鐩存帴鍏ㄧ▼鎾斁灏卞ソ浜� 涓嶉渶瑕佸叾浠栨搷浣�
+
+public class StopModeOperationAgent : IOperationAgent
+{
+    public StopModeOperationAgent(BattleField battleField) : base(battleField)
+    {
+
+    }
+
+    public override void Run()
+    {
+        base.Run();
+    }
+
+    public override void DoNext()
+    {
+        base.DoNext();
+
+        battleField.AutoSetBattleMode();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs.meta
new file mode 100644
index 0000000..ceca609
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/StopModeOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3326f5db1168c3f48922e1c2c1a07b50
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
index fa8f020..58211fc 100644
--- a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -8,7 +8,6 @@
 		: base(RecordActionType.Death, _battleField, _battleObj)
 	{
 		isFinish = false;
-		isRunOnce = false;
 	}
 
 	public override bool IsFinished()
@@ -19,12 +18,8 @@
 
     public override void Run()
     {
-        if (isRunOnce)
-        {
-        	return;
-        }
         base.Run();
-        isRunOnce = true;
+        isFinish = true;
         battleObject.OnDeath(OnDeathAnimationEnd);
     }
 
@@ -33,18 +28,7 @@
         //  鍙湁涓荤嚎鎺夎惤鐗╁搧
         if (battleField.MapID == 1 || battleField.MapID == 2)
         {
-            var dropItemPack = PackManager.Instance.GetSinglePack(PackType.DropItem);
-            if (dropItemPack != null)
-            {
-                var items = dropItemPack.GetAllItems();
-                foreach (ItemModel item in items.Values)
-                {
-                    //    鎺夎惤鐗╁搧
-                    battleField.OnObjDropItem(battleObject.teamHero.positionNum, item);
-                    battleField.OnObjDropExp(battleObject);
-                    
-                }
-            }
+            battleObject.PerformDrop();
         }
         // 鎺夎惤鐗╁搧 澧炲姞缁忛獙
 
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
index 8854fcd..bc28bb4 100644
--- a/Main/System/Battle/BattleField/StoryBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -78,6 +78,11 @@
         SetBattleMode((BattleMode)Enum.Parse(typeof(BattleMode), savedStr));
     }
 
+    public override void AutoSetBattleMode()
+    {
+        LoadBattleMode();
+    }
+
     public override void TurnFightState(int TurnNum, int State,
         uint FuncLineID, JsonData extendData)
     {
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 3abc1aa..03eb5bc 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -48,6 +48,8 @@
         private set;
     }
 
+    protected BattleDrops battleDrops;
+
     private RectTransform m_heroRectTrans;
 
     public RectTransform heroRectTrans
@@ -328,16 +330,23 @@
         motionBase.PlayAnimation(MotionName.idle, true);
     }
 
-    public void PushExpPackList(List<HB405_tagMCAddExp> _hB405_tagMCAddExps)
+    public void PushDropItems(BattleDrops _battleDrops)
     {
-        // YYL TODO 姝讳骸鍚庡脊鍑虹粡楠屾帀钀芥彁閱�
-        hB405_tagMCAddExps = _hB405_tagMCAddExps;
+        battleDrops = _battleDrops;
     }
 
-    public void DropExp()
+    public void PerformDrop()
     {
-        // YYL TODO
-        // hB405_tagMCAddExps
+        if (null == battleDrops)
+            return;
+
+        EventBroadcast.Instance.Broadcast<string, BattleDrops, Action>(
+            EventName.BATTLE_DROP_ITEMS, battleField.guid, battleDrops, OnPerformDropFinish);
+    }
+
+    protected void OnPerformDropFinish()
+    {
+        battleDrops = null;
     }
 
 
diff --git a/Main/System/Battle/Define/BattleDrops.cs b/Main/System/Battle/Define/BattleDrops.cs
new file mode 100644
index 0000000..570b8e3
--- /dev/null
+++ b/Main/System/Battle/Define/BattleDrops.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class BattleDrops
+{
+    //  鎺夎惤浣嶇疆
+    public RectTransform rectTransform;
+
+    //  骞冲潎鍒嗛厤濂藉悗鐨勬帀钀界墿鍝佽儗鍖呯储寮曞垪琛�
+    public List<int> dropItemPackIndex = new List<int>();
+
+    //  骞冲潎鍒嗛厤濂藉悗鐨勭粡楠屾帀钀�
+    public List<HB405_tagMCAddExp> expDrops = new List<HB405_tagMCAddExp>();
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/BattleDrops.cs.meta b/Main/System/Battle/Define/BattleDrops.cs.meta
new file mode 100644
index 0000000..6e7720c
--- /dev/null
+++ b/Main/System/Battle/Define/BattleDrops.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 99a36d208918d0f47bd97c12803e435d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index c5c9309..74e2874 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -52,6 +52,8 @@
 
         if (currentRecordAction != null && currentRecordAction.IsFinished())
         {
+            Debug.LogError("record action " + currentRecordAction.GetType() + " play finished");
+
             currentRecordAction = null;
         }
 
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 4325c92..a0604ba 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -3,6 +3,8 @@
 using System;
 using DG.Tweening;
 using Spine;
+using System.Linq;
+using PlasticGui.WorkspaceWindow.BranchExplorer;
 
 
 public class SkillBase
@@ -65,20 +67,7 @@
 	}
 
 
-	protected virtual void OnActiveSkillFrame()
-	{
 
-	}
-
-	protected virtual void OnStartSkillFrame()
-	{
-
-	}
-
-	protected virtual void OnEndSkillFrame()
-	{
-		
-	}
 
 	public void Pause()
 	{
@@ -141,26 +130,10 @@
 		}
 	}
 
-	//	鍐插埡鐨勬妧鑳� 鍔ㄤ綔 璺熺Щ鍔� 鏄悓鏃惰繘琛岀殑 绉诲姩鍒扮洰鏍囩殑涓�鐬棿灏辫杩涜鎶�鑳介�昏緫
-	// protected void DashToTarget(Action _onComplete)
-	// {
-	// 	TrackEntry entry = PlayCastAnimation();
-	// 	BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.AttackID);
-	// 	if (mainTarget == null)
-	// 	{
-	// 		Debug.LogError("鐩爣涓虹┖ mainTarget == null AttackID : " + tagUseSkillAttack.AttackID);
-	// 		_onComplete?.Invoke();
-	// 		return;
-	// 	}
-
-	// 	//	鍋氫竴涓井寰殑鎻愬墠
-	// 	MoveToTarget(mainTarget.Camp, mainTarget.teamHero.positionNum, entry.AnimationEnd - 0.05f, () => DoSkillLogic(_onComplete));
-	// }
-
 	//	杩欓噷鍏跺疄鏄妧鑳藉悗鎽囩粨鏉熺殑鍦版柟
 	protected virtual void DoSkillLogic(Action _onComplete = null)
 	{
-		
+
 	}
 
 	protected TrackEntry PlayCastAnimation(Action onComplete = null)
@@ -226,7 +199,7 @@
 		// 楂樹寒鎵�鏈夌洰鏍�
 		HashSet<BattleObject> highlightList = new HashSet<BattleObject>(battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack));
 		highlightList.Add(caster);
-		
+
 
 		//	鎶婅繖浜汢O鍏ㄩ珮浜� 鎴栬�呰鎶婇櫎浜嗚繖浜涚殑閮芥斁鍦ㄩ伄缃╁悗闈�
 		//	YYL TODO
@@ -256,7 +229,103 @@
 
 			OnHitEachTarget(target, totalDamage, damageList, ref hurt);
 		}
-	} 
+
+		HandleDead();
+	}
+
+	protected void HandleDead()
+	{
+		var deadPackList = FindDeadPack();
+		CheckAfterDeadhPack();
+
+		// 澶勭悊鎺夎惤鍖� 鎻愬墠distribute涔嬪悗 PackManager鎵嶆湁鎺夎惤鐗� 鎵�浠ヤ笉璺焌ssignexp涓�鏍穌istribute
+		foreach (var _dropPack in dropPackList)
+		{
+			PackageRegedit.Distribute(_dropPack);
+			packList.Remove(_dropPack);
+		}
+
+		// 鑾峰彇鎺夎惤鐗╁搧
+		var dropPack = PackManager.Instance.GetSinglePack(PackType.DropItem);
+		var itemDict = dropPack.GetAllItems();
+		List<ItemModel> itemList = new List<ItemModel>(
+			from item in itemDict.Values
+			where item != null && item.isAuction
+			select item);
+
+		int deadCount = deadPackList.Count;
+
+		// 鍒嗛厤鎺夎惤鍜岀粡楠�
+		var dropAssign = AssignDrops(itemList, deadCount);
+		var expAssign = AssignExp(expPackList, deadCount);
+
+		// 鏋勯�� BattleDrops 骞跺垎閰�
+		for (int i = 0; i < deadCount; i++)
+		{
+			BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject((int)deadPackList[i].ObjID);
+			List<ItemModel> itemModelDrops = dropAssign[i];
+			List<int> itemModelDropsIndexList = new List<int>(
+				from item in itemModelDrops  select item.gridIndex);
+			BattleDrops battleDrops = new BattleDrops()
+			{
+				rectTransform = deadTarget.heroRectTrans,
+				dropItemPackIndex = itemModelDropsIndexList,
+				expDrops = expAssign[i]
+			};
+			deadTarget.PushDropItems(battleDrops);
+		}
+
+		// 鍒嗗彂姝讳骸鍖�
+		foreach (var deadPack in deadPackList)
+		{
+			PackageRegedit.Distribute(deadPack);
+			packList.Remove(deadPack);
+		}
+		deadPackList.Clear();
+	}
+
+
+	// 鍒嗛厤鎺夎惤
+	protected List<List<ItemModel>> AssignDrops(List<ItemModel> itemList, int deadCount)
+	{
+		var dropAssign = new List<List<ItemModel>>(deadCount);
+		for (int i = 0; i < deadCount; i++)
+			dropAssign.Add(new List<ItemModel>());
+		for (int i = 0; i < itemList.Count; i++)
+			dropAssign[i % deadCount].Add(itemList[i]);
+		return dropAssign;
+	}
+
+	// 鍒嗛厤缁忛獙锛氭瘡涓師濮嬪寘閮藉钩鍧囧垎閰嶅埌姣忎釜姝讳骸瀵硅薄
+	protected List<List<HB405_tagMCAddExp>> AssignExp(List<HB405_tagMCAddExp> expList, int deadCount)
+	{
+		var expAssign = new List<List<HB405_tagMCAddExp>>(deadCount);
+		for (int i = 0; i < deadCount; i++)
+			expAssign.Add(new List<HB405_tagMCAddExp>());
+
+		foreach (var expPack in expList)
+		{
+			long totalExp = GeneralDefine.GetFactValue(expPack.Exp, expPack.ExpPoint);
+			long avgExp = totalExp / deadCount;
+			long remain = totalExp % deadCount;
+
+			for (int i = 0; i < deadCount; i++)
+			{
+				long assignExp = avgExp + (i < remain ? 1 : 0);
+				long expPoint = assignExp / 100000000;
+				long exp = assignExp % 100000000;
+				var newPack = new HB405_tagMCAddExp
+				{
+					Exp = (uint)exp,
+					ExpPoint = (uint)expPoint,
+					Source = expPack.Source // 淇濇寔鍘熷寘鏉ユ簮
+				};
+				expAssign[i].Add(newPack);
+			}
+			packList.Remove(expPack);
+		}
+		return expAssign;
+	}
 
 	/// <summary>
 	/// 淇濊瘉鎵�鏈夊垎閰嶉」鍔犺捣鏉ョ瓑浜巘otalDamage锛岄伩鍏嶅洜鏁撮櫎瀵艰嚧鐨勮宸�
@@ -299,41 +368,6 @@
 				target.heroGo.transform
 			);
 		}
-
-		//	鍙椾激涔嬪悗杈ㄥ埆姝讳骸鐘舵�� 姝讳骸鍖呭叾瀹炲墠鍚庡抚浼氬娆¤Е鍙� 搴旇瑕佸嵆鏃秗emove鍏朵粬鐨勫寘鏉ヤ繚璇佷笉閲嶅
-		if (target.IsDead())
-		{
-			// SkillRecordAction閲岀殑drop浜嬩欢鍓嶇Щ鍒癲ead涔嬪悗
-			HB422_tagMCTurnFightObjDead deadPack = FindDeadPack(target);
-			CheckAfterDeadhPack(target, deadPack);
-			if (deadPack != null)
-			{
-				//	澶勭悊鎺夎惤鍖�
-				for (int i = 0; i < dropPackList.Count; i++)
-				{
-					PackageRegedit.Distribute(dropPackList[i]);
-				}
-
-				dropPackList.Clear();
-
-				target.PushExpPackList(new List<HB405_tagMCAddExp>(expPackList));
-
-				expPackList.Clear();
-
-				// 澶勭悊姝讳骸鍖�
-				PackageRegedit.Distribute(deadPack);
-				packList.Remove(deadPack);
-			}
-			
-			//	澶嶆椿鍖呮殏鏃朵笉绠� 鍙兘鏄妧鑳界殑鍖�
-			// HB423_tagMCTurnFightObjReborn rebornPack = FindRebornPack(target);
-			// if (rebornPack != null)
-			// {
-			// 	//	澶勭悊澶嶆椿鍖�
-			// 	PackageRegedit.Distribute(rebornPack);
-			// 	packList.Remove(rebornPack);
-			// }
-		}
 	}
 
 	protected HB423_tagMCTurnFightObjReborn FindRebornPack(BattleObject target)
@@ -362,20 +396,17 @@
 		return null;
 	}
 
-	protected HB422_tagMCTurnFightObjDead FindDeadPack(BattleObject target)
+	protected List<HB422_tagMCTurnFightObjDead> FindDeadPack()
 	{
-		HB422_tagMCTurnFightObjDead deadPack = null;
+		List<HB422_tagMCTurnFightObjDead> deadPacks = new List<HB422_tagMCTurnFightObjDead>();
 		for (int i = 0; i < packList.Count; i++)
 		{
 			var pack = packList[i];
 			//	瀵绘壘姝讳骸鍖� 鎵惧埌姝讳骸鍖呬箣鍚庤鎵炬帀钀藉寘 涓嶈兘瓒呰繃鎶�鑳藉寘
 			if (pack is HB422_tagMCTurnFightObjDead)
 			{
-				deadPack = pack as HB422_tagMCTurnFightObjDead;
-				if (deadPack.ObjID == target.ObjID)
-				{
-					return deadPack;
-				}
+				var deadPack = pack as HB422_tagMCTurnFightObjDead;
+				deadPacks.Add(deadPack);
 			}
 			else if (pack is CustomHB426CombinePack)
 			{
@@ -387,22 +418,13 @@
 				}
 			}
 		}
-		return null;
+		return deadPacks;
 	}
 
-	protected void CheckAfterDeadhPack(BattleObject target, HB422_tagMCTurnFightObjDead deadPack)
+	protected void CheckAfterDeadhPack()
 	{
-		if (null == deadPack)
-		{
-			return;
-		}
-		var deadPackIndex = packList.IndexOf(deadPack);
-		if (deadPackIndex < 0)
-		{
-			return;
-		}
 		List<int> removeIndexList = new List<int>();
-		for (int i = deadPackIndex + 1; i < packList.Count; i++)
+		for (int i = 0; i < packList.Count; i++)
 		{
 			var pack = packList[i];
 
@@ -485,4 +507,20 @@
 
 		isFinished = true;
 	}
+	
+
+	protected virtual void OnActiveSkillFrame()
+	{
+
+	}
+
+	protected virtual void OnStartSkillFrame()
+	{
+
+	}
+
+	protected virtual void OnEndSkillFrame()
+	{
+		
+	}
 }
\ No newline at end of file
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
index 9de06db..d624c99 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
@@ -8,7 +8,7 @@
     private Vector2 end;
     private Vector2 control;
 
-    public BezierBulletCurve(BattleObject caster, SkillConfig skillConfig, EffectPlayer effectPlayer, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+    public BezierBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
         : base(caster, skillConfig, effectPlayer, target, onHit) { }
 
     public override void Reset()
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
index 7cd18f6..8b461cd 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
@@ -14,7 +14,7 @@
     private float bounceTime = 0.2f; // 姣忔寮瑰皠鏃堕棿
     private float bounceElapsed = 0f;
 
-    public BounceBulletCurve(BattleObject caster, SkillConfig skillConfig, EffectPlayer effectPlayer,
+    public BounceBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer,
         RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
         : base(caster, skillConfig, effectPlayer, target, onHit)
     {
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
index 39a1089..7e7bf2b 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
@@ -6,7 +6,7 @@
 {
     protected BattleObject caster;
     protected SkillConfig skillConfig;
-    protected EffectPlayer bulletEffect;
+    protected BattleEffectPlayer bulletEffect;
     protected RectTransform bulletTrans; // 瀛愬脊鐨凴ectTransform
     protected RectTransform target;
     protected Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit;
@@ -17,7 +17,7 @@
 
     public BulletCurve() { }
 
-    public BulletCurve(BattleObject caster, SkillConfig skillConfig, EffectPlayer bulletEffect, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+    public BulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
     {
         this.caster = caster;
         this.skillConfig = skillConfig;
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
index 59e2841..4dc0b0e 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
@@ -13,7 +13,7 @@
     public static BulletCurve CreateBulletCurve(
         BattleObject caster,
         SkillConfig skillConfig,
-        EffectPlayer bulletEffect,
+        BattleEffectPlayer bulletEffect,
         RectTransform target,
         HB427_tagSCUseSkill tagUseSkillAttack,
         Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
index fb884bd..d05a266 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
@@ -9,7 +9,7 @@
     private Vector2 outPos;     // 灞忓箷澶栧欢闀跨偣锛堟湰鍦板潗鏍囷級
     private bool hitTriggered = false; // 鏄惁宸茶Е鍙憃nHit
 
-    public PenetrateBulletCurve(BattleObject caster, SkillConfig skillConfig, EffectPlayer effectPlayer, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+    public PenetrateBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
         : base(caster, skillConfig, effectPlayer, target, onHit) { }
 
     /// <summary>
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
index 553ca14..8efd581 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
@@ -7,7 +7,7 @@
     private Vector2 start;
     private Vector2 end;
 
-    public StraightBulletCurve(BattleObject caster, SkillConfig skillConfig, EffectPlayer bulletEffect, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+    public StraightBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
         : base(caster, skillConfig, bulletEffect, target, onHit) { }
 
     public override void Reset()
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index c545416..10e146f 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -79,7 +79,7 @@
 
     protected void ShotToFormation(RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit)
     {
-        EffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.effectNode);
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.effectNode);
 
         RectTransform effectTrans = effectPlayer.transform as RectTransform;
 
@@ -113,7 +113,7 @@
 
     protected void ShotToTarget(BattleObject target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit)
     {
-        EffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.effectNode);
+        BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.effectNode);
         RectTransform effectTrans = effectPlayer.transform as RectTransform;
 
         var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, (index, hitList) =>

--
Gitblit v1.8.0