From b0a5d4688f1af73b5ad03ccc2df11c9aac1523a9 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 29 七月 2025 16:56:23 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/Config/Configs/PlayerPropertyConfig.cs             |    4 
 Main/Config/Configs/TitleStarUpConfig.cs                |   98 
 Main/Config/Configs/SkillConfig.cs                      |  343 +
 Main/Config/Configs/EquipPlaceMapConfig.cs              |    4 
 Main/Config/Configs/HeroLineupHaloConfig.cs.meta        |    5 
 Main/Config/Configs/EmojiPackConfig.cs                  |  116 
 Main/System/HeroUI/HeroScenePosCell.cs                  |   30 
 Main/System/HeroUI/HeroCardLineCell.cs                  |    7 
 Main/Component/UI/Common/FunctionButtonGroup.cs         |  491 +-
 Main/System/HeroUI/HeroPosHeadCell.cs                   |   16 
 Main/Config/Configs/RealmLVUPTaskConfig.cs              |    4 
 Main/Config/Configs/NPCExConfig.cs                      |   74 
 Main/Config/Configs/TreasureSetConfig.cs                |    4 
 Main/Component/UI/Common/GroupButtonEx.cs               |  151 
 Main/System/KnapSack/Logic/ItemModel.cs                 |    9 
 Main/Utility/EnumHelper.cs                              |    4 
 Main/Config/Configs/MainLevelConfig.cs                  |  128 
 Main/Config/Configs/NPCLineupConfig.cs                  |  116 
 Main/Config/Configs/HeroBreakConfig.cs                  |   98 
 Main/Config/Configs/TreasureItemLibConfig.cs            |    4 
 Main/Config/Configs/GuideConfig.cs                      |  134 
 Main/Config/Configs/AppointItemConfig.cs                |   80 
 Main/Config/Configs/CTGSelectItemConfig.cs              |   80 
 Main/Config/Configs/FamilyConfig.cs                     |    4 
 Main/Config/Configs/HeroLineupHaloConfig.cs             |   69 
 Main/Config/Configs/SuccessConfig.cs                    |  182 
 Main/Config/Configs/HeroQualityAwakeConfig.cs           |   86 
 Main/Config/Configs/HeroQualityLVConfig.cs.meta         |    5 
 Main/Config/Configs/PlayerFacePicStarConfig.cs          |   98 
 Main/Config/Configs/HeroSkinConfig.cs                   |    4 
 Main/Config/Configs/RichTextMsgReplaceConfig.cs         |   86 
 Main/Config/Configs/FamilyEmblemConfig.cs               |    4 
 Main/Config/Configs/HeroAwakeConfig.cs                  |  110 
 Main/Config/Configs/PlayerFacePicConfig.cs              |  134 
 Main/Config/Configs/RuleConfig.cs                       |   80 
 Main/Component/UI/Common/FunctionButton.cs              |  480 +-
 Main/Component/UI/Core/OutlineEx.cs                     |   20 
 Main/Config/Configs/TaskConfig.cs                       |    4 
 Main/Component/UI/Common/ItemBaseEffect.cs              |    2 
 Main/Config/Configs/AudioConfig.cs                      |   80 
 Main/Config/Configs/TreeLVConfig.cs                     |   92 
 Main/System/Team/TeamManager.cs                         |   11 
 Main/Config/Configs/DailyLivenessRewardConfig.cs        |    4 
 Main/System/Hero/HeroManager.cs                         |   54 
 Main/Config/Configs/FrameAnimationConfig.cs             |   98 
 Main/Config/Configs/KickOutReasonConfig.cs              |   74 
 Main/Config/Configs/HeroQualityLVConfig.cs              |   54 
 Main/Config/Configs/RealmConfig.cs                      |    4 
 Main/Config/Configs/StoreConfig.cs                      |  200 
 Main/Config/Configs/HeroQualityBreakConfig.cs           |   92 
 Main/Core/ResModule/GameObjectPoolManager.cs            |  361 +
 Main/Config/Configs/InitialFunctionConfig.cs            |   98 
 Main/Component/UI/Effect/EffectMgr.cs                   |   28 
 Main/Config/Configs/ChestsConfig.cs                     |   92 
 Main/System/Tip/MarqueeWin.cs                           |    2 
 Main/Component/UI/Effect/EffectTime.cs.meta             |    5 
 Main/Config/Configs/GetItemWaysConfig.cs                |  110 
 Main/Config/Configs/DailyQuestOpenTimeConfig.cs         |    4 
 Main/Config/Configs/PlayerFaceStarConfig.cs             |   98 
 Main/System/HeroUI/HeroConnectionCell.cs                |   15 
 Main/System/HeroUI/HeroPosLineCell.cs.meta              |    5 
 Main/System/HeroUI/HeroPosWin.cs                        |  187 +
 Main/Config/Configs/EquipGSParamConfig.cs               |    4 
 Main/Component/UI/Common/GroupButtonExManager.cs        |  152 
 Main/System/HeroUI/HeroUIManager.cs                     |  186 +
 Main/System/HeroUI/HeroPosWin.cs.meta                   |    5 
 Main/Config/Configs/ChestsAwardConfig.cs                |  110 
 Main/Config/Configs/MailConfig.cs                       |   80 
 Main/Component/UI/Common/GroupButtonExManager.cs.meta   |    5 
 Main/Config/Configs/FirstGoldConfig.cs                  |    4 
 Main/Config/Configs/XBGetItemConfig.cs                  |    4 
 Main/ResModule/ResManager.cs                            |    4 
 Main/Config/Configs/CTGConfig.cs                        |  158 
 Main/Config/Configs/DienstgradConfig.cs                 |  140 
 Main/System/Hero/HeroInfo.Properties.cs                 |    2 
 Main/Config/Configs/DirtyWordConfig.cs                  |   74 
 Main/Config/PartialConfigs/PlayerPropertyConfig.cs      |    2 
 Main/System/HeroUI/HeroSelectBehaviour.cs.meta          |    5 
 Main/Config/Configs/ChatBubbleBoxConfig.cs              |    4 
 Main/Config/Configs/FunctionTeamSetConfig.cs            |  110 
 Main/Config/Configs/HeroConfig.cs                       |    4 
 Main/System/HeroUI/HeroPosLineCell.cs                   |   23 
 Main/Config/Configs/OrderInfoConfig.cs                  |  122 
 Main/Config/Configs/EffectConfig.cs                     |  116 
 Main/Config/Configs/FuncConfigConfig.cs                 |   98 
 Main/Config/Configs/PlayerFaceConfig.cs                 |  146 
 Main/Config/Configs/LanguageConfig.cs                   |   74 
 Main/Config/Configs/PlayerLVConfig.cs                   |    4 
 Main/Component/UI/Common/GroupButtonEx.cs.meta          |    5 
 Main/Component/UI/Effect/UIEffectPlayer.cs.meta         |    5 
 Main/Config/Configs/DailyQuestConfig.cs                 |    4 
 Main/Config/PartialConfigs/HeroLineupHaloConfig.cs      |   35 
 Main/System/Hero/HeroInfo.cs                            |   36 
 Main/System/UIBase/UIBase.cs                            |    8 
 Main/Config/Configs/FaceConfig.cs                       |   98 
 Main/Config/Configs/PriorLanguageConfig.cs              |   74 
 Main/System/HeroUI/HeroConnectionHeadCell.cs.meta       |    5 
 Main/System/HeroUI/HeroListWin.cs                       |   51 
 Main/System/HeroUI/HeroConnectionCell.cs.meta           |    5 
 Main/System/HeroUI/HeroHeadBaseCell.cs                  |    1 
 Main/System/HeroUI/HeroSelectBehaviour.cs               |   96 
 Main/Config/Configs/HeroFetterConfig.cs                 |   92 
 Main/Config/Configs/SysInfoConfig.cs                    |   98 
 Main/Config/ConfigManager.cs                            |  137 
 Main/Config/PartialConfigs/HeroLineupHaloConfig.cs.meta |    5 
 Main/Component/UI/Effect/UIEffectPlayer.cs              |  154 
 Main/System/HeroUI/HeroCardCell.cs                      |    4 
 Main/System/HeroUI/HeroConnectionHeadCell.cs            |   45 
 Main/Component/UI/Effect/EffectTime.cs                  |   13 
 Main/Config/Configs/NPCConfig.cs                        |  416 +-
 Main/Config/Configs/GmCmdConfig.cs                      |   80 
 Main/Config/Configs/IconConfig.cs                       |   80 
 Main/System/Main/HomeWin.cs                             |    5 
 Main/Config/Configs/ItemConfig.cs                       |  500 +-
 Main/Config/Configs/priorbundleConfig.cs                |   92 
 Main/Component/UI/Effect/EffectPlayer.cs                |  245 +
 Main/Config/Configs/FuncOpenLVConfig.cs                 |  128 
 Main/System/PhantasmPavilion/AvatarCell.cs              |   12 
 Main/Config/Configs/HeroQualityConfig.cs                |  128 
 Main/Config/Configs/TreasureCntAwardConfig.cs           |    4 
 Main/Config/Configs/HeroTalentConfig.cs                 |    4 
 Main/System/Hero/UIHeroController.cs                    |   59 
 Main/System/Message/WaitCallBack.cs                     |  298 
 Main/System/Team/TeamType.cs                            |   12 
 /dev/null                                               |   99 
 Main/System/HeroUI/HeroScenePosCell.cs.meta             |    5 
 Main/Config/Configs/DirtyNameConfig.cs                  |    4 
 Main/Config/Configs/MainChapterConfig.cs                |   98 
 Main/System/HeroUI/HeroPosHeadCell.cs.meta              |    5 
 129 files changed, 5,732 insertions(+), 4,285 deletions(-)

diff --git a/Main/Component/UI/Common/FunctionButton.cs b/Main/Component/UI/Common/FunctionButton.cs
index b4718f1..965bae3 100644
--- a/Main/Component/UI/Common/FunctionButton.cs
+++ b/Main/Component/UI/Common/FunctionButton.cs
@@ -11,249 +11,249 @@
 using System;
 
 
-    
-    public class FunctionButton : Button
-    {
-        [SerializeField] int m_Order = 0;
-        public int order {
-            get { return m_Order; }
-            set {
-                m_Order = value;
-            }
+//鍏宠仈娓告垙鐜╂硶鍔熻兘鎸夐挳锛屽鍗囨槦鍔熻兘
+public class FunctionButton : Button
+{
+    [SerializeField] int m_Order = 0;
+    public int order {
+        get { return m_Order; }
+        set {
+            m_Order = value;
         }
-
-        [SerializeField] int m_FunctionId = -1;
-        public int functionId {
-            get { return m_FunctionId; }
-            set {
-                m_FunctionId = value;
-                OnFunctionUnLockStateChange();
-            }
-        }
-
-        [SerializeField] TitleBtnState m_State = TitleBtnState.Normal;
-        public TitleBtnState state {
-            get { return m_State; }
-            set {
-                if (m_State != value)
-                {
-                    m_State = value;
-                    OnStateChange();
-                }
-            }
-        }
-
-        [SerializeField] Button m_Button;
-        public Button button {
-            get { return m_Button; }
-            set { m_Button = value; }
-        }
-
-        [SerializeField] ImageEx m_Icon;
-        public ImageEx icon {
-            get { return this.m_Icon; }
-            set { this.m_Icon = value; }
-        }
-
-        [SerializeField] TextEx m_Title;
-        public TextEx title {
-            get { return this.m_Title; }
-            set { this.m_Title = value; }
-        }
-
-        [SerializeField] RedpointBehaviour m_Redpoint;
-        public RedpointBehaviour redpoint {
-            get { return m_Redpoint; }
-            set { m_Redpoint = value; }
-        }
-
-        [SerializeField] Shadow m_Shadow;
-        public Shadow shadow {
-            get { return this.m_Shadow; }
-            set { this.m_Shadow = value; }
-        }
-
-        [SerializeField] Transform m_Locked;
-        public Transform locked {
-            get { return this.m_Locked; }
-            set { this.m_Locked = value; }
-        }
-
-        [SerializeField] int m_Audio = 1;
-        public int clickAudio {
-            get { return this.m_Audio; }
-            set { this.m_Audio = value; }
-        }
-
-        [SerializeField] bool m_UseDefaultConfig = true;
-        public bool useDefaultConfig {
-            get { return this.m_UseDefaultConfig; }
-            set { this.m_UseDefaultConfig = value; }
-        }
-
-        [SerializeField] FunctionButtonConfig m_AlternativeConfig;
-        public FunctionButtonConfig alternativeConfig { get { return m_AlternativeConfig; } set { m_AlternativeConfig = value; } }
-
-        [SerializeField]
-        FunctionButtonGroup m_Group;
-        public FunctionButtonGroup group {
-            get { return m_Group; }
-            set {
-                if (m_Group != null)
-                {
-                    m_Group.UnRegister(this);
-                }
-                m_Group = value;
-                if (m_Group != null)
-                {
-                    m_Group.Register(this);
-                }
-            }
-        }
-
-        public event Action<string> OnPointClickLockFunc;
-        public event Action repeatClickFunc;
-
-        protected override void Awake()
-        {
-#if UNITY_EDITOR
-            if (!Application.isPlaying) return;
-#endif
-            OnFunctionUnLockStateChange();
-            FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionUnLockStateChange;
-        }
-
-        protected override void OnEnable()
-        {
-            base.OnEnable();
-
-            if (group != null)
-            {
-                group.Register(this);
-            }
-
-            OnStateChange();
-        }
-
-        protected override void OnDisable()
-        {
-            base.OnDisable();
-
-            if (group != null)
-            {
-                group.UnRegister(this);
-            }
-        }
-
-        protected override void OnDestroy()
-        {
-#if UNITY_EDITOR
-            if (!Application.isPlaying) return;
-#endif
-            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionUnLockStateChange;
-        }
-
-        bool invokeForce = false;
-
-        public void Invoke(bool _force)
-        {
-            invokeForce = _force;
-            OnPointerClick(null);
-            invokeForce = false;
-        }
-
-        public override void OnPointerClick(PointerEventData eventData)
-        {
-            if (state == TitleBtnState.Locked)
-            {
-                if (OnPointClickLockFunc != null)
-                {
-                    OnPointClickLockFunc(this.gameObject.name);
-                }
-                else
-                {
-                    FuncOpen.Instance.ProcessorFuncErrorTip(functionId);
-                }
-                return;
-            }
-
-            if (!invokeForce && state == TitleBtnState.Click)
-            {
-                if (repeatClickFunc != null)
-                {
-                    repeatClickFunc();
-                }
-                return;
-            }
-
-            if (base.onClick != null)
-            {
-                base.onClick.Invoke();
-                if (eventData != null)
-                {
-                    SoundPlayer.Instance.PlayUIAudio(clickAudio);
-                }
-            }
-
-            state = TitleBtnState.Click;
-        }
-
-        private void OnStateChange()
-        {
-            var config = useDefaultConfig ? FunctionButtonConfig.GetDefault() : m_AlternativeConfig;
-            if (Application.isPlaying)
-            {
-                icon.SetSprite(config.GetIconKey(state));
-            }
-
-            title.color = config.GetFontColor(state);
-            title.fontSize = config.GetFontSize(state);
-
-            if (shadow != null)
-            {
-                shadow.enabled = state == TitleBtnState.Locked || state == TitleBtnState.Normal;
-            }
-
-            if (locked != null)
-            {
-                locked.SetActive(state == TitleBtnState.Locked);
-            }
-
-            if (group != null && state == TitleBtnState.Click)
-            {
-                group.NotifyToggleOn(this);
-            }
-        }
-
-        private void OnFunctionUnLockStateChange(int _functionId)
-        {
-            if (m_FunctionId == _functionId)
-            {
-                OnFunctionUnLockStateChange();
-            }
-        }
-
-        private void OnFunctionUnLockStateChange()
-        {
-            if (m_FunctionId == 0)
-            {
-                return;
-            }
-
-            var isOpen = m_FunctionId == -1 || FuncOpen.Instance.IsFuncOpen(m_FunctionId);
-            state = isOpen ? state == TitleBtnState.Click ? TitleBtnState.Click : TitleBtnState.Normal : TitleBtnState.Locked;
-        }
-
-#if UNITY_EDITOR
-        protected override void OnValidate()
-        {
-            base.OnValidate();
-            OnStateChange();
-        }
-#endif
-
     }
 
+    [SerializeField] int m_FunctionId = -1;
+    public int functionId {
+        get { return m_FunctionId; }
+        set {
+            m_FunctionId = value;
+            OnFunctionUnLockStateChange();
+        }
+    }
+
+    [SerializeField] TitleBtnState m_State = TitleBtnState.Normal;
+    public TitleBtnState state {
+        get { return m_State; }
+        set {
+            if (m_State != value)
+            {
+                m_State = value;
+                OnStateChange();
+            }
+        }
+    }
+
+    [SerializeField] Button m_Button;
+    public Button button {
+        get { return m_Button; }
+        set { m_Button = value; }
+    }
+
+    [SerializeField] ImageEx m_Icon;
+    public ImageEx icon {
+        get { return this.m_Icon; }
+        set { this.m_Icon = value; }
+    }
+
+    [SerializeField] TextEx m_Title;
+    public TextEx title {
+        get { return this.m_Title; }
+        set { this.m_Title = value; }
+    }
+
+    [SerializeField] RedpointBehaviour m_Redpoint;
+    public RedpointBehaviour redpoint {
+        get { return m_Redpoint; }
+        set { m_Redpoint = value; }
+    }
+
+    [SerializeField] Shadow m_Shadow;
+    public Shadow shadow {
+        get { return this.m_Shadow; }
+        set { this.m_Shadow = value; }
+    }
+
+    [SerializeField] Transform m_Locked;
+    public Transform locked {
+        get { return this.m_Locked; }
+        set { this.m_Locked = value; }
+    }
+
+    [SerializeField] int m_Audio = 1;
+    public int clickAudio {
+        get { return this.m_Audio; }
+        set { this.m_Audio = value; }
+    }
+
+    [SerializeField] bool m_UseDefaultConfig = true;
+    public bool useDefaultConfig {
+        get { return this.m_UseDefaultConfig; }
+        set { this.m_UseDefaultConfig = value; }
+    }
+
+    [SerializeField] FunctionButtonConfig m_AlternativeConfig;
+    public FunctionButtonConfig alternativeConfig { get { return m_AlternativeConfig; } set { m_AlternativeConfig = value; } }
+
+    [SerializeField]
+    FunctionButtonGroup m_Group;
+    public FunctionButtonGroup group {
+        get { return m_Group; }
+        set {
+            if (m_Group != null)
+            {
+                m_Group.UnRegister(this);
+            }
+            m_Group = value;
+            if (m_Group != null)
+            {
+                m_Group.Register(this);
+            }
+        }
+    }
+
+    public event Action<string> OnPointClickLockFunc;
+    public event Action repeatClickFunc;
+
+    protected override void Awake()
+    {
+#if UNITY_EDITOR
+        if (!Application.isPlaying) return;
+#endif
+        OnFunctionUnLockStateChange();
+        FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionUnLockStateChange;
+    }
+
+    protected override void OnEnable()
+    {
+        base.OnEnable();
+
+        if (group != null)
+        {
+            group.Register(this);
+        }
+
+        OnStateChange();
+    }
+
+    protected override void OnDisable()
+    {
+        base.OnDisable();
+
+        if (group != null)
+        {
+            group.UnRegister(this);
+        }
+    }
+
+    protected override void OnDestroy()
+    {
+#if UNITY_EDITOR
+        if (!Application.isPlaying) return;
+#endif
+        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionUnLockStateChange;
+    }
+
+    bool invokeForce = false;
+
+    public void Invoke(bool _force)
+    {
+        invokeForce = _force;
+        OnPointerClick(null);
+        invokeForce = false;
+    }
+
+    public override void OnPointerClick(PointerEventData eventData)
+    {
+        if (state == TitleBtnState.Locked)
+        {
+            if (OnPointClickLockFunc != null)
+            {
+                OnPointClickLockFunc(this.gameObject.name);
+            }
+            else
+            {
+                FuncOpen.Instance.ProcessorFuncErrorTip(functionId);
+            }
+            return;
+        }
+
+        if (!invokeForce && state == TitleBtnState.Click)
+        {
+            if (repeatClickFunc != null)
+            {
+                repeatClickFunc();
+            }
+            return;
+        }
+
+        if (base.onClick != null)
+        {
+            base.onClick.Invoke();
+            if (eventData != null)
+            {
+                SoundPlayer.Instance.PlayUIAudio(clickAudio);
+            }
+        }
+
+        state = TitleBtnState.Click;
+    }
+
+    private void OnStateChange()
+    {
+        var config = useDefaultConfig ? FunctionButtonConfig.GetDefault() : m_AlternativeConfig;
+        if (Application.isPlaying)
+        {
+            icon.SetSprite(config.GetIconKey(state));
+        }
+
+        title.color = config.GetFontColor(state);
+        title.fontSize = config.GetFontSize(state);
+
+        if (shadow != null)
+        {
+            shadow.enabled = state == TitleBtnState.Locked || state == TitleBtnState.Normal;
+        }
+
+        if (locked != null)
+        {
+            locked.SetActive(state == TitleBtnState.Locked);
+        }
+
+        if (group != null && state == TitleBtnState.Click)
+        {
+            group.NotifyToggleOn(this);
+        }
+    }
+
+    private void OnFunctionUnLockStateChange(int _functionId)
+    {
+        if (m_FunctionId == _functionId)
+        {
+            OnFunctionUnLockStateChange();
+        }
+    }
+
+    private void OnFunctionUnLockStateChange()
+    {
+        if (m_FunctionId == 0)
+        {
+            return;
+        }
+
+        var isOpen = m_FunctionId == -1 || FuncOpen.Instance.IsFuncOpen(m_FunctionId);
+        state = isOpen ? state == TitleBtnState.Click ? TitleBtnState.Click : TitleBtnState.Normal : TitleBtnState.Locked;
+    }
+
+#if UNITY_EDITOR
+    protected override void OnValidate()
+    {
+        base.OnValidate();
+        OnStateChange();
+    }
+#endif
+
+}
+
 
 
 
diff --git a/Main/Component/UI/Common/FunctionButtonGroup.cs b/Main/Component/UI/Common/FunctionButtonGroup.cs
index 66b475f..3e8aee6 100644
--- a/Main/Component/UI/Common/FunctionButtonGroup.cs
+++ b/Main/Component/UI/Common/FunctionButtonGroup.cs
@@ -9,258 +9,261 @@
 using UnityEngine.Events;
 using System;
 
-    public class FunctionButtonGroup : MonoBehaviour
+//鍏宠仈娓告垙鐜╂硶鍔熻兘鎸夐挳锛屽鍗囨槦鍔熻兘
+public class FunctionButtonGroup : MonoBehaviour
+{
+    [SerializeField] ScrollRect m_ScrollRect;
+    [SerializeField] RectTransform m_Container;
+
+    public int unLockedCount
     {
-        [SerializeField] ScrollRect m_ScrollRect;
-        [SerializeField] RectTransform m_Container;
-
-        public int unLockedCount {
-            get {
-                var count = 0;
-                foreach (var button in functionButtons.Values)
+        get
+        {
+            var count = 0;
+            foreach (var button in functionButtons.Values)
+            {
+                if (button.state != TitleBtnState.Locked)
                 {
-                    if (button.state != TitleBtnState.Locked)
-                    {
-                        count++;
-                    }
-                }
-
-                return count;
-            }
-        }
-
-        int currentOrder = 0;
-        List<int> orders = new List<int>();
-        Dictionary<int, FunctionButton> functionButtons = new Dictionary<int, FunctionButton>();
-
-        public void Register(FunctionButton button)
-        {
-            functionButtons[button.order] = button;
-            if (!orders.Contains(button.order))
-            {
-                orders.Add(button.order);
-                orders.Sort(OrderCompare);
-            }
-
-            if (m_ScrollRect != null)
-            {
-                m_ScrollRect.horizontal = functionButtons.Count > 5;
-            }
-        }
-
-        public void ChangeHorizontal(bool move)
-        {
-            if (m_ScrollRect != null)
-            {
-                m_ScrollRect.horizontal = move;
-            }
-        }
-
-        public void ChangeHorizontalPos(float index)
-        {
-            if (m_ScrollRect != null)
-            {
-                m_ScrollRect.horizontalNormalizedPosition = index;
-            }
-        }
-        public void UnRegister(FunctionButton button)
-        {
-            if (functionButtons.ContainsKey(button.order))
-            {
-                functionButtons.Remove(button.order);
-            }
-
-            if (orders.Contains(button.order))
-            {
-                orders.Remove(button.order);
-                orders.Sort(OrderCompare);
-            }
-
-            if (m_ScrollRect != null)
-            {
-                m_ScrollRect.horizontal = functionButtons.Count > 5;
-            }
-        }
-
-        public void NotifyToggleOn(FunctionButton button)
-        {
-
-            if (button.state == TitleBtnState.Click)
-            {
-                currentOrder = button.order;
-                for (int i = 0; i < orders.Count; i++)
-                {
-                    if (!functionButtons.ContainsKey(orders[i]))
-                    {
-                        Debug.LogFormat("<color=#ff0000ff>{0} {1}</color>", orders[i], button.name);
-                    }
-                    var functionButton = functionButtons[orders[i]];
-                    if (functionButton != button && functionButton.state != TitleBtnState.Locked)
-                    {
-                        functionButton.state = TitleBtnState.Normal;
-                    }
-                }
-            }
-        }
-
-        public void TriggerByOrder(int targetOrder)
-        {
-            for (int i = 0; i < orders.Count; i++)
-            {
-                var order = orders[i];
-                if (order == targetOrder)
-                {
-                    functionButtons[order].Invoke(true);
-                    break;
-                }
-            }
-        }
-
-        public void TriggerLast()
-        {
-            var index = orders.IndexOf(currentOrder);
-            if (index < 0)
-            {
-                return;
-            }
-
-            var loopTimes = 0;
-            while (loopTimes < 2)
-            {
-                index--;
-                if (index < 0)
-                {
-                    index = orders.Count - 1;
-                    loopTimes++;
-                }
-
-                var next = orders[index];
-                if (functionButtons[next].state != TitleBtnState.Locked)
-                {
-                    functionButtons[next].Invoke(false);
-                    break;
+                    count++;
                 }
             }
 
-        }
-
-        public void TriggerNext()
-        {
-            var index = orders.IndexOf(currentOrder);
-            if (index < 0)
-            {
-                return;
-            }
-
-            var loopTimes = 0;
-            while (loopTimes < 2)
-            {
-                index++;
-                if (index > orders.Count - 1)
-                {
-                    index = 0;
-                    loopTimes++;
-                }
-
-                var next = orders[index];
-                if (functionButtons[next].state != TitleBtnState.Locked)
-                {
-                    functionButtons[next].Invoke(false);
-                    break;
-                }
-            }
-        }
-
-        public bool IsFirst()
-        {
-            return orders.Count > 0 && currentOrder == orders[0];
-        }
-
-        public bool IsLast()
-        {
-            return orders.Count > 0 && currentOrder == orders[orders.Count - 1];
-        }
-
-        public void GotoOrder(int order)
-        {
-            if (m_ScrollRect != null)
-            {
-                var index = orders.IndexOf(order);
-                if (m_ScrollRect.horizontal)
-                {
-                    m_ScrollRect.horizontalNormalizedPosition = (float)index / orders.Count;
-                }
-                else if (m_ScrollRect.vertical)
-                {
-                    m_ScrollRect.verticalNormalizedPosition = (float)index / orders.Count;
-                }
-            }
-        }
-
-        private int OrderCompare(int a, int b)
-        {
-            return a < b ? -1 : 1;
-        }
-
-        public FunctionButton AddFunction(string pattern, int order, int functionId, string title, int redpointId)
-        {
-            if (m_Container == null)
-            {
-                return null;
-            }
-
-            var instance = UIUtility.CreateWidget(pattern, string.Concat("Function_", order));
-            instance.transform.SetParentEx(this.m_Container, Vector3.zero, Quaternion.identity, Vector3.one);
-
-            var functionButton = instance.GetComponent<FunctionButton>();
-            functionButton.functionId = functionId;
-            functionButton.order = order;
-            functionButton.title.text = title;
-
-            functionButton.group = this;
-            functionButton.redpoint.redpointId = redpointId;
-            functionButtons[order] = functionButton;
-
-            functionButton.SetActive(functionButton.functionId != -1);
-            return functionButton;
-        }
-
-        public void SetFunctionListener(int order, Action callBack)
-        {
-            if (functionButtons.ContainsKey(order))
-            {
-                functionButtons[order].SetListener(() => callBack?.Invoke());
-            }
-        }
-
-        public void SetFunctionButtonActive(int order, bool isShow)
-        {
-            if (functionButtons.ContainsKey(order))
-            {
-                functionButtons[order].SetActive(isShow);
-            }
-        }
-
-        public RedPointState GetFunctionButtonRedPointState(int order)
-        {
-            if (functionButtons.ContainsKey(order))
-            {
-                return RedpointCenter.Instance.GetRedpointState(functionButtons[order].redpoint.redpointId);
-            }
-
-            return RedPointState.None;
-        }
-
-        public FunctionButton GetFunctionBtn(int order)
-        {
-            if (functionButtons.ContainsKey(order))
-            {
-                return functionButtons[order];
-            }
-            return null;
+            return count;
         }
     }
 
+    int currentOrder = 0;
+    List<int> orders = new List<int>();
+    Dictionary<int, FunctionButton> functionButtons = new Dictionary<int, FunctionButton>();
+
+    public void Register(FunctionButton button)
+    {
+        functionButtons[button.order] = button;
+        if (!orders.Contains(button.order))
+        {
+            orders.Add(button.order);
+            orders.Sort(OrderCompare);
+        }
+
+        if (m_ScrollRect != null)
+        {
+            m_ScrollRect.horizontal = functionButtons.Count > 5;
+        }
+    }
+
+    public void ChangeHorizontal(bool move)
+    {
+        if (m_ScrollRect != null)
+        {
+            m_ScrollRect.horizontal = move;
+        }
+    }
+
+    public void ChangeHorizontalPos(float index)
+    {
+        if (m_ScrollRect != null)
+        {
+            m_ScrollRect.horizontalNormalizedPosition = index;
+        }
+    }
+    public void UnRegister(FunctionButton button)
+    {
+        if (functionButtons.ContainsKey(button.order))
+        {
+            functionButtons.Remove(button.order);
+        }
+
+        if (orders.Contains(button.order))
+        {
+            orders.Remove(button.order);
+            orders.Sort(OrderCompare);
+        }
+
+        if (m_ScrollRect != null)
+        {
+            m_ScrollRect.horizontal = functionButtons.Count > 5;
+        }
+    }
+
+    public void NotifyToggleOn(FunctionButton button)
+    {
+
+        if (button.state == TitleBtnState.Click)
+        {
+            currentOrder = button.order;
+            for (int i = 0; i < orders.Count; i++)
+            {
+                if (!functionButtons.ContainsKey(orders[i]))
+                {
+                    Debug.LogFormat("<color=#ff0000ff>{0} {1}</color>", orders[i], button.name);
+                }
+                var functionButton = functionButtons[orders[i]];
+                if (functionButton != button && functionButton.state != TitleBtnState.Locked)
+                {
+                    functionButton.state = TitleBtnState.Normal;
+                }
+            }
+        }
+    }
+
+    public void TriggerByOrder(int targetOrder)
+    {
+        for (int i = 0; i < orders.Count; i++)
+        {
+            var order = orders[i];
+            if (order == targetOrder)
+            {
+                functionButtons[order].Invoke(true);
+                break;
+            }
+        }
+    }
+
+    public void TriggerLast()
+    {
+        var index = orders.IndexOf(currentOrder);
+        if (index < 0)
+        {
+            return;
+        }
+
+        var loopTimes = 0;
+        while (loopTimes < 2)
+        {
+            index--;
+            if (index < 0)
+            {
+                index = orders.Count - 1;
+                loopTimes++;
+            }
+
+            var next = orders[index];
+            if (functionButtons[next].state != TitleBtnState.Locked)
+            {
+                functionButtons[next].Invoke(false);
+                break;
+            }
+        }
+
+    }
+
+    public void TriggerNext()
+    {
+        var index = orders.IndexOf(currentOrder);
+        if (index < 0)
+        {
+            return;
+        }
+
+        var loopTimes = 0;
+        while (loopTimes < 2)
+        {
+            index++;
+            if (index > orders.Count - 1)
+            {
+                index = 0;
+                loopTimes++;
+            }
+
+            var next = orders[index];
+            if (functionButtons[next].state != TitleBtnState.Locked)
+            {
+                functionButtons[next].Invoke(false);
+                break;
+            }
+        }
+    }
+
+    public bool IsFirst()
+    {
+        return orders.Count > 0 && currentOrder == orders[0];
+    }
+
+    public bool IsLast()
+    {
+        return orders.Count > 0 && currentOrder == orders[orders.Count - 1];
+    }
+
+    public void GotoOrder(int order)
+    {
+        if (m_ScrollRect != null)
+        {
+            var index = orders.IndexOf(order);
+            if (m_ScrollRect.horizontal)
+            {
+                m_ScrollRect.horizontalNormalizedPosition = (float)index / orders.Count;
+            }
+            else if (m_ScrollRect.vertical)
+            {
+                m_ScrollRect.verticalNormalizedPosition = (float)index / orders.Count;
+            }
+        }
+    }
+
+    private int OrderCompare(int a, int b)
+    {
+        return a < b ? -1 : 1;
+    }
+
+    public FunctionButton AddFunction(string pattern, int order, int functionId, string title, int redpointId)
+    {
+        if (m_Container == null)
+        {
+            return null;
+        }
+
+        var instance = UIUtility.CreateWidget(pattern, string.Concat("Function_", order));
+        instance.transform.SetParentEx(this.m_Container, Vector3.zero, Quaternion.identity, Vector3.one);
+
+        var functionButton = instance.GetComponent<FunctionButton>();
+        functionButton.functionId = functionId;
+        functionButton.order = order;
+        functionButton.title.text = title;
+
+        functionButton.group = this;
+        functionButton.redpoint.redpointId = redpointId;
+        functionButtons[order] = functionButton;
+
+        functionButton.SetActive(functionButton.functionId != -1);
+        return functionButton;
+    }
+
+    public void SetFunctionListener(int order, Action callBack)
+    {
+        if (functionButtons.ContainsKey(order))
+        {
+            functionButtons[order].SetListener(() => callBack?.Invoke());
+        }
+    }
+
+    public void SetFunctionButtonActive(int order, bool isShow)
+    {
+        if (functionButtons.ContainsKey(order))
+        {
+            functionButtons[order].SetActive(isShow);
+        }
+    }
+
+    public RedPointState GetFunctionButtonRedPointState(int order)
+    {
+        if (functionButtons.ContainsKey(order))
+        {
+            return RedpointCenter.Instance.GetRedpointState(functionButtons[order].redpoint.redpointId);
+        }
+
+        return RedPointState.None;
+    }
+
+    public FunctionButton GetFunctionBtn(int order)
+    {
+        if (functionButtons.ContainsKey(order))
+        {
+            return functionButtons[order];
+        }
+        return null;
+    }
+}
+
 
 
 
diff --git a/Main/Component/UI/Common/GroupButtonEx.cs b/Main/Component/UI/Common/GroupButtonEx.cs
new file mode 100644
index 0000000..99fa338
--- /dev/null
+++ b/Main/Component/UI/Common/GroupButtonEx.cs
@@ -0,0 +1,151 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, October 31, 2017
+//--------------------------------------------------------
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+using System;
+
+
+//鍏宠仈鎸夐挳锛屽叾涓竴涓寒璧凤紝鍏朵粬鎸変笅锛屾枃瀛楅鑹插搴斿彉鏇�
+//鏁版嵁鏇存柊閫氳繃SelectBtn鏇存柊 鎴栬�� GroupButtonExManager.SelectButton
+public class GroupButtonEx : ButtonEx
+{
+    [SerializeField] GroupButtonExManager m_Manager; // 鎸夐挳缁勭鐞嗗櫒寮曠敤
+    public GroupButtonExManager manager
+    {
+        get { return m_Manager; }
+        set
+        {
+            if (m_Manager != value)
+            {
+                // 浠庢棫绠$悊鍣ㄧЩ闄ゅ苟娣诲姞鍒版柊绠$悊鍣�
+                if (m_Manager != null)
+                {
+                    m_Manager.RemoveButton(this);
+                }
+
+                m_Manager = value;
+
+                if (m_Manager != null)
+                {
+                    m_Manager.AddButton(this);
+                }
+            }
+        }
+    }
+
+    [NonSerialized] TitleBtnState m_State = TitleBtnState.Normal;
+    public TitleBtnState state
+    {
+        get { return m_State; }
+        set
+        {
+            if (m_State != value)
+            {
+                m_State = value;
+            }
+        }
+    }
+
+    [SerializeField] ImageEx m_SelectIcon;
+    public ImageEx selectIcon
+    {
+        get { return this.m_SelectIcon; }
+        set { this.m_SelectIcon = value; }
+    }
+
+    [SerializeField] ImageEx m_UnSelectIcon;
+    public ImageEx unSelectIcon
+    {
+        get { return this.m_UnSelectIcon; }
+        set { this.m_UnSelectIcon = value; }
+    }
+
+    [SerializeField] TextEx m_Title;
+    public TextEx title
+    {
+        get { return this.m_Title; }
+        set { this.m_Title = value; }
+    }
+
+    [SerializeField] UIEffectPlayer m_SelectEffect;  //閫変腑鐗规晥
+    public UIEffectPlayer selectEffect
+    {
+        get { return m_SelectEffect; }
+        set { m_SelectEffect = value; }
+    }
+
+
+    protected override void Awake()
+    {
+        base.Awake();
+        // 纭繚宸叉坊鍔犲埌绠$悊鍣�
+        if (m_Manager != null)
+        {
+            m_Manager.AddButton(this);
+        }
+    }
+
+    protected override void OnDestroy()
+    {
+        if (m_Manager != null)
+        {
+            m_Manager.RemoveButton(this);
+        }
+        base.OnDestroy();
+    }
+
+    public override void OnPointerClick(PointerEventData eventData)
+    {
+        base.OnPointerClick(eventData);
+        SelectBtn();
+    }
+
+    // 閫変腑褰撳墠鎸夐挳
+    public void SelectBtn(bool forceRefresh = false)
+    {
+        if (m_State == TitleBtnState.Click && !forceRefresh)
+            return;
+
+        // 閫氳繃绠$悊鍣ㄥ鐞嗛�変腑閫昏緫
+        if (m_Manager != null)
+        {
+            m_Manager.SelectButton(this);
+        }
+
+        // 璁剧疆褰撳墠鎸夐挳涓洪�変腑鐘舵��
+        state = TitleBtnState.Click;
+    }
+
+    // 鏇存柊鎸夐挳鐘舵��
+    public void UpdateButtonState()
+    {
+        // 鏇存柊鍥炬爣鏄剧ず
+        if (m_SelectIcon != null)
+            m_SelectIcon.SetActive(m_State == TitleBtnState.Click);
+
+        if (m_UnSelectIcon != null)
+            m_UnSelectIcon.SetActive(m_State != TitleBtnState.Click);
+
+        // 鏇存柊鏂囧瓧棰滆壊
+        if (m_Title != null && m_Manager != null)
+        {
+            m_Title.color = m_Manager.GetTextColorForState(m_State);
+        }
+
+        if (m_SelectEffect != null)
+        {
+            if (m_State == TitleBtnState.Click)
+            {
+                //閫変腑锛屾樉绀虹壒鏁�
+                m_SelectEffect.Play();
+            }
+            else
+            {
+                m_SelectEffect.Stop();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Component/UI/Common/GroupButtonEx.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Component/UI/Common/GroupButtonEx.cs.meta
index 7153f8c..ffb6f09 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Component/UI/Common/GroupButtonEx.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 97eda1b97c0fe374f9197d882712f299
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Component/UI/Common/GroupButtonExManager.cs b/Main/Component/UI/Common/GroupButtonExManager.cs
new file mode 100644
index 0000000..bd88ecf
--- /dev/null
+++ b/Main/Component/UI/Common/GroupButtonExManager.cs
@@ -0,0 +1,152 @@
+锘�//--------------------------------------------------------
+//    [Author]:           鐜╀釜娓告垙
+//    [  Date ]:           Tuesday, October 31, 2017
+//--------------------------------------------------------
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+using System;
+
+/// <summary>
+/// 鎸夐挳缁勭鐞嗗櫒锛岃礋璐g鐞咷roupButtonEx缁勪欢鐨勭粍鍏崇郴鍜岀姸鎬佸垏鎹�
+/// 鏆傜敤浜庨鍒朵綋涓殑璁剧疆锛屽鏋滄槸鍔ㄦ�佸鍒犳寜閽渶閲嶆祴璇曢�昏緫
+/// </summary>
+public class GroupButtonExManager : MonoBehaviour
+{
+    // 鎸夐挳缁勫垪琛�
+    private List<GroupButtonEx> m_Buttons = new List<GroupButtonEx>();
+    
+    [SerializeField] Color m_SelectedTextColor = Color.white; // 閫変腑鐘舵�佹枃瀛楅鑹�
+    public Color selectedTextColor {
+        get { return m_SelectedTextColor; }
+        set { 
+            m_SelectedTextColor = value;
+        }
+    }
+    
+    [SerializeField] Color m_NormalTextColor = new Color(0.7f, 0.7f, 0.7f); // 鏈�変腑鐘舵�佹枃瀛楅鑹�
+    public Color normalTextColor {
+        get { return m_NormalTextColor; }
+        set { 
+            m_NormalTextColor = value;
+        }
+    }
+
+    /// <summary>
+    /// 灏嗘寜閽坊鍔犲埌缁�
+    /// </summary>
+    /// <param name="button">瑕佹坊鍔犵殑鎸夐挳</param>
+    public void AddButton(GroupButtonEx button)
+    {
+        if (button == null)
+            return;
+
+        // 濡傛灉鎸夐挳涓嶅湪缁勪腑锛屾坊鍔犲埌缁�
+        if (!m_Buttons.Contains(button))
+        {
+            m_Buttons.Add(button);
+        }
+    }
+
+    /// <summary>
+    /// 浠庣粍涓Щ闄ゆ寜閽�
+    /// </summary>
+    /// <param name="button">瑕佺Щ闄ょ殑鎸夐挳</param>
+    public void RemoveButton(GroupButtonEx button)
+    {
+        if (button == null)
+            return;
+
+        m_Buttons.Remove(button);
+    }
+
+    /// <summary>
+    /// 閫変腑鎸囧畾鎸夐挳锛屽苟鍙栨秷鍏朵粬鎸夐挳鐨勯�変腑鐘舵��
+    /// </summary>
+    /// <param name="button">瑕侀�変腑鐨勬寜閽�</param>
+    public void SelectButton(GroupButtonEx button)
+    {
+        if (button == null)
+            return;
+
+        // 鍙栨秷鍏朵粬鎸夐挳鐨勯�変腑鐘舵��
+        foreach (var btn in m_Buttons)
+        {
+            if (btn != button)
+            {
+                btn.state = TitleBtnState.Normal;
+            }
+        }
+
+        UpdateAllButtonsState();
+    }
+
+    /// <summary>
+    /// 鑾峰彇缁勪腑鐨勬墍鏈夋寜閽�
+    /// </summary>
+    /// <returns>鎸夐挳鍒楄〃</returns>
+    public List<GroupButtonEx> GetButtons()
+    {
+        return new List<GroupButtonEx>(m_Buttons);
+    }
+
+    /// <summary>
+    /// 鑾峰彇缁勪腑褰撳墠閫変腑鐨勬寜閽�
+    /// </summary>
+    /// <returns>閫変腑鐨勬寜閽紝濡傛灉娌℃湁鍒欒繑鍥瀗ull</returns>
+    public GroupButtonEx GetSelectedButton()
+    {
+        foreach (var btn in m_Buttons)
+        {
+            if (btn.state == TitleBtnState.Click)
+                return btn;
+        }
+
+        return null;
+    }
+
+    /// <summary>
+    /// 娓呴櫎鎵�鏈夋寜閽�
+    /// </summary>
+    public void ClearButtons()
+    {
+        m_Buttons.Clear();
+    }
+    
+    /// <summary>
+    /// 鏇存柊鎵�鏈夋寜閽殑鐘舵��
+    /// </summary>
+    private void UpdateAllButtonsState()
+    {
+        SortBtns();
+
+        foreach (var btn in m_Buttons)
+        {
+            btn.UpdateButtonState();
+        }
+    }
+
+    bool sortyet = false;
+    public void SortBtns(bool forceSort = false)
+    {
+        if (m_Buttons.Count <= 0)
+            return;
+            
+        if (sortyet && !forceSort)
+            return;
+
+        m_Buttons.Sort((a, b) => { return a.transform.GetSiblingIndex() - b.transform.GetSiblingIndex(); });
+        sortyet = true;
+    }
+    
+    /// <summary>
+    /// 鑾峰彇鎸夐挳鐘舵�佸搴旂殑鏂囨湰棰滆壊
+    /// </summary>
+    /// <param name="state">鎸夐挳鐘舵��</param>
+    /// <returns>瀵瑰簲鐨勬枃鏈鑹�</returns>
+    public Color GetTextColorForState(TitleBtnState state)
+    {
+        return state == TitleBtnState.Click ? m_SelectedTextColor : m_NormalTextColor;
+    }
+}
\ No newline at end of file
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Component/UI/Common/GroupButtonExManager.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Component/UI/Common/GroupButtonExManager.cs.meta
index 7153f8c..cf51a2c 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Component/UI/Common/GroupButtonExManager.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 25d1a287b0e773443a2231ff104728ad
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Component/UI/Common/ItemBaseEffect.cs b/Main/Component/UI/Common/ItemBaseEffect.cs
index c8cb129..d7866fd 100644
--- a/Main/Component/UI/Common/ItemBaseEffect.cs
+++ b/Main/Component/UI/Common/ItemBaseEffect.cs
@@ -3,7 +3,7 @@
 using UnityEngine;
 public class ItemBaseEffect : MonoBehaviour
 {
-    [SerializeField] EffectPlayer m_SuitEffect;
+    [SerializeField] UIEffectPlayer m_SuitEffect;
     
     int itemId = 0;
 
diff --git a/Main/Component/UI/Core/OutlineEx.cs b/Main/Component/UI/Core/OutlineEx.cs
index 887988b..e1ee362 100644
--- a/Main/Component/UI/Core/OutlineEx.cs
+++ b/Main/Component/UI/Core/OutlineEx.cs
@@ -34,16 +34,24 @@
     private static List<UIVertex> m_VetexList = new List<UIVertex>();
     // 鏉愯川姹狅細Key涓�"棰滆壊_瀹藉害"鏍煎紡鐨勫瓧绗︿覆锛孷alue涓哄搴旂殑鏉愯川; 鍑忓皯鍚堟壒闂锛屽張鑳戒繚鎸佷笉鍚岀殑鎻忚竟锛涘叡鐢ㄦ潗璐ㄤ細鍚屾椂鏀瑰彉鍙傛暟
     private static Dictionary<string, Material> m_MaterialPool = new Dictionary<string, Material>();
-    private static Shader m_Shader;
+
+    static Shader m_tmpShader;
+    private static Shader m_Shader
+    {
+        get
+        {
+            if (m_tmpShader == null)
+            {
+                m_tmpShader = Shader.Find("TSF Shaders/UI/OutlineEx");
+            }
+            return m_tmpShader;
+        }
+    }
 
     protected override void Start()
     {
         base.Start();
-        if (m_Shader == null)
-        {
-            m_Shader = Shader.Find("TSF Shaders/UI/OutlineEx");
-        }
-        
+
         // 浣跨敤鏉愯川姹犺幏鍙栨垨鍒涘缓鏉愯川
         string key = GetMaterialKey(OutlineColor, OutlineWidth);
         if (!m_MaterialPool.TryGetValue(key, out Material material))
diff --git a/Main/Component/UI/Effect/EffectMgr.cs b/Main/Component/UI/Effect/EffectMgr.cs
index c2c16de..ade7dd5 100644
--- a/Main/Component/UI/Effect/EffectMgr.cs
+++ b/Main/Component/UI/Effect/EffectMgr.cs
@@ -1,11 +1,10 @@
 锘縰sing UnityEngine;
 
-public class EffectMgr : SingletonMonobehaviour<EffectMgr>
+public class EffectMgr 
 {
 
-
     //鐜╁鏄惁涓诲姩灞忚斀浜嗙壒鏁�
-    public bool IsNotShowBySetting(int id)
+    public static bool IsNotShowBySetting(int id)
     {
         var config = EffectConfig.Get(id);
         if (config == null)
@@ -23,28 +22,5 @@
         return false;
     }
 
-
-
-    // public void RecyleUIEffect(int id, GameObject _effectObj)
-    // {
-    //     EffectConfig effectCfg = EffectConfig.Get(id);
-
-    //     if (null == effectCfg)
-    //     {
-    //         return;
-    //     }
-
-    //     var _prefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectCfg.packageName, effectCfg.fxName);
-    //     if (_prefab == null)
-    //     {
-    //         return;
-    //     }
-
-    //     GameObjectPoolManager.GameObjectPool _pool = GameObjectPoolManager.Instance.RequestPool(_prefab);
-    //     if (_pool != null)
-    //     {
-    //         _pool.Release(_effectObj);
-    //     }
-    // }
 }
 
diff --git a/Main/Component/UI/Effect/EffectPlayer.cs b/Main/Component/UI/Effect/EffectPlayer.cs
index 7e5122f..afd31a9 100644
--- a/Main/Component/UI/Effect/EffectPlayer.cs
+++ b/Main/Component/UI/Effect/EffectPlayer.cs
@@ -6,15 +6,43 @@
 using Spine;
 using UnityEngine.UI;
 
+// 鐗规晥鎾斁鍣紝瀵硅薄姹犵鐞嗭細unity鐗规晥鍜宻pine鐗规晥閮芥槸鍋氬ソ鐨勯鍒朵綋
+// unity鐗规晥棰勫埗浣撴槸鐗规晥甯堝湪鍒朵綔鐨勬椂鍊欑敓鎴愮殑锛寀nity鐗规晥绾﹀畾鎸傝浇璁剧疆鎾斁鏃堕暱鑴氭湰
+// spine鐗规晥鏄壒鏁堝笀鍒朵綔鐨勫姩鐢绘枃浠跺彲鐩存帴鍔犺浇鐢紝鍒朵綔鎴愰鍒朵綋鍙鍔燘oneFollower涔嬬被鐨勮繘琛岄�昏緫澶勭悊
+// 闈濽I鐗规晥浣跨敤锛孶I鐗规晥UIEffectPlayer缁ф壙EffectPlayer锛屽悗缁鏋滈�昏緫鍐茬獊澶у垯涓嶇敤缁ф壙
 public class EffectPlayer : MonoBehaviour
 {
-    public int effectId;
+    [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 Action<EffectPlayer> onDestroy;
-
     public float speedRate = 1f;
+
+
+
+    
+    [Header("鎾斁瀹屾瘯绔嬪嵆鍥炴敹")]
+    public bool isReleaseImmediately = true;  //鐣岄潰鐗规晥涓�鑸笉闇�瑕佽嚜鎴戦攢姣侊紝璺熼殢鐣岄潰鎴栬�呯埗瀵硅薄閿�姣佸氨琛�
+
+    public Action<EffectPlayer> onDestroy;
 
     [HideInInspector] public Canvas canvas = null;
 
@@ -31,21 +59,33 @@
     protected List<Renderer> rendererList = new List<Renderer>();
 
     protected SkeletonGraphic spineComp;
+    protected Spine.AnimationState spineAnimationState;
 
-    protected void Start()
+    public GameObjectPoolManager.GameObjectPool pool;
+
+    public Action onComplete;
+
+    protected virtual void OnEnable()
     {
-        ReStart();
+        if (spineComp != null)
+        {
+            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+            spineComp.enabled = false;
+        }
     }
 
-    protected void InitCompnent()
+    protected void InitComponent(bool showLog = true)
     {
         if (effectId <= 0)
         {
             effectConfig = null;
-            Debug.LogError("EffectPlayer effectId is not set");
 #if UNITY_EDITOR
-            UnityEditor.Selection.activeGameObject = gameObject;
-            UnityEditor.EditorGUIUtility.PingObject(gameObject);
+            if (showLog)
+            { 
+                Debug.LogError("EffectPlayer effectId is not set");
+                UnityEditor.Selection.activeGameObject = gameObject;
+                UnityEditor.EditorGUIUtility.PingObject(gameObject);
+            }
 #endif
             return;
         }
@@ -54,8 +94,8 @@
 
         if (null == effectConfig)
         {
-            Debug.LogError("could not find effect config, effect id is " + effectId);
 #if UNITY_EDITOR
+            Debug.LogError("could not find effect config, effect id is " + effectId);
             UnityEditor.Selection.activeGameObject = gameObject;
             UnityEditor.EditorGUIUtility.PingObject(gameObject);
 #endif
@@ -63,69 +103,93 @@
         }
 
 
+        Clear();
+        return;
+    }
+
+    protected virtual void Clear()
+    {
         particleList.Clear();
         animatorList.Clear();
         rendererList.Clear();
         spineComp = null;
-
-        if (effectConfig.isSpine != 0)
-        {
-            spineComp = gameObject.GetComponentInChildren<SkeletonGraphic>(true);
-        }
-        else
-        {
-            //  鏀堕泦缁勪欢
-            particleList.AddRange(gameObject.GetComponentsInChildren<ParticleSystem>(true));
-            animatorList.AddRange(gameObject.GetComponentsInChildren<Animator>(true));
-        }
-        rendererList.AddRange(gameObject.GetComponentsInChildren<Renderer>(true));
+        pool = null;
     }
 
-    public void Stop()
+    public virtual void Stop()
     {
         if (null != effectTarget)
         {
-            DestroyImmediate(effectTarget);
+            // 濡傛灉浣跨敤浜嗙壒鏁堥鍒朵綋姹狅紝鍒欏綊杩樺埌姹犱腑
+            if (pool != null)
+            {
+                pool.Release(effectTarget);
+            }
             effectTarget = null;
         }
 
         isInit = false;
 
-        particleList.Clear();
-        animatorList.Clear();
-        rendererList.Clear();
-        spineComp = null;
+        Clear();
+        onComplete?.Invoke();
     }
 
-    public void Play()
-    {
-        ReStart();
-    }
-
-
-    protected void ReStart()
+    public virtual void Play(bool showLog = true)
     {
         if (!isInit)
         {
+            InitComponent(showLog);
             isInit = true;
-            InitCompnent();
+        }
+        else
+        {
+            //閬垮厤閲嶅鍒涘缓
+            if (!this.gameObject.activeSelf)
+            {
+                this.gameObject.SetActive(true);
+            }
+            return;
         }
 
-        if (EffectMgr.Instance.IsNotShowBySetting(effectId))
+        if (EffectMgr.IsNotShowBySetting(effectId))
         {
             return;
         }
 
         if (null != effectTarget)
         {
-            DestroyImmediate(effectTarget);
+            if (pool != null)
+                pool.Release(effectTarget);
             effectTarget = null;
         }
 
-        //	YYL TODO
-        //	鍦ㄨ繖閲岃�冭檻鐢ㄦ睜鐨勮瘽鍙兘璧伴厤缃ソ涓�鐐� 鍘熸湰鐨勬槸鏃犺濡備綍閮借蛋姹� 浣嗘槸瀹為檯涓婃湁浜涚壒鏁堝苟涓嶉渶瑕�
+        if (!this.gameObject.activeSelf)
+        {
+            this.gameObject.SetActive(true);
+        }
 
-        // 鍔犺浇鐗规晥璧勬簮
+        PlayerEffect(true);
+
+    }
+
+
+    protected virtual void PlaySpineEffect()
+    {
+        spineComp = gameObject.GetComponentInChildren<SkeletonGraphic>(true);
+        spineComp.raycastTarget = false;
+        spineComp.Initialize(true);
+        spineAnimationState = spineComp.AnimationState;
+        spineAnimationState.Complete -= OnSpineAnimationComplete;
+        spineAnimationState.Complete += OnSpineAnimationComplete;
+
+        // 澶栧眰鎺у埗鍏蜂綋鎾斁鍝釜鍔ㄧ敾
+        spineComp.enabled = true;
+
+        return;
+    }
+
+    protected virtual void PlayerEffect(bool playSpine)
+    { 
         var effectPrefab = ResManager.Instance.LoadAsset<GameObject>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
         if (effectPrefab == null)
         {
@@ -133,14 +197,43 @@
             return;
         }
 
-        // 瀹炰緥鍖栫壒鏁�
-        effectTarget = Instantiate(effectPrefab, transform);
+        if (effectConfig.isSpine == 0)
+        {
+            //unity鐗规晥 鍒ゆ柇棰勫埗浣撴槸鍚︽寕杞紼ffectTime
+            var timeObj = effectPrefab.GetComponent<EffectTime>();
+            if (null == timeObj)
+            {
+                Debug.LogError($"{effectPrefab.name}棰勫埗浣撴病鏈夋寕杞紼ffectTime");
+                return;
+            }
+        }
+
+        // 浠庣壒鏁堥鍒朵綋姹犺幏鍙栫壒鏁�
+        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}";
 
-        //  鎬濊�冧竴涓嬪湪娌℃湁鎸傚湪鑺傜偣鐨勬椂鍊�
+        if (effectConfig.isSpine != 0 && playSpine)
+        {
+            //棰勫埗浣�
+            PlaySpineEffect();
+        }
+        else
+        {
+            //鎸傝浇缁勪欢鍚� 寮�濮嬫敹闆�
+            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>();
@@ -149,12 +242,6 @@
         if (canvas != null)
         {
             blocker.SetParentCanvas(canvas);
-        }
-
-        // 鑷姩閿�姣�
-        if (effectConfig.autoDestroy != 0)
-        {
-            Destroy(gameObject, effectConfig.destroyDelay);
         }
     }
 
@@ -166,11 +253,51 @@
             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 EffectPlayer Create(int effectId, Transform parent, bool createNewChild = false)
     {
+        // 鐩存帴鍒涘缓鐗规晥鎾斁鍣紝涓嶄娇鐢ㄥ璞℃睜
         EffectPlayer effectPlayer = null;
 
         if (createNewChild)
@@ -182,11 +309,23 @@
         else
         {
             effectPlayer = parent.AddMissingComponent<EffectPlayer>();
-            effectPlayer.effectId = effectId;
         }
+
+        effectPlayer.effectId = effectId;
         effectPlayer.SetActive(true);
         return effectPlayer;
     }
+
+    /// <summary>
+    /// 璁剧疆娓告垙瀵硅薄婵�娲荤姸鎬�
+    // /// </summary>
+    // public void SetActive(bool active)
+    // {
+    //     if (gameObject != null)
+    //     {
+    //         gameObject.SetActive(active);
+    //     }
+    // }
 
     public void Pause()
     {
@@ -284,4 +423,6 @@
             return;
         }
     }
+    
+
 }
diff --git a/Main/Component/UI/Effect/EffectTime.cs b/Main/Component/UI/Effect/EffectTime.cs
new file mode 100644
index 0000000..688249e
--- /dev/null
+++ b/Main/Component/UI/Effect/EffectTime.cs
@@ -0,0 +1,13 @@
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+//璁剧疆鐗规晥鎾斁鏃堕棿 鍜� 寰幆锛屾柟渚夸唬鐮佽皟鐢紝涓嶇敤鍘诲垽鏂壒鏁堝唴閮ㄦ儏鍐碉紝鍙互鎶婅繖涓枃浠剁粰澶栧寘
+public class EffectTime : MonoBehaviour
+{
+    //鎾斁鏃堕暱
+    [Header("鍗曟鎾斁鎬绘椂闀�")]
+    public float playTime = 1f; 
+    [Header("鏄惁寰幆鐗规晥")]
+    public bool isLoop = false;
+
+}
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Component/UI/Effect/EffectTime.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Component/UI/Effect/EffectTime.cs.meta
index 7153f8c..0e9caa7 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Component/UI/Effect/EffectTime.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: f9909a1ae22dbb74099685649d44aa29
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Component/UI/Effect/UIEffectPlayer.cs b/Main/Component/UI/Effect/UIEffectPlayer.cs
new file mode 100644
index 0000000..2ac83c0
--- /dev/null
+++ b/Main/Component/UI/Effect/UIEffectPlayer.cs
@@ -0,0 +1,154 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Spine.Unity;
+using UnityEngine;
+using Spine;
+using UnityEngine.UI;
+
+//UI鐗规晥鎾斁鍣紝spine鐗规晥鐩存帴鍔犺浇鏃犻渶鎻愬墠鍋氶鍒朵綋
+//UI鐗规晥澶ч儴鍒嗘儏鍐典笉浼氭敼鍙樼壒鏁堬紝鏃犻渶閿�姣�
+public class UIEffectPlayer : EffectPlayer
+{
+
+    [Header("鏄惁寰幆鎾斁spine鐗规晥")]
+    public bool isPlaySpineLoop = false;
+
+    [Header("鏄惁鍦ㄦ樉绀烘椂鎾斁")]
+    public bool isPlayOnEnable = false;
+
+    protected override void OnEnable()
+    {
+        if (isPlayOnEnable)
+        {
+            Play(false);
+        }
+        else if (spineComp != null)
+        {
+            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+            spineComp.enabled = false;
+        }
+    }
+
+    public override 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);
+        }
+
+        // 鍔犺浇spine鐗规晥璧勬簮
+        if (effectConfig.isSpine != 0)
+        {
+            PlaySpineEffect();
+        }
+        else
+        { 
+            PlayerEffect(false);
+        }
+
+    }
+
+
+    protected override void PlaySpineEffect()
+    {
+        if (spineComp.skeletonDataAsset == null)
+        {
+            //LoadAsset 宸茬粡鏈夌紦瀛楽keletonDataAsset
+            spineComp.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/" + effectConfig.packageName, effectConfig.fxName + "_SkeletonData");
+            spineComp.raycastTarget = false;
+            spineComp.Initialize(true);
+            spineAnimationState = spineComp.AnimationState;
+            spineAnimationState.Complete -= OnSpineAnimationComplete;
+            spineAnimationState.Complete += OnSpineAnimationComplete;
+        }
+
+        spineComp.enabled = true;
+        PlayerFistSpineAnim();
+    }
+
+
+    // 鎾斁绗竴涓姩鐢伙紙浣滀负榛樿鍔ㄧ敾锛�
+    void PlayerFistSpineAnim()
+    {
+        spineComp.enabled = true;
+        var skeletonData = spineComp.Skeleton.Data;
+        if (skeletonData.Animations.Count > 0)
+        {
+            string defaultAnimationName = skeletonData.Animations.Items[0].Name;
+            spineComp.AnimationState.SetAnimation(0, defaultAnimationName, isPlaySpineLoop);
+        }
+        else
+        {
+            Debug.LogError("Spine 鏁版嵁涓病鏈夋壘鍒颁换浣曞姩鐢伙紒" + effectConfig.id);
+        }
+    }
+
+
+
+    //鍗曟鎾斁瀹屾瘯灏变細瑙﹀彂锛屽嵆浣挎槸寰幆
+    protected override void OnSpineAnimationComplete(Spine.TrackEntry trackEntry)
+    {
+        if (!isPlaySpineLoop)
+        {
+            spineComp.enabled = false;
+            if (isReleaseImmediately)
+            {
+                Stop();
+            }
+            else
+            {
+                onComplete?.Invoke();
+            }
+        }
+    }
+
+
+    //  鍒涘缓鍚庣殑鐗规晥浼氳嚜鍔ㄩ殣钘� 闇�瑕佹墜鍔ㄨ皟鐢≒lay鎵嶈兘鎾斁
+    public static UIEffectPlayer CreateEffect(int effectId, Transform parent, bool createNewChild = false)
+    {
+        UIEffectPlayer effectPlayer = null;
+
+        if (createNewChild)
+        {
+            GameObject newGo = new GameObject("EffectPlayer_" + effectId);
+            newGo.transform.SetParent(parent, false);
+            effectPlayer = newGo.AddComponent<UIEffectPlayer>();
+        }
+        else
+        {
+            effectPlayer = parent.AddMissingComponent<UIEffectPlayer>();
+            effectPlayer.effectId = effectId;
+        }
+        effectPlayer.SetActive(true);
+        return effectPlayer;
+    }
+
+}
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Component/UI/Effect/UIEffectPlayer.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Component/UI/Effect/UIEffectPlayer.cs.meta
index 7153f8c..02b34bc 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Component/UI/Effect/UIEffectPlayer.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: d2a4fa811bba97941bd8ed92c750e271
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 3a81196..f6e63cb 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -38,9 +38,54 @@
 
         // 鍔犺浇閰嶇疆鏂囦欢
         HashSet<Type> configTypes = new HashSet<Type>() {
+            typeof(ChatBubbleBoxConfig),
+            typeof(CTGConfig),
+            typeof(DailyLivenessRewardConfig),
+            typeof(DailyQuestConfig),
+            typeof(DailyQuestOpenTimeConfig),
+            typeof(DienstgradConfig),
+            typeof(DirtyNameConfig),
             typeof(DirtyWordConfig),
+            typeof(EffectConfig),
             typeof(EquipGSParamConfig),
-            typeof(TitleStarUpConfig)
+            typeof(EquipPlaceMapConfig),
+            typeof(FamilyEmblemConfig),
+            typeof(FrameAnimationConfig),
+            typeof(FuncConfigConfig),
+            typeof(FuncOpenLVConfig),
+            typeof(FunctionTeamSetConfig),
+            typeof(GetItemWaysConfig),
+            typeof(GmCmdConfig),
+            typeof(HeroAwakeConfig),
+            typeof(HeroConfig),
+            typeof(HeroLineupHaloConfig),
+            typeof(HeroQualityAwakeConfig),
+            typeof(HeroQualityBreakConfig),
+            typeof(HeroQualityConfig),
+            typeof(HeroQualityLVConfig),
+            typeof(HeroSkinConfig),
+            typeof(ItemConfig),
+            typeof(KickOutReasonConfig),
+            typeof(MainChapterConfig),
+            typeof(MainLevelConfig),
+            typeof(NPCConfig),
+            typeof(NPCLineupConfig),
+            typeof(OrderInfoConfig),
+            typeof(PlayerFaceConfig),
+            typeof(PlayerLVConfig),
+            typeof(PlayerPropertyConfig),
+            typeof(priorbundleConfig),
+            typeof(RealmConfig),
+            typeof(RealmLVUPTaskConfig),
+            typeof(RuleConfig),
+            typeof(SkillConfig),
+            typeof(TaskConfig),
+            typeof(TitleStarUpConfig),
+            typeof(TreasureCntAwardConfig),
+            typeof(TreasureItemLibConfig),
+            typeof(TreasureSetConfig),
+            typeof(TreeLVConfig),
+            typeof(XBGetItemConfig)
         };
 
 #if UNITY_EDITOR
@@ -190,12 +235,102 @@
 
     public override void Release()
     {
+        // 娓呯┖ ChatBubbleBoxConfig 瀛楀吀
+        ClearConfigDictionary<ChatBubbleBoxConfig>();
+        // 娓呯┖ CTGConfig 瀛楀吀
+        ClearConfigDictionary<CTGConfig>();
+        // 娓呯┖ DailyLivenessRewardConfig 瀛楀吀
+        ClearConfigDictionary<DailyLivenessRewardConfig>();
+        // 娓呯┖ DailyQuestConfig 瀛楀吀
+        ClearConfigDictionary<DailyQuestConfig>();
+        // 娓呯┖ DailyQuestOpenTimeConfig 瀛楀吀
+        ClearConfigDictionary<DailyQuestOpenTimeConfig>();
+        // 娓呯┖ DienstgradConfig 瀛楀吀
+        ClearConfigDictionary<DienstgradConfig>();
+        // 娓呯┖ DirtyNameConfig 瀛楀吀
+        ClearConfigDictionary<DirtyNameConfig>();
         // 娓呯┖ DirtyWordConfig 瀛楀吀
         ClearConfigDictionary<DirtyWordConfig>();
+        // 娓呯┖ EffectConfig 瀛楀吀
+        ClearConfigDictionary<EffectConfig>();
         // 娓呯┖ EquipGSParamConfig 瀛楀吀
         ClearConfigDictionary<EquipGSParamConfig>();
+        // 娓呯┖ EquipPlaceMapConfig 瀛楀吀
+        ClearConfigDictionary<EquipPlaceMapConfig>();
+        // 娓呯┖ FamilyEmblemConfig 瀛楀吀
+        ClearConfigDictionary<FamilyEmblemConfig>();
+        // 娓呯┖ FrameAnimationConfig 瀛楀吀
+        ClearConfigDictionary<FrameAnimationConfig>();
+        // 娓呯┖ FuncConfigConfig 瀛楀吀
+        ClearConfigDictionary<FuncConfigConfig>();
+        // 娓呯┖ FuncOpenLVConfig 瀛楀吀
+        ClearConfigDictionary<FuncOpenLVConfig>();
+        // 娓呯┖ FunctionTeamSetConfig 瀛楀吀
+        ClearConfigDictionary<FunctionTeamSetConfig>();
+        // 娓呯┖ GetItemWaysConfig 瀛楀吀
+        ClearConfigDictionary<GetItemWaysConfig>();
+        // 娓呯┖ GmCmdConfig 瀛楀吀
+        ClearConfigDictionary<GmCmdConfig>();
+        // 娓呯┖ HeroAwakeConfig 瀛楀吀
+        ClearConfigDictionary<HeroAwakeConfig>();
+        // 娓呯┖ HeroConfig 瀛楀吀
+        ClearConfigDictionary<HeroConfig>();
+        // 娓呯┖ HeroLineupHaloConfig 瀛楀吀
+        ClearConfigDictionary<HeroLineupHaloConfig>();
+        // 娓呯┖ HeroQualityAwakeConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityAwakeConfig>();
+        // 娓呯┖ HeroQualityBreakConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityBreakConfig>();
+        // 娓呯┖ HeroQualityConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityConfig>();
+        // 娓呯┖ HeroQualityLVConfig 瀛楀吀
+        ClearConfigDictionary<HeroQualityLVConfig>();
+        // 娓呯┖ HeroSkinConfig 瀛楀吀
+        ClearConfigDictionary<HeroSkinConfig>();
+        // 娓呯┖ ItemConfig 瀛楀吀
+        ClearConfigDictionary<ItemConfig>();
+        // 娓呯┖ KickOutReasonConfig 瀛楀吀
+        ClearConfigDictionary<KickOutReasonConfig>();
+        // 娓呯┖ MainChapterConfig 瀛楀吀
+        ClearConfigDictionary<MainChapterConfig>();
+        // 娓呯┖ MainLevelConfig 瀛楀吀
+        ClearConfigDictionary<MainLevelConfig>();
+        // 娓呯┖ NPCConfig 瀛楀吀
+        ClearConfigDictionary<NPCConfig>();
+        // 娓呯┖ NPCLineupConfig 瀛楀吀
+        ClearConfigDictionary<NPCLineupConfig>();
+        // 娓呯┖ OrderInfoConfig 瀛楀吀
+        ClearConfigDictionary<OrderInfoConfig>();
+        // 娓呯┖ PlayerFaceConfig 瀛楀吀
+        ClearConfigDictionary<PlayerFaceConfig>();
+        // 娓呯┖ PlayerLVConfig 瀛楀吀
+        ClearConfigDictionary<PlayerLVConfig>();
+        // 娓呯┖ PlayerPropertyConfig 瀛楀吀
+        ClearConfigDictionary<PlayerPropertyConfig>();
+        // 娓呯┖ priorbundleConfig 瀛楀吀
+        ClearConfigDictionary<priorbundleConfig>();
+        // 娓呯┖ RealmConfig 瀛楀吀
+        ClearConfigDictionary<RealmConfig>();
+        // 娓呯┖ RealmLVUPTaskConfig 瀛楀吀
+        ClearConfigDictionary<RealmLVUPTaskConfig>();
+        // 娓呯┖ RuleConfig 瀛楀吀
+        ClearConfigDictionary<RuleConfig>();
+        // 娓呯┖ SkillConfig 瀛楀吀
+        ClearConfigDictionary<SkillConfig>();
+        // 娓呯┖ TaskConfig 瀛楀吀
+        ClearConfigDictionary<TaskConfig>();
         // 娓呯┖ TitleStarUpConfig 瀛楀吀
         ClearConfigDictionary<TitleStarUpConfig>();
+        // 娓呯┖ TreasureCntAwardConfig 瀛楀吀
+        ClearConfigDictionary<TreasureCntAwardConfig>();
+        // 娓呯┖ TreasureItemLibConfig 瀛楀吀
+        ClearConfigDictionary<TreasureItemLibConfig>();
+        // 娓呯┖ TreasureSetConfig 瀛楀吀
+        ClearConfigDictionary<TreasureSetConfig>();
+        // 娓呯┖ TreeLVConfig 瀛楀吀
+        ClearConfigDictionary<TreeLVConfig>();
+        // 娓呯┖ XBGetItemConfig 瀛楀吀
+        ClearConfigDictionary<XBGetItemConfig>();
     }
 
 #if UNITY_EDITOR
diff --git a/Main/Config/Configs/AppointItemConfig.cs b/Main/Config/Configs/AppointItemConfig.cs
index 643617f..7f43ad5 100644
--- a/Main/Config/Configs/AppointItemConfig.cs
+++ b/Main/Config/Configs/AppointItemConfig.cs
@@ -1,34 +1,32 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class AppointItemConfig : ConfigBase<int, AppointItemConfig>
-{
-
-    public int ID;
-	public int[] LegendAttrID;
-	public int[] LegendAttrValue;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class AppointItemConfig : ConfigBase<int, AppointItemConfig>
+{
+
+    public int ID;
+	public int[] LegendAttrID;
+	public int[] LegendAttrValue;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
 			if (tables[1].Contains("["))
 			{
 				LegendAttrID = JsonMapper.ToObject<int[]>(tables[1]);
@@ -41,8 +39,8 @@
 				{
 					 int.TryParse(LegendAttrIDStringArray[i],out LegendAttrID[i]);
 				}
-			}
-
+			}
+
 			if (tables[2].Contains("["))
 			{
 				LegendAttrValue = JsonMapper.ToObject<int[]>(tables[2]);
@@ -55,11 +53,11 @@
 				{
 					 int.TryParse(LegendAttrValueStringArray[i],out LegendAttrValue[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/AudioConfig.cs b/Main/Config/Configs/AudioConfig.cs
index e4540ba..2adef91 100644
--- a/Main/Config/Configs/AudioConfig.cs
+++ b/Main/Config/Configs/AudioConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class AudioConfig : ConfigBase<int, AudioConfig>
-{
-
-    public int ID;
-	public string Folder;
-	public string Audio;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			Folder = tables[1];
-
-			Audio = tables[2];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class AudioConfig : ConfigBase<int, AudioConfig>
+{
+
+    public int ID;
+	public string Folder;
+	public string Audio;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			Folder = tables[1];
+
+			Audio = tables[2];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/CTGConfig.cs b/Main/Config/Configs/CTGConfig.cs
index 7a634f4..2d34e5b 100644
--- a/Main/Config/Configs/CTGConfig.cs
+++ b/Main/Config/Configs/CTGConfig.cs
@@ -1,80 +1,78 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class CTGConfig : ConfigBase<int, CTGConfig>
-{
-
-    public int RecordID;
-	public string Title;
-	public int VipLevel;
-	public int TotalBuyCount;
-	public int DailyBuyCount;
-	public int WeekBuyCount;
-	public int MonthBuyCount;
-	public int MoneyType;
-	public int GainGold;
-	public int GainGoldPaper;
-	public int FirstGoldPaperPrize;
-	public string GainItemList;
-	public int[][] SelectItemInfo;
-	public string Icon;
-	public int PayType;
-	public int Percentage;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out RecordID); 
-
-			Title = tables[1];
-
-			int.TryParse(tables[2],out VipLevel); 
-
-			int.TryParse(tables[3],out TotalBuyCount); 
-
-			int.TryParse(tables[4],out DailyBuyCount); 
-
-			int.TryParse(tables[5],out WeekBuyCount); 
-
-			int.TryParse(tables[6],out MonthBuyCount); 
-
-			int.TryParse(tables[7],out MoneyType); 
-
-			int.TryParse(tables[8],out GainGold); 
-
-			int.TryParse(tables[9],out GainGoldPaper); 
-
-			int.TryParse(tables[10],out FirstGoldPaperPrize); 
-
-			GainItemList = tables[11];
-
-			SelectItemInfo = JsonMapper.ToObject<int[][]>(tables[12].Replace("(", "[").Replace(")", "]")); 
-
-			Icon = tables[13];
-
-			int.TryParse(tables[14],out PayType); 
-
-			int.TryParse(tables[15],out Percentage); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class CTGConfig : ConfigBase<int, CTGConfig>
+{
+
+    public int RecordID;
+	public string Title;
+	public int VipLevel;
+	public int TotalBuyCount;
+	public int DailyBuyCount;
+	public int WeekBuyCount;
+	public int MonthBuyCount;
+	public int MoneyType;
+	public int GainGold;
+	public int GainGoldPaper;
+	public int FirstGoldPaperPrize;
+	public string GainItemList;
+	public int[][] SelectItemInfo;
+	public string Icon;
+	public int PayType;
+	public int Percentage;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out RecordID); 
+
+			Title = tables[1];
+
+			int.TryParse(tables[2],out VipLevel); 
+
+			int.TryParse(tables[3],out TotalBuyCount); 
+
+			int.TryParse(tables[4],out DailyBuyCount); 
+
+			int.TryParse(tables[5],out WeekBuyCount); 
+
+			int.TryParse(tables[6],out MonthBuyCount); 
+
+			int.TryParse(tables[7],out MoneyType); 
+
+			int.TryParse(tables[8],out GainGold); 
+
+			int.TryParse(tables[9],out GainGoldPaper); 
+
+			int.TryParse(tables[10],out FirstGoldPaperPrize); 
+
+			GainItemList = tables[11];
+
+			SelectItemInfo = JsonMapper.ToObject<int[][]>(tables[12].Replace("(", "[").Replace(")", "]")); 
+
+			Icon = tables[13];
+
+			int.TryParse(tables[14],out PayType); 
+
+			int.TryParse(tables[15],out Percentage); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/CTGSelectItemConfig.cs b/Main/Config/Configs/CTGSelectItemConfig.cs
index 6206102..c017461 100644
--- a/Main/Config/Configs/CTGSelectItemConfig.cs
+++ b/Main/Config/Configs/CTGSelectItemConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class CTGSelectItemConfig : ConfigBase<int, CTGSelectItemConfig>
-{
-
-    public int SelectID;
-	public int ItemID;
-	public int ItemCount;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out SelectID); 
-
-			int.TryParse(tables[1],out ItemID); 
-
-			int.TryParse(tables[2],out ItemCount); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class CTGSelectItemConfig : ConfigBase<int, CTGSelectItemConfig>
+{
+
+    public int SelectID;
+	public int ItemID;
+	public int ItemCount;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out SelectID); 
+
+			int.TryParse(tables[1],out ItemID); 
+
+			int.TryParse(tables[2],out ItemCount); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ChatBubbleBoxConfig.cs b/Main/Config/Configs/ChatBubbleBoxConfig.cs
index 0502392..89369eb 100644
--- a/Main/Config/Configs/ChatBubbleBoxConfig.cs
+++ b/Main/Config/Configs/ChatBubbleBoxConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/ChestsAwardConfig.cs b/Main/Config/Configs/ChestsAwardConfig.cs
index c622f5c..1eee40e 100644
--- a/Main/Config/Configs/ChestsAwardConfig.cs
+++ b/Main/Config/Configs/ChestsAwardConfig.cs
@@ -1,56 +1,54 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class ChestsAwardConfig : ConfigBase<int, ChestsAwardConfig>
-{
-
-    public int ID;
-	public int BoxID;
-	public int BoxLV;
-	public string SelectList;
-	public string FixedItem;
-	public string Probability1;
-	public string Probability2;
-	public string JobItem;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			int.TryParse(tables[1],out BoxID); 
-
-			int.TryParse(tables[2],out BoxLV); 
-
-			SelectList = tables[3];
-
-			FixedItem = tables[4];
-
-			Probability1 = tables[5];
-
-			Probability2 = tables[6];
-
-			JobItem = tables[7];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ChestsAwardConfig : ConfigBase<int, ChestsAwardConfig>
+{
+
+    public int ID;
+	public int BoxID;
+	public int BoxLV;
+	public string SelectList;
+	public string FixedItem;
+	public string Probability1;
+	public string Probability2;
+	public string JobItem;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			int.TryParse(tables[1],out BoxID); 
+
+			int.TryParse(tables[2],out BoxLV); 
+
+			SelectList = tables[3];
+
+			FixedItem = tables[4];
+
+			Probability1 = tables[5];
+
+			Probability2 = tables[6];
+
+			JobItem = tables[7];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ChestsConfig.cs b/Main/Config/Configs/ChestsConfig.cs
index 64bd72c..b22c062 100644
--- a/Main/Config/Configs/ChestsConfig.cs
+++ b/Main/Config/Configs/ChestsConfig.cs
@@ -1,47 +1,45 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class ChestsConfig : ConfigBase<int, ChestsConfig>
-{
-
-    public int BoxID;
-	public int ExpendItemID;
-	public int ExpendCount;
-	public int OpenMoney;
-	public int OpenShow;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out BoxID); 
-
-			int.TryParse(tables[1],out ExpendItemID); 
-
-			int.TryParse(tables[2],out ExpendCount); 
-
-			int.TryParse(tables[3],out OpenMoney); 
-
-			int.TryParse(tables[4],out OpenShow); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ChestsConfig : ConfigBase<int, ChestsConfig>
+{
+
+    public int BoxID;
+	public int ExpendItemID;
+	public int ExpendCount;
+	public int OpenMoney;
+	public int OpenShow;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out BoxID); 
+
+			int.TryParse(tables[1],out ExpendItemID); 
+
+			int.TryParse(tables[2],out ExpendCount); 
+
+			int.TryParse(tables[3],out OpenMoney); 
+
+			int.TryParse(tables[4],out OpenShow); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/DailyLivenessRewardConfig.cs b/Main/Config/Configs/DailyLivenessRewardConfig.cs
index 848ac3a..c02a430 100644
--- a/Main/Config/Configs/DailyLivenessRewardConfig.cs
+++ b/Main/Config/Configs/DailyLivenessRewardConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/DailyQuestConfig.cs b/Main/Config/Configs/DailyQuestConfig.cs
index c9e6967..98153d5 100644
--- a/Main/Config/Configs/DailyQuestConfig.cs
+++ b/Main/Config/Configs/DailyQuestConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/DailyQuestOpenTimeConfig.cs b/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
index 067e064..2267b33 100644
--- a/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
+++ b/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/DienstgradConfig.cs b/Main/Config/Configs/DienstgradConfig.cs
index 7c0f977..1e41202 100644
--- a/Main/Config/Configs/DienstgradConfig.cs
+++ b/Main/Config/Configs/DienstgradConfig.cs
@@ -1,52 +1,50 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class DienstgradConfig : ConfigBase<int, DienstgradConfig>
-{
-
-    public int ID;
-	public string Name;
-	public int Type;
-	public int Prescription;
-	public string OutTimeDesc;
-	public int[] LightType;
-	public int[] LightAttribute;
-	public string Image;
-	public string Content;
-	public int[] Skills;
-	public int gotoId;
-	public int missionId;
-	public int order;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			Name = tables[1];
-
-			int.TryParse(tables[2],out Type); 
-
-			int.TryParse(tables[3],out Prescription); 
-
-			OutTimeDesc = tables[4];
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class DienstgradConfig : ConfigBase<int, DienstgradConfig>
+{
+
+    public int ID;
+	public string Name;
+	public int Type;
+	public int Prescription;
+	public string OutTimeDesc;
+	public int[] LightType;
+	public int[] LightAttribute;
+	public string Image;
+	public string Content;
+	public int[] Skills;
+	public int gotoId;
+	public int missionId;
+	public int order;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			Name = tables[1];
+
+			int.TryParse(tables[2],out Type); 
+
+			int.TryParse(tables[3],out Prescription); 
+
+			OutTimeDesc = tables[4];
+
 			if (tables[5].Contains("["))
 			{
 				LightType = JsonMapper.ToObject<int[]>(tables[5]);
@@ -59,8 +57,8 @@
 				{
 					 int.TryParse(LightTypeStringArray[i],out LightType[i]);
 				}
-			}
-
+			}
+
 			if (tables[6].Contains("["))
 			{
 				LightAttribute = JsonMapper.ToObject<int[]>(tables[6]);
@@ -73,12 +71,12 @@
 				{
 					 int.TryParse(LightAttributeStringArray[i],out LightAttribute[i]);
 				}
-			}
-
-			Image = tables[7];
-
-			Content = tables[8];
-
+			}
+
+			Image = tables[7];
+
+			Content = tables[8];
+
 			if (tables[9].Contains("["))
 			{
 				Skills = JsonMapper.ToObject<int[]>(tables[9]);
@@ -91,17 +89,17 @@
 				{
 					 int.TryParse(SkillsStringArray[i],out Skills[i]);
 				}
-			}
-
-			int.TryParse(tables[10],out gotoId); 
-
-			int.TryParse(tables[11],out missionId); 
-
-			int.TryParse(tables[12],out order); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[10],out gotoId); 
+
+			int.TryParse(tables[11],out missionId); 
+
+			int.TryParse(tables[12],out order); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/DirtyNameConfig.cs b/Main/Config/Configs/DirtyNameConfig.cs
index 5551e4e..fa5fcd8 100644
--- a/Main/Config/Configs/DirtyNameConfig.cs
+++ b/Main/Config/Configs/DirtyNameConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/DirtyWordConfig.cs b/Main/Config/Configs/DirtyWordConfig.cs
index 2f10868..745a81f 100644
--- a/Main/Config/Configs/DirtyWordConfig.cs
+++ b/Main/Config/Configs/DirtyWordConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class DirtyWordConfig : ConfigBase<int, DirtyWordConfig>
-{
-
-    public int id;
-	public string word;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			word = tables[1];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class DirtyWordConfig : ConfigBase<int, DirtyWordConfig>
+{
+
+    public int id;
+	public string word;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			word = tables[1];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/EffectConfig.cs b/Main/Config/Configs/EffectConfig.cs
index 69df1c6..70f9efd 100644
--- a/Main/Config/Configs/EffectConfig.cs
+++ b/Main/Config/Configs/EffectConfig.cs
@@ -1,59 +1,57 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�22鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class EffectConfig : ConfigBase<int, EffectConfig>
-{
-
-    public int id;
-	public string packageName;
-	public int isSpine;
-	public string fxName;
-	public int audio;
-	public string nodeName;
-	public int notShow;
-	public int autoDestroy;
-	public float destroyDelay;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			packageName = tables[1];
-
-			int.TryParse(tables[2],out isSpine); 
-
-			fxName = tables[3];
-
-			int.TryParse(tables[4],out audio); 
-
-			nodeName = tables[5];
-
-			int.TryParse(tables[6],out notShow); 
-
-			int.TryParse(tables[7],out autoDestroy); 
-
-			float.TryParse(tables[8],out destroyDelay); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class EffectConfig : ConfigBase<int, EffectConfig>
+{
+
+    public int id;
+	public string packageName;
+	public int isSpine;
+	public string fxName;
+	public int audio;
+	public string nodeName;
+	public int notShow;
+	public int autoDestroy;
+	public float destroyDelay;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			packageName = tables[1];
+
+			int.TryParse(tables[2],out isSpine); 
+
+			fxName = tables[3];
+
+			int.TryParse(tables[4],out audio); 
+
+			nodeName = tables[5];
+
+			int.TryParse(tables[6],out notShow); 
+
+			int.TryParse(tables[7],out autoDestroy); 
+
+			float.TryParse(tables[8],out destroyDelay); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/EmojiPackConfig.cs b/Main/Config/Configs/EmojiPackConfig.cs
index 369173e..1fd149a 100644
--- a/Main/Config/Configs/EmojiPackConfig.cs
+++ b/Main/Config/Configs/EmojiPackConfig.cs
@@ -1,59 +1,57 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class EmojiPackConfig : ConfigBase<int, EmojiPackConfig>
-{
-
-    public int EmojiPackID;
-	public string Name;
-	public int UnlockDefault;
-	public int ExpireMinutes;
-	public string Image;
-	public int SortNum;
-	public int EffectID;
-	public int[][] UnlockNeedItemList;
-	public string Descriptive;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out EmojiPackID); 
-
-			Name = tables[1];
-
-			int.TryParse(tables[2],out UnlockDefault); 
-
-			int.TryParse(tables[3],out ExpireMinutes); 
-
-			Image = tables[4];
-
-			int.TryParse(tables[5],out SortNum); 
-
-			int.TryParse(tables[6],out EffectID); 
-
-			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[7].Replace("(", "[").Replace(")", "]")); 
-
-			Descriptive = tables[8];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class EmojiPackConfig : ConfigBase<int, EmojiPackConfig>
+{
+
+    public int EmojiPackID;
+	public string Name;
+	public int UnlockDefault;
+	public int ExpireMinutes;
+	public string Image;
+	public int SortNum;
+	public int EffectID;
+	public int[][] UnlockNeedItemList;
+	public string Descriptive;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out EmojiPackID); 
+
+			Name = tables[1];
+
+			int.TryParse(tables[2],out UnlockDefault); 
+
+			int.TryParse(tables[3],out ExpireMinutes); 
+
+			Image = tables[4];
+
+			int.TryParse(tables[5],out SortNum); 
+
+			int.TryParse(tables[6],out EffectID); 
+
+			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[7].Replace("(", "[").Replace(")", "]")); 
+
+			Descriptive = tables[8];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs b/Main/Config/Configs/EquipGSParamConfig.cs
index acd927b..b8add4a 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs
+++ b/Main/Config/Configs/EquipGSParamConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/EquipPlaceMapConfig.cs b/Main/Config/Configs/EquipPlaceMapConfig.cs
index 4775e8d..829b7a2 100644
--- a/Main/Config/Configs/EquipPlaceMapConfig.cs
+++ b/Main/Config/Configs/EquipPlaceMapConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/FaceConfig.cs b/Main/Config/Configs/FaceConfig.cs
index 8b25161..8f6490d 100644
--- a/Main/Config/Configs/FaceConfig.cs
+++ b/Main/Config/Configs/FaceConfig.cs
@@ -1,50 +1,48 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class FaceConfig : ConfigBase<string, FaceConfig>
-{
-
-    public string name;
-	public int frameCnt;
-	public int speed;
-	public int frameType;
-	public int EmojiPackID;
-	public string folder;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        name = tables[0];
-
-			int.TryParse(tables[1],out frameCnt); 
-
-			int.TryParse(tables[2],out speed); 
-
-			int.TryParse(tables[3],out frameType); 
-
-			int.TryParse(tables[4],out EmojiPackID); 
-
-			folder = tables[5];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FaceConfig : ConfigBase<string, FaceConfig>
+{
+
+    public string name;
+	public int frameCnt;
+	public int speed;
+	public int frameType;
+	public int EmojiPackID;
+	public string folder;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        name = tables[0];
+
+			int.TryParse(tables[1],out frameCnt); 
+
+			int.TryParse(tables[2],out speed); 
+
+			int.TryParse(tables[3],out frameType); 
+
+			int.TryParse(tables[4],out EmojiPackID); 
+
+			folder = tables[5];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/FamilyConfig.cs b/Main/Config/Configs/FamilyConfig.cs
index c9be850..3e42eee 100644
--- a/Main/Config/Configs/FamilyConfig.cs
+++ b/Main/Config/Configs/FamilyConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/FamilyEmblemConfig.cs b/Main/Config/Configs/FamilyEmblemConfig.cs
index 8e223cb..7b036cb 100644
--- a/Main/Config/Configs/FamilyEmblemConfig.cs
+++ b/Main/Config/Configs/FamilyEmblemConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/FirstGoldConfig.cs b/Main/Config/Configs/FirstGoldConfig.cs
index 6a4447b..969f560 100644
--- a/Main/Config/Configs/FirstGoldConfig.cs
+++ b/Main/Config/Configs/FirstGoldConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/FrameAnimationConfig.cs b/Main/Config/Configs/FrameAnimationConfig.cs
index 32acc17..7efba81 100644
--- a/Main/Config/Configs/FrameAnimationConfig.cs
+++ b/Main/Config/Configs/FrameAnimationConfig.cs
@@ -1,50 +1,48 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�30鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class FrameAnimationConfig : ConfigBase<string, FrameAnimationConfig>
-{
-
-    public string name;
-	public int frameCnt;
-	public int speed;
-	public int frameType;
-	public int EmojiPackID;
-	public string folder;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        name = tables[0];
-
-			int.TryParse(tables[1],out frameCnt); 
-
-			int.TryParse(tables[2],out speed); 
-
-			int.TryParse(tables[3],out frameType); 
-
-			int.TryParse(tables[4],out EmojiPackID); 
-
-			folder = tables[5];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FrameAnimationConfig : ConfigBase<string, FrameAnimationConfig>
+{
+
+    public string name;
+	public int frameCnt;
+	public int speed;
+	public int frameType;
+	public int EmojiPackID;
+	public string folder;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        name = tables[0];
+
+			int.TryParse(tables[1],out frameCnt); 
+
+			int.TryParse(tables[2],out speed); 
+
+			int.TryParse(tables[3],out frameType); 
+
+			int.TryParse(tables[4],out EmojiPackID); 
+
+			folder = tables[5];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/FuncConfigConfig.cs b/Main/Config/Configs/FuncConfigConfig.cs
index 2d093ad..42057aa 100644
--- a/Main/Config/Configs/FuncConfigConfig.cs
+++ b/Main/Config/Configs/FuncConfigConfig.cs
@@ -1,50 +1,48 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class FuncConfigConfig : ConfigBase<string, FuncConfigConfig>
-{
-
-    public string KEY;
-	public string Numerical1;
-	public string Numerical2;
-	public string Numerical3;
-	public string Numerical4;
-	public string Numerical5;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        KEY = tables[0];
-
-			Numerical1 = tables[1];
-
-			Numerical2 = tables[2];
-
-			Numerical3 = tables[3];
-
-			Numerical4 = tables[4];
-
-			Numerical5 = tables[5];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FuncConfigConfig : ConfigBase<string, FuncConfigConfig>
+{
+
+    public string KEY;
+	public string Numerical1;
+	public string Numerical2;
+	public string Numerical3;
+	public string Numerical4;
+	public string Numerical5;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        KEY = tables[0];
+
+			Numerical1 = tables[1];
+
+			Numerical2 = tables[2];
+
+			Numerical3 = tables[3];
+
+			Numerical4 = tables[4];
+
+			Numerical5 = tables[5];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/FuncOpenLVConfig.cs b/Main/Config/Configs/FuncOpenLVConfig.cs
index ff9cef5..e5e1c91 100644
--- a/Main/Config/Configs/FuncOpenLVConfig.cs
+++ b/Main/Config/Configs/FuncOpenLVConfig.cs
@@ -1,65 +1,63 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class FuncOpenLVConfig : ConfigBase<int, FuncOpenLVConfig>
-{
-
-    public int FuncId;
-	public int LimitLV;
-	public int LimitMagicWeapon;
-	public int LimiRealmLV;
-	public int LimitMissionID;
-	public string Remark;
-	public string State;
-	public string Tip;
-	public string Icon;
-	public int open;
-	public int ContinueTask;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out FuncId); 
-
-			int.TryParse(tables[1],out LimitLV); 
-
-			int.TryParse(tables[2],out LimitMagicWeapon); 
-
-			int.TryParse(tables[3],out LimiRealmLV); 
-
-			int.TryParse(tables[4],out LimitMissionID); 
-
-			Remark = tables[5];
-
-			State = tables[6];
-
-			Tip = tables[7];
-
-			Icon = tables[8];
-
-			int.TryParse(tables[9],out open); 
-
-			int.TryParse(tables[10],out ContinueTask); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FuncOpenLVConfig : ConfigBase<int, FuncOpenLVConfig>
+{
+
+    public int FuncId;
+	public int LimitLV;
+	public int LimitMagicWeapon;
+	public int LimiRealmLV;
+	public int LimitMissionID;
+	public string Remark;
+	public string State;
+	public string Tip;
+	public string Icon;
+	public int open;
+	public int ContinueTask;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out FuncId); 
+
+			int.TryParse(tables[1],out LimitLV); 
+
+			int.TryParse(tables[2],out LimitMagicWeapon); 
+
+			int.TryParse(tables[3],out LimiRealmLV); 
+
+			int.TryParse(tables[4],out LimitMissionID); 
+
+			Remark = tables[5];
+
+			State = tables[6];
+
+			Tip = tables[7];
+
+			Icon = tables[8];
+
+			int.TryParse(tables[9],out open); 
+
+			int.TryParse(tables[10],out ContinueTask); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/FunctionTeamSetConfig.cs b/Main/Config/Configs/FunctionTeamSetConfig.cs
index 2819d14..40b3121 100644
--- a/Main/Config/Configs/FunctionTeamSetConfig.cs
+++ b/Main/Config/Configs/FunctionTeamSetConfig.cs
@@ -1,56 +1,54 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class FunctionTeamSetConfig : ConfigBase<int, FunctionTeamSetConfig>
-{
-
-    public int FuncMapID;
-	public int NeedName;
-	public int MemberMax;
-	public int ApplyMax;
-	public int ReqApplyMax;
-	public int SortType;
-	public int SortReverse;
-	public int OPLimitInAct;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out FuncMapID); 
-
-			int.TryParse(tables[1],out NeedName); 
-
-			int.TryParse(tables[2],out MemberMax); 
-
-			int.TryParse(tables[3],out ApplyMax); 
-
-			int.TryParse(tables[4],out ReqApplyMax); 
-
-			int.TryParse(tables[5],out SortType); 
-
-			int.TryParse(tables[6],out SortReverse); 
-
-			int.TryParse(tables[7],out OPLimitInAct); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class FunctionTeamSetConfig : ConfigBase<int, FunctionTeamSetConfig>
+{
+
+    public int FuncMapID;
+	public int NeedName;
+	public int MemberMax;
+	public int ApplyMax;
+	public int ReqApplyMax;
+	public int SortType;
+	public int SortReverse;
+	public int OPLimitInAct;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out FuncMapID); 
+
+			int.TryParse(tables[1],out NeedName); 
+
+			int.TryParse(tables[2],out MemberMax); 
+
+			int.TryParse(tables[3],out ApplyMax); 
+
+			int.TryParse(tables[4],out ReqApplyMax); 
+
+			int.TryParse(tables[5],out SortType); 
+
+			int.TryParse(tables[6],out SortReverse); 
+
+			int.TryParse(tables[7],out OPLimitInAct); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/GetItemWaysConfig.cs b/Main/Config/Configs/GetItemWaysConfig.cs
index af31fba..9f3c9ea 100644
--- a/Main/Config/Configs/GetItemWaysConfig.cs
+++ b/Main/Config/Configs/GetItemWaysConfig.cs
@@ -1,56 +1,54 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class GetItemWaysConfig : ConfigBase<int, GetItemWaysConfig>
-{
-
-    public int ID;
-	public string name;
-	public string Icon;
-	public string Text;
-	public int OpenpanelId;
-	public int FuncOpenId;
-	public int ActiveType;
-	public int customize;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			name = tables[1];
-
-			Icon = tables[2];
-
-			Text = tables[3];
-
-			int.TryParse(tables[4],out OpenpanelId); 
-
-			int.TryParse(tables[5],out FuncOpenId); 
-
-			int.TryParse(tables[6],out ActiveType); 
-
-			int.TryParse(tables[7],out customize); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class GetItemWaysConfig : ConfigBase<int, GetItemWaysConfig>
+{
+
+    public int ID;
+	public string name;
+	public string Icon;
+	public string Text;
+	public int OpenpanelId;
+	public int FuncOpenId;
+	public int ActiveType;
+	public int customize;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			name = tables[1];
+
+			Icon = tables[2];
+
+			Text = tables[3];
+
+			int.TryParse(tables[4],out OpenpanelId); 
+
+			int.TryParse(tables[5],out FuncOpenId); 
+
+			int.TryParse(tables[6],out ActiveType); 
+
+			int.TryParse(tables[7],out customize); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/GmCmdConfig.cs b/Main/Config/Configs/GmCmdConfig.cs
index 5a62577..6426cd1 100644
--- a/Main/Config/Configs/GmCmdConfig.cs
+++ b/Main/Config/Configs/GmCmdConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class GmCmdConfig : ConfigBase<int, GmCmdConfig>
-{
-
-    public int Id;
-	public string Cmd;
-	public string ParamSet;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out Id); 
-
-			Cmd = tables[1];
-
-			ParamSet = tables[2];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class GmCmdConfig : ConfigBase<int, GmCmdConfig>
+{
+
+    public int Id;
+	public string Cmd;
+	public string ParamSet;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out Id); 
+
+			Cmd = tables[1];
+
+			ParamSet = tables[2];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/GuideConfig.cs b/Main/Config/Configs/GuideConfig.cs
index d7d230f..ddf37eb 100644
--- a/Main/Config/Configs/GuideConfig.cs
+++ b/Main/Config/Configs/GuideConfig.cs
@@ -1,53 +1,51 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class GuideConfig : ConfigBase<int, GuideConfig>
-{
-
-    public int ID;
-	public int Type;
-	public int TriggerType;
-	public int Condition;
-	public int SupplementCondition;
-	public int PreGuideId;
-	public int[] Steps;
-	public int CanSkip;
-	public int RemoveWhenOtherGuide;
-	public int CannotCompleteByClick;
-	public int[] UnfoldAreas;
-	public int AutoCompleteTime;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			int.TryParse(tables[1],out Type); 
-
-			int.TryParse(tables[2],out TriggerType); 
-
-			int.TryParse(tables[3],out Condition); 
-
-			int.TryParse(tables[4],out SupplementCondition); 
-
-			int.TryParse(tables[5],out PreGuideId); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class GuideConfig : ConfigBase<int, GuideConfig>
+{
+
+    public int ID;
+	public int Type;
+	public int TriggerType;
+	public int Condition;
+	public int SupplementCondition;
+	public int PreGuideId;
+	public int[] Steps;
+	public int CanSkip;
+	public int RemoveWhenOtherGuide;
+	public int CannotCompleteByClick;
+	public int[] UnfoldAreas;
+	public int AutoCompleteTime;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			int.TryParse(tables[1],out Type); 
+
+			int.TryParse(tables[2],out TriggerType); 
+
+			int.TryParse(tables[3],out Condition); 
+
+			int.TryParse(tables[4],out SupplementCondition); 
+
+			int.TryParse(tables[5],out PreGuideId); 
+
 			if (tables[6].Contains("["))
 			{
 				Steps = JsonMapper.ToObject<int[]>(tables[6]);
@@ -60,14 +58,14 @@
 				{
 					 int.TryParse(StepsStringArray[i],out Steps[i]);
 				}
-			}
-
-			int.TryParse(tables[7],out CanSkip); 
-
-			int.TryParse(tables[8],out RemoveWhenOtherGuide); 
-
-			int.TryParse(tables[9],out CannotCompleteByClick); 
-
+			}
+
+			int.TryParse(tables[7],out CanSkip); 
+
+			int.TryParse(tables[8],out RemoveWhenOtherGuide); 
+
+			int.TryParse(tables[9],out CannotCompleteByClick); 
+
 			if (tables[10].Contains("["))
 			{
 				UnfoldAreas = JsonMapper.ToObject<int[]>(tables[10]);
@@ -80,13 +78,13 @@
 				{
 					 int.TryParse(UnfoldAreasStringArray[i],out UnfoldAreas[i]);
 				}
-			}
-
-			int.TryParse(tables[11],out AutoCompleteTime); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[11],out AutoCompleteTime); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroAwakeConfig.cs b/Main/Config/Configs/HeroAwakeConfig.cs
index ea7db17..a5374b3 100644
--- a/Main/Config/Configs/HeroAwakeConfig.cs
+++ b/Main/Config/Configs/HeroAwakeConfig.cs
@@ -1,43 +1,41 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroAwakeConfig : ConfigBase<int, HeroAwakeConfig>
-{
-
-    public int TalentAwakeID;
-	public int HeroID;
-	public int AwakeLV;
-	public int[] AttrIDList;
-	public int[] AttrValueList;
-	public int SkillID;
-	public int UnlockTalentSlot;
-	public int AddStarUpper;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out TalentAwakeID); 
-
-			int.TryParse(tables[1],out HeroID); 
-
-			int.TryParse(tables[2],out AwakeLV); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroAwakeConfig : ConfigBase<int, HeroAwakeConfig>
+{
+
+    public int TalentAwakeID;
+	public int HeroID;
+	public int AwakeLV;
+	public int[] AttrIDList;
+	public int[] AttrValueList;
+	public int SkillID;
+	public int UnlockTalentSlot;
+	public int AddStarUpper;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out TalentAwakeID); 
+
+			int.TryParse(tables[1],out HeroID); 
+
+			int.TryParse(tables[2],out AwakeLV); 
+
 			if (tables[3].Contains("["))
 			{
 				AttrIDList = JsonMapper.ToObject<int[]>(tables[3]);
@@ -50,8 +48,8 @@
 				{
 					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[4].Contains("["))
 			{
 				AttrValueList = JsonMapper.ToObject<int[]>(tables[4]);
@@ -64,17 +62,17 @@
 				{
 					 int.TryParse(AttrValueListStringArray[i],out AttrValueList[i]);
 				}
-			}
-
-			int.TryParse(tables[5],out SkillID); 
-
-			int.TryParse(tables[6],out UnlockTalentSlot); 
-
-			int.TryParse(tables[7],out AddStarUpper); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[5],out SkillID); 
+
+			int.TryParse(tables[6],out UnlockTalentSlot); 
+
+			int.TryParse(tables[7],out AddStarUpper); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroBreakConfig.cs b/Main/Config/Configs/HeroBreakConfig.cs
index 1ffc811..dc4059a 100644
--- a/Main/Config/Configs/HeroBreakConfig.cs
+++ b/Main/Config/Configs/HeroBreakConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroBreakConfig : ConfigBase<int, HeroBreakConfig>
-{
-
-    public int BreakID;
-	public int HeroID;
-	public int BreakLV;
-	public int[] AttrIDList;
-	public int[] AttrValueList;
-	public int SkillID;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out BreakID); 
-
-			int.TryParse(tables[1],out HeroID); 
-
-			int.TryParse(tables[2],out BreakLV); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroBreakConfig : ConfigBase<int, HeroBreakConfig>
+{
+
+    public int BreakID;
+	public int HeroID;
+	public int BreakLV;
+	public int[] AttrIDList;
+	public int[] AttrValueList;
+	public int SkillID;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out BreakID); 
+
+			int.TryParse(tables[1],out HeroID); 
+
+			int.TryParse(tables[2],out BreakLV); 
+
 			if (tables[3].Contains("["))
 			{
 				AttrIDList = JsonMapper.ToObject<int[]>(tables[3]);
@@ -48,8 +46,8 @@
 				{
 					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[4].Contains("["))
 			{
 				AttrValueList = JsonMapper.ToObject<int[]>(tables[4]);
@@ -62,13 +60,13 @@
 				{
 					 int.TryParse(AttrValueListStringArray[i],out AttrValueList[i]);
 				}
-			}
-
-			int.TryParse(tables[5],out SkillID); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[5],out SkillID); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroConfig.cs b/Main/Config/Configs/HeroConfig.cs
index 47c9fd5..9a6d2f6 100644
--- a/Main/Config/Configs/HeroConfig.cs
+++ b/Main/Config/Configs/HeroConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�18鏃�
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/HeroFetterConfig.cs b/Main/Config/Configs/HeroFetterConfig.cs
index fdb2ad0..000bf8c 100644
--- a/Main/Config/Configs/HeroFetterConfig.cs
+++ b/Main/Config/Configs/HeroFetterConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroFetterConfig : ConfigBase<int, HeroFetterConfig>
-{
-
-    public int FetterID;
-	public string FetterName;
-	public int[] HeroIDList;
-	public int[] AttrIDList;
-	public int[] AttrValueList;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out FetterID); 
-
-			FetterName = tables[1];
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroFetterConfig : ConfigBase<int, HeroFetterConfig>
+{
+
+    public int FetterID;
+	public string FetterName;
+	public int[] HeroIDList;
+	public int[] AttrIDList;
+	public int[] AttrValueList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out FetterID); 
+
+			FetterName = tables[1];
+
 			if (tables[2].Contains("["))
 			{
 				HeroIDList = JsonMapper.ToObject<int[]>(tables[2]);
@@ -45,8 +43,8 @@
 				{
 					 int.TryParse(HeroIDListStringArray[i],out HeroIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[3].Contains("["))
 			{
 				AttrIDList = JsonMapper.ToObject<int[]>(tables[3]);
@@ -59,8 +57,8 @@
 				{
 					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[4].Contains("["))
 			{
 				AttrValueList = JsonMapper.ToObject<int[]>(tables[4]);
@@ -73,11 +71,11 @@
 				{
 					 int.TryParse(AttrValueListStringArray[i],out AttrValueList[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroLineupHaloConfig.cs b/Main/Config/Configs/HeroLineupHaloConfig.cs
new file mode 100644
index 0000000..5f7d033
--- /dev/null
+++ b/Main/Config/Configs/HeroLineupHaloConfig.cs
@@ -0,0 +1,69 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroLineupHaloConfig : ConfigBase<int, HeroLineupHaloConfig>
+{
+
+    public int Id;
+	public int Country;
+	public int NeedHeroCount;
+	public int[] AttrIDList;
+	public int[] AttrValueList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out Id); 
+
+			int.TryParse(tables[1],out Country); 
+
+			int.TryParse(tables[2],out NeedHeroCount); 
+
+			if (tables[3].Contains("["))
+			{
+				AttrIDList = JsonMapper.ToObject<int[]>(tables[3]);
+			}
+			else
+			{
+				string[] AttrIDListStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				AttrIDList = new int[AttrIDListStringArray.Length];
+				for (int i=0;i<AttrIDListStringArray.Length;i++)
+				{
+					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
+				}
+			}
+
+			if (tables[4].Contains("["))
+			{
+				AttrValueList = JsonMapper.ToObject<int[]>(tables[4]);
+			}
+			else
+			{
+				string[] AttrValueListStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				AttrValueList = new int[AttrValueListStringArray.Length];
+				for (int i=0;i<AttrValueListStringArray.Length;i++)
+				{
+					 int.TryParse(AttrValueListStringArray[i],out AttrValueList[i]);
+				}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Config/Configs/HeroLineupHaloConfig.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Config/Configs/HeroLineupHaloConfig.cs.meta
index 7153f8c..71101db 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Config/Configs/HeroLineupHaloConfig.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 8226332450e068a418446db4aab9cb01
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Config/Configs/HeroQualityAwakeConfig.cs b/Main/Config/Configs/HeroQualityAwakeConfig.cs
index b89b396..bb4faf9 100644
--- a/Main/Config/Configs/HeroQualityAwakeConfig.cs
+++ b/Main/Config/Configs/HeroQualityAwakeConfig.cs
@@ -1,39 +1,37 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroQualityAwakeConfig : ConfigBase<int, HeroQualityAwakeConfig>
-{
-
-    public int QualityAwakeID;
-	public int Quality;
-	public int AwakeLV;
-	public int[] UPCostItem;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out QualityAwakeID); 
-
-			int.TryParse(tables[1],out Quality); 
-
-			int.TryParse(tables[2],out AwakeLV); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroQualityAwakeConfig : ConfigBase<int, HeroQualityAwakeConfig>
+{
+
+    public int QualityAwakeID;
+	public int Quality;
+	public int AwakeLV;
+	public int[] UPCostItem;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out QualityAwakeID); 
+
+			int.TryParse(tables[1],out Quality); 
+
+			int.TryParse(tables[2],out AwakeLV); 
+
 			if (tables[3].Contains("["))
 			{
 				UPCostItem = JsonMapper.ToObject<int[]>(tables[3]);
@@ -46,11 +44,11 @@
 				{
 					 int.TryParse(UPCostItemStringArray[i],out UPCostItem[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroQualityBreakConfig.cs b/Main/Config/Configs/HeroQualityBreakConfig.cs
index 8d7ab6a..af146fe 100644
--- a/Main/Config/Configs/HeroQualityBreakConfig.cs
+++ b/Main/Config/Configs/HeroQualityBreakConfig.cs
@@ -1,42 +1,40 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroQualityBreakConfig : ConfigBase<int, HeroQualityBreakConfig>
-{
-
-    public int QualityBreankID;
-	public int Quality;
-	public int BreakLV;
-	public int LVMax;
-	public int[] UPCostItem;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out QualityBreankID); 
-
-			int.TryParse(tables[1],out Quality); 
-
-			int.TryParse(tables[2],out BreakLV); 
-
-			int.TryParse(tables[3],out LVMax); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroQualityBreakConfig : ConfigBase<int, HeroQualityBreakConfig>
+{
+
+    public int QualityBreankID;
+	public int Quality;
+	public int BreakLV;
+	public int LVMax;
+	public int[] UPCostItem;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out QualityBreankID); 
+
+			int.TryParse(tables[1],out Quality); 
+
+			int.TryParse(tables[2],out BreakLV); 
+
+			int.TryParse(tables[3],out LVMax); 
+
 			if (tables[4].Contains("["))
 			{
 				UPCostItem = JsonMapper.ToObject<int[]>(tables[4]);
@@ -49,11 +47,11 @@
 				{
 					 int.TryParse(UPCostItemStringArray[i],out UPCostItem[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroQualityConfig.cs b/Main/Config/Configs/HeroQualityConfig.cs
index af2ce0c..16ef8da 100644
--- a/Main/Config/Configs/HeroQualityConfig.cs
+++ b/Main/Config/Configs/HeroQualityConfig.cs
@@ -1,42 +1,40 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroQualityConfig : ConfigBase<int, HeroQualityConfig>
-{
-
-    public int Quality;
-	public int[] UPCostItem;
-	public int InitStarUpper;
-	public int InitAddPer;
-	public int LVAddPer;
-	public int BreakLVAddPer;
-	public int StarAddPer;
-	public int[] BookActAwardMoney;
-	public int BookInitAddPer;
-	public int BookStarAddPer;
-	public int BookBreakLVAddPer;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out Quality); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroQualityConfig : ConfigBase<int, HeroQualityConfig>
+{
+
+    public int Quality;
+	public int[] UPCostItem;
+	public int InitStarUpper;
+	public int InitAddPer;
+	public int LVAddPer;
+	public int BreakLVAddPer;
+	public int StarAddPer;
+	public int[] BookActAwardMoney;
+	public int BookInitAddPer;
+	public int BookStarAddPer;
+	public int BookBreakLVAddPer;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out Quality); 
+
 			if (tables[1].Contains("["))
 			{
 				UPCostItem = JsonMapper.ToObject<int[]>(tables[1]);
@@ -49,18 +47,18 @@
 				{
 					 int.TryParse(UPCostItemStringArray[i],out UPCostItem[i]);
 				}
-			}
-
-			int.TryParse(tables[2],out InitStarUpper); 
-
-			int.TryParse(tables[3],out InitAddPer); 
-
-			int.TryParse(tables[4],out LVAddPer); 
-
-			int.TryParse(tables[5],out BreakLVAddPer); 
-
-			int.TryParse(tables[6],out StarAddPer); 
-
+			}
+
+			int.TryParse(tables[2],out InitStarUpper); 
+
+			int.TryParse(tables[3],out InitAddPer); 
+
+			int.TryParse(tables[4],out LVAddPer); 
+
+			int.TryParse(tables[5],out BreakLVAddPer); 
+
+			int.TryParse(tables[6],out StarAddPer); 
+
 			if (tables[7].Contains("["))
 			{
 				BookActAwardMoney = JsonMapper.ToObject<int[]>(tables[7]);
@@ -73,17 +71,17 @@
 				{
 					 int.TryParse(BookActAwardMoneyStringArray[i],out BookActAwardMoney[i]);
 				}
-			}
-
-			int.TryParse(tables[8],out BookInitAddPer); 
-
-			int.TryParse(tables[9],out BookStarAddPer); 
-
-			int.TryParse(tables[10],out BookBreakLVAddPer); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[8],out BookInitAddPer); 
+
+			int.TryParse(tables[9],out BookStarAddPer); 
+
+			int.TryParse(tables[10],out BookBreakLVAddPer); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroQualityLVConfig.cs b/Main/Config/Configs/HeroQualityLVConfig.cs
new file mode 100644
index 0000000..160987d
--- /dev/null
+++ b/Main/Config/Configs/HeroQualityLVConfig.cs
@@ -0,0 +1,54 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroQualityLVConfig : ConfigBase<int, HeroQualityLVConfig>
+{
+
+    public int Id;
+	public int Quality;
+	public int HeroLV;
+	public int[] UPCostItem;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out Id); 
+
+			int.TryParse(tables[1],out Quality); 
+
+			int.TryParse(tables[2],out HeroLV); 
+
+			if (tables[3].Contains("["))
+			{
+				UPCostItem = JsonMapper.ToObject<int[]>(tables[3]);
+			}
+			else
+			{
+				string[] UPCostItemStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				UPCostItem = new int[UPCostItemStringArray.Length];
+				for (int i=0;i<UPCostItemStringArray.Length;i++)
+				{
+					 int.TryParse(UPCostItemStringArray[i],out UPCostItem[i]);
+				}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Config/Configs/HeroQualityLVConfig.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Config/Configs/HeroQualityLVConfig.cs.meta
index 7153f8c..cc535dd 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Config/Configs/HeroQualityLVConfig.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: b0e2a9b5d4828284eb6dad12646b416c
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Config/Configs/HeroSkinConfig.cs b/Main/Config/Configs/HeroSkinConfig.cs
index 30294af..483ffdd 100644
--- a/Main/Config/Configs/HeroSkinConfig.cs
+++ b/Main/Config/Configs/HeroSkinConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�18鏃�
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/HeroTalentConfig.cs b/Main/Config/Configs/HeroTalentConfig.cs
index b3bdc50..dcc93c4 100644
--- a/Main/Config/Configs/HeroTalentConfig.cs
+++ b/Main/Config/Configs/HeroTalentConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�11鏃�
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/IconConfig.cs b/Main/Config/Configs/IconConfig.cs
index 7545724..a6f01cf 100644
--- a/Main/Config/Configs/IconConfig.cs
+++ b/Main/Config/Configs/IconConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class IconConfig : ConfigBase<string, IconConfig>
-{
-
-    public string id;
-	public string folder;
-	public string sprite;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        id = tables[0];
-
-			folder = tables[1];
-
-			sprite = tables[2];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class IconConfig : ConfigBase<string, IconConfig>
+{
+
+    public string id;
+	public string folder;
+	public string sprite;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        id = tables[0];
+
+			folder = tables[1];
+
+			sprite = tables[2];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/InitialFunctionConfig.cs b/Main/Config/Configs/InitialFunctionConfig.cs
index 283d2ef..85a55cd 100644
--- a/Main/Config/Configs/InitialFunctionConfig.cs
+++ b/Main/Config/Configs/InitialFunctionConfig.cs
@@ -1,50 +1,48 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class InitialFunctionConfig : ConfigBase<string, InitialFunctionConfig>
-{
-
-    public string KEY;
-	public string Numerical1;
-	public string Numerical2;
-	public string Numerical3;
-	public string Numerical4;
-	public string Numerical5;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        KEY = tables[0];
-
-			Numerical1 = tables[1];
-
-			Numerical2 = tables[2];
-
-			Numerical3 = tables[3];
-
-			Numerical4 = tables[4];
-
-			Numerical5 = tables[5];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class InitialFunctionConfig : ConfigBase<string, InitialFunctionConfig>
+{
+
+    public string KEY;
+	public string Numerical1;
+	public string Numerical2;
+	public string Numerical3;
+	public string Numerical4;
+	public string Numerical5;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        KEY = tables[0];
+
+			Numerical1 = tables[1];
+
+			Numerical2 = tables[2];
+
+			Numerical3 = tables[3];
+
+			Numerical4 = tables[4];
+
+			Numerical5 = tables[5];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/ItemConfig.cs b/Main/Config/Configs/ItemConfig.cs
index 7b7e656..be83867 100644
--- a/Main/Config/Configs/ItemConfig.cs
+++ b/Main/Config/Configs/ItemConfig.cs
@@ -1,122 +1,120 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class ItemConfig : ConfigBase<int, ItemConfig>
-{
-
-    public int ID;
-	public int LV;
-	public string ItemName;
-	public int Type;
-	public int EquipPlace;
-	public int CanRepair;
-	public int PackCount;
-	public int UseLV;
-	public int CanSell;
-	public int CanTrade;
-	public int[] JumpComposeCondi;
-	public int CanDrop;
-	public int CanBind;
-	public int CDTypeEx;
-	public int CDType;
-	public int CDTime;
-	public int GoldPrice;
-	public int GoldPaperPrice;
-	public int SilverPrice;
-	public int UseTag;
-	public int Effect1;
-	public int EffectValueA1;
-	public int EffectValueB1;
-	public int EffectValueC1;
-	public int Effect2;
-	public int EffectValueA2;
-	public int EffectValueB2;
-	public int EffectValueC2;
-	public int Effect3;
-	public int EffectValueA3;
-	public int EffectValueB3;
-	public int EffectValueC3;
-	public int Effect4;
-	public int EffectValueA4;
-	public int EffectValueB4;
-	public int EffectValueC4;
-	public int Effect5;
-	public int EffectValueA5;
-	public int EffectValueB5;
-	public int EffectValueC5;
-	public int AddSkill1;
-	public int AddSkill2;
-	public int JobLimit;
-	public int RealmLimit;
-	public int ItemColor;
-	public int StarLevel;
-	public int MaxHoleCount;
-	public int CanBreak;
-	public int MaxEndure;
-	public int EndureReduceType;
-	public int BindType;
-	public int MaxSkillCnt;
-	public int ExpireTime;
-	public int MaxFitLV;
-	public int SuiteiD;
-	public string DropinstantEffName;
-	public string IconKey;
-	public int ChangeOrd;
-	public string Description;
-	public string QualityName;
-	public int QualityEchoType;
-	public int LimitSTR;
-	public int LimitPHY;
-	public int LimitPNE;
-	public string Template;
-	public int DropItemPattern;
-	public int SellTip;
-	public int BatchUse;
-	public int Jump;
-	public int[] GetWay;
-	public string ItemTypeName;
-	public int[] UseCondiType;
-	public int BaseEffectID;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			int.TryParse(tables[1],out LV); 
-
-			ItemName = tables[2];
-
-			int.TryParse(tables[3],out Type); 
-
-			int.TryParse(tables[4],out EquipPlace); 
-
-			int.TryParse(tables[5],out CanRepair); 
-
-			int.TryParse(tables[6],out PackCount); 
-
-			int.TryParse(tables[7],out UseLV); 
-
-			int.TryParse(tables[8],out CanSell); 
-
-			int.TryParse(tables[9],out CanTrade); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class ItemConfig : ConfigBase<int, ItemConfig>
+{
+
+    public int ID;
+	public int LV;
+	public string ItemName;
+	public int Type;
+	public int EquipPlace;
+	public int CanRepair;
+	public int PackCount;
+	public int UseLV;
+	public int CanSell;
+	public int CanTrade;
+	public int[] JumpComposeCondi;
+	public int CanDrop;
+	public int CanBind;
+	public int CDTypeEx;
+	public int CDType;
+	public int CDTime;
+	public int GoldPrice;
+	public int GoldPaperPrice;
+	public int SilverPrice;
+	public int UseTag;
+	public int Effect1;
+	public int EffectValueA1;
+	public int EffectValueB1;
+	public int EffectValueC1;
+	public int Effect2;
+	public int EffectValueA2;
+	public int EffectValueB2;
+	public int EffectValueC2;
+	public int Effect3;
+	public int EffectValueA3;
+	public int EffectValueB3;
+	public int EffectValueC3;
+	public int Effect4;
+	public int EffectValueA4;
+	public int EffectValueB4;
+	public int EffectValueC4;
+	public int Effect5;
+	public int EffectValueA5;
+	public int EffectValueB5;
+	public int EffectValueC5;
+	public int AddSkill1;
+	public int AddSkill2;
+	public int JobLimit;
+	public int RealmLimit;
+	public int ItemColor;
+	public int StarLevel;
+	public int MaxHoleCount;
+	public int CanBreak;
+	public int MaxEndure;
+	public int EndureReduceType;
+	public int BindType;
+	public int MaxSkillCnt;
+	public int ExpireTime;
+	public int MaxFitLV;
+	public int SuiteiD;
+	public string DropinstantEffName;
+	public string IconKey;
+	public int ChangeOrd;
+	public string Description;
+	public string QualityName;
+	public int QualityEchoType;
+	public int LimitSTR;
+	public int LimitPHY;
+	public int LimitPNE;
+	public string Template;
+	public int DropItemPattern;
+	public int SellTip;
+	public int BatchUse;
+	public int Jump;
+	public int[] GetWay;
+	public string ItemTypeName;
+	public int[] UseCondiType;
+	public int BaseEffectID;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			int.TryParse(tables[1],out LV); 
+
+			ItemName = tables[2];
+
+			int.TryParse(tables[3],out Type); 
+
+			int.TryParse(tables[4],out EquipPlace); 
+
+			int.TryParse(tables[5],out CanRepair); 
+
+			int.TryParse(tables[6],out PackCount); 
+
+			int.TryParse(tables[7],out UseLV); 
+
+			int.TryParse(tables[8],out CanSell); 
+
+			int.TryParse(tables[9],out CanTrade); 
+
 			if (tables[10].Contains("["))
 			{
 				JumpComposeCondi = JsonMapper.ToObject<int[]>(tables[10]);
@@ -129,124 +127,124 @@
 				{
 					 int.TryParse(JumpComposeCondiStringArray[i],out JumpComposeCondi[i]);
 				}
-			}
-
-			int.TryParse(tables[11],out CanDrop); 
-
-			int.TryParse(tables[12],out CanBind); 
-
-			int.TryParse(tables[13],out CDTypeEx); 
-
-			int.TryParse(tables[14],out CDType); 
-
-			int.TryParse(tables[15],out CDTime); 
-
-			int.TryParse(tables[16],out GoldPrice); 
-
-			int.TryParse(tables[17],out GoldPaperPrice); 
-
-			int.TryParse(tables[18],out SilverPrice); 
-
-			int.TryParse(tables[19],out UseTag); 
-
-			int.TryParse(tables[20],out Effect1); 
-
-			int.TryParse(tables[21],out EffectValueA1); 
-
-			int.TryParse(tables[22],out EffectValueB1); 
-
-			int.TryParse(tables[23],out EffectValueC1); 
-
-			int.TryParse(tables[24],out Effect2); 
-
-			int.TryParse(tables[25],out EffectValueA2); 
-
-			int.TryParse(tables[26],out EffectValueB2); 
-
-			int.TryParse(tables[27],out EffectValueC2); 
-
-			int.TryParse(tables[28],out Effect3); 
-
-			int.TryParse(tables[29],out EffectValueA3); 
-
-			int.TryParse(tables[30],out EffectValueB3); 
-
-			int.TryParse(tables[31],out EffectValueC3); 
-
-			int.TryParse(tables[32],out Effect4); 
-
-			int.TryParse(tables[33],out EffectValueA4); 
-
-			int.TryParse(tables[34],out EffectValueB4); 
-
-			int.TryParse(tables[35],out EffectValueC4); 
-
-			int.TryParse(tables[36],out Effect5); 
-
-			int.TryParse(tables[37],out EffectValueA5); 
-
-			int.TryParse(tables[38],out EffectValueB5); 
-
-			int.TryParse(tables[39],out EffectValueC5); 
-
-			int.TryParse(tables[40],out AddSkill1); 
-
-			int.TryParse(tables[41],out AddSkill2); 
-
-			int.TryParse(tables[42],out JobLimit); 
-
-			int.TryParse(tables[43],out RealmLimit); 
-
-			int.TryParse(tables[44],out ItemColor); 
-
-			int.TryParse(tables[45],out StarLevel); 
-
-			int.TryParse(tables[46],out MaxHoleCount); 
-
-			int.TryParse(tables[47],out CanBreak); 
-
-			int.TryParse(tables[48],out MaxEndure); 
-
-			int.TryParse(tables[49],out EndureReduceType); 
-
-			int.TryParse(tables[50],out BindType); 
-
-			int.TryParse(tables[51],out MaxSkillCnt); 
-
-			int.TryParse(tables[52],out ExpireTime); 
-
-			int.TryParse(tables[53],out MaxFitLV); 
-
-			int.TryParse(tables[54],out SuiteiD); 
-
-			DropinstantEffName = tables[55];
-
-			IconKey = tables[56];
-
-			int.TryParse(tables[57],out ChangeOrd); 
-
-			Description = tables[58];
-
-			QualityName = tables[59];
-
-			int.TryParse(tables[60],out QualityEchoType); 
-
-			int.TryParse(tables[61],out LimitSTR); 
-
-			int.TryParse(tables[62],out LimitPHY); 
-
-			int.TryParse(tables[63],out LimitPNE); 
-
-			Template = tables[64];
-
-			int.TryParse(tables[65],out DropItemPattern); 
-
-			int.TryParse(tables[66],out SellTip); 
-
-			int.TryParse(tables[67],out BatchUse); 
-
-			int.TryParse(tables[68],out Jump); 
-
+			}
+
+			int.TryParse(tables[11],out CanDrop); 
+
+			int.TryParse(tables[12],out CanBind); 
+
+			int.TryParse(tables[13],out CDTypeEx); 
+
+			int.TryParse(tables[14],out CDType); 
+
+			int.TryParse(tables[15],out CDTime); 
+
+			int.TryParse(tables[16],out GoldPrice); 
+
+			int.TryParse(tables[17],out GoldPaperPrice); 
+
+			int.TryParse(tables[18],out SilverPrice); 
+
+			int.TryParse(tables[19],out UseTag); 
+
+			int.TryParse(tables[20],out Effect1); 
+
+			int.TryParse(tables[21],out EffectValueA1); 
+
+			int.TryParse(tables[22],out EffectValueB1); 
+
+			int.TryParse(tables[23],out EffectValueC1); 
+
+			int.TryParse(tables[24],out Effect2); 
+
+			int.TryParse(tables[25],out EffectValueA2); 
+
+			int.TryParse(tables[26],out EffectValueB2); 
+
+			int.TryParse(tables[27],out EffectValueC2); 
+
+			int.TryParse(tables[28],out Effect3); 
+
+			int.TryParse(tables[29],out EffectValueA3); 
+
+			int.TryParse(tables[30],out EffectValueB3); 
+
+			int.TryParse(tables[31],out EffectValueC3); 
+
+			int.TryParse(tables[32],out Effect4); 
+
+			int.TryParse(tables[33],out EffectValueA4); 
+
+			int.TryParse(tables[34],out EffectValueB4); 
+
+			int.TryParse(tables[35],out EffectValueC4); 
+
+			int.TryParse(tables[36],out Effect5); 
+
+			int.TryParse(tables[37],out EffectValueA5); 
+
+			int.TryParse(tables[38],out EffectValueB5); 
+
+			int.TryParse(tables[39],out EffectValueC5); 
+
+			int.TryParse(tables[40],out AddSkill1); 
+
+			int.TryParse(tables[41],out AddSkill2); 
+
+			int.TryParse(tables[42],out JobLimit); 
+
+			int.TryParse(tables[43],out RealmLimit); 
+
+			int.TryParse(tables[44],out ItemColor); 
+
+			int.TryParse(tables[45],out StarLevel); 
+
+			int.TryParse(tables[46],out MaxHoleCount); 
+
+			int.TryParse(tables[47],out CanBreak); 
+
+			int.TryParse(tables[48],out MaxEndure); 
+
+			int.TryParse(tables[49],out EndureReduceType); 
+
+			int.TryParse(tables[50],out BindType); 
+
+			int.TryParse(tables[51],out MaxSkillCnt); 
+
+			int.TryParse(tables[52],out ExpireTime); 
+
+			int.TryParse(tables[53],out MaxFitLV); 
+
+			int.TryParse(tables[54],out SuiteiD); 
+
+			DropinstantEffName = tables[55];
+
+			IconKey = tables[56];
+
+			int.TryParse(tables[57],out ChangeOrd); 
+
+			Description = tables[58];
+
+			QualityName = tables[59];
+
+			int.TryParse(tables[60],out QualityEchoType); 
+
+			int.TryParse(tables[61],out LimitSTR); 
+
+			int.TryParse(tables[62],out LimitPHY); 
+
+			int.TryParse(tables[63],out LimitPNE); 
+
+			Template = tables[64];
+
+			int.TryParse(tables[65],out DropItemPattern); 
+
+			int.TryParse(tables[66],out SellTip); 
+
+			int.TryParse(tables[67],out BatchUse); 
+
+			int.TryParse(tables[68],out Jump); 
+
 			if (tables[69].Contains("["))
 			{
 				GetWay = JsonMapper.ToObject<int[]>(tables[69]);
@@ -259,10 +257,10 @@
 				{
 					 int.TryParse(GetWayStringArray[i],out GetWay[i]);
 				}
-			}
-
-			ItemTypeName = tables[70];
-
+			}
+
+			ItemTypeName = tables[70];
+
 			if (tables[71].Contains("["))
 			{
 				UseCondiType = JsonMapper.ToObject<int[]>(tables[71]);
@@ -275,13 +273,13 @@
 				{
 					 int.TryParse(UseCondiTypeStringArray[i],out UseCondiType[i]);
 				}
-			}
-
-			int.TryParse(tables[72],out BaseEffectID); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[72],out BaseEffectID); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/KickOutReasonConfig.cs b/Main/Config/Configs/KickOutReasonConfig.cs
index 3ecb6d0..d89982a 100644
--- a/Main/Config/Configs/KickOutReasonConfig.cs
+++ b/Main/Config/Configs/KickOutReasonConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class KickOutReasonConfig : ConfigBase<int, KickOutReasonConfig>
-{
-
-    public int id;
-	public string kickout;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			kickout = tables[1];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class KickOutReasonConfig : ConfigBase<int, KickOutReasonConfig>
+{
+
+    public int id;
+	public string kickout;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			kickout = tables[1];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/LanguageConfig.cs b/Main/Config/Configs/LanguageConfig.cs
index 86c0f99..7233735 100644
--- a/Main/Config/Configs/LanguageConfig.cs
+++ b/Main/Config/Configs/LanguageConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class LanguageConfig : ConfigBase<string, LanguageConfig>
-{
-
-    public string id;
-	public string content;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        id = tables[0];
-
-			content = tables[1];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class LanguageConfig : ConfigBase<string, LanguageConfig>
+{
+
+    public string id;
+	public string content;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        id = tables[0];
+
+			content = tables[1];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/MailConfig.cs b/Main/Config/Configs/MailConfig.cs
index fcae028..4001bd0 100644
--- a/Main/Config/Configs/MailConfig.cs
+++ b/Main/Config/Configs/MailConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class MailConfig : ConfigBase<string, MailConfig>
-{
-
-    public string MailType;
-	public string Title;
-	public string Content;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        MailType = tables[0];
-
-			Title = tables[1];
-
-			Content = tables[2];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class MailConfig : ConfigBase<string, MailConfig>
+{
+
+    public string MailType;
+	public string Title;
+	public string Content;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        MailType = tables[0];
+
+			Title = tables[1];
+
+			Content = tables[2];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/MainChapterConfig.cs b/Main/Config/Configs/MainChapterConfig.cs
index 3a87bcd..8ba4190 100644
--- a/Main/Config/Configs/MainChapterConfig.cs
+++ b/Main/Config/Configs/MainChapterConfig.cs
@@ -1,50 +1,48 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class MainChapterConfig : ConfigBase<int, MainChapterConfig>
-{
-
-    public int ChapterID;
-	public string ChapterName;
-	public string Level;
-	public string MapBG;
-	public int[][] DailyBootyUpperList;
-	public string BootyWeightList;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ChapterID); 
-
-			ChapterName = tables[1];
-
-			Level = tables[2];
-
-			MapBG = tables[3];
-
-			DailyBootyUpperList = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); 
-
-			BootyWeightList = tables[5];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class MainChapterConfig : ConfigBase<int, MainChapterConfig>
+{
+
+    public int ChapterID;
+	public string ChapterName;
+	public string Level;
+	public string MapBG;
+	public int[][] DailyBootyUpperList;
+	public string BootyWeightList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ChapterID); 
+
+			ChapterName = tables[1];
+
+			Level = tables[2];
+
+			MapBG = tables[3];
+
+			DailyBootyUpperList = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); 
+
+			BootyWeightList = tables[5];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/MainLevelConfig.cs b/Main/Config/Configs/MainLevelConfig.cs
index 105fbbc..8e1464b 100644
--- a/Main/Config/Configs/MainLevelConfig.cs
+++ b/Main/Config/Configs/MainLevelConfig.cs
@@ -1,46 +1,44 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class MainLevelConfig : ConfigBase<int, MainLevelConfig>
-{
-
-    public int LevelID;
-	public int ChapterID;
-	public int LevelNum;
-	public int[] WaveLineupIDList1;
-	public int[] WaveLineupIDList2;
-	public int[] WaveLineupIDList3;
-	public int[] WaveLineupIDList4;
-	public int[] WaveLineupIDList5;
-	public int[] WaveLineupIDList6;
-	public int[] BossLineupIDList;
-	public int[][] AwardItemList;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out LevelID); 
-
-			int.TryParse(tables[1],out ChapterID); 
-
-			int.TryParse(tables[2],out LevelNum); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class MainLevelConfig : ConfigBase<int, MainLevelConfig>
+{
+
+    public int LevelID;
+	public int ChapterID;
+	public int LevelNum;
+	public int[] WaveLineupIDList1;
+	public int[] WaveLineupIDList2;
+	public int[] WaveLineupIDList3;
+	public int[] WaveLineupIDList4;
+	public int[] WaveLineupIDList5;
+	public int[] WaveLineupIDList6;
+	public int[] BossLineupIDList;
+	public int[][] AwardItemList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out LevelID); 
+
+			int.TryParse(tables[1],out ChapterID); 
+
+			int.TryParse(tables[2],out LevelNum); 
+
 			if (tables[3].Contains("["))
 			{
 				WaveLineupIDList1 = JsonMapper.ToObject<int[]>(tables[3]);
@@ -53,8 +51,8 @@
 				{
 					 int.TryParse(WaveLineupIDList1StringArray[i],out WaveLineupIDList1[i]);
 				}
-			}
-
+			}
+
 			if (tables[4].Contains("["))
 			{
 				WaveLineupIDList2 = JsonMapper.ToObject<int[]>(tables[4]);
@@ -67,8 +65,8 @@
 				{
 					 int.TryParse(WaveLineupIDList2StringArray[i],out WaveLineupIDList2[i]);
 				}
-			}
-
+			}
+
 			if (tables[5].Contains("["))
 			{
 				WaveLineupIDList3 = JsonMapper.ToObject<int[]>(tables[5]);
@@ -81,8 +79,8 @@
 				{
 					 int.TryParse(WaveLineupIDList3StringArray[i],out WaveLineupIDList3[i]);
 				}
-			}
-
+			}
+
 			if (tables[6].Contains("["))
 			{
 				WaveLineupIDList4 = JsonMapper.ToObject<int[]>(tables[6]);
@@ -95,8 +93,8 @@
 				{
 					 int.TryParse(WaveLineupIDList4StringArray[i],out WaveLineupIDList4[i]);
 				}
-			}
-
+			}
+
 			if (tables[7].Contains("["))
 			{
 				WaveLineupIDList5 = JsonMapper.ToObject<int[]>(tables[7]);
@@ -109,8 +107,8 @@
 				{
 					 int.TryParse(WaveLineupIDList5StringArray[i],out WaveLineupIDList5[i]);
 				}
-			}
-
+			}
+
 			if (tables[8].Contains("["))
 			{
 				WaveLineupIDList6 = JsonMapper.ToObject<int[]>(tables[8]);
@@ -123,8 +121,8 @@
 				{
 					 int.TryParse(WaveLineupIDList6StringArray[i],out WaveLineupIDList6[i]);
 				}
-			}
-
+			}
+
 			if (tables[9].Contains("["))
 			{
 				BossLineupIDList = JsonMapper.ToObject<int[]>(tables[9]);
@@ -137,13 +135,13 @@
 				{
 					 int.TryParse(BossLineupIDListStringArray[i],out BossLineupIDList[i]);
 				}
-			}
-
-			AwardItemList = JsonMapper.ToObject<int[][]>(tables[10].Replace("(", "[").Replace(")", "]")); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			AwardItemList = JsonMapper.ToObject<int[][]>(tables[10].Replace("(", "[").Replace(")", "]")); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/NPCConfig.cs b/Main/Config/Configs/NPCConfig.cs
index b643e3b..c191c66 100644
--- a/Main/Config/Configs/NPCConfig.cs
+++ b/Main/Config/Configs/NPCConfig.cs
@@ -1,196 +1,194 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class NPCConfig : ConfigBase<int, NPCConfig>
-{
-
-    public int NPCID;
-	public int NPCType;
-	public string MODE;
-	public string charName;
-	public int NPCLV;
-	public float ModleHeight;
-	public float ModelRadius;
-	public float ModeProportion;
-	public Vector3 UIModeLOffset;
-	public float UIModeLProportion;
-	public Vector3 UIModelRotation;
-	public int CanDeadFly;
-	public int Country;
-	public int MinAtk;
-	public int MaxAtk;
-	public int Def;
-	public int Realm;
-	public int PoisionAtk;
-	public int FireAtk;
-	public int IceAtk;
-	public int PoisionDef;
-	public int IceDef;
-	public int ThunderDef;
-	public int AtkInterval;
-	public int Hit;
-	public int MissRate;
-	public int SuperHiteRate;
-	public int OrgSpeed;
-	public int MoveType;
-	public int AtkDist;
-	public int Skill1;
-	public int Skill2;
-	public int Skill3;
-	public int Skill4;
-	public int Skill5;
-	public int Skill6;
-	public int Skill7;
-	public int Skill8;
-	public int AtkType;
-	public int Sight;
-	public int MoveArea;
-	public int DHP;
-	public int MaxHPEx;
-	public int IsBoss;
-	public int SP;
-	public int AIType;
-	public int CanAttack;
-	public float weight;
-	public string HeadPortrait;
-	public int Show;
-	public int AtkFeedback;
-	public int hurtFeedback;
-	public int AutomaticFace;
-	public int Dig;
-	public int[] Sounds;
-	public int LifeBarCount;
-	public int NPCEffect;
-	public int NPCSpeakID;
-	public string Equips;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out NPCID); 
-
-			int.TryParse(tables[1],out NPCType); 
-
-			MODE = tables[2];
-
-			charName = tables[3];
-
-			int.TryParse(tables[4],out NPCLV); 
-
-			float.TryParse(tables[5],out ModleHeight); 
-
-			float.TryParse(tables[6],out ModelRadius); 
-
-			float.TryParse(tables[7],out ModeProportion); 
-
-			UIModeLOffset=tables[8].Vector3Parse();
-
-			float.TryParse(tables[9],out UIModeLProportion); 
-
-			UIModelRotation=tables[10].Vector3Parse();
-
-			int.TryParse(tables[11],out CanDeadFly); 
-
-			int.TryParse(tables[12],out Country); 
-
-			int.TryParse(tables[13],out MinAtk); 
-
-			int.TryParse(tables[14],out MaxAtk); 
-
-			int.TryParse(tables[15],out Def); 
-
-			int.TryParse(tables[16],out Realm); 
-
-			int.TryParse(tables[17],out PoisionAtk); 
-
-			int.TryParse(tables[18],out FireAtk); 
-
-			int.TryParse(tables[19],out IceAtk); 
-
-			int.TryParse(tables[20],out PoisionDef); 
-
-			int.TryParse(tables[21],out IceDef); 
-
-			int.TryParse(tables[22],out ThunderDef); 
-
-			int.TryParse(tables[23],out AtkInterval); 
-
-			int.TryParse(tables[24],out Hit); 
-
-			int.TryParse(tables[25],out MissRate); 
-
-			int.TryParse(tables[26],out SuperHiteRate); 
-
-			int.TryParse(tables[27],out OrgSpeed); 
-
-			int.TryParse(tables[28],out MoveType); 
-
-			int.TryParse(tables[29],out AtkDist); 
-
-			int.TryParse(tables[30],out Skill1); 
-
-			int.TryParse(tables[31],out Skill2); 
-
-			int.TryParse(tables[32],out Skill3); 
-
-			int.TryParse(tables[33],out Skill4); 
-
-			int.TryParse(tables[34],out Skill5); 
-
-			int.TryParse(tables[35],out Skill6); 
-
-			int.TryParse(tables[36],out Skill7); 
-
-			int.TryParse(tables[37],out Skill8); 
-
-			int.TryParse(tables[38],out AtkType); 
-
-			int.TryParse(tables[39],out Sight); 
-
-			int.TryParse(tables[40],out MoveArea); 
-
-			int.TryParse(tables[41],out DHP); 
-
-			int.TryParse(tables[42],out MaxHPEx); 
-
-			int.TryParse(tables[43],out IsBoss); 
-
-			int.TryParse(tables[44],out SP); 
-
-			int.TryParse(tables[45],out AIType); 
-
-			int.TryParse(tables[46],out CanAttack); 
-
-			float.TryParse(tables[47],out weight); 
-
-			HeadPortrait = tables[48];
-
-			int.TryParse(tables[49],out Show); 
-
-			int.TryParse(tables[50],out AtkFeedback); 
-
-			int.TryParse(tables[51],out hurtFeedback); 
-
-			int.TryParse(tables[52],out AutomaticFace); 
-
-			int.TryParse(tables[53],out Dig); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class NPCConfig : ConfigBase<int, NPCConfig>
+{
+
+    public int NPCID;
+	public int NPCType;
+	public string MODE;
+	public string charName;
+	public int NPCLV;
+	public float ModleHeight;
+	public float ModelRadius;
+	public float ModeProportion;
+	public Vector3 UIModeLOffset;
+	public float UIModeLProportion;
+	public Vector3 UIModelRotation;
+	public int CanDeadFly;
+	public int Country;
+	public int MinAtk;
+	public int MaxAtk;
+	public int Def;
+	public int Realm;
+	public int PoisionAtk;
+	public int FireAtk;
+	public int IceAtk;
+	public int PoisionDef;
+	public int IceDef;
+	public int ThunderDef;
+	public int AtkInterval;
+	public int Hit;
+	public int MissRate;
+	public int SuperHiteRate;
+	public int OrgSpeed;
+	public int MoveType;
+	public int AtkDist;
+	public int Skill1;
+	public int Skill2;
+	public int Skill3;
+	public int Skill4;
+	public int Skill5;
+	public int Skill6;
+	public int Skill7;
+	public int Skill8;
+	public int AtkType;
+	public int Sight;
+	public int MoveArea;
+	public int DHP;
+	public int MaxHPEx;
+	public int IsBoss;
+	public int SP;
+	public int AIType;
+	public int CanAttack;
+	public float weight;
+	public string HeadPortrait;
+	public int Show;
+	public int AtkFeedback;
+	public int hurtFeedback;
+	public int AutomaticFace;
+	public int Dig;
+	public int[] Sounds;
+	public int LifeBarCount;
+	public int NPCEffect;
+	public int NPCSpeakID;
+	public string Equips;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out NPCID); 
+
+			int.TryParse(tables[1],out NPCType); 
+
+			MODE = tables[2];
+
+			charName = tables[3];
+
+			int.TryParse(tables[4],out NPCLV); 
+
+			float.TryParse(tables[5],out ModleHeight); 
+
+			float.TryParse(tables[6],out ModelRadius); 
+
+			float.TryParse(tables[7],out ModeProportion); 
+
+			UIModeLOffset=tables[8].Vector3Parse();
+
+			float.TryParse(tables[9],out UIModeLProportion); 
+
+			UIModelRotation=tables[10].Vector3Parse();
+
+			int.TryParse(tables[11],out CanDeadFly); 
+
+			int.TryParse(tables[12],out Country); 
+
+			int.TryParse(tables[13],out MinAtk); 
+
+			int.TryParse(tables[14],out MaxAtk); 
+
+			int.TryParse(tables[15],out Def); 
+
+			int.TryParse(tables[16],out Realm); 
+
+			int.TryParse(tables[17],out PoisionAtk); 
+
+			int.TryParse(tables[18],out FireAtk); 
+
+			int.TryParse(tables[19],out IceAtk); 
+
+			int.TryParse(tables[20],out PoisionDef); 
+
+			int.TryParse(tables[21],out IceDef); 
+
+			int.TryParse(tables[22],out ThunderDef); 
+
+			int.TryParse(tables[23],out AtkInterval); 
+
+			int.TryParse(tables[24],out Hit); 
+
+			int.TryParse(tables[25],out MissRate); 
+
+			int.TryParse(tables[26],out SuperHiteRate); 
+
+			int.TryParse(tables[27],out OrgSpeed); 
+
+			int.TryParse(tables[28],out MoveType); 
+
+			int.TryParse(tables[29],out AtkDist); 
+
+			int.TryParse(tables[30],out Skill1); 
+
+			int.TryParse(tables[31],out Skill2); 
+
+			int.TryParse(tables[32],out Skill3); 
+
+			int.TryParse(tables[33],out Skill4); 
+
+			int.TryParse(tables[34],out Skill5); 
+
+			int.TryParse(tables[35],out Skill6); 
+
+			int.TryParse(tables[36],out Skill7); 
+
+			int.TryParse(tables[37],out Skill8); 
+
+			int.TryParse(tables[38],out AtkType); 
+
+			int.TryParse(tables[39],out Sight); 
+
+			int.TryParse(tables[40],out MoveArea); 
+
+			int.TryParse(tables[41],out DHP); 
+
+			int.TryParse(tables[42],out MaxHPEx); 
+
+			int.TryParse(tables[43],out IsBoss); 
+
+			int.TryParse(tables[44],out SP); 
+
+			int.TryParse(tables[45],out AIType); 
+
+			int.TryParse(tables[46],out CanAttack); 
+
+			float.TryParse(tables[47],out weight); 
+
+			HeadPortrait = tables[48];
+
+			int.TryParse(tables[49],out Show); 
+
+			int.TryParse(tables[50],out AtkFeedback); 
+
+			int.TryParse(tables[51],out hurtFeedback); 
+
+			int.TryParse(tables[52],out AutomaticFace); 
+
+			int.TryParse(tables[53],out Dig); 
+
 			if (tables[54].Contains("["))
 			{
 				Sounds = JsonMapper.ToObject<int[]>(tables[54]);
@@ -203,19 +201,19 @@
 				{
 					 int.TryParse(SoundsStringArray[i],out Sounds[i]);
 				}
-			}
-
-			int.TryParse(tables[55],out LifeBarCount); 
-
-			int.TryParse(tables[56],out NPCEffect); 
-
-			int.TryParse(tables[57],out NPCSpeakID); 
-
-			Equips = tables[58];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[55],out LifeBarCount); 
+
+			int.TryParse(tables[56],out NPCEffect); 
+
+			int.TryParse(tables[57],out NPCSpeakID); 
+
+			Equips = tables[58];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/NPCExConfig.cs b/Main/Config/Configs/NPCExConfig.cs
index 3cd51a5..4c74a4c 100644
--- a/Main/Config/Configs/NPCExConfig.cs
+++ b/Main/Config/Configs/NPCExConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class NPCExConfig : ConfigBase<int, NPCExConfig>
-{
-
-    public int NPCID;
-	public long SuppressFightPower;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out NPCID); 
-
-			long.TryParse(tables[1],out SuppressFightPower); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class NPCExConfig : ConfigBase<int, NPCExConfig>
+{
+
+    public int NPCID;
+	public long SuppressFightPower;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out NPCID); 
+
+			long.TryParse(tables[1],out SuppressFightPower); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/NPCLineupConfig.cs b/Main/Config/Configs/NPCLineupConfig.cs
index 51241cd..51d0817 100644
--- a/Main/Config/Configs/NPCLineupConfig.cs
+++ b/Main/Config/Configs/NPCLineupConfig.cs
@@ -1,59 +1,57 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class NPCLineupConfig : ConfigBase<int, NPCLineupConfig>
-{
-
-    public int LineupID;
-	public int PosNPCID1;
-	public int PosNPCID2;
-	public int PosNPCID3;
-	public int PosNPCID4;
-	public int PosNPCID5;
-	public int PosNPCID6;
-	public int PosNPCID7;
-	public int BossID;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out LineupID); 
-
-			int.TryParse(tables[1],out PosNPCID1); 
-
-			int.TryParse(tables[2],out PosNPCID2); 
-
-			int.TryParse(tables[3],out PosNPCID3); 
-
-			int.TryParse(tables[4],out PosNPCID4); 
-
-			int.TryParse(tables[5],out PosNPCID5); 
-
-			int.TryParse(tables[6],out PosNPCID6); 
-
-			int.TryParse(tables[7],out PosNPCID7); 
-
-			int.TryParse(tables[8],out BossID); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class NPCLineupConfig : ConfigBase<int, NPCLineupConfig>
+{
+
+    public int LineupID;
+	public int PosNPCID1;
+	public int PosNPCID2;
+	public int PosNPCID3;
+	public int PosNPCID4;
+	public int PosNPCID5;
+	public int PosNPCID6;
+	public int PosNPCID7;
+	public int BossID;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out LineupID); 
+
+			int.TryParse(tables[1],out PosNPCID1); 
+
+			int.TryParse(tables[2],out PosNPCID2); 
+
+			int.TryParse(tables[3],out PosNPCID3); 
+
+			int.TryParse(tables[4],out PosNPCID4); 
+
+			int.TryParse(tables[5],out PosNPCID5); 
+
+			int.TryParse(tables[6],out PosNPCID6); 
+
+			int.TryParse(tables[7],out PosNPCID7); 
+
+			int.TryParse(tables[8],out BossID); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/OrderInfoConfig.cs b/Main/Config/Configs/OrderInfoConfig.cs
index 307a10f..fe5d7e7 100644
--- a/Main/Config/Configs/OrderInfoConfig.cs
+++ b/Main/Config/Configs/OrderInfoConfig.cs
@@ -1,62 +1,60 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class OrderInfoConfig : ConfigBase<int, OrderInfoConfig>
-{
-
-    public int id;
-	public string OrderInfo;
-	public string AppId;
-	public float PayRMBNum;
-	public int CTGID;
-	public float UsdMoney;
-	public string StoreOrderInfo;
-	public string StoreOrderInfo2;
-	public string Name;
-	public string StoreOrderInfo3;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			OrderInfo = tables[1];
-
-			AppId = tables[2];
-
-			float.TryParse(tables[3],out PayRMBNum); 
-
-			int.TryParse(tables[4],out CTGID); 
-
-			float.TryParse(tables[5],out UsdMoney); 
-
-			StoreOrderInfo = tables[6];
-
-			StoreOrderInfo2 = tables[7];
-
-			Name = tables[8];
-
-			StoreOrderInfo3 = tables[9];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class OrderInfoConfig : ConfigBase<int, OrderInfoConfig>
+{
+
+    public int id;
+	public string OrderInfo;
+	public string AppId;
+	public float PayRMBNum;
+	public int CTGID;
+	public float UsdMoney;
+	public string StoreOrderInfo;
+	public string StoreOrderInfo2;
+	public string Name;
+	public string StoreOrderInfo3;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			OrderInfo = tables[1];
+
+			AppId = tables[2];
+
+			float.TryParse(tables[3],out PayRMBNum); 
+
+			int.TryParse(tables[4],out CTGID); 
+
+			float.TryParse(tables[5],out UsdMoney); 
+
+			StoreOrderInfo = tables[6];
+
+			StoreOrderInfo2 = tables[7];
+
+			Name = tables[8];
+
+			StoreOrderInfo3 = tables[9];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFaceConfig.cs b/Main/Config/Configs/PlayerFaceConfig.cs
index 08995f7..86718be 100644
--- a/Main/Config/Configs/PlayerFaceConfig.cs
+++ b/Main/Config/Configs/PlayerFaceConfig.cs
@@ -1,47 +1,45 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class PlayerFaceConfig : ConfigBase<int, PlayerFaceConfig>
-{
-
-    public int FaceID;
-	public string Name;
-	public int[] JobShowList;
-	public int UnlockDefault;
-	public int ExpireMinutes;
-	public int CustomPlayerID;
-	public string Image;
-	public int BgColor;
-	public int EffectID;
-	public int[][] UnlockNeedItemList;
-	public int[] LightAttrType;
-	public int[] LightAttrValue;
-	public int LightFightPower;
-	public string Descriptive;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out FaceID); 
-
-			Name = tables[1];
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFaceConfig : ConfigBase<int, PlayerFaceConfig>
+{
+
+    public int FaceID;
+	public string Name;
+	public int[] JobShowList;
+	public int UnlockDefault;
+	public int ExpireMinutes;
+	public int CustomPlayerID;
+	public string Image;
+	public int BgColor;
+	public int EffectID;
+	public int[][] UnlockNeedItemList;
+	public int[] LightAttrType;
+	public int[] LightAttrValue;
+	public int LightFightPower;
+	public string Descriptive;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out FaceID); 
+
+			Name = tables[1];
+
 			if (tables[2].Contains("["))
 			{
 				JobShowList = JsonMapper.ToObject<int[]>(tables[2]);
@@ -54,22 +52,22 @@
 				{
 					 int.TryParse(JobShowListStringArray[i],out JobShowList[i]);
 				}
-			}
-
-			int.TryParse(tables[3],out UnlockDefault); 
-
-			int.TryParse(tables[4],out ExpireMinutes); 
-
-			int.TryParse(tables[5],out CustomPlayerID); 
-
-			Image = tables[6];
-
-			int.TryParse(tables[7],out BgColor); 
-
-			int.TryParse(tables[8],out EffectID); 
-
-			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[9].Replace("(", "[").Replace(")", "]")); 
-
+			}
+
+			int.TryParse(tables[3],out UnlockDefault); 
+
+			int.TryParse(tables[4],out ExpireMinutes); 
+
+			int.TryParse(tables[5],out CustomPlayerID); 
+
+			Image = tables[6];
+
+			int.TryParse(tables[7],out BgColor); 
+
+			int.TryParse(tables[8],out EffectID); 
+
+			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[9].Replace("(", "[").Replace(")", "]")); 
+
 			if (tables[10].Contains("["))
 			{
 				LightAttrType = JsonMapper.ToObject<int[]>(tables[10]);
@@ -82,8 +80,8 @@
 				{
 					 int.TryParse(LightAttrTypeStringArray[i],out LightAttrType[i]);
 				}
-			}
-
+			}
+
 			if (tables[11].Contains("["))
 			{
 				LightAttrValue = JsonMapper.ToObject<int[]>(tables[11]);
@@ -96,15 +94,15 @@
 				{
 					 int.TryParse(LightAttrValueStringArray[i],out LightAttrValue[i]);
 				}
-			}
-
-			int.TryParse(tables[12],out LightFightPower); 
-
-			Descriptive = tables[13];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[12],out LightFightPower); 
+
+			Descriptive = tables[13];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFacePicConfig.cs b/Main/Config/Configs/PlayerFacePicConfig.cs
index 404dbba..45f8251 100644
--- a/Main/Config/Configs/PlayerFacePicConfig.cs
+++ b/Main/Config/Configs/PlayerFacePicConfig.cs
@@ -1,57 +1,55 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class PlayerFacePicConfig : ConfigBase<int, PlayerFacePicConfig>
-{
-
-    public int FacePicID;
-	public string Name;
-	public string Image;
-	public int SortNum;
-	public int EffectID;
-	public int UnlockDefault;
-	public int ExpireMinutes;
-	public int[][] UnlockNeedItemList;
-	public int[] LightAttrType;
-	public int[] LightAttrValue;
-	public int LightFightPower;
-	public string Descriptive;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out FacePicID); 
-
-			Name = tables[1];
-
-			Image = tables[2];
-
-			int.TryParse(tables[3],out SortNum); 
-
-			int.TryParse(tables[4],out EffectID); 
-
-			int.TryParse(tables[5],out UnlockDefault); 
-
-			int.TryParse(tables[6],out ExpireMinutes); 
-
-			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[7].Replace("(", "[").Replace(")", "]")); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFacePicConfig : ConfigBase<int, PlayerFacePicConfig>
+{
+
+    public int FacePicID;
+	public string Name;
+	public string Image;
+	public int SortNum;
+	public int EffectID;
+	public int UnlockDefault;
+	public int ExpireMinutes;
+	public int[][] UnlockNeedItemList;
+	public int[] LightAttrType;
+	public int[] LightAttrValue;
+	public int LightFightPower;
+	public string Descriptive;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out FacePicID); 
+
+			Name = tables[1];
+
+			Image = tables[2];
+
+			int.TryParse(tables[3],out SortNum); 
+
+			int.TryParse(tables[4],out EffectID); 
+
+			int.TryParse(tables[5],out UnlockDefault); 
+
+			int.TryParse(tables[6],out ExpireMinutes); 
+
+			UnlockNeedItemList = JsonMapper.ToObject<int[][]>(tables[7].Replace("(", "[").Replace(")", "]")); 
+
 			if (tables[8].Contains("["))
 			{
 				LightAttrType = JsonMapper.ToObject<int[]>(tables[8]);
@@ -64,8 +62,8 @@
 				{
 					 int.TryParse(LightAttrTypeStringArray[i],out LightAttrType[i]);
 				}
-			}
-
+			}
+
 			if (tables[9].Contains("["))
 			{
 				LightAttrValue = JsonMapper.ToObject<int[]>(tables[9]);
@@ -78,15 +76,15 @@
 				{
 					 int.TryParse(LightAttrValueStringArray[i],out LightAttrValue[i]);
 				}
-			}
-
-			int.TryParse(tables[10],out LightFightPower); 
-
-			Descriptive = tables[11];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[10],out LightFightPower); 
+
+			Descriptive = tables[11];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFacePicStarConfig.cs b/Main/Config/Configs/PlayerFacePicStarConfig.cs
index 681de9a..7525723 100644
--- a/Main/Config/Configs/PlayerFacePicStarConfig.cs
+++ b/Main/Config/Configs/PlayerFacePicStarConfig.cs
@@ -1,43 +1,41 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class PlayerFacePicStarConfig : ConfigBase<int, PlayerFacePicStarConfig>
-{
-
-    public int index;
-	public int FacePicID;
-	public int FacePicStar;
-	public int[][] StarUpNeedItemList;
-	public int[] StarAttrType;
-	public int[] StarAttrValue;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out index); 
-
-			int.TryParse(tables[1],out FacePicID); 
-
-			int.TryParse(tables[2],out FacePicStar); 
-
-			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFacePicStarConfig : ConfigBase<int, PlayerFacePicStarConfig>
+{
+
+    public int index;
+	public int FacePicID;
+	public int FacePicStar;
+	public int[][] StarUpNeedItemList;
+	public int[] StarAttrType;
+	public int[] StarAttrValue;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out index); 
+
+			int.TryParse(tables[1],out FacePicID); 
+
+			int.TryParse(tables[2],out FacePicStar); 
+
+			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+
 			if (tables[4].Contains("["))
 			{
 				StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
@@ -50,8 +48,8 @@
 				{
 					 int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
 				}
-			}
-
+			}
+
 			if (tables[5].Contains("["))
 			{
 				StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
@@ -64,11 +62,11 @@
 				{
 					 int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFaceStarConfig.cs b/Main/Config/Configs/PlayerFaceStarConfig.cs
index 7690c58..d9f355e 100644
--- a/Main/Config/Configs/PlayerFaceStarConfig.cs
+++ b/Main/Config/Configs/PlayerFaceStarConfig.cs
@@ -1,43 +1,41 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class PlayerFaceStarConfig : ConfigBase<int, PlayerFaceStarConfig>
-{
-
-    public int index;
-	public int FaceID;
-	public int FaceStar;
-	public int[][] StarUpNeedItemList;
-	public int[] StarAttrType;
-	public int[] StarAttrValue;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out index); 
-
-			int.TryParse(tables[1],out FaceID); 
-
-			int.TryParse(tables[2],out FaceStar); 
-
-			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFaceStarConfig : ConfigBase<int, PlayerFaceStarConfig>
+{
+
+    public int index;
+	public int FaceID;
+	public int FaceStar;
+	public int[][] StarUpNeedItemList;
+	public int[] StarAttrType;
+	public int[] StarAttrValue;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out index); 
+
+			int.TryParse(tables[1],out FaceID); 
+
+			int.TryParse(tables[2],out FaceStar); 
+
+			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+
 			if (tables[4].Contains("["))
 			{
 				StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
@@ -50,8 +48,8 @@
 				{
 					 int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
 				}
-			}
-
+			}
+
 			if (tables[5].Contains("["))
 			{
 				StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
@@ -64,11 +62,11 @@
 				{
 					 int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerLVConfig.cs b/Main/Config/Configs/PlayerLVConfig.cs
index 788d647..49fbee2 100644
--- a/Main/Config/Configs/PlayerLVConfig.cs
+++ b/Main/Config/Configs/PlayerLVConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/PlayerPropertyConfig.cs b/Main/Config/Configs/PlayerPropertyConfig.cs
index 4aae232..1d7b221 100644
--- a/Main/Config/Configs/PlayerPropertyConfig.cs
+++ b/Main/Config/Configs/PlayerPropertyConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/PriorLanguageConfig.cs b/Main/Config/Configs/PriorLanguageConfig.cs
index ca18099..fd7edf5 100644
--- a/Main/Config/Configs/PriorLanguageConfig.cs
+++ b/Main/Config/Configs/PriorLanguageConfig.cs
@@ -1,38 +1,36 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class PriorLanguageConfig : ConfigBase<int, PriorLanguageConfig>
-{
-
-    public int Key;
-	public string Content;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out Key); 
-
-			Content = tables[1];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PriorLanguageConfig : ConfigBase<int, PriorLanguageConfig>
+{
+
+    public int Key;
+	public string Content;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out Key); 
+
+			Content = tables[1];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/RealmConfig.cs b/Main/Config/Configs/RealmConfig.cs
index 03e53c1..a243ba4 100644
--- a/Main/Config/Configs/RealmConfig.cs
+++ b/Main/Config/Configs/RealmConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/RealmLVUPTaskConfig.cs b/Main/Config/Configs/RealmLVUPTaskConfig.cs
index f259861..8714416 100644
--- a/Main/Config/Configs/RealmLVUPTaskConfig.cs
+++ b/Main/Config/Configs/RealmLVUPTaskConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/RichTextMsgReplaceConfig.cs b/Main/Config/Configs/RichTextMsgReplaceConfig.cs
index 07e786f..b91c60d 100644
--- a/Main/Config/Configs/RichTextMsgReplaceConfig.cs
+++ b/Main/Config/Configs/RichTextMsgReplaceConfig.cs
@@ -1,44 +1,42 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class RichTextMsgReplaceConfig : ConfigBase<int, RichTextMsgReplaceConfig>
-{
-
-    public int id;
-	public string Identification;
-	public int Number;
-	public string Content;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			Identification = tables[1];
-
-			int.TryParse(tables[2],out Number); 
-
-			Content = tables[3];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class RichTextMsgReplaceConfig : ConfigBase<int, RichTextMsgReplaceConfig>
+{
+
+    public int id;
+	public string Identification;
+	public int Number;
+	public string Content;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			Identification = tables[1];
+
+			int.TryParse(tables[2],out Number); 
+
+			Content = tables[3];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/RuleConfig.cs b/Main/Config/Configs/RuleConfig.cs
index eedd912..510c7e2 100644
--- a/Main/Config/Configs/RuleConfig.cs
+++ b/Main/Config/Configs/RuleConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class RuleConfig : ConfigBase<int, RuleConfig>
-{
-
-    public int ID;
-	public string Title;
-	public string Description;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			Title = tables[1];
-
-			Description = tables[2];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class RuleConfig : ConfigBase<int, RuleConfig>
+{
+
+    public int ID;
+	public string Title;
+	public string Description;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			Title = tables[1];
+
+			Description = tables[2];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/SkillConfig.cs b/Main/Config/Configs/SkillConfig.cs
index 55ed3e4..16bee66 100644
--- a/Main/Config/Configs/SkillConfig.cs
+++ b/Main/Config/Configs/SkillConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�28鏃�
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
@@ -15,42 +13,85 @@
 
     public int SkillID;
 	public string SkillName;
-	public string Description;
-	public string IconName;
+	public int SkillTypeID;
+	public int SkillLV;
+	public int SkillMaxLV;
+	public int UseType;
 	public int FuncType;
+	public int CastTime;
 	public int SkillType;
 	public int HurtType;
+	public int ContinueUse;
 	public int AtkType;
-	public int TagAim;
-	public int LastTime;
+	public int AtkRadius;
+	public int Tag;
+	public int AtkDist;
+	public int StiffTime;
 	public int CoolDownTime;
-	public int EffectID1;
-	public int[] EffectValues1;
-	public int EffectID2;
-	public int[] EffectValues2;
-	public int EffectID3;
-	public int[] EffectValues3;
-	public int ConnSkill;
-	public int[] EnhanceSkillList;
+	public int MP;
+	public int HP;
+	public int XP;
+	public int UseItemID;
+	public int UseItemCount;
+	public int Effect1;
+	public int EffectValue11;
+	public int EffectValue12;
+	public int EffectValue13;
+	public int Effect2;
+	public int EffectValue21;
+	public int EffectValue22;
+	public int EffectValue23;
+	public int Effect3;
+	public int EffectValue31;
+	public int EffectValue32;
+	public int EffectValue33;
+	public int Effect4;
+	public int EffectValue41;
+	public int EffectValue42;
+	public int EffectValue43;
+	public int Effect5;
+	public int EffectValue51;
+	public int EffectValue52;
+	public int EffectValue53;
+	public int Effect6;
+	public int EffectValue61;
+	public int EffectValue62;
+	public int EffectValue63;
+	public int HappenRate6;
+	public int LastTime6;
+	public int SkillEnhance1;
+	public int SkillEnhance2;
+	public int StateSkillLV;
+	public int LearnSkillReq;
+	public int LearnSkillLV;
+	public int LearnLVReq;
+	public int LearnSkillPointReq;
 	public int FightPower;
-	public int StartupFrames;
-	public int ActiveFrames;
-	public int RecoveryFrames;
-	public int LoopCount;
+	public int LVUpCostMoneyType;
+	public int LVUpCostMoney;
+	public int LVUpCostExp;
+	public int ClientActionLimit;
+	public int ClientSkillSeriesLimit;
+	public int SkillOfSeries;
+	public int ExpendMPRate;
+	public int ExAttr1;
+	public int ExAttr3;
+	public int ExAttr4;
+	public int ExAttr5;
+	public int BuffEffectID;
+	public int EffectName;
+	public string IconName;
+	public string Description;
+	public string BuffDescription;
+	public int BuffDisplay;
 	public int CastPosition;
-	public int CastIndexNum;
-	public float CastDistance;
+	public int CastDistance;
+	public int[] TriggerFrames;
 	public int[][] DamageDivide;
-	public int BulletEffectId;
-	public int BulletPos;
-	public int BulletPath;
-	public int BulletFlyTime;
-	public int ExplosionEffectId;
-	public int ExplosionPos;
 	public string SkillMotionName;
 	public int EffectId;
-	public int EffectPos;
-	public int EffectType;
+	public int ExplotionEffectId;
+	public float FlyTime;
 
     public override int LoadKey(string _key)
     {
@@ -66,125 +107,175 @@
 
 			SkillName = tables[1];
 
-			Description = tables[2];
+			int.TryParse(tables[2],out SkillTypeID); 
 
-			IconName = tables[3];
+			int.TryParse(tables[3],out SkillLV); 
 
-			int.TryParse(tables[4],out FuncType); 
+			int.TryParse(tables[4],out SkillMaxLV); 
 
-			int.TryParse(tables[5],out SkillType); 
+			int.TryParse(tables[5],out UseType); 
 
-			int.TryParse(tables[6],out HurtType); 
+			int.TryParse(tables[6],out FuncType); 
 
-			int.TryParse(tables[7],out AtkType); 
+			int.TryParse(tables[7],out CastTime); 
 
-			int.TryParse(tables[8],out TagAim); 
+			int.TryParse(tables[8],out SkillType); 
 
-			int.TryParse(tables[9],out LastTime); 
+			int.TryParse(tables[9],out HurtType); 
 
-			int.TryParse(tables[10],out CoolDownTime); 
+			int.TryParse(tables[10],out ContinueUse); 
 
-			int.TryParse(tables[11],out EffectID1); 
+			int.TryParse(tables[11],out AtkType); 
 
-			if (tables[12].Contains("["))
+			int.TryParse(tables[12],out AtkRadius); 
+
+			int.TryParse(tables[13],out Tag); 
+
+			int.TryParse(tables[14],out AtkDist); 
+
+			int.TryParse(tables[15],out StiffTime); 
+
+			int.TryParse(tables[16],out CoolDownTime); 
+
+			int.TryParse(tables[17],out MP); 
+
+			int.TryParse(tables[18],out HP); 
+
+			int.TryParse(tables[19],out XP); 
+
+			int.TryParse(tables[20],out UseItemID); 
+
+			int.TryParse(tables[21],out UseItemCount); 
+
+			int.TryParse(tables[22],out Effect1); 
+
+			int.TryParse(tables[23],out EffectValue11); 
+
+			int.TryParse(tables[24],out EffectValue12); 
+
+			int.TryParse(tables[25],out EffectValue13); 
+
+			int.TryParse(tables[26],out Effect2); 
+
+			int.TryParse(tables[27],out EffectValue21); 
+
+			int.TryParse(tables[28],out EffectValue22); 
+
+			int.TryParse(tables[29],out EffectValue23); 
+
+			int.TryParse(tables[30],out Effect3); 
+
+			int.TryParse(tables[31],out EffectValue31); 
+
+			int.TryParse(tables[32],out EffectValue32); 
+
+			int.TryParse(tables[33],out EffectValue33); 
+
+			int.TryParse(tables[34],out Effect4); 
+
+			int.TryParse(tables[35],out EffectValue41); 
+
+			int.TryParse(tables[36],out EffectValue42); 
+
+			int.TryParse(tables[37],out EffectValue43); 
+
+			int.TryParse(tables[38],out Effect5); 
+
+			int.TryParse(tables[39],out EffectValue51); 
+
+			int.TryParse(tables[40],out EffectValue52); 
+
+			int.TryParse(tables[41],out EffectValue53); 
+
+			int.TryParse(tables[42],out Effect6); 
+
+			int.TryParse(tables[43],out EffectValue61); 
+
+			int.TryParse(tables[44],out EffectValue62); 
+
+			int.TryParse(tables[45],out EffectValue63); 
+
+			int.TryParse(tables[46],out HappenRate6); 
+
+			int.TryParse(tables[47],out LastTime6); 
+
+			int.TryParse(tables[48],out SkillEnhance1); 
+
+			int.TryParse(tables[49],out SkillEnhance2); 
+
+			int.TryParse(tables[50],out StateSkillLV); 
+
+			int.TryParse(tables[51],out LearnSkillReq); 
+
+			int.TryParse(tables[52],out LearnSkillLV); 
+
+			int.TryParse(tables[53],out LearnLVReq); 
+
+			int.TryParse(tables[54],out LearnSkillPointReq); 
+
+			int.TryParse(tables[55],out FightPower); 
+
+			int.TryParse(tables[56],out LVUpCostMoneyType); 
+
+			int.TryParse(tables[57],out LVUpCostMoney); 
+
+			int.TryParse(tables[58],out LVUpCostExp); 
+
+			int.TryParse(tables[59],out ClientActionLimit); 
+
+			int.TryParse(tables[60],out ClientSkillSeriesLimit); 
+
+			int.TryParse(tables[61],out SkillOfSeries); 
+
+			int.TryParse(tables[62],out ExpendMPRate); 
+
+			int.TryParse(tables[63],out ExAttr1); 
+
+			int.TryParse(tables[64],out ExAttr3); 
+
+			int.TryParse(tables[65],out ExAttr4); 
+
+			int.TryParse(tables[66],out ExAttr5); 
+
+			int.TryParse(tables[67],out BuffEffectID); 
+
+			int.TryParse(tables[68],out EffectName); 
+
+			IconName = tables[69];
+
+			Description = tables[70];
+
+			BuffDescription = tables[71];
+
+			int.TryParse(tables[72],out BuffDisplay); 
+
+			int.TryParse(tables[73],out CastPosition); 
+
+			int.TryParse(tables[74],out CastDistance); 
+
+			if (tables[75].Contains("["))
 			{
-				EffectValues1 = JsonMapper.ToObject<int[]>(tables[12]);
+				TriggerFrames = JsonMapper.ToObject<int[]>(tables[75]);
 			}
 			else
 			{
-				string[] EffectValues1StringArray = tables[12].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
-				EffectValues1 = new int[EffectValues1StringArray.Length];
-				for (int i=0;i<EffectValues1StringArray.Length;i++)
+				string[] TriggerFramesStringArray = tables[75].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				TriggerFrames = new int[TriggerFramesStringArray.Length];
+				for (int i=0;i<TriggerFramesStringArray.Length;i++)
 				{
-					 int.TryParse(EffectValues1StringArray[i],out EffectValues1[i]);
+					 int.TryParse(TriggerFramesStringArray[i],out TriggerFrames[i]);
 				}
 			}
 
-			int.TryParse(tables[13],out EffectID2); 
+			DamageDivide = JsonMapper.ToObject<int[][]>(tables[76].Replace("(", "[").Replace(")", "]")); 
 
-			if (tables[14].Contains("["))
-			{
-				EffectValues2 = JsonMapper.ToObject<int[]>(tables[14]);
-			}
-			else
-			{
-				string[] EffectValues2StringArray = tables[14].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
-				EffectValues2 = new int[EffectValues2StringArray.Length];
-				for (int i=0;i<EffectValues2StringArray.Length;i++)
-				{
-					 int.TryParse(EffectValues2StringArray[i],out EffectValues2[i]);
-				}
-			}
+			SkillMotionName = tables[77];
 
-			int.TryParse(tables[15],out EffectID3); 
+			int.TryParse(tables[78],out EffectId); 
 
-			if (tables[16].Contains("["))
-			{
-				EffectValues3 = JsonMapper.ToObject<int[]>(tables[16]);
-			}
-			else
-			{
-				string[] EffectValues3StringArray = tables[16].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
-				EffectValues3 = new int[EffectValues3StringArray.Length];
-				for (int i=0;i<EffectValues3StringArray.Length;i++)
-				{
-					 int.TryParse(EffectValues3StringArray[i],out EffectValues3[i]);
-				}
-			}
+			int.TryParse(tables[79],out ExplotionEffectId); 
 
-			int.TryParse(tables[17],out ConnSkill); 
-
-			if (tables[18].Contains("["))
-			{
-				EnhanceSkillList = JsonMapper.ToObject<int[]>(tables[18]);
-			}
-			else
-			{
-				string[] EnhanceSkillListStringArray = tables[18].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
-				EnhanceSkillList = new int[EnhanceSkillListStringArray.Length];
-				for (int i=0;i<EnhanceSkillListStringArray.Length;i++)
-				{
-					 int.TryParse(EnhanceSkillListStringArray[i],out EnhanceSkillList[i]);
-				}
-			}
-
-			int.TryParse(tables[19],out FightPower); 
-
-			int.TryParse(tables[20],out StartupFrames); 
-
-			int.TryParse(tables[21],out ActiveFrames); 
-
-			int.TryParse(tables[22],out RecoveryFrames); 
-
-			int.TryParse(tables[23],out LoopCount); 
-
-			int.TryParse(tables[24],out CastPosition); 
-
-			int.TryParse(tables[25],out CastIndexNum); 
-
-			float.TryParse(tables[26],out CastDistance); 
-
-			DamageDivide = JsonMapper.ToObject<int[][]>(tables[27].Replace("(", "[").Replace(")", "]")); 
-
-			int.TryParse(tables[28],out BulletEffectId); 
-
-			int.TryParse(tables[29],out BulletPos); 
-
-			int.TryParse(tables[30],out BulletPath); 
-
-			int.TryParse(tables[31],out BulletFlyTime); 
-
-			int.TryParse(tables[32],out ExplosionEffectId); 
-
-			int.TryParse(tables[33],out ExplosionPos); 
-
-			SkillMotionName = tables[34];
-
-			int.TryParse(tables[35],out EffectId); 
-
-			int.TryParse(tables[36],out EffectPos); 
-
-			int.TryParse(tables[37],out EffectType); 
+			float.TryParse(tables[80],out FlyTime); 
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/Configs/StoreConfig.cs b/Main/Config/Configs/StoreConfig.cs
index a56dd90..492a15d 100644
--- a/Main/Config/Configs/StoreConfig.cs
+++ b/Main/Config/Configs/StoreConfig.cs
@@ -1,56 +1,54 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class StoreConfig : ConfigBase<int, StoreConfig>
-{
-
-    public int ID;
-	public int ShopType;
-	public int[] SecondType;
-	public int ShopSort;
-	public int ItemID;
-	public int ItemCnt;
-	public int IsBind;
-	public string ItemListEx;
-	public int MainItemID;
-	public string JobItem;
-	public int RefreshType;
-	public int[] VIPLV;
-	public int LV;
-	public int LVSee;
-	public int[] GoumaiNumber;
-	public int MoneyType;
-	public int MoneyNumber;
-	public int MoneyOriginal;
-	public int LimitValue;
-	public string SalesStatus;
-	public int TheOnlyShop;
-	public int RemindSuccess;
-	public int IsHideSellOut;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			int.TryParse(tables[1],out ShopType); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class StoreConfig : ConfigBase<int, StoreConfig>
+{
+
+    public int ID;
+	public int ShopType;
+	public int[] SecondType;
+	public int ShopSort;
+	public int ItemID;
+	public int ItemCnt;
+	public int IsBind;
+	public string ItemListEx;
+	public int MainItemID;
+	public string JobItem;
+	public int RefreshType;
+	public int[] VIPLV;
+	public int LV;
+	public int LVSee;
+	public int[] GoumaiNumber;
+	public int MoneyType;
+	public int MoneyNumber;
+	public int MoneyOriginal;
+	public int LimitValue;
+	public string SalesStatus;
+	public int TheOnlyShop;
+	public int RemindSuccess;
+	public int IsHideSellOut;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			int.TryParse(tables[1],out ShopType); 
+
 			if (tables[2].Contains("["))
 			{
 				SecondType = JsonMapper.ToObject<int[]>(tables[2]);
@@ -63,24 +61,24 @@
 				{
 					 int.TryParse(SecondTypeStringArray[i],out SecondType[i]);
 				}
-			}
-
-			int.TryParse(tables[3],out ShopSort); 
-
-			int.TryParse(tables[4],out ItemID); 
-
-			int.TryParse(tables[5],out ItemCnt); 
-
-			int.TryParse(tables[6],out IsBind); 
-
-			ItemListEx = tables[7];
-
-			int.TryParse(tables[8],out MainItemID); 
-
-			JobItem = tables[9];
-
-			int.TryParse(tables[10],out RefreshType); 
-
+			}
+
+			int.TryParse(tables[3],out ShopSort); 
+
+			int.TryParse(tables[4],out ItemID); 
+
+			int.TryParse(tables[5],out ItemCnt); 
+
+			int.TryParse(tables[6],out IsBind); 
+
+			ItemListEx = tables[7];
+
+			int.TryParse(tables[8],out MainItemID); 
+
+			JobItem = tables[9];
+
+			int.TryParse(tables[10],out RefreshType); 
+
 			if (tables[11].Contains("["))
 			{
 				VIPLV = JsonMapper.ToObject<int[]>(tables[11]);
@@ -93,12 +91,12 @@
 				{
 					 int.TryParse(VIPLVStringArray[i],out VIPLV[i]);
 				}
-			}
-
-			int.TryParse(tables[12],out LV); 
-
-			int.TryParse(tables[13],out LVSee); 
-
+			}
+
+			int.TryParse(tables[12],out LV); 
+
+			int.TryParse(tables[13],out LVSee); 
+
 			if (tables[14].Contains("["))
 			{
 				GoumaiNumber = JsonMapper.ToObject<int[]>(tables[14]);
@@ -111,27 +109,27 @@
 				{
 					 int.TryParse(GoumaiNumberStringArray[i],out GoumaiNumber[i]);
 				}
-			}
-
-			int.TryParse(tables[15],out MoneyType); 
-
-			int.TryParse(tables[16],out MoneyNumber); 
-
-			int.TryParse(tables[17],out MoneyOriginal); 
-
-			int.TryParse(tables[18],out LimitValue); 
-
-			SalesStatus = tables[19];
-
-			int.TryParse(tables[20],out TheOnlyShop); 
-
-			int.TryParse(tables[21],out RemindSuccess); 
-
-			int.TryParse(tables[22],out IsHideSellOut); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[15],out MoneyType); 
+
+			int.TryParse(tables[16],out MoneyNumber); 
+
+			int.TryParse(tables[17],out MoneyOriginal); 
+
+			int.TryParse(tables[18],out LimitValue); 
+
+			SalesStatus = tables[19];
+
+			int.TryParse(tables[20],out TheOnlyShop); 
+
+			int.TryParse(tables[21],out RemindSuccess); 
+
+			int.TryParse(tables[22],out IsHideSellOut); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/SuccessConfig.cs b/Main/Config/Configs/SuccessConfig.cs
index 1c10cd5..c451533 100644
--- a/Main/Config/Configs/SuccessConfig.cs
+++ b/Main/Config/Configs/SuccessConfig.cs
@@ -1,57 +1,55 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class SuccessConfig : ConfigBase<int, SuccessConfig>
-{
-
-    public int ID;
-	public int Type;
-	public int Group;
-	public int NeedCnt;
-	public int[] Condition;
-	public string Condition2;
-	public int Condition3;
-	public string AwardItemList;
-	public string AwardItemList2;
-	public string Money;
-	public int Exp;
-	public int[] AwardAttribute;
-	public int RedPacketID;
-	public int MagicWeaponID;
-	public string MagicWeaponExp;
-	public string Describe;
-	public int NeedGoto;
-	public int Jump;
-	public int ReOrder;
-	public int RealmPracticeID;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out ID); 
-
-			int.TryParse(tables[1],out Type); 
-
-			int.TryParse(tables[2],out Group); 
-
-			int.TryParse(tables[3],out NeedCnt); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class SuccessConfig : ConfigBase<int, SuccessConfig>
+{
+
+    public int ID;
+	public int Type;
+	public int Group;
+	public int NeedCnt;
+	public int[] Condition;
+	public string Condition2;
+	public int Condition3;
+	public string AwardItemList;
+	public string AwardItemList2;
+	public string Money;
+	public int Exp;
+	public int[] AwardAttribute;
+	public int RedPacketID;
+	public int MagicWeaponID;
+	public string MagicWeaponExp;
+	public string Describe;
+	public int NeedGoto;
+	public int Jump;
+	public int ReOrder;
+	public int RealmPracticeID;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out ID); 
+
+			int.TryParse(tables[1],out Type); 
+
+			int.TryParse(tables[2],out Group); 
+
+			int.TryParse(tables[3],out NeedCnt); 
+
 			if (tables[4].Contains("["))
 			{
 				Condition = JsonMapper.ToObject<int[]>(tables[4]);
@@ -64,20 +62,20 @@
 				{
 					 int.TryParse(ConditionStringArray[i],out Condition[i]);
 				}
-			}
-
-			Condition2 = tables[5];
-
-			int.TryParse(tables[6],out Condition3); 
-
-			AwardItemList = tables[7];
-
-			AwardItemList2 = tables[8];
-
-			Money = tables[9];
-
-			int.TryParse(tables[10],out Exp); 
-
+			}
+
+			Condition2 = tables[5];
+
+			int.TryParse(tables[6],out Condition3); 
+
+			AwardItemList = tables[7];
+
+			AwardItemList2 = tables[8];
+
+			Money = tables[9];
+
+			int.TryParse(tables[10],out Exp); 
+
 			if (tables[11].Contains("["))
 			{
 				AwardAttribute = JsonMapper.ToObject<int[]>(tables[11]);
@@ -90,27 +88,27 @@
 				{
 					 int.TryParse(AwardAttributeStringArray[i],out AwardAttribute[i]);
 				}
-			}
-
-			int.TryParse(tables[12],out RedPacketID); 
-
-			int.TryParse(tables[13],out MagicWeaponID); 
-
-			MagicWeaponExp = tables[14];
-
-			Describe = tables[15];
-
-			int.TryParse(tables[16],out NeedGoto); 
-
-			int.TryParse(tables[17],out Jump); 
-
-			int.TryParse(tables[18],out ReOrder); 
-
-			int.TryParse(tables[19],out RealmPracticeID); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			int.TryParse(tables[12],out RedPacketID); 
+
+			int.TryParse(tables[13],out MagicWeaponID); 
+
+			MagicWeaponExp = tables[14];
+
+			Describe = tables[15];
+
+			int.TryParse(tables[16],out NeedGoto); 
+
+			int.TryParse(tables[17],out Jump); 
+
+			int.TryParse(tables[18],out ReOrder); 
+
+			int.TryParse(tables[19],out RealmPracticeID); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/SysInfoConfig.cs b/Main/Config/Configs/SysInfoConfig.cs
index db52954..284a123 100644
--- a/Main/Config/Configs/SysInfoConfig.cs
+++ b/Main/Config/Configs/SysInfoConfig.cs
@@ -1,41 +1,39 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class SysInfoConfig : ConfigBase<string, SysInfoConfig>
-{
-
-    public string key;
-	public string sound;
-	public string effect;
-	public int[] type;
-	public string richText;
-	public int order;
-
-    public override string LoadKey(string _key)
-    {
-        string key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        key = tables[0];
-
-			sound = tables[1];
-
-			effect = tables[2];
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class SysInfoConfig : ConfigBase<string, SysInfoConfig>
+{
+
+    public string key;
+	public string sound;
+	public string effect;
+	public int[] type;
+	public string richText;
+	public int order;
+
+    public override string LoadKey(string _key)
+    {
+        string key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        key = tables[0];
+
+			sound = tables[1];
+
+			effect = tables[2];
+
 			if (tables[3].Contains("["))
 			{
 				type = JsonMapper.ToObject<int[]>(tables[3]);
@@ -48,15 +46,15 @@
 				{
 					 int.TryParse(typeStringArray[i],out type[i]);
 				}
-			}
-
-			richText = tables[4];
-
-			int.TryParse(tables[5],out order); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			richText = tables[4];
+
+			int.TryParse(tables[5],out order); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/TaskConfig.cs b/Main/Config/Configs/TaskConfig.cs
index e2d2fea..be979cd 100644
--- a/Main/Config/Configs/TaskConfig.cs
+++ b/Main/Config/Configs/TaskConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/TitleStarUpConfig.cs b/Main/Config/Configs/TitleStarUpConfig.cs
index 4e345d9..2189cf3 100644
--- a/Main/Config/Configs/TitleStarUpConfig.cs
+++ b/Main/Config/Configs/TitleStarUpConfig.cs
@@ -1,43 +1,41 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class TitleStarUpConfig : ConfigBase<int, TitleStarUpConfig>
-{
-
-    public int id;
-	public int TitleID;
-	public int TitleStar;
-	public int[][] StarUpNeedItemList;
-	public int[] StarAttrType;
-	public int[] StarAttrValue;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			int.TryParse(tables[1],out TitleID); 
-
-			int.TryParse(tables[2],out TitleStar); 
-
-			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class TitleStarUpConfig : ConfigBase<int, TitleStarUpConfig>
+{
+
+    public int id;
+	public int TitleID;
+	public int TitleStar;
+	public int[][] StarUpNeedItemList;
+	public int[] StarAttrType;
+	public int[] StarAttrValue;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			int.TryParse(tables[1],out TitleID); 
+
+			int.TryParse(tables[2],out TitleStar); 
+
+			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+
 			if (tables[4].Contains("["))
 			{
 				StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
@@ -50,8 +48,8 @@
 				{
 					 int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
 				}
-			}
-
+			}
+
 			if (tables[5].Contains("["))
 			{
 				StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
@@ -64,11 +62,11 @@
 				{
 					 int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
 				}
-			}
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/TreasureCntAwardConfig.cs b/Main/Config/Configs/TreasureCntAwardConfig.cs
index 0bb6253..e277cfc 100644
--- a/Main/Config/Configs/TreasureCntAwardConfig.cs
+++ b/Main/Config/Configs/TreasureCntAwardConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/TreasureItemLibConfig.cs b/Main/Config/Configs/TreasureItemLibConfig.cs
index 1a7d4f8..4f593bf 100644
--- a/Main/Config/Configs/TreasureItemLibConfig.cs
+++ b/Main/Config/Configs/TreasureItemLibConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/TreasureSetConfig.cs b/Main/Config/Configs/TreasureSetConfig.cs
index f3b4f19..44cc274 100644
--- a/Main/Config/Configs/TreasureSetConfig.cs
+++ b/Main/Config/Configs/TreasureSetConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/TreeLVConfig.cs b/Main/Config/Configs/TreeLVConfig.cs
index 052e8d4..b0b246c 100644
--- a/Main/Config/Configs/TreeLVConfig.cs
+++ b/Main/Config/Configs/TreeLVConfig.cs
@@ -1,40 +1,38 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class TreeLVConfig : ConfigBase<int, TreeLVConfig>
-{
-
-    public int TreeLV;
-	public int LVUPNeedMoney;
-	public int LVUPNeedTime;
-	public int[] EquipColorRateList;
-	public string ExAwardItemRateList;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out TreeLV); 
-
-			int.TryParse(tables[1],out LVUPNeedMoney); 
-
-			int.TryParse(tables[2],out LVUPNeedTime); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class TreeLVConfig : ConfigBase<int, TreeLVConfig>
+{
+
+    public int TreeLV;
+	public int LVUPNeedMoney;
+	public int LVUPNeedTime;
+	public int[] EquipColorRateList;
+	public string ExAwardItemRateList;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out TreeLV); 
+
+			int.TryParse(tables[1],out LVUPNeedMoney); 
+
+			int.TryParse(tables[2],out LVUPNeedTime); 
+
 			if (tables[3].Contains("["))
 			{
 				EquipColorRateList = JsonMapper.ToObject<int[]>(tables[3]);
@@ -47,13 +45,13 @@
 				{
 					 int.TryParse(EquipColorRateListStringArray[i],out EquipColorRateList[i]);
 				}
-			}
-
-			ExAwardItemRateList = tables[4];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			ExAwardItemRateList = tables[4];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/XBGetItemConfig.cs b/Main/Config/Configs/XBGetItemConfig.cs
index db4d028..f84c221 100644
--- a/Main/Config/Configs/XBGetItemConfig.cs
+++ b/Main/Config/Configs/XBGetItemConfig.cs
@@ -1,11 +1,9 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
+//    [  Date ]:           2025骞�7鏈�26鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
-using System.IO;
-using System.Threading;
 using System;
 using UnityEngine;
 using LitJson;
diff --git a/Main/Config/Configs/priorbundleConfig.cs b/Main/Config/Configs/priorbundleConfig.cs
index 326426a..98b8540 100644
--- a/Main/Config/Configs/priorbundleConfig.cs
+++ b/Main/Config/Configs/priorbundleConfig.cs
@@ -1,47 +1,45 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class priorbundleConfig : ConfigBase<int, priorbundleConfig>
-{
-
-    public int id;
-	public string AssetABName;
-	public int AssetType;
-	public int Prior;
-	public int mapId;
-
-    public override int LoadKey(string _key)
-    {
-        int key = GetKey(_key);
-        return key;
-    }
-
-    public override void LoadConfig(string input)
-    {
-        try {
-        string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out id); 
-
-			AssetABName = tables[1];
-
-			int.TryParse(tables[2],out AssetType); 
-
-			int.TryParse(tables[3],out Prior); 
-
-			int.TryParse(tables[4],out mapId); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�26鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class priorbundleConfig : ConfigBase<int, priorbundleConfig>
+{
+
+    public int id;
+	public string AssetABName;
+	public int AssetType;
+	public int Prior;
+	public int mapId;
+
+    public override int LoadKey(string _key)
+    {
+        int key = GetKey(_key);
+        return key;
+    }
+
+    public override void LoadConfig(string input)
+    {
+        try {
+        string[] tables = input.Split('\t');
+        int.TryParse(tables[0],out id); 
+
+			AssetABName = tables[1];
+
+			int.TryParse(tables[2],out AssetType); 
+
+			int.TryParse(tables[3],out Prior); 
+
+			int.TryParse(tables[4],out mapId); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/PartialConfigs/HeroLineupHaloConfig.cs b/Main/Config/PartialConfigs/HeroLineupHaloConfig.cs
new file mode 100644
index 0000000..832b17e
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroLineupHaloConfig.cs
@@ -0,0 +1,35 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class HeroLineupHaloConfig : ConfigBase<int, HeroLineupHaloConfig>
+{
+    // 鍥藉 鏁伴噺
+    public static Dictionary<int, Dictionary<int, HeroLineupHaloConfig>> configDics = new Dictionary<int, Dictionary<int, HeroLineupHaloConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+
+        Dictionary<int, HeroLineupHaloConfig> tempDic = null;
+        if (!configDics.TryGetValue(Country, out tempDic))
+        {
+            tempDic = new Dictionary<int, HeroLineupHaloConfig>();
+            configDics.Add(Country, tempDic);
+        }
+
+        tempDic[NeedHeroCount] = this;
+    }
+
+    public static HeroLineupHaloConfig GetConfig(int country, int count)
+    {
+        if (!configDics.ContainsKey(country))
+        {
+            return null;
+        }
+        if (!configDics[country].ContainsKey(count))
+        {
+            return null;
+        }
+        return configDics[country][count];
+    }
+
+}
\ No newline at end of file
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/Config/PartialConfigs/HeroLineupHaloConfig.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/Config/PartialConfigs/HeroLineupHaloConfig.cs.meta
index 7153f8c..80c953a 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/Config/PartialConfigs/HeroLineupHaloConfig.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 7c4414e0cc0a8594a86f1c6dda522acb
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/Config/PartialConfigs/PlayerPropertyConfig.cs b/Main/Config/PartialConfigs/PlayerPropertyConfig.cs
index 722d71e..2ba9d12 100644
--- a/Main/Config/PartialConfigs/PlayerPropertyConfig.cs
+++ b/Main/Config/PartialConfigs/PlayerPropertyConfig.cs
@@ -9,7 +9,7 @@
     private static Dictionary<int, List<int>> outputDict = new Dictionary<int, List<int>>();
 
     public static int[] baseAttrs = { 6, 7, 8 };    //鏀婚槻琛�
-
+    public static int[] basePerAttrs = { 16, 17, 18 };    //鏀婚槻琛� 鐧惧垎姣�
     protected override void OnConfigParseCompleted()
     {
         List<PlayerPropertyConfig> list = null;
diff --git a/Main/Core/ResModule/GameObjectPoolManager.cs b/Main/Core/ResModule/GameObjectPoolManager.cs
index eb3a521..5214318 100644
--- a/Main/Core/ResModule/GameObjectPoolManager.cs
+++ b/Main/Core/ResModule/GameObjectPoolManager.cs
@@ -1,20 +1,106 @@
-锘縰sing System.Collections.Generic;
+using System.Collections.Generic;
 using UnityEngine;
 using System;
-
+using Cysharp.Threading.Tasks;
 
 
 public class GameObjectPoolManager : SingletonMonobehaviour<GameObjectPoolManager>
 {
 #if UNITY_EDITOR
-    private Dictionary<int, DebugItem> m_DebugInstIDDict = null;
+    private bool m_ShowDebugPanel = false;
+    private Vector2 m_ScrollPosition = Vector2.zero;
+
+    private void OnGUI()
+    {
+        if (!m_ShowDebugPanel) return;
+
+        GUILayout.BeginArea(new Rect(10, 10, 400, 600));
+        GUILayout.BeginVertical("Box");
+        m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition, GUILayout.Width(380), GUILayout.Height(580));
+
+        GUILayout.Label("瀵硅薄姹犺皟璇曢潰鏉�", GUILayout.Height(30));
+        GUILayout.Space(10);
+
+        foreach (var poolEntry in m_PoolDict)
+        {
+            int prefabInstanceId = poolEntry.Key;
+            GameObjectPool pool = poolEntry.Value;
+
+            GUILayout.BeginVertical("Box");
+            GUILayout.Label($"姹犲悕绉�: {pool.Prefab.name}");
+            GUILayout.Label($"娲昏穬瀵硅薄鏁�: {pool.m_ActiveHashSet.Count}");
+            GUILayout.Label($"绌洪棽瀵硅薄鏁�: {pool.m_FreeQueue.Count}");
+            int count = m_PoolUsageFrequency.TryGetValue(prefabInstanceId, out int frequency) ? frequency : 0;
+            GUILayout.Label($"浣跨敤棰戠巼: {count}");
+            GUILayout.EndVertical();
+            GUILayout.Space(5);
+        }
+
+        GUILayout.EndScrollView();
+        GUILayout.EndVertical();
+        GUILayout.EndArea();
+    }
+
+    [UnityEditor.MenuItem("Tools/瀵硅薄姹�/鏄剧ず璋冭瘯闈㈡澘")]
+    private static void ToggleDebugPanel()
+    {
+        if (Instance != null)
+        {
+            Instance.m_ShowDebugPanel = !Instance.m_ShowDebugPanel;
+        }
+    }
 #endif
+    // 姹犵粺璁℃暟鎹�
+    public Dictionary<int, PoolStats> PoolStatistics { get; private set; } = new Dictionary<int, PoolStats>();
+
+    public class PoolStats
+    {
+        public int TotalObjects { get; set; }
+        public int ActiveObjects { get; set; }
+        public int FreeObjects { get; set; }
+        public int UsageFrequency { get; set; }
+    }
+
+    // 鏇存柊姹犵粺璁℃暟鎹�
+    private void UpdatePoolStats()
+    {
+        if (m_PoolDict == null)
+            return;
+            
+        foreach (var poolEntry in m_PoolDict)
+        {
+            int prefabInstanceId = poolEntry.Key;
+            GameObjectPool pool = poolEntry.Value;
+
+            if (!PoolStatistics.ContainsKey(prefabInstanceId))
+            {
+                PoolStatistics[prefabInstanceId] = new PoolStats();
+            }
+
+            PoolStats stats = PoolStatistics[prefabInstanceId];
+            stats.TotalObjects = pool.m_ActiveHashSet.Count + pool.m_FreeQueue.Count;
+            stats.ActiveObjects = pool.m_ActiveHashSet.Count;
+            stats.FreeObjects = pool.m_FreeQueue.Count;
+            stats.UsageFrequency = m_PoolUsageFrequency.TryGetValue(prefabInstanceId, out int frequency) ? frequency : 0;
+        }
+    }
+
+
     private Dictionary<int, GameObjectPool> m_PoolDict = null;
 
     // 涓嶉渶瑕侀攢姣佺殑瀵硅薄鍒楄〃
     private List<int> dontDestoryGoInstIDList = null;
 
     private Transform m_TargetContainer;
+
+    // 瀹氭湡妫�鏌ユ睜鐨勬椂闂撮棿闅旓紙绉掞級
+    private float m_PoolCheckInterval = 600f;
+
+    // 璁板綍姣忎釜姹犵殑浣跨敤棰戠巼
+    private Dictionary<int, int> m_PoolUsageFrequency = new Dictionary<int, int>();
+
+    //闇�瑕佸姩鎬佸嵏杞界殑棰勫埗浣擄紝渚嬪鍒囨崲鍦烘櫙鏃�
+    public List<GameObject> needDestroyPrefabList = new List<GameObject>();
 
     public void Initialize()
     {
@@ -34,12 +120,40 @@
             dontDestoryGoInstIDList = new List<int>();
         }
 
-#if UNITY_EDITOR
-        if (m_DebugInstIDDict == null)
+        // 鍚姩瀹氭湡妫�鏌ユ睜鐨勫崗绋�
+        CheckPoolUsage();
+    }
+
+    private async UniTask CheckPoolUsage()
+    {
+        while (true)
         {
-            m_DebugInstIDDict = new Dictionary<int, DebugItem>();
+            await UniTask.Delay(TimeSpan.FromSeconds(m_PoolCheckInterval));
+
+            foreach (var poolEntry in m_PoolDict)
+            {
+                int prefabInstanceId = poolEntry.Key;
+                GameObjectPool pool = poolEntry.Value;
+
+                // 濡傛灉姹犵殑浣跨敤棰戠巼浣庝簬闃堝�硷紝鍑忓皯姹犵殑澶у皬
+                if (m_PoolUsageFrequency.TryGetValue(prefabInstanceId, out int usageCount) && usageCount < 5)
+                {
+                    // 淇濈暀鑷冲皯涓�涓璞★紝閬垮厤棰戠箒鍒涘缓鍜岄攢姣�
+                    int targetSize = Mathf.Max(1, pool.m_FreeQueue.Count / 2);
+                    while (pool.m_FreeQueue.Count > targetSize)
+                    {
+                        GameObject obj = pool.m_FreeQueue.Dequeue();
+                        if (!dontDestoryGoInstIDList.Contains(obj.GetInstanceID()))
+                        {
+                            Destroy(obj);
+                        }
+                    }
+                }
+
+                // 閲嶇疆浣跨敤棰戠巼
+                m_PoolUsageFrequency[prefabInstanceId] = 0;
+            }
         }
-#endif
     }
 
     public void AddDontDestroyGoInstID(int id)
@@ -65,12 +179,26 @@
         return false;
     }
 
+    /// <summary>
+    /// 浼犲叆鐨勪负棰勫埗浣擄紝鑰岄潪缁勪欢锛屽惁鍒欎細瀵艰嚧GetInstanceID绠$悊娣蜂贡锛屾瘡娆″疄渚嬪寲閮戒細鏀瑰彉
+    /// </summary>
+    /// <param name="prefab"></param>
+    /// <returns></returns>
     public GameObjectPool RequestPool(GameObject prefab)
     {
         if (prefab == null)
         {
             return null;
         }
+
+#if UNITY_EDITOR
+        if (UnityEditor.PrefabUtility.GetPrefabAssetType(prefab) == UnityEditor.PrefabAssetType.NotAPrefab)
+        {
+            Debug.LogError($"{prefab.name}涓嶆槸涓�涓鍒朵綋锛�");
+            return null;
+        }
+#endif
+
 
         int _prefabInstanceId = prefab.GetInstanceID();
 
@@ -105,20 +233,28 @@
             return null;
         }
 
+#if UNITY_EDITOR
+        if (UnityEditor.PrefabUtility.GetPrefabAssetType(prefab) == UnityEditor.PrefabAssetType.NotAPrefab)
+        {
+            Debug.LogError($"{prefab.name}涓嶆槸涓�涓鍒朵綋锛�");
+            return null;
+        }
+#endif
         return RequestPool(prefab).Request();
     }
 
 
+    //鐗瑰畾鎯呭喌涓嬮渶瑕佸姩鎬佸嵏杞界殑锛屽鍒囨崲鍦烘櫙鏃�
     public void UnLoadAll(bool force = false)
     {
         List<int> _removeList = new List<int>();
         foreach (var _pool in m_PoolDict.Values)
         {
-            // if (GAMgr.Instance.needDestroyPrefabList.Contains(_pool.Prefab))
-            // {
+            if (needDestroyPrefabList.Contains(_pool.Prefab))
+            {
                 _pool.Clear();
                 _removeList.Add(_pool.PrefabInstanceId);
-            // }
+            }
         }
 
         for (int i = 0; i < _removeList.Count; ++i)
@@ -137,20 +273,19 @@
                 return m_Prefab;
             }
         }
+
+        //棰勫埗浣撳疄渚媔d锛岀敤浜庢绱㈡睜
         public int PrefabInstanceId
         {
             get; private set;
         }
 
-        public List<GameObject> m_ActiveList = null;
-        private List<GameObject> m_FreeList = null;
+        public HashSet<GameObject> m_ActiveHashSet = new HashSet<GameObject>();
+        public Queue<GameObject> m_FreeQueue = null;
+        private int Pool_FreeList_Warning_Threshold = 10;    //褰撶┖闂插璞¢珮浜庢鍊兼椂锛屼細杩涜鏃ュ織杈撳嚭鎻愰啋
 
         Action<GameObject> releaseCallBack;
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-        private Transform m_DebugContainer;
-        private Transform m_DebugActive;
-        private Transform m_DebugFree;
-#endif
+
 
         public string assetBundleName;
         public string assetName;
@@ -159,17 +294,9 @@
         {
             m_Prefab = prefab;
             PrefabInstanceId = m_Prefab.GetInstanceID();
-            m_ActiveList = new List<GameObject>();
-            m_FreeList = new List<GameObject>();
+            m_ActiveHashSet = new HashSet<GameObject>();
+            m_FreeQueue = new Queue<GameObject>();
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-            m_DebugContainer = new GameObject(prefab.name).transform;
-            m_DebugActive = new GameObject("Active").transform;
-            m_DebugFree = new GameObject("Free").transform;
-            m_DebugActive.SetParent(m_DebugContainer);
-            m_DebugFree.SetParent(m_DebugContainer);
-            m_DebugContainer.SetParent(Instance.transform);
-#endif
         }
 
         public void AddReleaseListener(Action<GameObject> _callBack)
@@ -188,16 +315,17 @@
             for (int i = 0; i < count; ++i)
             {
                 _go = Instantiate(m_Prefab, Constants.Special_Hide_Position, Quaternion.identity);
-                m_FreeList.Add(_go);
+                m_FreeQueue.Enqueue(_go);
                 _go.transform.SetParent(Instance.m_TargetContainer);
                 _go.transform.position = Constants.Special_Hide_Position;
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
 
-                DebugItem _debugItem = new GameObject(_go.GetInstanceID().ToString()).AddMissingComponent<DebugItem>();
-                _debugItem.transform.SetParent(m_DebugFree);
-                _debugItem.target = _go;
-                Instance.m_DebugInstIDDict[_go.GetInstanceID()] = _debugItem;
+#if UNITY_EDITOR
+                // 妫�鏌ョ┖闂插垪琛ㄦ暟閲忔槸鍚﹁秴杩囬槇鍊�
+                if (m_FreeQueue.Count > Pool_FreeList_Warning_Threshold)
+                {
+                    Debug.LogWarning($"GameObjectPool {m_Prefab.name} 鐨勭┖闂插璞℃暟閲� ({m_FreeQueue.Count}) 瓒呰繃闃堝�� ({Pool_FreeList_Warning_Threshold})锛岃妫�鏌ユ槸鍚﹂渶瑕佹竻鐞嗐��");
+                }
 #endif
                 var animator = _go.GetComponent<Animator>();
                 if (animator != null)
@@ -212,48 +340,41 @@
         {
             GameObject _go = null;
 
-            while (m_FreeList.Count > 0)
+            if (m_FreeQueue.Count > 0)
             {
-                if (m_FreeList[0] != null)
+                _go = m_FreeQueue.Dequeue();
+
+                m_ActiveHashSet.Add(_go);
+
+                // 缁熻姹犵殑浣跨敤棰戠巼
+                if (Instance.m_PoolUsageFrequency.ContainsKey(m_Prefab.GetInstanceID()))
                 {
-                    _go = m_FreeList[0];
-
-                    m_ActiveList.Add(_go);
-                    m_FreeList.RemoveAt(0);
-
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                    if (Instance.m_DebugInstIDDict.ContainsKey(_go.GetInstanceID()))
-                    {
-                        DebugItem _debugItem = Instance.m_DebugInstIDDict[_go.GetInstanceID()];
-                        _debugItem.transform.SetParent(m_DebugActive);
-                    }
-#endif
-                    break;
+                    Instance.m_PoolUsageFrequency[m_Prefab.GetInstanceID()]++;
                 }
                 else
                 {
-                    m_FreeList.RemoveAt(0);
+                    Instance.m_PoolUsageFrequency[m_Prefab.GetInstanceID()] = 1;
                 }
+
             }
+
 
             if (_go == null)
             {
                 _go = Instantiate(m_Prefab, Constants.Special_Hide_Position, Quaternion.identity);
-                m_ActiveList.Add(_go);
+                m_ActiveHashSet.Add(_go);
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                DebugItem _debugItem = new GameObject(_go.GetInstanceID().ToString()).AddMissingComponent<DebugItem>();
-                _debugItem.transform.SetParent(m_DebugActive);
-                _debugItem.target = _go;
-                Instance.m_DebugInstIDDict[_go.GetInstanceID()] = _debugItem;
-#endif
             }
 
             _go.transform.SetParent(null);
             _go.transform.localScale = Vector3.one;
 
+            // 鏇存柊姹犵粺璁℃暟鎹�
+            Instance.UpdatePoolStats();
+
             return _go;
         }
+
 
         public void Release(GameObject go)
         {
@@ -261,24 +382,19 @@
             {
                 return;
             }
-            if (m_ActiveList.Contains(go))
-            {
-                m_ActiveList.Remove(go);
-            }
-            if (m_FreeList.Contains(go))
-            {
-                return;
-            }
+            m_ActiveHashSet.Remove(go);
 
-            m_FreeList.Add(go);
+            m_FreeQueue.Enqueue(go);
             go.transform.SetParent(Instance.m_TargetContainer);
+
             go.transform.position = Constants.Special_Hide_Position;
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-            if (Instance.m_DebugInstIDDict.ContainsKey(go.GetInstanceID()))
+
+#if UNITY_EDITOR
+            // 妫�鏌ョ┖闂插垪琛ㄦ暟閲忔槸鍚﹁秴杩囬槇鍊�
+            if (m_FreeQueue.Count > Pool_FreeList_Warning_Threshold)
             {
-                DebugItem _debugItem = Instance.m_DebugInstIDDict[go.GetInstanceID()];
-                _debugItem.transform.SetParent(m_DebugFree);
+                Debug.LogWarning($"GameObjectPool {m_Prefab.name} 鐨勭┖闂插璞℃暟閲� ({m_FreeQueue.Count}) 瓒呰繃闃堝�� ({Pool_FreeList_Warning_Threshold})锛岃妫�鏌ユ槸鍚﹂渶瑕佹竻鐞嗐��");
             }
 #endif
 
@@ -286,99 +402,96 @@
             {
                 releaseCallBack(go);
             }
+
+            // 鏇存柊姹犵粺璁℃暟鎹�
+            Instance.UpdatePoolStats();
         }
 
         public void ReleaseAll()
         {
-            for (int i = m_ActiveList.Count - 1; i >= 0; i--)
+            //閲婃斁 m_ActiveHashSet涓� 鐨凣ameObject锛屾帓闄�
+            foreach (GameObject go in m_ActiveHashSet)
             {
-                var _go = m_ActiveList[i];
-                m_ActiveList.Remove(_go);
-
-                if (!m_FreeList.Contains(_go))
+                if (go != null)
                 {
-                    m_FreeList.Add(_go);
-                }
+                    m_FreeQueue.Enqueue(go);
+                    go.transform.SetParent(Instance.m_TargetContainer);
+                    go.transform.position = Constants.Special_Hide_Position;
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                DebugItem _debugItem = Instance.m_DebugInstIDDict[_go.GetInstanceID()];
-                _debugItem.transform.SetParent(m_DebugFree);
-#endif
-                _go.transform.SetParent(Instance.m_TargetContainer);
-                _go.transform.position = Constants.Special_Hide_Position;
-
-                if (releaseCallBack != null)
-                {
-                    releaseCallBack(_go);
+                    if (releaseCallBack != null)
+                    {
+                        releaseCallBack(go);
+                    }
                 }
+                
             }
+            m_ActiveHashSet.Clear();
+
+            // 鏇存柊姹犵粺璁℃暟鎹�
+            Instance.UpdatePoolStats();
         }
 
         public void Clear()
         {
-            for (int i = m_ActiveList.Count - 1; i >= 0; --i)
+            foreach (GameObject go in m_ActiveHashSet)
             {
-                if (m_ActiveList[i] == null
-                || Instance.dontDestoryGoInstIDList.Contains(m_ActiveList[i].GetInstanceID()))
-                    continue;
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                Destroy(Instance.m_DebugInstIDDict[m_ActiveList[i].GetInstanceID()].gameObject);
-#endif
-                Destroy(m_ActiveList[i]);
-                m_ActiveList.RemoveAt(i);
-            }
-
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-            if (m_ActiveList.Count != 0)
-            {
-                Debug.LogWarningFormat("{0} 姹犳竻鐞嗗悗, 杩樻湁 {1} 涓椿璺冨璞�. ", m_Prefab.name, m_ActiveList.Count);
-                for (int i = 0; i < m_ActiveList.Count; ++i)
+                if (go != null)
                 {
-                    Debug.LogWarningFormat(" |-- {0}", m_ActiveList[i].name);
+                    if (!Instance.dontDestoryGoInstIDList.Contains(go.GetInstanceID()))
+                    {
+                        m_ActiveHashSet.Remove(go);
+                        Destroy(go);
+                    }
+
                 }
+                
+            }
+
+#if UNITY_EDITOR
+            if (m_ActiveHashSet.Count != 0)
+            {
+                Debug.LogWarningFormat("{0} 姹犳竻鐞嗗悗, 杩樻湁 {1} 涓椿璺冨璞�. ", m_Prefab.name, m_ActiveHashSet.Count);
             }
 #endif
 
-            for (int i = m_FreeList.Count - 1; i >= 0; --i)
+            Queue<GameObject> tempQueue = new Queue<GameObject>();
+            while (m_FreeQueue.Count > 0)
             {
-                if (m_FreeList[i] == null
-                 || Instance.dontDestoryGoInstIDList.Contains(m_FreeList[i].GetInstanceID()))
-                    continue;
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                Destroy(Instance.m_DebugInstIDDict[m_FreeList[i].GetInstanceID()].gameObject);
-#endif
-                Destroy(m_FreeList[i]);
-                m_FreeList.RemoveAt(i);
+                GameObject obj = m_FreeQueue.Dequeue();
+                if (Instance.dontDestoryGoInstIDList.Contains(obj.GetInstanceID()))
+                    tempQueue.Enqueue(obj);
+                else
+                    Destroy(obj);
             }
+            m_FreeQueue = tempQueue;
 
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-            if (m_FreeList.Count != 0)
+
+#if UNITY_EDITOR
+            if (m_FreeQueue.Count != 0)
             {
-                Debug.LogWarningFormat("{0} 姹犳竻鐞嗗悗, 杩樻湁 {1} 涓┖闂插璞�. ", m_Prefab.name, m_FreeList.Count);
-                for (int i = 0; i < m_FreeList.Count; ++i)
-                {
-                    Debug.LogWarningFormat(" |-- {0}", m_FreeList[i].name);
-                }
+                Debug.LogWarningFormat("{0} 姹犳竻鐞嗗悗, 杩樻湁 {1} 涓┖闂插璞�. ", m_Prefab.name, m_FreeQueue.Count);
+                // for (int i = 0; i < m_FreeList.Count; ++i)
+                // {
+                //     Debug.LogWarningFormat(" |-- {0}", m_FreeList[i].name);
+                // }
             }
 #endif
             if (IsEmpty())
             {
                 m_Prefab = null;
-#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IOS
-                Destroy(m_DebugContainer.gameObject);
-#endif
+
             }
 
             if (!string.IsNullOrEmpty(assetBundleName) && !string.IsNullOrEmpty(assetName))
             {
                 ResManager.Instance.UnloadAsset(assetBundleName, assetName);
-                ResManager.Instance.UnloadAssetBundle(assetBundleName, true, false);
+                // ResManager.Instance.UnloadAssetBundle(assetBundleName, true, false);
             }
         }
 
         public bool IsEmpty()
         {
-            return m_ActiveList.Count == 0 && m_FreeList.Count == 0;
+            return m_ActiveHashSet.Count == 0 && m_FreeQueue.Count == 0;
         }
     }
 }
diff --git a/Main/ResModule/ResManager.cs b/Main/ResModule/ResManager.cs
index 3d68b85..7c55d05 100644
--- a/Main/ResModule/ResManager.cs
+++ b/Main/ResModule/ResManager.cs
@@ -162,13 +162,13 @@
     public string[] LoadConfig(string name)
     {
         string path = string.Empty;
+#if UNITY_EDITOR
         if (!AssetSource.isUseAssetBundle)
         {
-#if UNITY_EDITOR
             path = ResourcesPath.CONFIG_FODLER + "/" + name + ".txt";
-#endif
         }
         else
+#endif
         {
             path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt");
         }
diff --git a/Main/System/Hero/HeroInfo.Properties.cs b/Main/System/Hero/HeroInfo.Properties.cs
index cba6718..0d25126 100644
--- a/Main/System/Hero/HeroInfo.Properties.cs
+++ b/Main/System/Hero/HeroInfo.Properties.cs
@@ -173,7 +173,7 @@
 
 
     //涓婇樀灞炴��:鏀婚槻琛�
-    public int GetGoBattleAddPer()
+    public int GetOnBattleAddPer()
     { 
         return qualityConfig.InitAddPer + qualityConfig.LVAddPer * heroLevel + qualityConfig.BreakLVAddPer * breakLevel + qualityConfig.StarAddPer * heroStar;
     }
diff --git a/Main/System/Hero/HeroInfo.cs b/Main/System/Hero/HeroInfo.cs
index 3a4de6d..a480fbf 100644
--- a/Main/System/Hero/HeroInfo.cs
+++ b/Main/System/Hero/HeroInfo.cs
@@ -21,25 +21,6 @@
     }
 
 
-    //鏄惁涓荤嚎涓婇樀 81 # 鎵�鍦ㄩ樀瀹逛俊鎭垪琛� [闃靛绫诲瀷*10000+闃靛瀷绫诲瀷*100+浣嶇疆缂栧彿, ...]
-    public bool isInMainBattle
-    {
-        get
-        {
-            //浠庡垪琛ㄤ腑鎵惧埌 闃靛涓�1鐨� 涓荤嚎闃靛
-            var list = itemHero.GetUseData(81);
-            if (list != null && list.Count > 0)
-            {
-                var index = list.FindIndex((item) => item / 10000 == 1);
-                if (index >= 0)
-                {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
     // 浼樺厛鍔熻兘鎻愰啋绫诲瀷锛�1瑙夐啋 2鍗囩骇 3绐佺牬 4鍗囨槦
     // 浼樺厛椤哄簭锛�
     public int funcState
@@ -51,7 +32,7 @@
     }
 
     public bool isLock
-    { 
+    {
         get
         {
             return itemHero.itemInfo.isLock;
@@ -140,4 +121,19 @@
     {
         return heroConfig.GetInheritPercent(attrType);
     }
+    
+    //鏄惁涓妜闃� 81 # 鎵�鍦ㄩ樀瀹逛俊鎭垪琛� [闃靛绫诲瀷*10000+闃靛瀷绫诲瀷*100+浣嶇疆缂栧彿, ...]
+    public bool IsInTeamByTeamType(TeamType teamType)
+    {
+        var list = itemHero.GetUseData(81);
+        if (list != null && list.Count > 0)
+        {
+            var index = list.FindIndex((item) => item / 10000 == (int)teamType);
+            if (index >= 0)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index d116aab..e1311d0 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -10,8 +10,7 @@
     //鍒濆鍒涘缓锛�0725锛夛紝鍚庣画璺熼殢鑳屽寘浜嬩欢澧炲姞鍒犻櫎  key = guid
     protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
 
-    //姝﹀皢鍒楄〃鐣岄潰
-    public List<string> heroSortList = new List<string>();
+
 
     //姝﹀皢绾㈢偣
     //MainRedDot.HeroCardRedpoint * 1000 + hero.itemHero.gridIndex;
@@ -41,7 +40,7 @@
 
     void OnBeforePlayerDataInitialize()
     {
-        heroSortList.Clear();
+        
         heroInfoDict.Clear();
     }
 
@@ -91,6 +90,11 @@
     {
         return heroInfoDict.Values.ToList();
     }
+    
+    public List<string> GetHeroGuidList()
+    {
+        return heroInfoDict.Keys.ToList();
+    }
 
     public List<HeroInfo> GetPowerfulHeroList()
     {
@@ -119,52 +123,8 @@
         return retList;
     }
 
-    public bool waitResortHeroList = false;
 
 
-    //鍒锋柊鏃舵満, 鎵撳紑姝﹀皢鐣岄潰 鎴栬�� 鍏抽棴鍔熻兘鐣岄潰
-    public void SortHeroList()
-    {
-        heroSortList = heroInfoDict.Keys.ToList();
-        heroSortList.Sort(CmpHero);
-    }
 
-
-    int CmpHero(string guidA, string guidB)
-    {
-        HeroInfo heroA = heroInfoDict[guidA];
-        HeroInfo heroB = heroInfoDict[guidB];
-        if (heroA == null || heroB == null)
-        {
-            return 0;
-        }
-        // 鎺掑簭瑙勫垯锛氫笂闃�>姝﹀皢绛夌骇锛炵獊鐮寸瓑绾э紴姝﹀皢瑙夐啋闃剁骇锛炴灏嗗搧璐紴姝﹀皢鍚炲櫖鏄熺骇锛炴灏咺D
-        if (heroA.isInMainBattle != heroB.isInMainBattle)
-        {
-            return heroA.isInMainBattle ? -1 : 1;
-        }
-        if (heroA.heroLevel != heroB.heroLevel)
-        {
-            return heroA.heroLevel > heroB.heroLevel ? -1 : 1;
-        }
-        if (heroA.breakLevel != heroB.breakLevel)
-        {
-            return heroA.breakLevel > heroB.breakLevel ? -1 : 1;
-        }
-        if (heroA.awakeLevel != heroB.awakeLevel)
-        {
-            return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1;
-        }
-        if (heroA.Quality != heroB.Quality)
-        {
-            return heroA.Quality > heroB.Quality ? -1 : 1;
-        }
-        if (heroA.heroStar != heroA.heroStar)
-        {
-            return heroA.heroStar > heroB.heroStar ? -1 : 1;
-        }
-
-        return heroA.heroId.CompareTo(heroB.heroId);
-    }
 
 }
\ No newline at end of file
diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index 241063a..1b25862 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -6,17 +6,42 @@
 using UnityEngine.EventSystems;
 public class UIHeroController : MonoBehaviour
 {
+	private GameObjectPoolManager.GameObjectPool pool;
+	private int skinID;
+	protected SkeletonGraphic skeletonGraphic;
+
+	protected Spine.AnimationState spineAnimationState;
+	private GameObject instanceGO;
+
+	private Action onComplete;
 	public void Create(int _skinID, float scale = 1f, Action _onComplete = null)
 	{
+		if (skinID == _skinID)
+		{ 
+			//閬垮厤閲嶅鍒涘缓
+			return;
+		}
+
 		skinID = _skinID;
 		onComplete = _onComplete;
-		GameObject battleGO = UILoader.LoadPrefab("UIHero");
-		GameObject instanceGO = null;
+		pool = GameObjectPoolManager.Instance.RequestPool(UILoader.LoadPrefab("UIHero"));
+		
 		if (!transform.gameObject.activeSelf)
 		{
 			transform.SetActive(true);
 		}
-		instanceGO = GameObject.Instantiate(battleGO, transform);
+		if (instanceGO == null)
+		{ 
+			instanceGO = pool.Request();
+			instanceGO.transform.SetParent(transform);
+			//transform 鐨凱ivot Y鏄�0锛岃instanceGO 灞呬腑
+			instanceGO.transform.localPosition = new Vector3(0, transform.GetComponent<RectTransform>().sizeDelta.y * 0.5f);
+
+			//instanceGO.transform.localPosition = Vector3.zero;
+			instanceGO.transform.localScale = Vector3.one;
+			instanceGO.transform.localRotation = Quaternion.identity;
+		}
+
 		skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true);
 		var skinConfig = HeroSkinConfig.Get(skinID);
 		skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/", skinConfig.SpineRes + "_SkeletonData");
@@ -24,32 +49,32 @@
 		this.transform.localScale = Vector3.one * scale;
 		spineAnimationState = skeletonGraphic.AnimationState;
 		PlayAnimation(MotionName.idle, true);
-
+		spineAnimationState.Complete -= OnAnimationComplete;
 		spineAnimationState.Complete += OnAnimationComplete;
 	}
-	private int skinID;
-	protected SkeletonGraphic skeletonGraphic;
-
-	protected Spine.AnimationState spineAnimationState;
-
-	private Spine.TrackEntry currentTrackEntry;
-	private Action onComplete;
 
 
 
-	void Destroy()
+
+	protected void OnDestroy()
 	{
-		spineAnimationState.Complete -= OnAnimationComplete;
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.Complete -= OnAnimationComplete;
+        }
+		if (pool != null)
+			pool.Release(instanceGO);
+		skeletonGraphic = null;
+		pool = null;
 	}
 
 
-    public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop = false)
+    public virtual void PlayAnimation(MotionName motionName, bool loop = false)
     {
-        if (spineAnimationState == null) return null;
+        if (spineAnimationState == null) return;
 
         // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
-        currentTrackEntry = spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
-        return currentTrackEntry;
+         spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
     }
 
 	/// <summary>
diff --git a/Main/System/HeroUI/HeroCardCell.cs b/Main/System/HeroUI/HeroCardCell.cs
index 9c4ef27..7521a1c 100644
--- a/Main/System/HeroUI/HeroCardCell.cs
+++ b/Main/System/HeroUI/HeroCardCell.cs
@@ -21,7 +21,7 @@
 
     public void Display(int index)
     {
-        var hero = HeroManager.Instance.GetHero(HeroManager.Instance.heroSortList[index]);
+        var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.heroSortList[index]);
         if (hero == null)
         {
             this.gameObject.SetActive(false);
@@ -39,7 +39,7 @@
         countryImg.SetSprite("herocountry" + heroConfig.Country);
         jobImg.SetSprite("herojob" + heroConfig.Class);
         heroModel.Create(heroConfig.SkinIDList[hero.SkinIndex], heroConfig.UIScale);
-        onStateImg.SetActive(hero.isInMainBattle);
+        onStateImg.SetActive(hero.IsInTeamByTeamType(TeamType.Story));
 
         redpoint.redpointId = MainRedDot.HeroCardRedpoint * 1000 + hero.itemHero.gridIndex;
         var funcState = hero.funcState;
diff --git a/Main/System/HeroUI/HeroCardLineCell.cs b/Main/System/HeroUI/HeroCardLineCell.cs
index 7b19201..449b020 100644
--- a/Main/System/HeroUI/HeroCardLineCell.cs
+++ b/Main/System/HeroUI/HeroCardLineCell.cs
@@ -1,15 +1,14 @@
 锘縰sing UnityEngine;
-using System.Collections.Generic;
 
 public class HeroCardLineCell : CellView
 {
-    [SerializeField] List<HeroCardCell> cardList;
+    [SerializeField] HeroCardCell[] cardList;
 
     public void Display(int index)
     { 
-        for (int i = 0; i < cardList.Count; i++)
+        for (int i = 0; i < cardList.Length; i++)
         {
-            if (i + index < HeroManager.Instance.heroSortList.Count)
+            if (i + index < HeroUIManager.Instance.heroSortList.Count)
             {
                 cardList[i].SetActive(true);
                 cardList[i].Display(index + i);
diff --git a/Main/System/HeroUI/HeroConnectionCell.cs b/Main/System/HeroUI/HeroConnectionCell.cs
new file mode 100644
index 0000000..7cdeae4
--- /dev/null
+++ b/Main/System/HeroUI/HeroConnectionCell.cs
@@ -0,0 +1,15 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+//缇佺粖妯″潡
+public class HeroConnectionCell : MonoBehaviour
+{
+    [SerializeField] HeroConnectionHeadCell[] heros;
+    [SerializeField] Text connAttrText;
+
+    public void Display()
+    {
+        
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroConnectionCell.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroConnectionCell.cs.meta
index 7153f8c..370fd80 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroConnectionCell.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: d9e6754a2b2ddd242a8da5b215186a22
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroConnectionHeadCell.cs b/Main/System/HeroUI/HeroConnectionHeadCell.cs
new file mode 100644
index 0000000..540cffc
--- /dev/null
+++ b/Main/System/HeroUI/HeroConnectionHeadCell.cs
@@ -0,0 +1,45 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+//缇佺粖涓殑姝﹀皢
+public class HeroConnectionHeadCell : MonoBehaviour
+{
+    [SerializeField] Image qualityImg;
+    [SerializeField] Image heroIcon;
+    [SerializeField] Text nameText;
+    [SerializeField] Image connMarkImg; //閾炬帴鐨勯攣鍥炬爣锛岀涓�涓笉鏄剧ず
+
+    public void Display(int heroID, int index, string guid = "")
+    {
+        int skinID = 0;
+        HeroConfig heroConfig;
+        if (!string.IsNullOrEmpty(guid))
+        {
+            var hero = HeroManager.Instance.GetHero(guid);
+            skinID = hero.SkinID;
+            heroConfig = hero.heroConfig;
+        }
+        else
+        {
+            heroConfig = HeroConfig.Get(heroID);
+            skinID = heroConfig.SkinIDList[0];  //榛樿绗竴涓浘閴村睍绀�
+
+        }
+
+        nameText.text = heroConfig.Name;
+        qualityImg.SetSprite("heroheadBG" + heroConfig.Quality);
+        var sprite = UILoader.LoadSprite("HeroHead", HeroSkinConfig.Get(skinID).SquareIcon);
+        if (sprite == null)
+        {
+            // 鍐呯綉鏈厤缃椂
+            heroIcon.SetSprite("herohead_default");
+        }
+        else
+        {
+            heroIcon.overrideSprite = sprite;
+        }
+
+        connMarkImg.SetActive(index != 0);
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroConnectionHeadCell.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroConnectionHeadCell.cs.meta
index 7153f8c..f6ab9d0 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroConnectionHeadCell.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 82e5125576855304da53130b59ab10c3
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroHeadBaseCell.cs b/Main/System/HeroUI/HeroHeadBaseCell.cs
index f780716..ecd7d68 100644
--- a/Main/System/HeroUI/HeroHeadBaseCell.cs
+++ b/Main/System/HeroUI/HeroHeadBaseCell.cs
@@ -154,6 +154,7 @@
         var sprite = UILoader.LoadSprite("HeroHead", HeroSkinConfig.Get(skinID).SquareIcon);
         if (sprite == null)
         {
+            // 鍐呯綉鏈厤缃椂
             heroIcon.SetSprite("herohead_default");
         }
         else
diff --git a/Main/System/HeroUI/HeroListWin.cs b/Main/System/HeroUI/HeroListWin.cs
index 5f7eb94..87389aa 100644
--- a/Main/System/HeroUI/HeroListWin.cs
+++ b/Main/System/HeroUI/HeroListWin.cs
@@ -16,33 +16,36 @@
     [SerializeField] GameObject attrOnTip;
     [SerializeField] Button attrOnTipBtn;
 
-    [SerializeField] GameObject foldObject;
-    [SerializeField] Button unFoldBtn; //灞曞紑鎸夐挳
-    [SerializeField] List<Button> countryBtnList;
-    [SerializeField] GameObject unFoldObject;
-    [SerializeField] Button foldBtn; //鏀惰捣鎸夐挳
-    [SerializeField] List<Button> jobBtnList;   //鍏ㄩ儴锛岃緭鍑恒�佽倝鐩俱�佽緟鍔┿�佹帶鍒�
     [SerializeField] Button changeHeroPosBtn; //甯冮樀鎸夐挳
 
 
     private List<Image> countrySelectImgList;
     private List<Image> jobSelectImgList;
 
+    SinglePack singlePack;
+
     /// </summary>
     protected override void InitComponent()
     {
-        heroPackBtn.onClick.AddListener(() =>
+        heroPackBtn.AddListener(() =>
         {
             HeroUIManager.Instance.QueryUnLockHeroPack();
+        });
+        changeHeroPosBtn.AddListener(() =>
+        {
+            HeroUIManager.Instance.selectTeamType = TeamType.Story;
+            UIManager.Instance.OpenWindow<HeroPosWin>();
         });
     }
 
 
     protected override void OnPreOpen()
     {
+        singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
         heroListScroller.OnRefreshCell += OnRefreshCell;
+        //闇�瑕佽�冭檻璋冩暣涓烘灏嗙殑浜嬩欢锛岃�屼笉鏄儗鍖�
         PackManager.Instance.RefreshItemEvent += RefreshPakCount;
-        HeroManager.Instance.SortHeroList();
+        HeroUIManager.Instance.SortHeroList();
         CreateScroller();
         Refresh();
     }
@@ -56,7 +59,6 @@
 
     public override void Refresh()
     {
-        SinglePack singlePack = PackManager.Instance.GetSinglePack(PackType.Item);
         if (singlePack == null || singlePack.GetAllItems().Count <= 0)
         {
             heroListEmpty.SetActive(true);
@@ -68,10 +70,32 @@
             heroListScroller.SetActive(true);
         }
 
+        OnBattleTeamAttrPer();
+        
+        RefreshPakCount(PackType.Hero, 0, 0);
+    }
+
+    //涓婇樀鍔犳垚
+    void OnBattleTeamAttrPer()
+    {
+        var valuePer = 0;
+        var team = TeamManager.Instance.GetTeam(TeamType.Story);
+        if (team != null)
+        {
+            for (int i = 0; i < team.serverData.Length; i++)
+            {
+                var hero = HeroManager.Instance.GetHero(team.serverData[i].guid);
+                if (hero != null)
+                {
+                    valuePer += hero.GetOnBattleAddPer();
+                }
+            }
+  
+        }
         //涓婇樀灞炴��
         for (int i = 0; i < attrOnList.Count; i++)
         {
-            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2 (PlayerPropertyConfig.baseAttrs[i], 1 ));
+            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
         }
     }
 
@@ -84,7 +108,7 @@
     void CreateScroller()
     {
         heroListScroller.Refresh();
-        for (int i = 0; i < HeroManager.Instance.heroSortList.Count; i++)
+        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
         {
             if (i % 4 == 0)
             {
@@ -96,13 +120,14 @@
 
     void RefreshPakCount(PackType type, int index, int itemID)
     {
-        SinglePack singlePack = PackManager.Instance.GetSinglePack(PackType.Item);
+        if (type != PackType.Hero)
+            return;
         if (singlePack == null)
             return;
 
         int count = singlePack.GetAllItems().Count;
 
-        heroPackText.text =  UIHelper.AppendColor(count > singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
+        heroPackText.text = UIHelper.AppendColor(count > singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
                             string.Format("{0}/{1}", count, singlePack.unlockedGridCount));
         
     }
diff --git a/Main/System/HeroUI/HeroPosHeadCell.cs b/Main/System/HeroUI/HeroPosHeadCell.cs
new file mode 100644
index 0000000..d0cfd2d
--- /dev/null
+++ b/Main/System/HeroUI/HeroPosHeadCell.cs
@@ -0,0 +1,16 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+public class HeroPosHeadCell : MonoBehaviour
+{
+    [SerializeField] HeroHeadBaseCell heroHeadBaseCell;
+    [SerializeField] Image jobImg;
+    [SerializeField] Text nameText;
+    [SerializeField] Transform selectRect;
+
+    public void Display(int index)
+    {
+
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroPosHeadCell.cs.meta
similarity index 69%
rename from Main/Utility/GameObjectPool.cs.meta
rename to Main/System/HeroUI/HeroPosHeadCell.cs.meta
index 7153f8c..bcf6256 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroPosHeadCell.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 85d03e47b5934534baabc6d5091adaa5
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroPosLineCell.cs b/Main/System/HeroUI/HeroPosLineCell.cs
new file mode 100644
index 0000000..508ae5b
--- /dev/null
+++ b/Main/System/HeroUI/HeroPosLineCell.cs
@@ -0,0 +1,23 @@
+锘縰sing UnityEngine;
+
+public class HeroPosLineCell : CellView
+{
+    [SerializeField] HeroPosHeadCell[] cardList;
+
+    public void Display(int index)
+    { 
+        for (int i = 0; i < cardList.Length; i++)
+        {
+            if (i + index < HeroUIManager.Instance.heroOnTeamSortList.Count)
+            {
+                cardList[i].SetActive(true);
+                cardList[i].Display(index + i);
+            }
+            else
+            {
+                cardList[i].SetActive(false);
+            }
+        }
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroPosLineCell.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroPosLineCell.cs.meta
index 7153f8c..76f2b21 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroPosLineCell.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 22807977a993b4b438ca473603f2494e
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroPosWin.cs b/Main/System/HeroUI/HeroPosWin.cs
new file mode 100644
index 0000000..5028fae
--- /dev/null
+++ b/Main/System/HeroUI/HeroPosWin.cs
@@ -0,0 +1,187 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 姝﹀皢甯冮樀: functionOrder锛氬竷闃电被鍨�
+/// </summary>
+public class HeroPosWin : UIBase
+{
+    [SerializeField] Text[] attrOnList; //涓婇樀灞炴�у姞鎴�
+    [SerializeField] Image countryOnImg;    //涓婇樀闃靛瀷婵�娲诲浗瀹�
+    [SerializeField] List<Image> OnCountImgs;    //涓婇樀鏁伴噺婵�娲�
+    [SerializeField] List<Image> scenePosImgs;  //鍦烘櫙甯冮樀浣嶇疆
+    [SerializeField] HeroScenePosCell[] sceneHero;
+
+    [SerializeField] GroupButtonEx attackTeamBtn;
+    [SerializeField] GroupButtonEx defendTeamBtn;
+
+    [SerializeField] Text fightPowerText;   //鐢卞鎴风鑷繁棰勭畻鐨勬垬鍔�
+    [SerializeField] ScrollerController heroListScroller;
+    [SerializeField] Transform heroListEmpty;
+    [SerializeField] Toggle showConnTipToggleBtn;
+    [SerializeField] HeroSelectBehaviour fiterManager;  //姝﹀皢绛涢��
+
+    [SerializeField] Button oneKeyOnBtn;     //涓�閿笂闃�
+    [SerializeField] Button saveBtn;        //淇濆瓨闃靛瀷
+    [SerializeField] Button backBtn;      //閫�鍑虹晫闈�
+    [SerializeField] GroupButtonEx jjcBtn;       //绔炴妧鍦�
+    [SerializeField] GroupButtonEx tttBtn;        //閫氬ぉ濉�
+    [SerializeField] GroupButtonEx mainFBBtn;     //涓荤嚎鍓湰
+
+    //缇佺粖
+    [SerializeField] HeroConnectionCell connetionForm;
+
+
+    protected override void InitComponent()
+    {
+        attackTeamBtn.AddListener(() =>
+        {
+            if (HeroUIManager.Instance.selectTeamType == TeamType.Arena)
+            {
+                return;
+            }
+
+            HeroUIManager.Instance.selectTeamType = TeamType.Arena;
+            Refresh();
+        });
+        defendTeamBtn.AddListener(() =>
+        {
+            if (HeroUIManager.Instance.selectTeamType == TeamType.ArenaDefense)
+            {
+                return;
+            }
+            HeroUIManager.Instance.selectTeamType = TeamType.ArenaDefense;
+            Refresh();
+        });
+    }
+
+
+    protected override void OnPreOpen()
+    {
+        heroListScroller.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        Refresh();
+    }
+
+    protected override void OnPreClose()
+    {
+        heroListScroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+    public override void Refresh()
+    {
+        OnBattleTeamAttrPer();
+        RefreshOnTeamCountry();
+        RefreshOnTeamBtn();
+    }
+
+
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as HeroCardLineCell;
+        _cell.Display(cell.index);
+    }
+
+    void CreateScroller()
+    {
+        heroListScroller.Refresh();
+        for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
+        {
+            if (i % 4 == 0)
+            {
+                heroListScroller.AddCell(ScrollerDataType.Header, i);
+            }
+        }
+        heroListScroller.Restart();
+    }
+
+    //涓婇樀鍔犳垚
+    void OnBattleTeamAttrPer()
+    {
+        var valuePer = 0;
+        var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType);
+        if (team != null)
+        {
+            for (int i = 0; i < team.serverData.Length; i++)
+            {
+                var hero = HeroManager.Instance.GetHero(team.serverData[i].guid);
+                if (hero != null)
+                {
+                    valuePer += hero.GetOnBattleAddPer();
+                }
+            }
+
+        }
+        //涓婇樀灞炴��
+        for (int i = 0; i < attrOnList.Length; i++)
+        {
+            attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
+        }
+    }
+
+    //涓婇樀姝﹀皢鍥藉鍏夌幆婵�娲�
+    void RefreshOnTeamCountry()
+    {
+        Int2 result = HeroUIManager.Instance.GetMaxCountHeroCountry(HeroUIManager.Instance.selectTeamType);
+
+        var config = HeroLineupHaloConfig.GetConfig(result.x, result.y);
+        if (config == null)
+        {
+            countryOnImg.SetSprite("heroTeamCountry" + result.x);
+            for (int i = 0; i < OnCountImgs.Count; i++)
+            {
+                OnCountImgs[i].SetActive(false);
+            }
+        }
+        else
+        {
+            countryOnImg.SetSprite("heroTeamCountry" + result.x);
+            for (int i = 0; i < OnCountImgs.Count; i++)
+            {
+                if (i < result.y)
+                {
+                    OnCountImgs[i].SetActive(true);
+                    OnCountImgs[i].SetSprite("heroTeamCountryPoint" + result.x);
+                }
+                else
+                {
+                    OnCountImgs[i].SetActive(false);
+                }
+            }
+        }
+
+    }
+
+    //绠$悊甯冮樀鍏ュ彛鎸夐挳锛氬绔炴妧鍦烘槸鍚︽牴鎹姛鑳芥樉闅愶紝閫氬ぉ濉斿拰涓荤嚎鍙湁杩涙敾鏂瑰竷闃甸粯璁や笉鏄剧ず
+    void RefreshOnTeamBtn()
+    {
+        if (HeroUIManager.Instance.selectTeamType == TeamType.Arena ||
+            HeroUIManager.Instance.selectTeamType == TeamType.ArenaDefense)
+        {
+            attackTeamBtn.SetActive(true);
+            defendTeamBtn.SetActive(true);
+            if (HeroUIManager.Instance.selectTeamType == TeamType.Arena)
+            {
+                attackTeamBtn.SelectBtn(true);
+            }
+            else
+            {
+                defendTeamBtn.SelectBtn(true);
+            }
+        }
+        else
+        {
+            attackTeamBtn.SetActive(false);
+            defendTeamBtn.SetActive(false);
+        }
+
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroPosWin.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroPosWin.cs.meta
index 7153f8c..75db512 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroPosWin.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: c8849c7f1a741cc438948b5f03557325
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroScenePosCell.cs b/Main/System/HeroUI/HeroScenePosCell.cs
new file mode 100644
index 0000000..29ebb39
--- /dev/null
+++ b/Main/System/HeroUI/HeroScenePosCell.cs
@@ -0,0 +1,30 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+//甯冮樀涓殑 姝﹀皢瑙掕壊
+public class HeroScenePosCell : MonoBehaviour
+{
+    [SerializeField] Button heroBtn;
+    [SerializeField] Text jobTip;
+    [SerializeField] Text posTip;
+    [SerializeField] Image countryImg;
+    [SerializeField] Text nameText;
+    [SerializeField] Text lvText;
+    [SerializeField] UIHeroController heroModel;
+    [SerializeField] Image posCircleImg;
+
+    public void Display(string guid)
+    {
+        var hero = HeroManager.Instance.GetHero(guid);
+
+        lvText.text = Language.Get("L1094") + hero.heroLevel.ToString();
+        var heroConfig = hero.heroConfig;
+        countryImg.SetSprite("herocountry" + heroConfig.Country);
+        heroModel.Create(heroConfig.SkinIDList[hero.SkinIndex], heroConfig.UIScale);
+
+
+        nameText.text = hero.breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv", heroConfig.Name, hero.breakLevel);
+
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroScenePosCell.cs.meta
similarity index 69%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroScenePosCell.cs.meta
index 7153f8c..63fc7de 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroScenePosCell.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 5568cf8758fcecf45ac471d4b4bbd6fe
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroSelectBehaviour.cs b/Main/System/HeroUI/HeroSelectBehaviour.cs
new file mode 100644
index 0000000..ced69f9
--- /dev/null
+++ b/Main/System/HeroUI/HeroSelectBehaviour.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+//姝﹀皢绛涢��
+public class HeroSelectBehaviour : MonoBehaviour
+{
+    [SerializeField] Transform unFoldForm;  //灞曞紑鍚庣殑瀹瑰櫒
+    [SerializeField] Button foldBtn;    //鏀惰捣鎸夐挳
+    [SerializeField] Transform foldForm;    //鏀惰捣瀹瑰櫒
+    [SerializeField] Button unFoldBtn;  //灞曞紑鎸夐挳
+    [SerializeField] GroupButtonEx[] jobsBtn;
+    [SerializeField] GroupButtonEx[] countrysBtn;
+    [SerializeField] GroupButtonExManager jobManager; 
+    [SerializeField] GroupButtonExManager countryManager; 
+
+    int m_Job = 0;
+    int m_Country = 0;
+    int foldState = 0;  //0 鏀惰捣锛�1 灞曞紑
+
+    //鐐瑰嚮鎸夐挳闇�閫氱煡鍝嶅簲澶栭儴浜嬩欢
+    public Action<int, int> selectAction;
+    
+
+
+
+    void Awake()
+    {
+        foldBtn.AddListener(() =>
+        {
+            foldState = 0;
+            RefreshFolState();
+        });
+        unFoldBtn.AddListener(() =>
+        {
+            foldState = 1;
+            RefreshFolState();
+        });
+
+        for (int i = 0; i < jobsBtn.Length; i++)
+        {
+            int index = i;
+            jobsBtn[i].AddListener(() =>
+            {
+                m_Job = index;
+                RefreshJobsBtn();
+                selectAction?.Invoke(m_Job, m_Country);
+            });
+        }
+
+        for (int i = 0; i < countrysBtn.Length; i++)
+        {
+            int index = i;
+            countrysBtn[i].AddListener(() =>
+            {
+                m_Country = index;
+                RefreshCountryBtn();
+                selectAction?.Invoke(m_Job, m_Country);
+            });
+        }
+
+    }
+
+    public void Display(int state, int job, int country, Action<int, int> onRefresh)
+    {
+        foldState = state;
+        m_Job = job;
+        m_Country = country;
+
+        RefreshFolState();
+        RefreshJobsBtn();
+        RefreshCountryBtn();
+        selectAction = onRefresh;
+
+    }
+
+
+    //鍒锋柊鍏ㄩ儴鍒嗙被 
+    void RefreshJobsBtn()
+    {
+        jobManager.SelectButton(jobsBtn[m_Job]);
+    }
+    //鍒锋柊鍏ㄩ儴鍒嗙被
+    void RefreshCountryBtn()
+    {
+        countryManager.SelectButton(countrysBtn[m_Country]);
+    }
+    //鍒锋柊灞曞紑鏀惰捣鐘舵��
+    void RefreshFolState()
+    {
+        unFoldBtn.SetActive(foldState == 1);
+        foldBtn.SetActive(foldState == 0);
+    }
+}
+
diff --git a/Main/Utility/GameObjectPool.cs.meta b/Main/System/HeroUI/HeroSelectBehaviour.cs.meta
similarity index 68%
copy from Main/Utility/GameObjectPool.cs.meta
copy to Main/System/HeroUI/HeroSelectBehaviour.cs.meta
index 7153f8c..8d61d9f 100644
--- a/Main/Utility/GameObjectPool.cs.meta
+++ b/Main/System/HeroUI/HeroSelectBehaviour.cs.meta
@@ -1,8 +1,7 @@
 fileFormatVersion: 2
-guid: 99e41fbb2b3832c41b1575b72c946cca
-timeCreated: 1504310243
-licenseType: Pro
+guid: 81701dbe94ee5914c97bbc39aa5a418f
 MonoImporter:
+  externalObjects: {}
   serializedVersion: 2
   defaultReferences: []
   executionOrder: 0
diff --git a/Main/System/HeroUI/HeroUIManager.cs b/Main/System/HeroUI/HeroUIManager.cs
index dd3f8e2..f5684fb 100644
--- a/Main/System/HeroUI/HeroUIManager.cs
+++ b/Main/System/HeroUI/HeroUIManager.cs
@@ -5,13 +5,20 @@
 
 using UnityEngine;
 
+//姝﹀皢鐩稿叧鐣岄潰鐨勬搷浣滄暟鎹鐞�
 public class HeroUIManager : GameSystemManager<HeroUIManager>
 {
+    //姝﹀皢鍒楄〃鐣岄潰
+    public List<string> heroSortList { get; private set; } = new List<string>();  //涓婇樀涓轰富绾跨殑鍒楄〃
 
+    public List<string> heroOnTeamSortList { get; private set; } = new List<string>();    //涓嶅悓涓婇樀鐨勫垪琛ㄦ帓搴�
+
+    public TeamType selectTeamType = TeamType.Story;  //褰撳墠閫変腑鐨勬槸鍝釜闃靛, 甯冮樀鐩稿叧閫昏緫浣跨敤
 
     public void OnBeforePlayerDataInitialize()
     {
-
+        heroSortList.Clear();
+        heroOnTeamSortList.Clear();
     }
 
     public void OnPlayerLoginOk()
@@ -28,13 +35,186 @@
 
     }
 
-    void ParseConfig()
+    public bool waitResortHeroList = false;
+
+
+    //鍒锋柊鏃舵満, 鎵撳紑姝﹀皢鐣岄潰 鎴栬�� 鍏抽棴鍔熻兘鐣岄潰
+    public void SortHeroList()
     {
+        heroSortList = HeroManager.Instance.GetHeroGuidList();
+        heroSortList.Sort(CmpHero);
     }
 
 
+    int CmpHero(string guidA, string guidB)
+    {
+        HeroInfo heroA = HeroManager.Instance.GetHero(guidA);
+        HeroInfo heroB = HeroManager.Instance.GetHero(guidB);
+        if (heroA == null || heroB == null)
+        {
+            return 0;
+        }
+
+        // 鎺掑簭瑙勫垯锛氫笂闃�>姝﹀皢绛夌骇锛炵獊鐮寸瓑绾э紴姝﹀皢瑙夐啋闃剁骇锛炴灏嗗搧璐紴姝﹀皢鍚炲櫖鏄熺骇锛炴灏咺D
+        bool isInTeamA = heroA.IsInTeamByTeamType(TeamType.Story);
+        bool isInTeamB = heroB.IsInTeamByTeamType(TeamType.Story);
+        if (isInTeamA != isInTeamB)
+        {
+            return isInTeamA ? -1 : 1;
+        }
+        if (heroA.heroLevel != heroB.heroLevel)
+        {
+            return heroA.heroLevel > heroB.heroLevel ? -1 : 1;
+        }
+        if (heroA.breakLevel != heroB.breakLevel)
+        {
+            return heroA.breakLevel > heroB.breakLevel ? -1 : 1;
+        }
+        if (heroA.awakeLevel != heroB.awakeLevel)
+        {
+            return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1;
+        }
+        if (heroA.Quality != heroB.Quality)
+        {
+            return heroA.Quality > heroB.Quality ? -1 : 1;
+        }
+        if (heroA.heroStar != heroA.heroStar)
+        {
+            return heroA.heroStar > heroB.heroStar ? -1 : 1;
+        }
+
+        return heroA.heroId.CompareTo(heroB.heroId);
+    }
+
+
+    public void SortHeroOnTeamList()
+    {
+        heroOnTeamSortList = HeroManager.Instance.GetHeroGuidList();
+        heroOnTeamSortList.Sort(CmpHeroByTeamType);
+    }
+
+
+    int CmpHeroByTeamType(string guidA, string guidB)
+    {
+        HeroInfo heroA = HeroManager.Instance.GetHero(guidA);
+        HeroInfo heroB = HeroManager.Instance.GetHero(guidB);
+        if (heroA == null || heroB == null)
+        {
+            return 0;
+        }
+
+        // 鎺掑簭瑙勫垯锛氫笂闃�>姝﹀皢绛夌骇锛炵獊鐮寸瓑绾э紴姝﹀皢瑙夐啋闃剁骇锛炴灏嗗搧璐紴姝﹀皢鍚炲櫖鏄熺骇锛炴灏咺D
+        bool isInTeamA = heroA.IsInTeamByTeamType(selectTeamType);
+        bool isInTeamB = heroB.IsInTeamByTeamType(selectTeamType);
+        if (isInTeamA != isInTeamB)
+        {
+            return isInTeamA ? -1 : 1;
+        }
+        if (heroA.heroLevel != heroB.heroLevel)
+        {
+            return heroA.heroLevel > heroB.heroLevel ? -1 : 1;
+        }
+        if (heroA.breakLevel != heroB.breakLevel)
+        {
+            return heroA.breakLevel > heroB.breakLevel ? -1 : 1;
+        }
+        if (heroA.awakeLevel != heroB.awakeLevel)
+        {
+            return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1;
+        }
+        if (heroA.Quality != heroB.Quality)
+        {
+            return heroA.Quality > heroB.Quality ? -1 : 1;
+        }
+        if (heroA.heroStar != heroA.heroStar)
+        {
+            return heroA.heroStar > heroB.heroStar ? -1 : 1;
+        }
+
+        return heroA.heroId.CompareTo(heroB.heroId);
+    }
+
+
+
     public void QueryUnLockHeroPack()
-    { 
+    {
         //瑙i攣鏇村鐨勬灏嗚儗鍖�
     }
+
+    //涓婇樀闃熶紞涓悇涓浗瀹剁殑姝﹀皢鏁伴噺
+    public Dictionary<HeroCountry, int> GetCountryHeroCountByTeamType(TeamType teamType)
+    {
+        Dictionary<HeroCountry, int> heroCountryCount = new Dictionary<HeroCountry, int>();
+
+        var team = TeamManager.Instance.GetTeam(teamType);
+        if (team != null)
+        {
+            for (int i = 0; i < team.serverData.Length; i++)
+            {
+                var hero = HeroManager.Instance.GetHero(team.serverData[i].guid);
+                if (hero != null)
+                {
+                    if (!heroCountryCount.ContainsKey(hero.heroCountry))
+                    {
+                        heroCountryCount.Add(hero.heroCountry, 1);
+                    }
+                    else
+                    {
+                        heroCountryCount[hero.heroCountry] += 1;
+                    }
+
+                }
+            }
+
+        }
+
+        return heroCountryCount;
+    }
+
+    //鑾峰緱涓婇樀涓灏嗘暟閲忔渶澶х殑鍥藉鍜屾暟閲�
+    public Int2 GetMaxCountHeroCountry(TeamType teamType)
+    {
+        var countryCount = GetCountryHeroCountByTeamType(teamType);
+        //鎵惧埌鏈�澶х殑鍥藉鍜屾暟閲�
+        HeroCountry country = HeroCountry.None;
+        int maxValue = 0;
+        foreach (var data in countryCount)
+        {
+            if (data.Value > maxValue)
+            {
+                country = data.Key;
+                maxValue = data.Value;
+            }
+        }
+        return new Int2((int)country, maxValue);
+    }
+
+    //AttackType 0 鏀诲嚮闃靛 1 闃插畧闃靛
+    int GetSelectTeamTypeByAttackType(int AttackType)
+    {
+        if (selectTeamType == TeamType.Arena)
+        {
+            if (AttackType == 0)
+            {
+                return (int)TeamType.Arena;
+            }
+            else if (AttackType == 1)
+            {
+                return (int)TeamType.ArenaDefense;
+            }
+        }
+        else if (selectTeamType == TeamType.ArenaDefense)
+        {
+            if (AttackType == 0)
+            {
+                return (int)TeamType.ArenaDefense;
+            }
+            else if (AttackType == 1)
+            {
+                return (int)TeamType.Arena;
+            }
+        }
+        
+        return (int)TeamType.Story;
+    }
 }
diff --git a/Main/System/KnapSack/Logic/ItemModel.cs b/Main/System/KnapSack/Logic/ItemModel.cs
index 7b674fd..bb054fd 100644
--- a/Main/System/KnapSack/Logic/ItemModel.cs
+++ b/Main/System/KnapSack/Logic/ItemModel.cs
@@ -165,8 +165,8 @@
         index = serverItem.ItemPlace;
         count = (int)serverItem.ItemCount;
         remainHour = (int)serverItem.RemainHour;
-        userData = serverItem.UserData;
-        guid = serverItem.ItemGUID;
+        userData = serverItem.UserData.Trim().Replace("\0", "");
+        guid =  serverItem.ItemGUID.Trim().Replace("\0", "");
         isAuction = serverItem.IsBind;
         gearScore = (int)serverItem.GearScore;
         isLock = serverItem.IsLocked > 0;
@@ -178,8 +178,9 @@
         index = serverItem.ItemPlace;
         count = (int)serverItem.ItemCount;
         remainHour = (int)serverItem.RemainHour;
-        userData = serverItem.UserData;
-        guid = serverItem.ItemGUID;
+        //瀛楃涓插悗闈㈡湁绌哄瓧绗﹂棶棰橈紝缁忓父浼氬鑷翠笉鍙鏂欑殑bug
+        userData = serverItem.UserData.Trim().Replace("\0", "");
+        guid = serverItem.ItemGUID.Trim().Replace("\0", "");
         isAuction = serverItem.IsBind;
         gearScore = (int)serverItem.GearScore;
         isLock = serverItem.IsLocked > 0;
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index e9090b8..3b77d73 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -19,7 +19,7 @@
     [SerializeField] Text taskNumText;
     [SerializeField] Image awardIcon;
     [SerializeField] Text awardCnt;
-    [SerializeField] EffectPlayer taskEffect;
+    [SerializeField] UIEffectPlayer taskEffect;
 
 
     //鍏冲崱
@@ -52,6 +52,9 @@
         TaskManager.Instance.OnTaskUpdate += UpdateTask;
         Refresh();
         UIManager.Instance.OpenWindow<BattleWin>();
+
+        taskEffect.effectId = Random.Range(1007, 1008);
+        taskEffect.Play();
     }
     protected override void OnOpen()
     {
diff --git a/Main/System/Message/WaitCallBack.cs b/Main/System/Message/WaitCallBack.cs
index 6137ec6..8174851 100644
--- a/Main/System/Message/WaitCallBack.cs
+++ b/Main/System/Message/WaitCallBack.cs
@@ -2,168 +2,168 @@
 using System.Collections.Generic;
 using UnityEngine;
 
+/// <summary>
+/// 寤惰繜鍑犵鎵ц浜嬩欢
+/// </summary>
+public class WaitCallBack : MonoBehaviour
+{
+    internal float waitTime = 2.0f;
+
+    public bool doOnAwake = false;
     /// <summary>
-    /// 寤惰繜鍑犵鎵ц浜嬩欢
+    /// 鏃堕棿鍒拌揪鍥炶皟
     /// </summary>
-    public class WaitCallBack : MonoBehaviour
+    public Action<Component> OnCompelete;
+    /// <summary>
+    /// 姣忓抚鍥炶皟
+    /// </summary>
+    public Action<Component> OnWait;
+
+    internal static Dictionary<GameObject, WaitCallBack> waitDic = new Dictionary<GameObject, WaitCallBack>();
+
+    private float m_Time = 0;
+
+    private bool start = false;
+
+    private Component m_Comp;
+
+    private void Awake()
     {
-        internal float waitTime = 2.0f;
-
-        public bool doOnAwake = false;
-        /// <summary>
-        /// 鏃堕棿鍒拌揪鍥炶皟
-        /// </summary>
-        public Action<Component> OnCompelete;
-        /// <summary>
-        /// 姣忓抚鍥炶皟
-        /// </summary>
-        public Action<Component> OnWait;
-
-        internal static Dictionary<GameObject, WaitCallBack> waitDic = new Dictionary<GameObject, WaitCallBack>();
-
-        private float m_Time = 0;
-
-        private bool start = false;
-
-        private Component m_Comp;
-
-        private void Awake()
+        if (doOnAwake)
         {
-            if (doOnAwake)
-            {
-                Play();
-            }
-        }
-
-        private void OnDisable()
-        {
-            Stop();
-        }
-
-        private void Update()
-        {
-            if (start)
-            {
-                m_Time += Time.deltaTime;
-                if (m_Time >= waitTime)
-                {
-                    Stop();
-                    if (OnCompelete != null)
-                        OnCompelete(m_Comp);
-                }
-                if (OnWait != null && start)
-                    OnWait(m_Comp);
-            }
-        }
-
-        internal void Play()
-        {
-            start = true;
-        }
-
-        internal void Restart()
-        {
-            m_Time = 0;
             Play();
         }
-
-        internal void Stop()
-        {
-            m_Time = 0;
-            start = false;
-        }
-
-        internal void Pause()
-        {
-            start = false;
-        }
-
-        private void OnDestroy()
-        {
-            if (waitDic.ContainsKey(gameObject))
-            {
-                waitDic.Remove(gameObject);
-            }
-        }
-
-        internal void AddWaitDic(Component go)
-        {
-            m_Comp = go;
-            waitDic.Add(go.gameObject, this);
-        }
     }
 
-    public static class Helper
+    private void OnDisable()
     {
-        public static void DoWaitStart(this Component go)
-        {
-            if (GetWait(go) == null)
-                return;
-            GetWait(go).Play();
-        }
+        Stop();
+    }
 
-        public static void OnWaitCompelete(this Component go, Action<Component> func)
+    private void Update()
+    {
+        if (start)
         {
-            WaitCallBack wait = GetWait(go);
-            if (wait == null)
-                return;
-            wait.OnCompelete = func;
-        }
-
-        public static void OnWait(this Component go, Action<Component> func)
-        {
-            WaitCallBack wait = GetWait(go);
-            if (wait == null)
-                return;
-            wait.OnWait = func;
-        }
-
-        public static void DoWaitRestart(this Component go)
-        {
-            if (GetWait(go) == null)
-                return;
-            GetWait(go).Restart();
-        }
-
-        public static void DoWaitStop(this Component go)
-        {
-            if (GetWait(go) == null)
-                return;
-            GetWait(go).Stop();
-        }
-
-        public static void DoWaitPause(this Component go)
-        {
-            if (GetWait(go) == null)
-                return;
-            GetWait(go).Pause();
-        }
-
-        public static WaitCallBack GetWait(Component go)
-        {
-            WaitCallBack wait = null;
-            if (go == null)
-                return null;
-            WaitCallBack.waitDic.TryGetValue(go.gameObject, out wait);
-            if (wait == null)
+            m_Time += Time.deltaTime;
+            if (m_Time >= waitTime)
             {
-                wait = go.GetComponent<WaitCallBack>();
-                if (wait == null)
-                {
-                    wait = go.gameObject.AddComponent<WaitCallBack>();
-                }
-                wait.AddWaitDic(go);
+                Stop();
+                if (OnCompelete != null)
+                    OnCompelete(m_Comp);
             }
-            return wait;
-        }
-
-        public static void SetWait(this Component comp, float time)
-        {
-            WaitCallBack wait = GetWait(comp);
-            if (wait != null)
-            {
-                wait.waitTime = time;
-            }
+            if (OnWait != null && start)
+                OnWait(m_Comp);
         }
     }
 
+    internal void Play()
+    {
+        start = true;
+    }
+
+    internal void Restart()
+    {
+        m_Time = 0;
+        Play();
+    }
+
+    internal void Stop()
+    {
+        m_Time = 0;
+        start = false;
+    }
+
+    internal void Pause()
+    {
+        start = false;
+    }
+
+    private void OnDestroy()
+    {
+        if (waitDic.ContainsKey(gameObject))
+        {
+            waitDic.Remove(gameObject);
+        }
+    }
+
+    internal void AddWaitDic(Component go)
+    {
+        m_Comp = go;
+        waitDic.Add(go.gameObject, this);
+    }
+}
+
+public static class Helper
+{
+    public static void DoWaitStart(this Component go)
+    {
+        if (GetWait(go) == null)
+            return;
+        GetWait(go).Play();
+    }
+
+    public static void OnWaitCompelete(this Component go, Action<Component> func)
+    {
+        WaitCallBack wait = GetWait(go);
+        if (wait == null)
+            return;
+        wait.OnCompelete = func;
+    }
+
+    public static void OnWait(this Component go, Action<Component> func)
+    {
+        WaitCallBack wait = GetWait(go);
+        if (wait == null)
+            return;
+        wait.OnWait = func;
+    }
+
+    public static void DoWaitRestart(this Component go)
+    {
+        if (GetWait(go) == null)
+            return;
+        GetWait(go).Restart();
+    }
+
+    public static void DoWaitStop(this Component go)
+    {
+        if (GetWait(go) == null)
+            return;
+        GetWait(go).Stop();
+    }
+
+    public static void DoWaitPause(this Component go)
+    {
+        if (GetWait(go) == null)
+            return;
+        GetWait(go).Pause();
+    }
+
+    public static WaitCallBack GetWait(Component go)
+    {
+        WaitCallBack wait = null;
+        if (go == null)
+            return null;
+        WaitCallBack.waitDic.TryGetValue(go.gameObject, out wait);
+        if (wait == null)
+        {
+            wait = go.GetComponent<WaitCallBack>();
+            if (wait == null)
+            {
+                wait = go.gameObject.AddComponent<WaitCallBack>();
+            }
+            wait.AddWaitDic(go);
+        }
+        return wait;
+    }
+
+    public static void SetWait(this Component comp, float time)
+    {
+        WaitCallBack wait = GetWait(comp);
+        if (wait != null)
+        {
+            wait.waitTime = time;
+        }
+    }
+}
+
diff --git a/Main/System/PhantasmPavilion/AvatarCell.cs b/Main/System/PhantasmPavilion/AvatarCell.cs
index 0d9cade..876ffb9 100644
--- a/Main/System/PhantasmPavilion/AvatarCell.cs
+++ b/Main/System/PhantasmPavilion/AvatarCell.cs
@@ -88,27 +88,27 @@
         }
     }
 
-    EffectPlayer m_AvatarUIEffect;
-    private EffectPlayer avatarUIEffect
+    UIEffectPlayer m_AvatarUIEffect;
+    private UIEffectPlayer avatarUIEffect
     {
         get
         {
             if (m_AvatarUIEffect == null)
             {
-                m_AvatarUIEffect = this.GetComponent<EffectPlayer>("AvatarCell/Img_Avatar");
+                m_AvatarUIEffect = this.GetComponent<UIEffectPlayer>("AvatarCell/Img_Avatar");
             }
             return m_AvatarUIEffect;
         }
     }
 
-    EffectPlayer m_AvatarFrameUIEffect;
-    private EffectPlayer avatarFrameUIEffect
+    UIEffectPlayer m_AvatarFrameUIEffect;
+    private UIEffectPlayer avatarFrameUIEffect
     {
         get
         {
             if (m_AvatarFrameUIEffect == null)
             {
-                m_AvatarFrameUIEffect = this.GetComponent<EffectPlayer>("AvatarCell/Img_AvatarFrame");
+                m_AvatarFrameUIEffect = this.GetComponent<UIEffectPlayer>("AvatarCell/Img_AvatarFrame");
             }
             return m_AvatarFrameUIEffect;
         }
diff --git a/Main/System/Team/TeamManager.cs b/Main/System/Team/TeamManager.cs
index 9fe2403..15434cd 100644
--- a/Main/System/Team/TeamManager.cs
+++ b/Main/System/Team/TeamManager.cs
@@ -34,6 +34,10 @@
 	{
 		//  鑻遍泟褰撳墠鎵�鏈夊湪鐨勯槦浼�
 		List<int> heroTeams = heroInfo.itemHero.GetUseData(81);
+		if (heroTeams == null || heroTeams.Count == 0)
+		{
+			return;
+		}
 
 
 		//  褰撳墠鑻遍泟鎵�鍦ㄧ殑闃熶紞淇℃伅 <闃熶紞绫诲瀷, <闃熷舰, 浣嶇疆>>
@@ -151,9 +155,10 @@
 
 		if (!teamDict.TryGetValue(teamType, out team))
 		{
-			team = new TeamBase(teamType);
-			team.CreateDefault(HeroManager.Instance.GetPowerfulHeroList());
-			teamDict.Add(teamType, team);
+			// 娴嬭瘯鐢�
+			// team = new TeamBase(teamType);
+			// team.CreateDefault(HeroManager.Instance.GetPowerfulHeroList());
+			// teamDict.Add(teamType, team);
 		}
 
 		return team;
diff --git a/Main/System/Team/TeamType.cs b/Main/System/Team/TeamType.cs
index b63dd06..2b1654a 100644
--- a/Main/System/Team/TeamType.cs
+++ b/Main/System/Team/TeamType.cs
@@ -1,12 +1,14 @@
 
-
+//涓庢湇鍔$鐨勭害瀹�  瀵瑰簲鍑芥暟GetSelectTeamTypeByAttackType
 public enum TeamType
 {
 	None = 0,
 	//	PVE
 	Story = 1,
-	
+	//	PVP 杩涙敾
+	Arena = 21,
+	//	PVP 闃插畧
+	ArenaDefense = 22,
+	Tower = 3,
+}
 
-	//	PVP
-	Arena = 101,
-}
\ No newline at end of file
diff --git a/Main/System/Tip/MarqueeWin.cs b/Main/System/Tip/MarqueeWin.cs
index c356d54..bbaf59b 100644
--- a/Main/System/Tip/MarqueeWin.cs
+++ b/Main/System/Tip/MarqueeWin.cs
@@ -12,7 +12,7 @@
     [SerializeField] RichText marqueeText;
     [SerializeField] RectTransform marqueeBg;
     [SerializeField] TweenCurve tweenCurve;
-    [SerializeField] EffectPlayer m_Effect;
+    [SerializeField] UIEffectPlayer m_Effect;
 
     Vector3 fromPos;
     Vector3 toPos;
diff --git a/Main/System/UIBase/UIBase.cs b/Main/System/UIBase/UIBase.cs
index 2c5b83d..02d2031 100644
--- a/Main/System/UIBase/UIBase.cs
+++ b/Main/System/UIBase/UIBase.cs
@@ -353,17 +353,15 @@
     /// <summary>
     /// 鎾斁UI鐗规晥
     /// </summary>
-    /// <param name="effectName">鐗规晥璧勬簮鍚嶇О</param>
+    /// <param name="id">鐗规晥璧勬簮鍚嶇О</param>
     /// <param name="parent">鐗规晥鐖惰妭鐐癸紝榛樿涓哄綋鍓峌I</param>
-    /// <param name="autoDestroy">鏄惁鑷姩閿�姣侊紝榛樿涓簍rue</param>
-    /// <param name="destroyDelay">鑷姩閿�姣佸欢杩熸椂闂达紝榛樿涓�5绉�</param>
     /// <returns>鐗规晥娓告垙瀵硅薄</returns>
-    public EffectPlayer PlayUIEffect(int id, Transform parent = null)
+    public UIEffectPlayer PlayUIEffect(int id, Transform parent = null)
     {
         // 浣跨敤榛樿鍊�
         if (parent == null) parent = transform;
 
-        return EffectPlayer.Create(id, parent, false);
+        return UIEffectPlayer.CreateEffect(id, parent, false);
     }
     
     #endregion
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 767adfe..a597a7f 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -1633,8 +1633,8 @@
 
 public enum TitleBtnState
 {
-    Normal,
-    Click,
+    Normal, //闈炵偣鍑荤姸鎬�
+    Click,  //鐐瑰嚮鍚庣姸鎬�
     Locked,
 }
 
diff --git a/Main/Utility/GameObjectPool.cs b/Main/Utility/GameObjectPool.cs
deleted file mode 100644
index 5f294d8..0000000
--- a/Main/Utility/GameObjectPool.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-
-public class GameObjectPool
-{
-
-    private List<GameObject> m_FreeList;
-    private List<GameObject> m_ActiveList;
-    private GameObject m_Prefab;
-
-    public int nameHashCode;
-    public string name;
-
-    public GameObjectPool(GameObject prefab)
-    {
-        name = prefab.name;
-        nameHashCode = name.GetHashCode();
-
-        m_Prefab = prefab;
-        m_FreeList = new List<GameObject>();
-        m_ActiveList = new List<GameObject>();
-    }
-
-    public GameObject Request()
-    {
-        GameObject _gameObject = null;
-        if (m_FreeList.Count == 0)
-        {
-            _gameObject = Object.Instantiate(m_Prefab);
-            _gameObject.name = name;
-        }
-        else
-        {
-            _gameObject = m_FreeList[0];
-            m_FreeList.RemoveAt(0);
-        }
-        m_ActiveList.Add(_gameObject);
-        return _gameObject;
-    }
-
-    public void Release(GameObject gameObject)
-    {
-        if (m_ActiveList.Contains(gameObject))
-        {
-            m_ActiveList.Remove(gameObject);
-        }
-        else
-        {
-            Debug.LogWarningFormat("鎵�鍥炴敹鐨刧o瀵硅薄 {0} 骞朵笉鏄粠姹犻噷鍙栧緱鐨�...", gameObject.name);
-        }
-        m_FreeList.Add(gameObject);
-       
-    }
-
-    public void Clear()
-    {
-        foreach (var _item in m_FreeList)
-        {
-            Object.Destroy(_item);
-        }
-        foreach (var _item in m_ActiveList)
-        {
-            Object.Destroy(_item);
-        }
-        m_FreeList.Clear();
-        m_ActiveList.Clear();
-    }
-
-    public void Destroy()
-    {
-
-        Clear();
-
-        m_Prefab = null;
-
-        m_FreeList = null;
-        m_ActiveList = null;
-    }
-
-#if UNITY_EDITOR
-    public void ForeachActive(System.Action<GameObject> method)
-    {
-        for (int i = m_ActiveList.Count - 1; i >= 0; --i)
-        {
-            method(m_ActiveList[i]);
-        }
-    }
-
-    public void ForeachFree(System.Action<GameObject> method)
-    {
-        for (int i = m_FreeList.Count - 1; i >= 0; --i)
-        {
-            method(m_FreeList[i]);
-        }
-    }
-#endif
-}

--
Gitblit v1.8.0