From 7bd85eb8d0b9664f4645534b42c82ab0f32754d3 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 15 八月 2025 16:30:24 +0800
Subject: [PATCH] 50 【主界面】核心主体 - 装备部分掉落分解穿戴

---
 Main/System/Equip/EquipTipWin.cs.meta                                                    |    2 
 Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB415_tagCSMainDropItemOP.cs         |   42 
 Main/System/Main/AutoFightModel.cs.meta                                                  |    2 
 Main/System/KnapSack/New/CommonItemBaisc.cs                                              |   16 
 Main/System/KnapSack/Logic/ItemModel.cs                                                  |    2 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs.meta  |    2 
 Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs                |   21 
 Main/System/Tip/ConfirmCancel.cs                                                         |    4 
 Main/Utility/EnumHelper.cs                                                               |   56 
 Main/System/Equip/FloorItemCell.cs.meta                                                  |    2 
 Main/System/Main/FightPowerManager.cs                                                    |  236 +++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs      |   15 
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs                 |   29 
 Main/System/Equip/EquipCell.cs.meta                                                      |    2 
 Main/System/Equip/EquipExchangeWin.cs.meta                                               |    2 
 Main/System/Equip/EquipCell.cs                                                           |   79 +
 Main/System/Main/MoneyMoveByPath.cs.meta                                                 |    2 
 Main/System/Main/EquipOnMainUI.cs                                                        |  144 +++
 Main/System/Equip/EquipModel.cs                                                          |  338 ++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs           |    2 
 Main/System/Equip/EquipExchangeCell.cs.meta                                              |    2 
 Main/System/Main/MoneyMoveByPath.cs                                                      |  115 ++
 Main/Config/ConfigManager.cs                                                             |    3 
 Main/Component/UI/Effect/UIEffectPlayer.cs                                               |   18 
 Main/System/Equip/FloorItemCell.cs                                                       |  101 ++
 Main/System/Equip/EquipExchangeCell.cs                                                   |  332 +++++++
 Main/System/KnapSack/Logic/ItemLogicUtility.cs                                           |  138 ---
 Main/Component/UI/Core/OutlineEx.cs                                                      |   12 
 Main/System/Equip/EquipTipWin.cs                                                         |  125 ++
 Main/System/GeneralConfig/GeneralDefine.cs                                               |   14 
 Main/System/Hero/HeroManager.cs                                                          |    2 
 Main/System/Main/HomeWin.cs                                                              |   36 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs       |   11 
 Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs.meta           |    2 
 Main/System/KnapSack/Logic/SinglePack.cs                                                 |    8 
 Main/Component/UI/Effect/EffectPlayer.cs                                                 |   16 
 Main/Config/ConfigParse.cs                                                               |   20 
 Main/System/Message/HrefAnalysis.cs                                                      |    2 
 Main/System/Equip/EquipExchangeWin.cs                                                    |   78 +
 Main/System/Main/AutoFightModel.cs                                                       |   26 
 Main/System/KnapSack/PackManager.cs                                                      |   38 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs.meta |    2 
 Main/System/Main/EquipOnMainUI.cs.meta                                                   |    2 
 Main/System/ItemTip/ItemTipUtility.cs                                                    |   13 
 Main/System/Dungeon/DungeonData.cs                                                       |    4 
 /dev/null                                                                                |   12 
 Main/Utility/UIHelper.cs                                                                 |  357 +++----
 Main/Config/Configs/MainChapterConfig.cs                                                 |    5 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                     |    1 
 Main/System/Equip/ItemsOnFloor.cs                                                        |  118 ++
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs.meta            |    2 
 Main/System/Equip/ItemsOnFloor.cs.meta                                                   |    2 
 Main/System/Main/FightPowerManager.cs.meta                                               |    0 
 53 files changed, 2,083 insertions(+), 532 deletions(-)

diff --git a/Main/Component/UI/Core/OutlineEx.cs b/Main/Component/UI/Core/OutlineEx.cs
index e1ee362..2deb388 100644
--- a/Main/Component/UI/Core/OutlineEx.cs
+++ b/Main/Component/UI/Core/OutlineEx.cs
@@ -9,7 +9,16 @@
 public class OutlineEx : BaseMeshEffect
 {
     [Header("鏂皊hader鎻忚竟")]
-    public Color OutlineColor = new Color(0, 0, 0, 0.5f);// Color.black;
+    public Color m_OutlineColor= new Color(0, 0, 0, 0.5f);// Color.black;
+    public Color OutlineColor
+    {
+        get { return m_OutlineColor; }
+        set
+        {
+            m_OutlineColor = value;
+            this._Refresh();
+        }
+    }
 
     QualityTextColType m_ColorType = QualityTextColType.None;
     public QualityTextColType colorType
@@ -21,7 +30,6 @@
             {
                 m_ColorType = value;
                 OutlineColor = UIHelper.GetUIOutlineColor(value);
-                this._Refresh();
             }
         }
     }
diff --git a/Main/Component/UI/Effect/EffectPlayer.cs b/Main/Component/UI/Effect/EffectPlayer.cs
index e90c9f8..a86d3b7 100644
--- a/Main/Component/UI/Effect/EffectPlayer.cs
+++ b/Main/Component/UI/Effect/EffectPlayer.cs
@@ -51,6 +51,7 @@
     protected EffectPenetrationBlocker blocker = null;
 
     protected bool isInit = false;
+    protected bool isPlaying = false;
 
     protected List<ParticleSystem> particleList = new List<ParticleSystem>();
 
@@ -69,8 +70,11 @@
     {
         if (spineComp != null)
         {
-            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
-            spineComp.enabled = false;
+            if (!isPlaying)
+            { 
+                //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+                spineComp.enabled = false;
+            }
         }
     }
 
@@ -127,9 +131,12 @@
             }
             effectTarget = null;
         }
-
+        if (spineComp != null)
+        {
+            spineComp.enabled = false;
+        }
         isInit = false;
-
+        isPlaying = false;
         Clear();
         onComplete?.Invoke();
     }
@@ -271,6 +278,7 @@
         if (isReleaseImmediately)
         {
             spineComp.enabled = false;
+            isPlaying = false;
             Stop();
         }
     }
diff --git a/Main/Component/UI/Effect/UIEffectPlayer.cs b/Main/Component/UI/Effect/UIEffectPlayer.cs
index cfae60e..c71396f 100644
--- a/Main/Component/UI/Effect/UIEffectPlayer.cs
+++ b/Main/Component/UI/Effect/UIEffectPlayer.cs
@@ -22,6 +22,8 @@
 
     int playSpineAnimIndex = -1; //鎾斁spine鐗规晥鍔ㄧ敾绱㈠紩,
 
+
+
     protected override void OnEnable()
     {
         playSpineAnimIndex = -1;
@@ -31,13 +33,17 @@
         }
         else if (spineComp != null)
         {
-            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
-            spineComp.enabled = false;
+            if (!isPlaying)
+            {
+                //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+                spineComp.enabled = false;
+            }
         }
     }
 
     public override void Play(bool showLog = true)
     {
+        isPlaying = true;
         if (!isInit)
         {
             InitComponent(showLog);
@@ -51,7 +57,7 @@
                 this.gameObject.SetActive(true);
             }
             if (effectConfig.isSpine != 0)
-            { 
+            {
                 PlayerTheSpineAnim();
             }
             return;
@@ -80,7 +86,7 @@
             PlaySpineEffect();
         }
         else
-        { 
+        {
             PlayerEffect(false);
         }
         SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
@@ -142,7 +148,7 @@
     }
 
     async UniTask PlayAsync(bool showLog = true)
-    { 
+    {
         await UniTask.Delay(playDelayTime);
         Play(showLog);
     }
@@ -171,6 +177,7 @@
         if (!isPlaySpineLoop)
         {
             spineComp.enabled = false;
+            isPlaying = false;
             if (isReleaseImmediately)
             {
                 Stop();
@@ -204,4 +211,5 @@
         return effectPlayer;
     }
 
+
 }
diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 88d91a4..8d2b82d 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -42,7 +42,6 @@
             typeof(CTGConfig),
             typeof(DamageNumConfig),
             typeof(DirtyWordConfig),
-            typeof(EquipGSParamConfig),
             typeof(FaceConfig),
             typeof(HeroLineupHaloConfig),
             typeof(HeroQualityLVConfig),
@@ -220,8 +219,6 @@
         ClearConfigDictionary<DamageNumConfig>();
         // 娓呯┖ DirtyWordConfig 瀛楀吀
         ClearConfigDictionary<DirtyWordConfig>();
-        // 娓呯┖ EquipGSParamConfig 瀛楀吀
-        ClearConfigDictionary<EquipGSParamConfig>();
         // 娓呯┖ FaceConfig 瀛楀吀
         ClearConfigDictionary<FaceConfig>();
         // 娓呯┖ HeroLineupHaloConfig 瀛楀吀
diff --git a/Main/Config/ConfigParse.cs b/Main/Config/ConfigParse.cs
index 8e2f2f8..1d7e066 100644
--- a/Main/Config/ConfigParse.cs
+++ b/Main/Config/ConfigParse.cs
@@ -206,7 +206,6 @@
     }
 
     //{'17':['63','6','27'],'65':['800'],'55':['139'],'19':['1000','2600','130']}
-    public static Regex userDataRegex = new Regex(@"'([0-9]+)':\[(.*?)\]", RegexOptions.Singleline);
     public static Dictionary<int, List<int>> Analysis(string val)//姝e垯琛ㄨ揪寮忕殑瀛楃涓插垎鍓�
     {
         string s = ServerStringTrim(val);
@@ -265,23 +264,8 @@
         //}
     }
 
-    public static Dictionary<int, List<int>> ParseJsonDict(string jsonStr)
-    {
-        if (jsonStr == "{}" || string.IsNullOrEmpty(jsonStr))
-        {
-            return new Dictionary<int, List<int>>();
-        }
-        var dict = JsonMapper.ToObject<Dictionary<string, List<int>>>(jsonStr);
-        Dictionary<int, List<int>> result = new Dictionary<int, List<int>>();
 
-        foreach (var item in dict)
-        {
-            result[int.Parse(item.Key)] = item.Value;
-        }
-
-        return result;
-    }
-
+    //json鏍煎紡锛� {"1":1}
     public static Dictionary<int, int> ParseIntDict(string jsonStr)
     {
         if (jsonStr == "{}" || string.IsNullOrEmpty(jsonStr))
@@ -299,6 +283,7 @@
         return result;
     }
 
+    //json鏍煎紡锛� {"1":[1,2],"2":[3,4]}
     public static Dictionary<int, int[]> ParseIntArrayDict(string jsonStr)
     {
         if (jsonStr == "{}" || string.IsNullOrEmpty(jsonStr))
@@ -316,6 +301,7 @@
         return result;
     }
 
+    //json鏍煎紡锛� {"1":[[1,2],[3,4]]}
     public static Dictionary<int, int[][]> ParseIntArray2Dict(string jsonStr)
     {
         if (jsonStr == "{}" || string.IsNullOrEmpty(jsonStr))
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs b/Main/Config/Configs/EquipGSParamConfig.cs
deleted file mode 100644
index 4cab68f..0000000
--- a/Main/Config/Configs/EquipGSParamConfig.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�8鏈�5鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class EquipGSParamConfig : ConfigBase<int, EquipGSParamConfig>
-{
-    static EquipGSParamConfig()
-    {
-        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
-        visit = true; 
-    }
-
-    public int ID;
-	public int EquipClass;
-	public int EquipColor;
-	public int IsSuit;
-	public int Star;
-	public int BaseEquipMaxHPAddPerC;
-	public int BaseEquipAtkAddPerC;
-	public int SuperHitC;
-	public int SuperHitPerC;
-	public int LuckyHitRateC;
-	public int LuckyHitRateReduceC;
-	public int LuckPerC;
-	public int PerLVAtkC;
-	public int PerLVMaxHPC;
-	public int DropMoneyPerC;
-	public int SuperHitReduceC;
-	public int SuperHitRateReduceC;
-	public int HitC;
-	public int MissC;
-	public int PetDamPerC;
-	public int MaxHPPerC;
-	public int AtkPerC;
-	public int SkillAtkRateC;
-	public int SkillAtkRateReduceC;
-	public int SkillAddPerAC;
-	public int SkillAddPerBC;
-	public int SkillAddPerCC;
-	public int SkillAddPerDC;
-	public int SkillAddPerEC;
-	public int SkillAddPerFC;
-	public int SkillAddPerGC;
-	public int SkillReducePerAC;
-	public int SkillReducePerBC;
-	public int SkillReducePerCC;
-	public int SkillReducePerDC;
-	public int SkillReducePerEC;
-	public int SkillReducePerFC;
-	public int SkillReducePerGC;
-	public int ReduceSkillCDPerC;
-	public int LuckyHitPerC;
-	public int FaintDefRateC;
-	public int SuperHitRateC;
-	public int IgnoreDefRateC;
-	public int IgnoreDefRateReduceC;
-	public int ProDefPerC;
-	public int FinalHurtPerC;
-	public int FinalHurtReducePerC;
-
-    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 EquipClass); 
-
-			int.TryParse(tables[2],out EquipColor); 
-
-			int.TryParse(tables[3],out IsSuit); 
-
-			int.TryParse(tables[4],out Star); 
-
-			int.TryParse(tables[5],out BaseEquipMaxHPAddPerC); 
-
-			int.TryParse(tables[6],out BaseEquipAtkAddPerC); 
-
-			int.TryParse(tables[7],out SuperHitC); 
-
-			int.TryParse(tables[8],out SuperHitPerC); 
-
-			int.TryParse(tables[9],out LuckyHitRateC); 
-
-			int.TryParse(tables[10],out LuckyHitRateReduceC); 
-
-			int.TryParse(tables[11],out LuckPerC); 
-
-			int.TryParse(tables[12],out PerLVAtkC); 
-
-			int.TryParse(tables[13],out PerLVMaxHPC); 
-
-			int.TryParse(tables[14],out DropMoneyPerC); 
-
-			int.TryParse(tables[15],out SuperHitReduceC); 
-
-			int.TryParse(tables[16],out SuperHitRateReduceC); 
-
-			int.TryParse(tables[17],out HitC); 
-
-			int.TryParse(tables[18],out MissC); 
-
-			int.TryParse(tables[19],out PetDamPerC); 
-
-			int.TryParse(tables[20],out MaxHPPerC); 
-
-			int.TryParse(tables[21],out AtkPerC); 
-
-			int.TryParse(tables[22],out SkillAtkRateC); 
-
-			int.TryParse(tables[23],out SkillAtkRateReduceC); 
-
-			int.TryParse(tables[24],out SkillAddPerAC); 
-
-			int.TryParse(tables[25],out SkillAddPerBC); 
-
-			int.TryParse(tables[26],out SkillAddPerCC); 
-
-			int.TryParse(tables[27],out SkillAddPerDC); 
-
-			int.TryParse(tables[28],out SkillAddPerEC); 
-
-			int.TryParse(tables[29],out SkillAddPerFC); 
-
-			int.TryParse(tables[30],out SkillAddPerGC); 
-
-			int.TryParse(tables[31],out SkillReducePerAC); 
-
-			int.TryParse(tables[32],out SkillReducePerBC); 
-
-			int.TryParse(tables[33],out SkillReducePerCC); 
-
-			int.TryParse(tables[34],out SkillReducePerDC); 
-
-			int.TryParse(tables[35],out SkillReducePerEC); 
-
-			int.TryParse(tables[36],out SkillReducePerFC); 
-
-			int.TryParse(tables[37],out SkillReducePerGC); 
-
-			int.TryParse(tables[38],out ReduceSkillCDPerC); 
-
-			int.TryParse(tables[39],out LuckyHitPerC); 
-
-			int.TryParse(tables[40],out FaintDefRateC); 
-
-			int.TryParse(tables[41],out SuperHitRateC); 
-
-			int.TryParse(tables[42],out IgnoreDefRateC); 
-
-			int.TryParse(tables[43],out IgnoreDefRateReduceC); 
-
-			int.TryParse(tables[44],out ProDefPerC); 
-
-			int.TryParse(tables[45],out FinalHurtPerC); 
-
-			int.TryParse(tables[46],out FinalHurtReducePerC); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
diff --git a/Main/Config/Configs/EquipPlaceMapConfig.cs b/Main/Config/Configs/EquipPlaceMapConfig.cs
deleted file mode 100644
index 6c5129d..0000000
--- a/Main/Config/Configs/EquipPlaceMapConfig.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�8鏈�5鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class EquipPlaceMapConfig : ConfigBase<int, EquipPlaceMapConfig>
-{
-    static EquipPlaceMapConfig()
-    {
-        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
-        visit = true; 
-    }
-
-    public int PackIndex;
-	public int LV;
-	public int EquipPlace;
-
-    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 PackIndex); 
-
-			int.TryParse(tables[1],out LV); 
-
-			int.TryParse(tables[2],out EquipPlace); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
diff --git a/Main/Config/Configs/EquipPlaceMapConfig.cs.meta b/Main/Config/Configs/EquipPlaceMapConfig.cs.meta
deleted file mode 100644
index 2389729..0000000
--- a/Main/Config/Configs/EquipPlaceMapConfig.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 695a587191bcf194ab9c1d32d07102e2
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/Config/Configs/MainChapterConfig.cs b/Main/Config/Configs/MainChapterConfig.cs
index 0837ae0..502ed62 100644
--- a/Main/Config/Configs/MainChapterConfig.cs
+++ b/Main/Config/Configs/MainChapterConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�8鏈�5鏃�
+//    [  Date ]:           Thursday, August 14, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -21,7 +21,6 @@
 	public string Level;
 	public string MapBG;
 	public int[][] DailyBootyUpperList;
-	public string BootyWeightList;
 
     public override int LoadKey(string _key)
     {
@@ -42,8 +41,6 @@
 			MapBG = tables[3];
 
 			DailyBootyUpperList = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); 
-
-			BootyWeightList = tables[5];
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/PartialConfigs/EquipGSParamConfig.cs b/Main/Config/PartialConfigs/EquipGSParamConfig.cs
deleted file mode 100644
index bd48e95..0000000
--- a/Main/Config/PartialConfigs/EquipGSParamConfig.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-锘縰sing System.Collections.Generic;
-
-public partial class EquipGSParamConfig : ConfigBase<int, EquipGSParamConfig>
-{
-    private static Dictionary<string, EquipGSParamConfig> s_tagGSModelDict = new Dictionary<string, EquipGSParamConfig>();//鐢ㄤ簬璁板綍瑁呭璇勫垎鏁版嵁
-    private static Dictionary<PropertyType, int> _tagGsProValueDict = new Dictionary<PropertyType, int>();
-
-    protected override void OnConfigParseCompleted()
-    {
-        string key = StringUtility.Contact(EquipClass, EquipColor, IsSuit, Star);
-        s_tagGSModelDict.Add(key, this);
-    }
-
-    public static EquipGSParamConfig GetGSModel(int lv, int color, int isSuit, int star)
-    {
-        string key = StringUtility.Contact(lv, color, isSuit, star);
-        EquipGSParamConfig gsModel = null;
-        s_tagGSModelDict.TryGetValue(key, out gsModel);
-        return gsModel;
-    }
-
-    public static Dictionary<PropertyType, int> GetTagGsProValueDict(int lv, int color, int isSuit, int star)
-    {
-        _tagGsProValueDict.Clear();
-        EquipGSParamConfig gsModel = GetGSModel(lv, color, isSuit, star);
-        if (gsModel == null)
-            return null;
-
-        _tagGsProValueDict.Add(PropertyType.CritHurtPercent, gsModel.SuperHitPerC);
-        _tagGsProValueDict.Add(PropertyType.HeartHit, gsModel.LuckyHitRateC);
-        _tagGsProValueDict.Add(PropertyType.EveryLvAddAtk, gsModel.PerLVAtkC);
-        _tagGsProValueDict.Add(PropertyType.EveryLvAddHp, gsModel.PerLVMaxHPC);
-        _tagGsProValueDict.Add(PropertyType.AddCoinsPrecent, gsModel.DropMoneyPerC);
-        _tagGsProValueDict.Add(PropertyType.CritResis, gsModel.SuperHitReduceC);
-        _tagGsProValueDict.Add(PropertyType.HIT, gsModel.HitC);
-        _tagGsProValueDict.Add(PropertyType.MISS, gsModel.MissC);
-        _tagGsProValueDict.Add(PropertyType.LuckPer, gsModel.LuckPerC);
-        _tagGsProValueDict.Add(PropertyType.WeaponAtkPer, gsModel.BaseEquipAtkAddPerC);
-        _tagGsProValueDict.Add(PropertyType.ArmorMaxHPPer, gsModel.BaseEquipMaxHPAddPerC);
-        _tagGsProValueDict.Add(PropertyType.HeartResis, gsModel.LuckyHitRateReduceC);
-        _tagGsProValueDict.Add(PropertyType.CritHurt, gsModel.SuperHitC);
-        _tagGsProValueDict.Add(PropertyType.PetAddHurt, gsModel.PetDamPerC);
-        _tagGsProValueDict.Add(PropertyType.ReduceCrit, gsModel.SuperHitRateReduceC);
-
-        _tagGsProValueDict.Add(PropertyType.HpPercent, gsModel.MaxHPPerC);
-        _tagGsProValueDict.Add(PropertyType.AtkPercent, gsModel.AtkPerC);
-        _tagGsProValueDict.Add(PropertyType.SkillHurt, gsModel.SkillAtkRateC);
-        _tagGsProValueDict.Add(PropertyType.ReduceSkillHurtPercent, gsModel.SkillAtkRateReduceC);
-
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerA, gsModel.SkillAddPerAC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerB, gsModel.SkillAddPerBC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerC, gsModel.SkillAddPerCC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerD, gsModel.SkillAddPerDC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerE, gsModel.SkillAddPerEC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerF, gsModel.SkillAddPerFC);
-        _tagGsProValueDict.Add(PropertyType.SkillAddPerG, gsModel.SkillAddPerGC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerA, gsModel.SkillReducePerAC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerB, gsModel.SkillReducePerBC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerC, gsModel.SkillReducePerCC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerD, gsModel.SkillReducePerDC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerE, gsModel.SkillReducePerEC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerF, gsModel.SkillReducePerFC);
-        _tagGsProValueDict.Add(PropertyType.SkillReducePerG, gsModel.SkillReducePerGC);
-        _tagGsProValueDict.Add(PropertyType.ReduceSkillCDPer, gsModel.ReduceSkillCDPerC);
-        _tagGsProValueDict.Add(PropertyType.AddHeartHurtPer, gsModel.LuckyHitPerC);
-        _tagGsProValueDict.Add(PropertyType.CtrlResis, gsModel.FaintDefRateC);
-        _tagGsProValueDict.Add(PropertyType.CritChance, gsModel.SuperHitRateC);
-
-        _tagGsProValueDict.Add(PropertyType.DefyDef, gsModel.IgnoreDefRateC);
-        _tagGsProValueDict.Add(PropertyType.DefyDefResis, gsModel.IgnoreDefRateReduceC);
-        _tagGsProValueDict.Add(PropertyType.ProDefHPPer, gsModel.ProDefPerC);
-        _tagGsProValueDict.Add(PropertyType.AddFinalHurtPer, gsModel.FinalHurtPerC);
-        _tagGsProValueDict.Add(PropertyType.ReduceFinalHurtPer, gsModel.FinalHurtReducePerC);
-
-
-
-        return _tagGsProValueDict;
-    }
-}
-
-
diff --git a/Main/Config/PartialConfigs/EquipGSParamConfig.cs.meta b/Main/Config/PartialConfigs/EquipGSParamConfig.cs.meta
deleted file mode 100644
index f4478c8..0000000
--- a/Main/Config/PartialConfigs/EquipGSParamConfig.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 2dd2a25da7cc3f8468c1237a08cff49f
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs b/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs
deleted file mode 100644
index 2bbd47e..0000000
--- a/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Collections.Generic;
-using UnityEngine;
-using LitJson;
-
-public partial class EquipPlaceMapConfig : ConfigBase<int, EquipPlaceMapConfig>
-{
-    static Dictionary<int, int> clientPlaceToServerPlace = new Dictionary<int, int>();
-
-    protected override void OnConfigParseCompleted()
-    {
-        clientPlaceToServerPlace[LV * 100 + EquipPlace] = PackIndex;
-    }
-
-    public static int GetServerPlace(int level, int equipPlace)
-    {
-        var key = level * 100 + equipPlace;
-        if (clientPlaceToServerPlace.ContainsKey(key))
-        {
-            return clientPlaceToServerPlace[key];
-        }
-        else
-        {
-            return 0;
-        }
-    }
-}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs.meta b/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs.meta
deleted file mode 100644
index 76f99a3..0000000
--- a/Main/Config/PartialConfigs/EquipPlaceMapConfig.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d1c0c8007bcb91343b4581382b97c181
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB415_tagCSMainDropItemOP.cs b/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB415_tagCSMainDropItemOP.cs
index ee26f9d..dbb9c85 100644
--- a/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB415_tagCSMainDropItemOP.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB415_tagCSMainDropItemOP.cs
@@ -1,24 +1,24 @@
 using UnityEngine;
 using System.Collections;
 
-// B4 15 涓荤嚎鎺夎惤鐗╁搧鎿嶄綔 #tagCSMainDropItemOP
-
-public class CB415_tagCSMainDropItemOP : GameNetPackBasic {
-    public byte Count;
-    public  ushort[] IndexList;    // 鎺夎惤鑳屽寘涓殑鐗╁搧鏍煎瓙绱㈠紩鍒楄〃
-    public byte OPType;    // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲锛�
-    public byte OPValue;    // 鎿嶄綔棰濆鎸囦护鍊硷紝鐢辨搷浣滅被鍨嬪喅瀹氾紝濡傜┛鎴存椂鍙彂閫佺┛鎴村悗鏄惁鑷姩鍒嗚В
-
-    public CB415_tagCSMainDropItemOP () {
-        combineCmd = (ushort)0x03FE;
-        _cmd = (ushort)0xB415;
-    }
-
-    public override void WriteToBytes () {
-        WriteBytes (Count, NetDataType.BYTE);
-        WriteBytes (IndexList, NetDataType.WORD, Count);
-        WriteBytes (OPType, NetDataType.BYTE);
-        WriteBytes (OPValue, NetDataType.BYTE);
-    }
-
-}
+// B4 15 涓荤嚎鎺夎惤鐗╁搧鎿嶄綔 #tagCSMainDropItemOP
+
+public class CB415_tagCSMainDropItemOP : GameNetPackBasic {
+    public byte Count;
+    public  ushort[] IndexList;    // 鎺夎惤鑳屽寘涓殑鐗╁搧鏍煎瓙绱㈠紩鍒楄〃
+    public byte OPType;    // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲锛�
+    public byte OPValue;    // 鎿嶄綔棰濆鎸囦护鍊硷紝鐢辨搷浣滅被鍨嬪喅瀹氾紝濡傜┛鎴存椂鍙彂閫佺┛鎴村悗鏄惁鑷姩鍒嗚В
+
+    public CB415_tagCSMainDropItemOP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB415;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (Count, NetDataType.BYTE);
+        WriteBytes (IndexList, NetDataType.WORD, Count);
+        WriteBytes (OPType, NetDataType.BYTE);
+        WriteBytes (OPValue, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
index c444fec..e1151d7 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -8,7 +8,7 @@
     public static event Action beforePlayerDataInitializeEvent;
     public static event Action afterPlayerDataInitializeEvent;
     public static event Action switchAccountEvent;
-    public static bool isAfterPlayerDataInitialize = false;
+    public static bool isAfterPlayerDataInitialize = false; //鍙互鐢ㄦ潵鍒ゆ柇鏄惁鍒囧彿锛屽鐭殏鐨勬柇绾块噸杩�
     public static uint playerIdBuf = 0;
 
     public override void Done(GameNetPackBasic vNetPack)
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs
new file mode 100644
index 0000000..65ec3a0
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs
@@ -0,0 +1,15 @@
+using UnityEngine;
+using System.Collections;
+using System;
+
+// A8 14 鎿嶄綔缁撴灉閫氱煡 #tagMCMakeItemAnswer
+
+public class DTCA814_tagMCMakeItemAnswer : DtcBasic {
+    public static event Action<HA814_tagMCMakeItemAnswer> MakeItemAnswerEvent;
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        HA814_tagMCMakeItemAnswer vNetData = vNetPack as HA814_tagMCMakeItemAnswer;
+        MakeItemAnswerEvent?.Invoke(vNetData);
+    }
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs.meta
index 142c67b..f9817a5 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA8_Item/DTCA814_tagMCMakeItemAnswer.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 293efa631c4a5d649acf8845f93f885c
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs
new file mode 100644
index 0000000..3d0fa34
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs
@@ -0,0 +1,11 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 23 姣忔棩鎺夎惤鎴樺埄鍝佷俊鎭� #tagSCDropBootyInfo
+
+public class DTCB123_tagSCDropBootyInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HB123_tagSCDropBootyInfo vNetData = vNetPack as HB123_tagSCDropBootyInfo;
+    }
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs.meta
index 142c67b..be1970e 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB123_tagSCDropBootyInfo.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: ad40b9e7061d05547a2940e6a348a2a0
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index e775a45..84a54ea 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -107,6 +107,7 @@
         Register(typeof(HA207_tagSCPackBuyInfo), typeof(DTCA207_tagSCPackBuyInfo));
         Register(typeof(H0722_tagItemDeadLockRefresh), typeof(DTC0722_tagItemDeadLockRefresh));
         Register(typeof(HB125_tagSCPlayerHeroInfo), typeof(DTCB125_tagSCPlayerHeroInfo));
+        Register(typeof(HA814_tagMCMakeItemAnswer), typeof(DTCA814_tagMCMakeItemAnswer));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs b/Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs
new file mode 100644
index 0000000..0af1022
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+using System.Collections;
+
+// A8 14 鎿嶄綔缁撴灉閫氱煡 #tagMCMakeItemAnswer
+
+public class HA814_tagMCMakeItemAnswer : GameNetPackBasic {
+    public byte MakeType;    //绫诲瀷		TMakeItemType
+    public byte Result;    //鏄惁鎴愬姛
+    public uint MakeValue;    //鎿嶄綔鍊硷紝濡傚悎鎴愭椂涓哄悎鎴愮殑鐗╁搧ID
+
+    public HA814_tagMCMakeItemAnswer () {
+        _cmd = (ushort)0xA814;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out MakeType, vBytes, NetDataType.BYTE);
+        TransBytes (out Result, vBytes, NetDataType.BYTE);
+        TransBytes (out MakeValue, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs.meta
similarity index 83%
rename from Main/Config/Configs/EquipGSParamConfig.cs.meta
rename to Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs.meta
index 142c67b..7788063 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/Core/NetworkPackage/ServerPack/HA8_Item/HA814_tagMCMakeItemAnswer.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: be88efc853cab3d46b1a28dc6461d9e3
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs
new file mode 100644
index 0000000..24965db
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 23 姣忔棩鎺夎惤鎴樺埄鍝佷俊鎭� #tagSCDropBootyInfo
+
+public class HB123_tagSCDropBootyInfo : GameNetPackBasic {
+    public ushort Count;
+    public  tagSCDropBooty[] DropBootyList;    //姣忔棩宸叉帀钀芥垬鍒╁搧淇℃伅鍒楄〃
+
+    public HB123_tagSCDropBootyInfo () {
+        _cmd = (ushort)0xB123;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out Count, vBytes, NetDataType.WORD);
+        DropBootyList = new tagSCDropBooty[Count];
+        for (int i = 0; i < Count; i ++) {
+            DropBootyList[i] = new tagSCDropBooty();
+            TransBytes (out DropBootyList[i].ItemID, vBytes, NetDataType.DWORD);
+            TransBytes (out DropBootyList[i].TodayDropCnt, vBytes, NetDataType.DWORD);
+        }
+    }
+
+    public class tagSCDropBooty {
+        public uint ItemID;        // 鎴樺埄鍝両D
+        public uint TodayDropCnt;        // 浠婃棩宸叉帀钀芥暟閲�
+    }
+
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs.meta
index 142c67b..120f9ad 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB123_tagSCDropBootyInfo.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 60e5d156d8d7dc14da9061d205127a85
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Dungeon/DungeonData.cs b/Main/System/Dungeon/DungeonData.cs
index 7aac149..bba8148 100644
--- a/Main/System/Dungeon/DungeonData.cs
+++ b/Main/System/Dungeon/DungeonData.cs
@@ -27,7 +27,7 @@
 
 }
 
-public struct DungeonResult
+public class DungeonResult
 {
     public int conWinCnt;  //鑳滃埄鐨勫満鏁�
     public int extraExp; //棰濆鐨勭粡楠屽姞鎴�
@@ -101,7 +101,7 @@
 }
 
 
-public struct DungeonMissionData
+public class DungeonMissionData
 {
     public int lineID;
     public int missionID;
diff --git a/Main/System/Equip/EquipCell.cs b/Main/System/Equip/EquipCell.cs
new file mode 100644
index 0000000..d3e22a2
--- /dev/null
+++ b/Main/System/Equip/EquipCell.cs
@@ -0,0 +1,79 @@
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
+
+//瑁呭鍥炬爣锛堣澶囦綅锛�
+public class EquipCell : MonoBehaviour
+{
+    Button button;
+    Image bgImage;//瑁呭鐨勫簳鍥撅紝涓嶅悓鍝佽川棰滆壊
+    Image bgIconImage; //绌鸿澶囩殑閮ㄤ綅鍥炬爣
+    Image iconImage;   //瑁呭鍥炬爣
+    UIEffectPlayer uieff;
+    Text lvText;
+
+    void InitComponent()
+    {
+        button = this.GetComponent<Button>();
+        bgImage = this.GetComponent<Image>();
+        bgIconImage = this.GetComponent<Image>("equipempty");
+        iconImage = this.GetComponent<Image>("equipicon");
+        uieff = this.GetComponent<UIEffectPlayer>("uieffect");
+        lvText = this.GetComponent<Text>("lv");
+    }
+
+    public void Init(ItemModel equip)
+    {
+        if (iconImage == null)
+        {
+            InitComponent();
+        }
+
+        if (equip == null)
+        {
+            button?.RemoveAllListeners();
+            bgImage.SetSprite("equipQuality0");
+            bgIconImage?.SetActive(true);
+            iconImage.SetActive(false);
+            uieff?.Stop();
+            if (lvText != null)
+                lvText.text = string.Empty;
+
+            return;
+        }
+
+        if (button != null)
+        {
+            button.AddListener(() =>
+            {
+                ItemTipUtility.Show(equip.guid);
+            });
+        }
+        bgImage.SetSprite("equipQuality" + equip.config.ItemColor);
+        bgIconImage?.SetActive(false);
+        iconImage.SetActive(true);
+        iconImage.SetOrgSprite(equip.config.IconKey);
+        if (lvText != null)
+            lvText.text = Language.Get("L1113", EquipModel.Instance.GetEquipLV(equip));
+
+        if (uieff == null)
+        { 
+            //绛夌編鏈彁渚涜澶囩殑鏁堟灉鐗规晥锛堥渶瑕佺壒鏁堝浘锛�
+            // int effectID = EquipModel.Instance.equipUIEffects[Math.Min(equip.config.ItemColor, EquipModel.Instance.equipUIEffects.Length) - 1];
+            // if (effectID == 0)
+            // {
+            //     uieff.Stop();
+            // }
+            // else
+            // {
+            //     uieff.effectId = effectID;
+            //     uieff.Play();
+            // }
+        }
+    }
+
+
+}
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/EquipCell.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/EquipCell.cs.meta
index 142c67b..c6ceb26 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/EquipCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 62e3eb45ea8ccc645ba954c15c710fd8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Equip/EquipExchangeCell.cs b/Main/System/Equip/EquipExchangeCell.cs
new file mode 100644
index 0000000..62f9ce8
--- /dev/null
+++ b/Main/System/Equip/EquipExchangeCell.cs
@@ -0,0 +1,332 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+
+using UnityEngine;
+using UnityEngine.UI;
+
+//鑾峰緱瑁呭妯℃澘
+public class EquipExchangeCell : MonoBehaviour
+{
+    [SerializeField] Image equipImage;
+    [SerializeField] Text itemName;
+    [SerializeField] Text qualityName;
+    [SerializeField] OutlineEx itemNameOutline;
+    [SerializeField] OutlineEx qualityNameOutline;
+    [SerializeField] Text placeName;
+    [SerializeField] Text lvText;
+    [SerializeField] Image bgFlower;    //鑳屾櫙鑺辩汗鍙樿壊
+    [SerializeField] Text fightPowerNum;
+    [SerializeField] GameObject fightPowerGO;
+    [SerializeField] GameObject equipedText;
+    [SerializeField] List<Text> baseAttrNames;
+    [SerializeField] List<Text> baseAttrValues;
+    [SerializeField] List<Image> baseAttrStates;
+    [SerializeField] GameObject fightAttrGameObj;
+    [SerializeField] List<GameObject> fightAttrLine;
+    [SerializeField] List<Text> fightAttrNames;
+    [SerializeField] List<Text> fightAttrValues;
+    [SerializeField] List<Image> fightAttrStates;
+    [SerializeField] GameObject decomposeObject;
+    [SerializeField] Toggle decomposeCheck;
+    [SerializeField] GameObject btnsGO;
+    [SerializeField] Button decomposeButton;
+    [SerializeField] Button exchangeButton;
+    [SerializeField] Button putonButton;
+
+    [SerializeField] UIEffectPlayer uieffect;
+    [SerializeField] RectTransform bgRect;
+
+    int cmpResult = 0;  // 瑁呭瀵规瘮缁撴灉 0鐩稿悓 1鏇村己 2鏇村急
+    bool isToggle = true;
+
+    void Start()
+    {
+        putonButton.AddListener(() =>
+        {
+            EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2);
+        });
+
+        exchangeButton.AddListener(ExchangeEquip);
+        decomposeButton.AddListener(DecomposeEquip);
+
+        decomposeCheck.onValueChanged.RemoveAllListeners();
+        decomposeCheck.onValueChanged.AddListener((bool isOn) =>
+        {
+            isToggle = !isToggle;
+        });
+
+    }
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="equip">鏈欢瑁呭鐗╁搧鏁版嵁</param>
+    /// <param name="isNewEquip">鏄惁鏂拌澶囷紙鍗虫帀钀借儗鍖呴噷鐨勮澶囷級</param>
+    public void Display(ItemModel equip, bool isNewEquip)
+    {
+        var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1);
+        if (oldEquip == null)
+            cmpResult = 1;
+
+        equipImage.SetOrgSprite(equip.config.IconKey);
+        itemName.text = UIHelper.AppendColor(equip.config.ItemColor, equip.config.ItemName, true, 1);
+        qualityName.text = UIHelper.GetQualityNameWithColor(equip.config.ItemColor, Language.Get("equipQualityFormat"));
+        itemNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor);
+        qualityNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor);
+        placeName.text = EquipModel.Instance.GetEquipPlaceName(equip.config.EquipPlace);
+        lvText.text = Language.Get("EquipExchangeWin7", EquipModel.Instance.GetEquipLV(equip));
+        bgFlower.color = UIHelper.GetUIColor(equip.config.ItemColor);
+
+        if (!isNewEquip)
+        {
+            equipedText.SetActive(true);
+            fightPowerGO.SetActive(false);
+            decomposeObject.SetActive(false);
+            btnsGO.SetActive(false);
+        }
+        else
+        {
+            equipedText.SetActive(false);
+            fightPowerGO.SetActive(true);
+            decomposeObject.SetActive(true);
+            btnsGO.SetActive(true);
+            decomposeCheck.isOn = isToggle;
+
+            long showFightPower = FightPowerManager.Instance.GetFightPowerChange(EquipModel.Instance.selectFloorEquip);
+
+            if (showFightPower < 0)
+            {
+                fightPowerNum.text = UIHelper.AppendColor(TextColType.Red, $"-{UIHelper.ReplaceLargeNum(showFightPower)}", false);
+            }
+            else
+            {
+                fightPowerNum.text = UIHelper.AppendColor(TextColType.Green, $"+{UIHelper.ReplaceLargeNum(showFightPower)}", false);
+            }
+        }
+
+        var baseAttrs = EquipModel.Instance.GetEquipBaseAttrs(equip);
+        var baseValues = EquipModel.Instance.GetEquipBaseValues(equip);
+        var fightAttrs = EquipModel.Instance.GetEquipFightAttrs(equip);
+        var fightValues = EquipModel.Instance.GetEquipFightValues(equip);
+
+        for (var i = 0; i < baseAttrNames.Count; i++)
+        {
+            if (i >= baseAttrs.Count)
+            {
+                baseAttrNames[i].text = "";
+                baseAttrValues[i].text = "";
+            }
+            else
+            {
+                baseAttrNames[i].text = PlayerPropertyConfig.Get(baseAttrs[i]).Name;
+                baseAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(baseAttrs[i], baseValues[i]);
+            }
+        }
+
+        if (fightAttrs.IsNullOrEmpty())
+        {
+            fightAttrGameObj.SetActive(false);
+        }
+        else
+        {
+            fightAttrGameObj.SetActive(true);
+            for (var i = 0; i < fightAttrNames.Count; i++)
+            {
+                if (i >= fightAttrs.Count)
+                {
+                    fightAttrNames[i].SetActive(false);
+                }
+                else
+                {
+                    fightAttrNames[i].SetActive(true);
+                    fightAttrNames[i].text = PlayerPropertyConfig.Get(fightAttrs[i]).Name;
+                    fightAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(fightAttrs[i], fightValues[i]);
+                }
+            }
+        }
+
+        ShowAttrState(isNewEquip);
+        RefreshEffect(equip).Forget();
+    }
+
+    //寤惰繜澶勭悊鐗规晥澶у皬
+    async UniTask RefreshEffect(ItemModel equip)
+    { 
+        await UniTask.DelayFrame(5);
+        int effectID = EquipModel.Instance.equipUIEffects[Math.Min(equip.config.ItemColor, EquipModel.Instance.equipUIEffects.Length) - 1];
+        if (effectID == 0)
+        {
+            uieffect.Stop();
+        }
+        else
+        {
+            uieffect.effectId = effectID;
+            //璁$畻楂樺害缂╂斁姣斾緥 鐗规晥鏄剧ず渚濊禆rect鐨勬帓鐗�
+            uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
+            uieffect.Play();
+        }
+    }
+
+
+    //鏇挎崲瑁呭
+    void ExchangeEquip()
+    {
+        //绌挎洿寮辫澶� 瑕佹彁绀�
+        if (cmpResult == 2 && decomposeCheck.isOn)
+        {
+            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
+                Language.Get("EquipExchangeWin4"), (bool ok) =>
+                {
+                    if (ok)
+                    {
+                        EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2, decomposeCheck.isOn);
+                    }
+                    
+                });
+        }
+        else
+        {
+            EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2, decomposeCheck.isOn);
+        }
+
+    }
+
+    //鍒嗚В瑁呭
+    void DecomposeEquip()
+    {
+        //鍒嗚В鏇村己瑁呭瑕佹彁绀�
+        if (cmpResult == 1)
+        {
+            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
+            Language.Get("EquipExchangeWin5"), (bool ok) =>
+            {
+                if (ok)
+                {
+                    EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 1);
+                }
+                
+            });
+        }
+        else
+        {
+            EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 1);
+        }
+    }
+
+    void ShowAttrState(bool isNewEquip)
+    {
+        ItemModel oldEquip = null;
+
+        if (isNewEquip)
+        { 
+            //鎵惧姣旇澶�
+            oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1);
+        }
+
+        if (oldEquip == null)
+        {
+            for (int i = 0; i < baseAttrStates.Count; i++)
+            {
+                baseAttrStates[i].SetActive(false);
+            }
+
+            for (int i = 0; i < fightAttrStates.Count; i++)
+            {
+                if (!isNewEquip)
+                {
+                    //鍘熻澶囦笉瀵规瘮鏄剧ず
+                    fightAttrStates[i].SetActive(false);
+                    continue;
+                }
+                var list = EquipModel.Instance.GetEquipFightValues(EquipModel.Instance.selectFloorEquip);
+                if (list == null || i >= list.Count)
+                {
+                    fightAttrStates[i].SetActive(false);
+                }
+                else
+                {
+                    fightAttrStates[i].SetActive(true);
+                    fightAttrStates[i].SetSprite("GiftState1");
+                    fightAttrStates[i].SetNativeSize();
+                }
+            }
+
+            return;
+        }
+
+
+        //鍩虹灞炴�� 鎺掑簭鍜屼釜鏁版槸涓�鑷寸殑
+        for (int i = 0; i < baseAttrStates.Count; i++)
+        {
+            var list = EquipModel.Instance.GetEquipBaseValues(EquipModel.Instance.selectFloorEquip);
+            var list2 = EquipModel.Instance.GetEquipBaseValues(oldEquip);
+            if (list == null || i >= list.Count)
+            {
+                baseAttrStates[i].SetActive(false);
+            }
+            else
+            {
+                baseAttrStates[i].SetActive(true);
+                var value = i < list2.Count ? list2[i] : 0;
+                if (list[i] == value)
+                {
+                    baseAttrStates[i].SetActive(false);
+                }
+                else
+                {
+                    baseAttrStates[i].SetActive(true);
+                    baseAttrStates[i].SetSprite(value == 0 ? "GiftState1" : list[i] > value ? "EquipUpIcon" : "EquipDownIcon");
+                    baseAttrStates[i].SetNativeSize();
+                }
+            }
+        }
+
+        for (int i = 0; i < fightAttrStates.Count; i++)
+        {
+            //鎴樻枟灞炴�� 鎺掑簭鍜屼釜鏁颁笉涓�鑷� 鏍规嵁ID杩涜瀵规瘮
+            var list = EquipModel.Instance.GetEquipFightValues(EquipModel.Instance.selectFloorEquip);
+            var list2 = EquipModel.Instance.GetEquipFightValues(oldEquip);
+
+            var idList = EquipModel.Instance.GetEquipFightAttrs(EquipModel.Instance.selectFloorEquip);
+            var idList2 = EquipModel.Instance.GetEquipFightAttrs(oldEquip);
+
+            if (list == null || i >= list.Count)
+            {
+                fightAttrStates[i].SetActive(false);
+            }
+            else
+            {
+                fightAttrStates[i].SetActive(true);
+                var value = !list2.IsNullOrEmpty() && i < list2.Count ? list2[i] : 0;
+                var id = !idList2.IsNullOrEmpty() && i < idList2.Count ? idList2[i] : 0;
+                if (idList[i] == id && list[i] == value)
+                {
+                    fightAttrStates[i].SetActive(false);
+                }
+                else
+                {
+                    fightAttrStates[i].SetActive(true);
+                    if (idList[i] != id)
+                    {
+                        fightAttrStates[i].SetSprite("GiftState1");
+                    }
+                    else
+                    {
+                        fightAttrStates[i].SetSprite(list[i] > value ? "EquipUpIcon" : "EquipDownIcon");
+                    }
+                    fightAttrStates[i].SetNativeSize();
+
+                }
+            }
+        }
+    }
+    
+
+
+}
+
+
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/EquipExchangeCell.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/EquipExchangeCell.cs.meta
index 142c67b..45d7c76 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/EquipExchangeCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: d9cfe093a2a035a4ab2e4d90eac6a86a
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Equip/EquipExchangeWin.cs b/Main/System/Equip/EquipExchangeWin.cs
new file mode 100644
index 0000000..e39f807
--- /dev/null
+++ b/Main/System/Equip/EquipExchangeWin.cs
@@ -0,0 +1,78 @@
+锘縰sing Spine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+using UnityEngine;
+using UnityEngine.UI;
+
+//鑾峰緱瑁呭鐣岄潰
+public class EquipExchangeWin : UIBase
+{
+    [SerializeField] EquipExchangeCell oldEquipObj;
+    [SerializeField] EquipExchangeCell newEquipObj;
+
+
+
+
+    protected override void OnPreOpen()
+    {
+
+        // 閫氱煡涓绘垬鍦烘殏鍋�
+        BattleManager.Instance.storyBattleField.IsPause = true;
+        EquipModel.Instance.OnEquipOPResultAction += OnRefreshItem;
+        Display();
+        // if (EquipModel.Instance.newEquipIDToGuideID.ContainsKey(EquipModel.Instance.selectFloorEquip.itemId))
+        // {
+        //     // if (!NewBieCenter.Instance.IsGuideCompleted(EquipModel.Instance.newEquipIDToGuideID[EquipModel.Instance.selectFloorEquip.itemId]))
+        //     //     NewBieCenter.Instance.StartNewBieGuideEx(EquipModel.Instance.newEquipIDToGuideID[EquipModel.Instance.selectFloorEquip.itemId]);
+        // }
+    }
+
+
+
+    protected override void OnPreClose()
+    {
+        EquipModel.Instance.OnEquipOPResultAction -= OnRefreshItem;
+        // 閫氱煡涓绘垬鍦�
+        BattleManager.Instance.storyBattleField.IsPause = false;
+    }
+
+
+
+
+    void Display()
+    {
+        EquipModel.Instance.lastShowEquipIndex = EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1;
+        var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.lastShowEquipIndex);
+        if (oldEquip == null)
+        {
+            oldEquipObj.SetActive(false);
+            newEquipObj.SetActive(true);
+            newEquipObj.Display(EquipModel.Instance.selectFloorEquip, true);
+        }
+        else
+        {
+            oldEquipObj.SetActive(true);
+            newEquipObj.SetActive(true);
+            oldEquipObj.Display(oldEquip, false);
+            newEquipObj.Display(EquipModel.Instance.selectFloorEquip, true);
+
+        }
+
+    }
+
+
+    
+    void OnRefreshItem(bool isDone, int index)
+    {
+        Display();
+    }
+
+
+}
+
+
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/EquipExchangeWin.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/EquipExchangeWin.cs.meta
index 142c67b..0a50ddf 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/EquipExchangeWin.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 6854b489b6d72ab4d894390ea8e9e08e
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Equip/EquipFightPower.cs b/Main/System/Equip/EquipFightPower.cs
deleted file mode 100644
index 0809790..0000000
--- a/Main/System/Equip/EquipFightPower.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-
-public class EquipFightPower : Singleton<EquipFightPower>
-{
-    string scoreFormula;
-    string propertyFormula;
-
-    public EquipFightPower()
-    {
-        var config = FuncConfigConfig.Get("FightpowerFormula");
-        propertyFormula = config.Numerical1;
-        scoreFormula = config.Numerical2;
-    }
-
-    public int GetSpiritWeaponPower(int itemId)
-    {
-        var score = ItemLogicUtility.Instance.GetEquipScore(itemId);
-        Equation.Instance.Clear();
-        Equation.Instance.AddKeyValue("equipScoreTotal", score);
-        return Equation.Instance.Eval<int>(scoreFormula);
-    }
-
-    public int CalculatePower(int level)
-    {
-        Equation.Instance.Clear();
-        Equation.Instance.AddKeyValue("equipScoreTotal", CountEquipScore(level));
-        var power = Equation.Instance.Eval<int>(scoreFormula);
-
-        var propertyContainer = new Properties();
-
-        Equation.Instance.Clear();
-        var keys = propertyContainer.keys;
-        for (int i = 0; i < keys.Count; i++)
-        {
-            var id = keys[i];
-            var value = propertyContainer[id];
-            var config = PlayerPropertyConfig.Get(id);
-            Equation.Instance.AddKeyValue(config.Parameter, value);
-        }
-
-        var propertyPower = Equation.Instance.Eval<int>(propertyFormula);
-        power += propertyPower;
-
-
-        return power;
-    }
-
-    private int CountEquipScore(int level)
-    {
-        var score = 0;
-        // for (int i = 1; i <= 12; i++)
-        // {
-        //     var equipPosition = new Int2(level, i);
-        //     var guid = equipModel.GetEquip(equipPosition);
-        //     if (string.IsNullOrEmpty(guid))
-        //     {
-        //         continue;
-        //     }
-
-        //     var equip = packModel.GetItemByGuid(guid);
-        //     if (equip == null)
-        //     {
-        //         continue;
-        //     }
-
-        //     score += equip.score;
-        // }
-
-        return score;
-    }
-
-
-
-    public int CalculatePower(int job, int level, List<EquipInfo> equipInfos)
-    {
-        var propertyContainer = new Properties();
-        var totalScore = 0;
-
-
-        Equation.Instance.Clear();
-        Equation.Instance.AddKeyValue("equipScoreTotal", totalScore);
-        var power = Equation.Instance.Eval<int>(scoreFormula);
-
-        Equation.Instance.Clear();
-        var keys = propertyContainer.keys;
-        for (int i = 0; i < keys.Count; i++)
-        {
-            var id = keys[i];
-            var value = propertyContainer[id];
-            var config = PlayerPropertyConfig.Get(id);
-            if (config != null)
-            {
-                Equation.Instance.AddKeyValue(config.Parameter, value);
-            }
-
-        }
-
-        power += Equation.Instance.Eval<int>(propertyFormula);
-
-        return power;
-    }
-
-    class Properties
-    {
-        Dictionary<int, int> tables = new Dictionary<int, int>();
-
-        public List<int> keys { get { return new List<int>(tables.Keys); } }
-
-        public int this[int id] { get { return tables[id]; } }
-
-        public void Add(int id, int value)
-        {
-            if (id == 7)
-            {
-                Add(67, value);
-                Add(68, value);
-            }
-            else
-            {
-                if (tables.ContainsKey(id))
-                {
-                    tables[id] = tables[id] + value;
-                }
-                else
-                {
-                    tables[id] = value;
-                }
-            }
-        }
-
-        public void AddRange(List<int> ids, List<int> values)
-        {
-            if (ids.IsNullOrEmpty() || values.IsNullOrEmpty())
-            {
-                return;
-            }
-
-            var count = Mathf.Min(ids.Count, values.Count);
-            for (int i = 0; i < count; i++)
-            {
-                Add(ids[i], values[i]);
-            }
-        }
-
-    }
-
-    public struct EquipInfo
-    {
-        public int itemId;
-        public int score;
-
-    }
-
-}
-
-
diff --git a/Main/System/Equip/EquipModel.cs b/Main/System/Equip/EquipModel.cs
index 62c439e..cb42268 100644
--- a/Main/System/Equip/EquipModel.cs
+++ b/Main/System/Equip/EquipModel.cs
@@ -3,36 +3,63 @@
 using UnityEngine;
 using System;
 using LitJson;
+using UnityEngine.UI;
 
 
 public class EquipModel : GameSystemManager<EquipModel>
 {
-    EquipSet equipSet = new EquipSet(0);
+    public bool waitEquipOPPack = false;
+    public event Action<bool, int > OnEquipOPResultAction;    //鏄惁鎹笂浜嗘柊瑁呭涓斿垎瑙d簡 瑁呭绱㈠紩
+    public event Action<List<int>, RectTransform> OnItemDropEvent;
 
+    //鐢ㄤ簬椋樺姩閫昏緫
+    // public Dictionary<int, EquipOnFloorInfo> equipFloorInfo = new Dictionary<int, EquipOnFloorInfo>(); //鐪熷疄鑳屽寘鐨勭储寮曪紝瀵瑰簲鍦版澘瑁呭鐨勪俊鎭�
 
-    public void OnPlayerLoginOk()
-    {
-
-    }
+    public int[] equipUIEffectLights;  //瑁呭鎺夎惤鐗规晥
+    public float[] dropEffectScales;    //鎺夎澶囩殑鍔ㄧ敾缂╂斁
+    public Dictionary<int, int> newEquipIDToGuideID = new Dictionary<int, int>();  //瑁呭鎺夎惤id锛屽紩瀵肩殑id
+    public int[] equipUIEffects;  //瑁呭TIP闈㈡澘鐗规晥
+    public int[] equipUIGirdEffects;  //瑁呭鏍煎瓙鐗规晥
+    public ItemModel selectFloorEquip; //閫変腑鐨勫湴鏉胯澶�
+    public int lastShowEquipIndex = -1;  //涓婁竴娆$晫闈㈡樉绀鸿澶囩殑绱㈠紩锛屾嬀鍙栧悗鐗╁搧娑堝け闇�璁板綍涓嬪仛琛ㄧ幇
+    public Queue<int> waitEquipOP = new Queue<int>();    //绛夊緟鎿嶄綔鐨勮澶囷紝闇�瑕佸拰UI浜や簰纭
 
     public override void Init()
     {
-
+        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitialize;
+        EventBroadcast.Instance.AddListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
+        ParseConfig();
     }
 
     public override void Release()
     {
+        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitialize;
+        EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
     }
 
-    public Dictionary<int, int> EquipLevelFuncID = new Dictionary<int, int>();
 
-
-    public void OnAfterPlayerDataInitialize()
+    void ParseConfig()
     {
+        var config = FuncConfigConfig.Get("DropItem");
+        equipUIEffectLights = JsonMapper.ToObject<int[]>(config.Numerical1);
+        dropEffectScales = JsonMapper.ToObject<float[]>(config.Numerical2);
+        newEquipIDToGuideID = ConfigParse.ParseIntDict(config.Numerical3);
 
+        config = FuncConfigConfig.Get("EquipTip");
+        equipUIEffects = JsonMapper.ToObject<int[]>(config.Numerical1);
     }
 
-
+    void BeforePlayerDataInitialize()
+    {
+        //鏂嚎閲嶈繛涓嶅鐞�
+        if (DTC0102_tagCDBPlayer.isAfterPlayerDataInitialize)
+            return;
+        selectFloorEquip = null;
+        waitEquipOP.Clear();
+        lastShowEquipIndex = -1;
+    }
 
     public static int GetItemServerEquipPlace(int itemId)
     {
@@ -42,44 +69,283 @@
             return -1;
         }
 
-        var serverEquipPlace = -1;
-        switch ((RoleEquipType)config.EquipPlace)
+        if (config.EquipPlace > 0 && config.EquipPlace < 13)
         {
-            case RoleEquipType.Weapon:
-            case RoleEquipType.Weapon2:
-            case RoleEquipType.Hat:
-            case RoleEquipType.Clothes:
-            case RoleEquipType.Belt:
-            case RoleEquipType.Trousers:
-            case RoleEquipType.Shoes:
-            case RoleEquipType.Neck:
-            case RoleEquipType.FairyCan1:
-            case RoleEquipType.FairyCan2:
-            case RoleEquipType.Glove:
-            case RoleEquipType.Jade:
-                serverEquipPlace = EquipSet.ClientPlaceToServerPlace(new Int2(config.LV, config.EquipPlace));
-                break;
-            case RoleEquipType.Wing:
-            case RoleEquipType.Guard:
-            case RoleEquipType.PeerlessWeapon1:
-            case RoleEquipType.PeerlessWeapon2:
-                serverEquipPlace = EquipSet.ClientPlaceToServerPlace(new Int2(0, config.EquipPlace));
-                break;
+            return config.EquipPlace - 1;
         }
 
-        return serverEquipPlace;
+
+        return -1;
     }
 
-    public int CompareToCurrent(string equipGuid)
+    void OnDropEvent(string guid, BattleDrops drops, Action action)
+    { 
+        NotifyItemDrop(drops.dropItemPackIndex, drops.rectTransform);
+        action?.Invoke();
+    }
+
+    //鎺夎惤閫氱煡
+    public void NotifyItemDrop(List<int> indexs, RectTransform rect)
     {
-        var item = PackManager.Instance.GetItemByGuid(equipGuid);
+        // 鐣岄潰涓嶆樉绀哄垯绔嬪嵆澶勭悊
+        if (!UIManager.Instance.IsOpened<HomeWin>())
+        {
+            for (int i = 0; i < indexs.Count; i++)
+            {
+                CalcFloorEquip(indexs[i]);
+            }
+        }
+        else
+        {
+            OnItemDropEvent?.Invoke(indexs, rect);
+        }
+    }
+
+    public void CalcFloorEquip(int itemIndex)
+    {
+        if (itemIndex == -1)
+            return;
+
+        var item = PackManager.Instance.GetItemByIndex(PackType.DropItem, itemIndex);
         if (item == null)
+            return;
+
+        //闈炶嚜鍔ㄦā寮忎笅锛岀瓫閫夎澶囨墦寮�瑁呭鎿嶄綔鐣岄潰
+        if (IsEquip(item))
+        {
+            OpenEquipExchangeWin(item);
+        }
+        else
+        {
+            SendEquipOP(new ushort[] { (ushort)itemIndex }, 0);
+        }
+    }
+
+    private void OnEquipResult(HA814_tagMCMakeItemAnswer info)
+    {
+        if (info.MakeType != (int)MakeType.EquipOP)
+            return;
+        if (info.MakeValue == 0)
+            return;
+
+        waitEquipOPPack = false;
+        bool isDone = false;    // 鎹笂鏂拌澶囦笖鍒嗚В浜嗘棫瑁呭
+        //閫変腑鐨勫湴鏉胯澶囪繘琛屽鐞嗭紝鏇挎崲杩樻槸鎵句笅涓�浠讹紝妫�鏌nEquipOPResultAction
+        if (selectFloorEquip != null)
+        {
+            Debug.Log("OnEquipResult selectFloorEquip ID:" + selectFloorEquip.itemId);
+            if (PackManager.Instance.GetItemByIndex(PackType.DropItem, selectFloorEquip.gridIndex) == null)
+            {
+                selectFloorEquip = GetSelectFloorEquip();    //鍒犻櫎宸查�夋嫨鐨勮澶�
+                if (info.MakeValue == 2)
+                    isDone = true;
+            }
+        }
+        else
+        {
+            selectFloorEquip = GetSelectFloorEquip();
+            if (info.MakeValue == 2)
+                isDone = true;
+        }
+
+        if (selectFloorEquip == null)
+        {
+            if (UIManager.Instance.IsOpened<EquipExchangeWin>())
+            {
+                UIManager.Instance.CloseWindow<EquipExchangeWin>();
+            }
+        }
+        else
+        {
+            if (!UIManager.Instance.IsOpened<EquipExchangeWin>())
+            { 
+                UIManager.Instance.OpenWindow<EquipExchangeWin>();
+            }
+        }
+
+        OnEquipOPResultAction?.Invoke(isDone, lastShowEquipIndex);
+    }
+
+    /// <summary>
+    /// 瑁呭鎿嶄綔, // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲
+    /// </summary>
+    /// <param name="itemIndexList"></param>
+    /// <param name="opType"></param>
+    /// <param name="autoDecompose"></param>
+    public void SendEquipOP(ushort[] itemIndexList, byte opType, bool autoDecompose = false)
+    {
+        if (waitEquipOPPack) return;
+
+        // NoteFloorEquip(itemIndexList, opType);
+        var pack = new CB415_tagCSMainDropItemOP();
+        pack.Count = (byte)itemIndexList.Length;
+        pack.IndexList = itemIndexList;
+        pack.OPType = opType;
+        pack.OPValue = (byte)(autoDecompose ? 1 : 0); // 鏇挎崲鍚庢槸鍚﹁嚜鍔ㄥ垎瑙e師瑁呭锛�0鍚�1鏄�
+
+        if (opType > 0)
+            waitEquipOPPack = true;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    /// <summary>
+    /// equipFloorInfo璁板綍鍦版澘閬撳叿鐨勬渶鏂颁竴娆′俊鎭�,鐢ㄤ簬鏇挎崲鍜屽垎瑙h澶囩殑琛ㄧ幇
+    /// </summary>
+    /// <param name="itemIndexList">鍦版澘閬撳叿绱㈠紩</param>
+    /// <param name="opType"></param>
+    // public void NoteFloorEquip(ushort[] itemIndexList, int opType)
+    // {
+    //     equipFloorInfo.Clear();
+    //     foreach (var girdIndex in itemIndexList)
+    //     {
+    //         var equip = PackManager.Instance.GetItemByIndex(PackType.DropItem, girdIndex);
+    //         if (equip == null) continue;
+    //         equipFloorInfo[girdIndex] = new EquipOnFloorInfo()
+    //         {
+    //             equipID = equip.itemId,
+    //             posX = floorItemCellArr[girdIndex].transform.position.x,
+    //             posY = floorItemCellArr[girdIndex].transform.position.y,
+    //             opType = opType
+    //         };
+    //     }
+
+    // }
+
+    public class EquipOnFloorInfo
+    {
+        public int equipID; //閬撳叿鎴栬�呰澶囷紝閬撳叿鍒嗚В瀵瑰簲涓嶅悓璐у竵锛岃澶囧浐瀹氳揣甯�
+        public float posX;  //鍏ㄥ眬鍧愭爣 琛ㄧ幇鍐嶈浆鎴恖ocal
+        public float posY;
+        public int opType;  // 0 - 鎷惧彇闈炶澶囩墿鍝侊紱1 - 鍒嗚В锛�2 - 绌挎埓/鏇挎崲锛�
+    }
+
+    // public EquipOnFloorInfo FindExchangeEquipInfo()
+    // {
+    //     foreach (var info in equipFloorInfo)
+    //     {
+    //         if (info.Value.opType == 2)
+    //             return info.Value;
+    //     }
+    //     return new EquipOnFloorInfo();
+    // }
+
+    public bool OpenEquipExchangeWin(ItemModel equip)
+    {
+        if (equip == null)
+            return false;
+
+        // if (!IsEquip(equip))
+        //     return false;
+
+        waitEquipOP.Enqueue(equip.gridIndex);
+        //鏈洖澶嶈澶囨搷浣滅粨鏋滐紝鍚﹀垯浼氭樉绀烘棫瑁呭
+        if (waitEquipOPPack)
+            return false;
+
+        // 鍚庣画琛ュ厖寮曞鎴栬�呭叾浠栨儏鍐典笅锛屼笉鍏佽鍒囨崲瑁呭鐣岄潰
+        // if (NewBieCenter.Instance.inGuiding)
+        //     return;
+
+        if (UIManager.Instance.IsOpened<EquipExchangeWin>())
+        {
+            return false;
+        }
+
+
+        selectFloorEquip = GetSelectFloorEquip();
+        UIManager.Instance.OpenWindow<EquipExchangeWin>();
+
+        return true;
+
+    }
+
+
+    ItemModel GetSelectFloorEquip()
+    {
+        if (waitEquipOP.Count == 0)
+            return null;
+        
+        ItemModel item = PackManager.Instance.GetItemByIndex(PackType.DropItem, waitEquipOP.Dequeue());
+        if (AutoFightModel.Instance.isAutoAttack)
+        {
+            //鑷姩鎴樺姏瀵规瘮, 鏉′欢涓嶆弧瓒崇殑鍒嗚В
+            return null;
+
+        }
+        
+        return item;
+    }
+
+
+    //绛夌骇
+    public int GetEquipLV(ItemModel equip)
+    {
+        if (equip == null)
         {
             return 0;
         }
 
+        return equip.GetUseDataFirstValue(22);
+    }
 
-        return equipSet.CompareToCurrent(equipGuid);
+    //鍩虹灞炴�D鍒楄〃
+    public List<int> GetEquipBaseAttrs(ItemModel equip)
+    {
+        if (equip == null)
+        {
+            return new List<int>();
+        }
+        return equip.GetUseData(21);
+    }
+
+
+    //鍩虹灞炴�у�煎垪琛�
+    public List<int> GetEquipBaseValues(ItemModel equip)
+    {
+        if (equip == null)
+        {
+            return new List<int>();
+        }
+        return equip.GetUseData(23);
+    }
+
+    //鎴樻枟灞炴�D鍒楄〃
+    public List<int> GetEquipFightAttrs(ItemModel equip)
+    {
+        if (equip == null)
+        {
+            return new List<int>();
+        }
+        return equip.GetUseData(17);
+    }
+
+    //鎴樻枟灞炴�у�煎垪琛�
+    public List<int> GetEquipFightValues(ItemModel equip)
+    {
+        if (equip == null)
+        {
+            return new List<int>();
+        }
+        return equip.GetUseData(19);
+    }
+
+
+    //寰楀埌瑁呭浣嶅搴旂殑閮ㄤ綅鍚嶇О
+    public string GetEquipPlaceName(int place)
+    {
+
+        return Language.Get("equipPlace" + place);
+    }
+
+    //鏄惁瑁呭
+    public bool IsEquip(ItemModel item)
+    {
+        return item.config.EquipPlace != 0;
+    }
+
+    public bool IsEquip(int itemID)
+    { 
+        return ItemConfig.Get(itemID).EquipPlace != 0;
     }
 }
 
diff --git a/Main/System/Equip/EquipSet.cs b/Main/System/Equip/EquipSet.cs
deleted file mode 100644
index 80ecb71..0000000
--- a/Main/System/Equip/EquipSet.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-//涓诲姛鑳芥暣濂楄澶�
-public class EquipSet
-{
-    public readonly int maxEquipCnt = 12; //鏈�澶ц澶囨牸瀛愭暟
-    public readonly int mark;  //澶氬鎯呭喌锛屾垨鑰呭娴佹淳瀛樺偍
-    public bool unLocked { get { return true; } }   //鍚庣画鏍规嵁鐜╂硶瑙i攣鐨勬儏鍐碉紝濡傝喘涔板瓨鍌ㄦ祦娲句綅
-
-    public int fightPower {
-        get {
-            return EquipFightPower.Instance.CalculatePower(mark);
-        }
-    }
-
-    Dictionary<int, EquipSlot> equipSlots = new Dictionary<int, EquipSlot>();
-
-    public EquipSet(int mark)
-    {
-        this.mark = mark;
-        for (var i = 1; i <= maxEquipCnt; i++)
-        {
-            equipSlots[i] = new EquipSlot(i);
-        }
-
-    }
-
-    public void UpdateEquipSlot(int place, string equipGuid)
-    {
-        if (equipSlots.ContainsKey(place))
-        {
-            equipSlots[place].equip.value = equipGuid;
-        }
-    }
-
-
-
-    public EquipSlot GetEquipSlot(int place)
-    {
-        if (!equipSlots.ContainsKey(place))
-        {
-            return null;
-        }
-
-        return equipSlots[place];
-    }
-
-    public string GetEquip(int place)
-    {
-        if (!equipSlots.ContainsKey(place))
-        {
-            return null;
-        }
-
-        return equipSlots[place].equip.value;
-    }
-
-    
-
-    public int CompareToCurrent(string equipGuid)
-    {
-        var item = PackManager.Instance.GetItemByGuid(equipGuid);   //闇�鏀规垚鍦版澘鐗╁搧
-        if (item == null)
-        {
-            return 0;
-        }
-
-        var place = item.config.EquipPlace;
-        if (!equipSlots.ContainsKey(place))
-        {
-            return 0;
-        }
-
-        var slot = equipSlots[place];
-        var currentEquip = PackManager.Instance.GetItemByGuid(slot.equip.value);
-        if (currentEquip == null)
-        {
-            return 1;
-        }
-
-        return item.score.CompareTo(currentEquip.score);
-    }
-
-    public static Int2 ServerPlaceToClientPlace(int serverPlace)
-    {
-        var config = EquipPlaceMapConfig.Get(serverPlace);
-        if (config != null)
-        {
-            return new Int2(config.LV, config.EquipPlace);
-        }
-        else
-        {
-            return Int2.zero;
-        }
-    }
-
-    public static int ClientPlaceToServerPlace(Int2 equipPosition)
-    {
-        return EquipPlaceMapConfig.GetServerPlace(equipPosition.x, equipPosition.y);
-    }
-
-}
-
-
diff --git a/Main/System/Equip/EquipSet.cs.meta b/Main/System/Equip/EquipSet.cs.meta
deleted file mode 100644
index 78440b6..0000000
--- a/Main/System/Equip/EquipSet.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: 5e6ca401fb2c59844b89e981c4a58bc0
-timeCreated: 1551096917
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/System/Equip/EquipSlot.cs b/Main/System/Equip/EquipSlot.cs
deleted file mode 100644
index 599a32c..0000000
--- a/Main/System/Equip/EquipSlot.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-//瑁呭浣嶇疆涓婄殑淇℃伅锛堝崟鏍煎瓙锛夛紝澶氭祦娲惧彲鐢�
-public class EquipSlot
-{
-    public int equipPosition;
-    public readonly LogicString equip = new LogicString();
-    public int itemId; 
-
-    public EquipSlot(int equipPosition)
-    {
-        this.equipPosition = equipPosition;
-    }
-
-
-}
-
-
diff --git a/Main/System/Equip/EquipSlot.cs.meta b/Main/System/Equip/EquipSlot.cs.meta
deleted file mode 100644
index e03634b..0000000
--- a/Main/System/Equip/EquipSlot.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: e1fa9aacd2e109c4c954083ce08738e4
-timeCreated: 1551097235
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/System/Equip/EquipTipWin.cs b/Main/System/Equip/EquipTipWin.cs
new file mode 100644
index 0000000..ec865c8
--- /dev/null
+++ b/Main/System/Equip/EquipTipWin.cs
@@ -0,0 +1,125 @@
+锘縰sing System;
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UI;
+
+//瑁呭TIP鐣岄潰
+public class EquipTipWin : UIBase
+{
+    [SerializeField] Image equipImage;
+    [SerializeField] Text itemName;
+    [SerializeField] OutlineEx itemNameOutline;
+    [SerializeField] Text qualityName;
+    [SerializeField] OutlineEx qualityNameOutline;
+    [SerializeField] Text placeName;
+    [SerializeField] Text lvText;
+    [SerializeField] Image bgFlower;    //鑳屾櫙鑺辩汗鍙樿壊
+    [SerializeField] List<Text> baseAttrNames;
+    [SerializeField] List<Text> baseAttrValues;
+    [SerializeField] GameObject fightAttrGameObj;
+    [SerializeField] List<GameObject> fightAttrLine;
+    [SerializeField] List<Text> fightAttrNames;
+    [SerializeField] List<Text> fightAttrValues;
+
+    [SerializeField] UIEffectPlayer uieffect;
+    [SerializeField] RectTransform bgRect;
+
+    ItemModel equip;
+    protected override void OnPreOpen()
+    {
+        equip = PackManager.Instance.GetItemByGuid(ItemTipUtility.mainTipData.guid);
+        Display(equip);
+    }
+
+    protected override void OnOpen()
+    {
+        //鐗规晥鏄剧ず渚濊禆rect鐨勬帓鐗堬紝鏀惧湪涓嬩竴甯�
+        RefreshEffect(equip).Forget();
+    }
+
+    protected override void OnPreClose()
+    {
+        equip = null;
+    }
+
+    public void Display(ItemModel equip)
+    {
+
+        equipImage.SetOrgSprite(equip.config.IconKey);
+        itemName.text = UIHelper.AppendColor(equip.config.ItemColor, equip.config.ItemName, true, 1);
+        itemNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor);
+        qualityName.text = UIHelper.GetQualityNameWithColor(equip.config.ItemColor, Language.Get("equipQualityFormat"));
+        qualityNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor);
+        placeName.text = EquipModel.Instance.GetEquipPlaceName(equip.config.EquipPlace);
+        lvText.text = Language.Get("EquipExchangeWin7", EquipModel.Instance.GetEquipLV(equip));
+        bgFlower.color = UIHelper.GetUIColor(equip.config.ItemColor);
+
+
+        var baseAttrs = EquipModel.Instance.GetEquipBaseAttrs(equip);
+        var baseValues = EquipModel.Instance.GetEquipBaseValues(equip);
+        var fightAttrs = EquipModel.Instance.GetEquipFightAttrs(equip);
+        var fightValues = EquipModel.Instance.GetEquipFightValues(equip);
+
+        for (var i = 0; i < baseAttrNames.Count; i++)
+        {
+            if (i >= baseAttrs.Count)
+            {
+                baseAttrNames[i].text = "";
+                baseAttrValues[i].text = "";
+            }
+            else
+            {
+                baseAttrNames[i].text = PlayerPropertyConfig.Get(baseAttrs[i]).Name;
+                baseAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(baseAttrs[i], baseValues[i]);
+            }
+        }
+
+        if (fightAttrs.IsNullOrEmpty())
+        {
+            fightAttrGameObj.SetActive(false);
+        }
+        else
+        {
+            fightAttrGameObj.SetActive(true);
+            for (var i = 0; i < fightAttrNames.Count; i++)
+            {
+                if (i >= fightAttrs.Count)
+                {
+                    fightAttrNames[i].SetActive(false);
+                }
+                else
+                {
+                    fightAttrNames[i].SetActive(true);
+                    fightAttrNames[i].text = PlayerPropertyConfig.Get(fightAttrs[i]).Name;
+                    fightAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(fightAttrs[i], fightValues[i]);
+                }
+            }
+        }
+
+    }
+
+    //寤惰繜澶勭悊鐗规晥澶у皬
+    async UniTask RefreshEffect(ItemModel equip)
+    { 
+        await UniTask.DelayFrame(5);
+        int effectID = EquipModel.Instance.equipUIEffects[Math.Min(equip.config.ItemColor, EquipModel.Instance.equipUIEffects.Length) - 1];
+        if (effectID == 0)
+        {
+            uieffect.Stop();
+        }
+        else
+        {
+            uieffect.effectId = effectID;
+            //璁$畻楂樺害缂╂斁姣斾緥 鐗规晥鏄剧ず渚濊禆rect鐨勬帓鐗�
+            uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
+            uieffect.Play();
+        }
+    }
+
+}
+
+
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/EquipTipWin.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/EquipTipWin.cs.meta
index 142c67b..5bc25e6 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/EquipTipWin.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: c4548b7cf21c8394fb9dc6e8f52676ee
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Equip/FloorItemCell.cs b/Main/System/Equip/FloorItemCell.cs
new file mode 100644
index 0000000..9264178
--- /dev/null
+++ b/Main/System/Equip/FloorItemCell.cs
@@ -0,0 +1,101 @@
+锘縰sing DG.Tweening;
+using System;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+
+public class FloorItemCell : MonoBehaviour, IPointerClickHandler
+{
+
+    [SerializeField] Image itemImage;
+    [SerializeField] UIEffectPlayer uieff;
+    [SerializeField] RectTransform scaleObject;    //閰嶅悎鍝佽川鍋氱壒鏁堢缉鏀�
+
+    int itemIndex = -1;
+    bool isPlaying = false;
+
+    Vector2 startPos = new Vector2(10000, 10000); //璧峰浣嶇疆锛岀敤浜庨噸缃�
+    /// <summary>
+    /// 鎾斁鎺夎惤鐗╁搧
+    /// </summary>
+    /// <param name="index">鎺夎惤鑳屽寘绱㈠紩</param>
+    /// <param name="isAnimate">鏄惁鎾斁鎺夎惤鍔ㄧ敾</param>
+    public void Display(int index, bool isAnimate, RectTransform rect)
+    {
+        itemIndex = index;
+        float duration = 0.5f / AutoFightModel.Instance.fightSpeed; //鎺夎惤鏃堕棿
+        var item = PackManager.Instance.GetItemByIndex(PackType.DropItem, index);
+        if (item == null)
+        {
+            this.transform.SetActive(false);
+            return;
+        }
+        itemImage.SetOrgSprite(item.config.IconKey);
+        int effectID = EquipModel.Instance.equipUIEffectLights[Math.Min(item.config.ItemColor, EquipModel.Instance.equipUIEffectLights.Length) - 1];
+        if (effectID == 0)
+        {
+            uieff.Stop();
+        }
+        else
+        {
+            uieff.effectId = effectID;
+            float scale = EquipModel.Instance.dropEffectScales[Math.Min(item.config.ItemColor, EquipModel.Instance.equipUIEffectLights.Length) - 1];
+            scaleObject.localScale = new Vector3(scale, scale, 1);
+            uieff.Play();
+        }
+
+        if (rect == null)
+        {
+            if (startPos == new Vector2(10000, 10000))
+            {
+                //閬垮厤澶氭闅忔満
+                startPos = new Vector2(UnityEngine.Random.Range(-150, 150), UnityEngine.Random.Range(-150, 150));
+            }
+        }
+        else
+        {
+            //startPos鐨勪綅缃繘琛岃寖鍥撮殢鏈�
+            startPos = new Vector2(rect.localPosition.x + UnityEngine.Random.Range(-60, 60), rect.localPosition.y + UnityEngine.Random.Range(-60, 60));
+        }
+        if (isAnimate)
+        {
+            isPlaying = true;
+            //闅忔満鏂瑰悜杩斿洖1鎴栬��-1
+            int randDir = UnityEngine.Random.Range(0, 2) == 0 ? 1 : -1;
+
+            this.transform.localPosition = startPos;
+            this.transform.DOLocalPath(new Vector3[] { startPos,
+                    new Vector3(startPos.x + randDir * 15, startPos.y + 30f, 0),
+                    new Vector3(startPos.x + randDir * 35, startPos.y + UnityEngine.Random.Range(-140, -130), 0) }, duration, PathType.CatmullRom).SetEase(Ease.InOutSine).OnComplete(CompleteDrop);
+        }
+        else
+        {
+            this.transform.localPosition = startPos;
+            // 鎵嬪姩鐐瑰嚮鎴栬�呰嚜鍔ㄦā寮忎笅澶勭悊
+            // EquipModel.Instance.CalcFloorEquip(itemIndex);
+            // itemIndex = -1;
+        }
+    }
+
+    public void OnPointerClick(PointerEventData eventData)
+    {
+        if (!isPlaying)
+            CompleteDrop();
+    }
+
+    void CompleteDrop()
+    {
+        EquipModel.Instance.CalcFloorEquip(itemIndex);
+        isPlaying = false;
+        itemIndex = -1;
+    }
+
+    // void OnDisable()
+    // {
+    //     CompleteDrop();
+    // }
+}
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/FloorItemCell.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/FloorItemCell.cs.meta
index 142c67b..d1b9ef3 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/FloorItemCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: ded146761f9ff1a4888dae05204a45b8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Equip/ItemsOnFloor.cs b/Main/System/Equip/ItemsOnFloor.cs
new file mode 100644
index 0000000..f3f8555
--- /dev/null
+++ b/Main/System/Equip/ItemsOnFloor.cs
@@ -0,0 +1,118 @@
+锘縰sing Cysharp.Threading.Tasks;
+using DG.Tweening;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ItemsOnFloor : MonoBehaviour
+{
+    [SerializeField] RectTransform floorUI;     //鎺夎惤閬撳叿鏄剧ず鐨勭埗绫�
+    [SerializeField] FloorItemCell floorItemCell;    //闈炶澶囨樉绀虹粍浠�
+    [SerializeField] MoneyMoveByPath moneyMoveByPathCell;     //鎺夎惤鐗╅噾閽�
+
+    FloorItemCell[] floorItemCells = new FloorItemCell[20];    //鍖呭惈闈炶澶囩殑鎴樺埄鍝佹帀钀�
+    MoneyMoveByPath[] moneyMoveByPathArr = new MoneyMoveByPath[20];  //鎺夎惤璐у竵锛岄噾閽憋紝缁忛獙绛�
+
+
+    void Awake()
+    {
+        for (int i = 0; i < floorItemCells.Length; i++)
+        {
+            //灏嗛鍒朵綋瀹炰緥鍖栧埌鐣岄潰涓�
+            var inst = Instantiate(floorItemCell, floorUI);
+            inst.gameObject.name = "floorItemCell" + i;
+            inst.transform.localPosition = Vector3.zero;
+            floorItemCells[i] = inst;
+        }
+        for (int i = 0; i < moneyMoveByPathArr.Length; i++)
+        {
+            var mmbpath = Instantiate(moneyMoveByPathCell, floorUI);
+            mmbpath.gameObject.name = "moneyMoveByPath" + i;
+            mmbpath.transform.localPosition = Vector3.zero;
+            moneyMoveByPathArr[i] = mmbpath;
+        }
+    }
+
+
+    //涓荤晫闈㈠垏鎹㈡ā寮忚Е鍙�
+    private void OnEnable()
+    {
+        //涓荤晫闈㈡墦寮�鍜屾樉闅愰兘瑕佸埛鏂�
+        Display();
+        EquipModel.Instance.OnItemDropEvent += NotifyPlayItemDrop;
+        PackManager.Instance.DeleteItemEvent += DeleteDropItem;
+    }
+
+
+    private void OnDisable()
+    {
+        EquipModel.Instance.OnItemDropEvent -= NotifyPlayItemDrop;
+        PackManager.Instance.DeleteItemEvent -= DeleteDropItem;
+
+    }
+
+
+    void NotifyPlayItemDrop(List<int> itemIndexs, RectTransform rect)
+    {
+        Display(true, itemIndexs, rect);
+    }
+
+
+    void DeleteDropItem(PackType packType, string guid, int itemID, int index, int clearType)
+    {
+        if (packType != PackType.DropItem)
+            return;
+
+        floorItemCells[index].SetActive(false);
+        if (clearType == 1 || index >= moneyMoveByPathArr.Length)
+        {
+            return;
+        }
+
+        if (!EquipModel.Instance.IsEquip(itemID))
+        {
+            return;
+        }
+
+        moneyMoveByPathArr[index].transform.localPosition = floorItemCells[index].transform.localPosition;
+        moneyMoveByPathArr[index].SetActive(true);
+        moneyMoveByPathArr[index].PlayAnimation(42, 6);
+    }
+
+    /// <summary>
+    /// 鎺夎惤杩囩▼鐨勮〃鐜� 鐣岄潰鏍煎瓙缁勪欢椤哄簭鍜岃儗鍖呮牸瀛愰『搴忎竴鑷�
+    /// </summary>
+    /// <param name="isAnimate"></param>
+    /// <param name="showCount"></param>
+    public void Display(bool isAnimate = false, List<int> indexList = null, RectTransform rect = null)
+    {
+        for (int i = 0; i < floorItemCells.Length; i++)
+        {
+            var item = floorItemCells[i];
+            var equipModel = PackManager.Instance.GetItemByIndex(PackType.DropItem, i);
+            if (equipModel == null)
+            {
+                //瀵圭┖鐗╁搧杩涜闅愯棌闃茶寖
+                item.SetActive(false);
+                continue;
+            }
+            if (indexList != null && !indexList.Contains(i))
+            {
+                //涓嶅共娑夊叾浠栨帀钀界墿鍝�
+                continue;
+            }
+
+            item.SetActive(true);
+            item.Display(i, isAnimate, rect);
+        }
+    }
+
+
+
+    
+}
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Equip/ItemsOnFloor.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Equip/ItemsOnFloor.cs.meta
index 142c67b..10d3f96 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Equip/ItemsOnFloor.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: e285e681ab9565647a21421b59fdc98a
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/GeneralConfig/GeneralDefine.cs b/Main/System/GeneralConfig/GeneralDefine.cs
index d3d89bf..dfd2bd8 100644
--- a/Main/System/GeneralConfig/GeneralDefine.cs
+++ b/Main/System/GeneralConfig/GeneralDefine.cs
@@ -11,7 +11,6 @@
     public static Dictionary<int, int> MoneyDisplayModel { get; private set; }
     public static int playerMaxLevel { get; private set; }
     
-    public static Dictionary<int, string> equipPlaceNameDict { get; private set; }
     public static Dictionary<int, int> moneyDisplayIds { get; private set; }
     public static int expDisplayId { get; private set; }
     
@@ -110,19 +109,6 @@
             // wingEquipLimits = ConfigParse.GetDic<int, int>(GetInputString("WingRealmLimit", 1));
             // int i = 0;
             // int[] equipPlaces = GetIntArray("EquipArea", 1);
-            // string[] equipPlacesNames = GetStringArray("EquipArea", 2);
-            // equipPlaceNameDict = new Dictionary<int, string>();
-            // for (i = 0; i < equipPlaces.Length; i++)
-            // {
-            //     if (!equipPlaceNameDict.ContainsKey(equipPlaces[i]))
-            //     {
-            //         equipPlaceNameDict.Add(equipPlaces[i], equipPlacesNames[i]);
-            //     }
-            //     else
-            //     {
-            //         Debug.LogError("EquipArea : 瑁呭浣嶇疆閲嶅");
-            //     }
-            // }
             // var _trailBossJson = LitJson.JsonMapper.ToObject(GetInputString("MuneKadoTrialBossHead", 1));
             // trailBossHeadIcons = new Dictionary<int, string>();
             // foreach (var _key in _trailBossJson.Keys)
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index 01aceb6..b7259a0 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -65,7 +65,7 @@
         }
     }
 
-    void DeleteHero(PackType packType, string guid)
+    void DeleteHero(PackType packType, string guid, int itemID, int index, int clearType)
     {
         if (packType == PackType.Hero)
         {
diff --git a/Main/System/ItemTip/ItemTipUtility.cs b/Main/System/ItemTip/ItemTipUtility.cs
index 18e63b2..76035e2 100644
--- a/Main/System/ItemTip/ItemTipUtility.cs
+++ b/Main/System/ItemTip/ItemTipUtility.cs
@@ -334,7 +334,7 @@
                 switch (packType)
                 {
                     case PackType.Equip:
-                        // mainTipData = CreateNormalEquipData(guid, operatable);
+                        mainTipData = new TipData() { guid = guid };
                         break;
                     default:
                         // if (item.isAuction)
@@ -370,9 +370,9 @@
 
         switch (tipType)
         {
-            // case TipType.Equip:
-            //     WindowCenter.Instance.Open<EquipTipWin>();
-            //     break;
+            case TipType.Equip:
+                UIManager.Instance.OpenWindow<EquipTipWin>();
+                break;
             // case TipType.PetMount:
             //     WindowCenter.Instance.Open<PetMountTipWin>();
             //     break;
@@ -404,9 +404,9 @@
 
     
 
-    // static TipData CreateNormalEquipData(string guid, bool operatable)
+    // static TipData CreateNormalEquipData(string guid)
     // {
-    //     var item = packModel.GetItemByGuid(guid);
+    //     var item = PackManager.Instance.GetItemByGuid(guid);
     //     if (item == null)
     //     {
     //         return default(TipData);
@@ -886,7 +886,6 @@
             isAuction = item.isAuction,
             isEquiped = isEquiped,
             isPreview = false,
-            score = item.score,
             isOverdue = ItemLogicUtility.Instance.IsOverdue(guid),
             auctionSurplusTime = item.isAuction ? item.auctionSurplusTime : 0,
             overdueSurplusTime = item.overdueSurplusTime,
diff --git a/Main/System/KnapSack/Logic/ItemLogicUtility.cs b/Main/System/KnapSack/Logic/ItemLogicUtility.cs
index c8ac004..750cbf2 100644
--- a/Main/System/KnapSack/Logic/ItemLogicUtility.cs
+++ b/Main/System/KnapSack/Logic/ItemLogicUtility.cs
@@ -57,7 +57,6 @@
     void OnBeforePlayerDataInitialize()
     {
         isPackResetOk = true;
-        ClearSortedBetterEquip();
     }
 
     #region 璁$畻瑁呭璇勫垎
@@ -174,42 +173,7 @@
 
     }
 
-    public int GetEquipScore(int itemId, Dictionary<int, List<int>> useDataDic = null, bool isPreview = false)
-    {
-        var config = ItemConfig.Get(itemId);
-        if (config == null) return 0;
-        if (config.EquipPlace == 0)
-        {
-            return 0;
-        }
-
-        var properties = new EquipSorceProperties();
-
-        if (IsCustomItem(itemId))
-        {
-            properties.AddBaseProperties(config.EffectValueA1, equipBaseProperties);
-            properties.AddCustomProperties(itemId);
-            return CalculateEquipScore(config.EffectValueA1, properties);
-        }
-
-        properties.AddBaseProperties(itemId, equipBaseProperties);
-
-
-        if (useDataDic != null)
-        {
-            if (useDataDic.ContainsKey((int)ItemUseDataKey.legendAttrID))
-            {
-                properties.AddRange(useDataDic[(int)ItemUseDataKey.legendAttrID], useDataDic[(int)ItemUseDataKey.legendAttrValue]);
-            }
-
-            if (useDataDic.ContainsKey((int)ItemUseDataKey.outOfPrintAttrID))
-            {
-                properties.AddRange(useDataDic[(int)ItemUseDataKey.outOfPrintAttrID], useDataDic[(int)ItemUseDataKey.outOfPrintAttrValue]);
-            }
-        }
-
-        return CalculateEquipScore(itemId, properties, useDataDic);
-    }
+    
 
     // private Dictionary<int, int> GetEquipLegendProperties(int itemId)
     // {
@@ -259,15 +223,9 @@
     /// <param name="itemId"></param>
     /// <returns></returns>
     private Dictionary<PropertyType, float> curEquipAttrDict = new Dictionary<PropertyType, float>(); //瀛樺偍褰撳墠瑁呭灞炴�у搴旂殑鏁板�� key 灞炴�� value 灞炴�у��
-    private int CalculateEquipScore(int itemId, EquipSorceProperties properties, Dictionary<int, List<int>> useDataDic = null)
+    private void CalculateEquipAttr(int itemId, EquipSorceProperties properties)
     {
         var config = ItemConfig.Get(itemId);
-        if (config == null || !GeneralDefine.CompareEquipPlaces.Contains(config.EquipPlace))
-        {
-            return 0;
-        }
-
-        //properties.AddRange(GetEquipShenProperties(itemId));
 
         var minAttack = properties.ContainsKey((int)PropertyType.MinAtk) ? properties[(int)PropertyType.MinAtk] : 0;
         var maxAttack = properties.ContainsKey((int)PropertyType.MaxAtk) ? properties[(int)PropertyType.MaxAtk] : 0;
@@ -276,10 +234,8 @@
         properties[(int)PropertyType.MinAtk] = minAttack + attack;
         properties[(int)PropertyType.MaxAtk] = maxAttack + attack;
 
-        Equation.Instance.Clear();
         curEquipAttrDict.Clear();
 
-        var GSProValueDict = EquipGSParamConfig.GetTagGsProValueDict(config.LV, config.ItemColor, config.SuiteiD > 0 ? 1 : 0, config.StarLevel);
         foreach (var key in properties.Keys)
         {
             var attrType = (PropertyType)key;
@@ -295,53 +251,12 @@
                     curEquipAttrDict.Add(attrType, properties[key]);
                     break;
                 default:
-                    if (GSProValueDict != null && GSProValueDict.ContainsKey(attrType))
-                    {
-                        var curProValue = properties[key] * GSProValueDict[attrType];
-                        curEquipAttrDict.Add(attrType, curProValue);
-                    }
-                    else
-                    {
-                        curEquipAttrDict.Add(attrType, properties[key]);
-                    }
+                    curEquipAttrDict.Add(attrType, properties[key]);
                     break;
             }
         }
 
-        foreach (var key in curEquipAttrDict.Keys)
-        {
-            var propertyConfig = PlayerPropertyConfig.Get((int)key);
-            if (propertyConfig != null)
-            {
-                Equation.Instance.AddKeyValue(propertyConfig.Parameter, curEquipAttrDict[key]);
-            }
-        }
-
-        var skillScore = 0;
-        if (useDataDic != null && useDataDic.ContainsKey((int)ItemUseDataKey.equipSkills))
-        {
-            for (int i = 0; i < useDataDic[(int)ItemUseDataKey.equipSkills].Count; i++)
-            {
-                skillScore += equipSkillScores[useDataDic[(int)ItemUseDataKey.equipSkills][i]];
-            }
-        }
-        else
-        {
-
-            if (config.AddSkill1 != 0 && equipSkillScores.ContainsKey(config.AddSkill1))
-            {
-                skillScore += equipSkillScores[config.AddSkill1];
-            }
-
-            if (config.AddSkill2 != 0 && equipSkillScores.ContainsKey(config.AddSkill2))
-            {
-                skillScore += equipSkillScores[config.AddSkill2];
-            }
-
-        }
-
-
-        return skillScore + Equation.Instance.Eval<int>(normalGSFormula);
+        
     }
 
     #endregion
@@ -940,49 +855,7 @@
     // }
     #endregion
 
-    #region 鑳屽寘鏁寸悊鍚庡ソ鐨勫悓绫诲瀷鏈�濂界殑瑁呭
-    Dictionary<int, Dictionary<int, ItemModel>> itemModelDict = new Dictionary<int, Dictionary<int, ItemModel>>();  // key1 瑁呭浣嶇疆绱㈠紩 key2 鑳屽寘浣嶇疆绱㈠紩
-
-    public void ClearSortedBetterEquip()
-    {
-        itemModelDict.Clear();
-    }
-
-    public void SetBagSortBetterEquipList(ItemModel itemModel)
-    {
-        if (itemModel == null || itemModel.packType != PackType.Item) return;
-
-        if (!IsCanPutOn(itemModel)) return;
-
-        int equipPlace = itemModel.config.EquipPlace;
-        if (!itemModelDict.ContainsKey(equipPlace))
-        {
-            var dict = new Dictionary<int, ItemModel>();
-            if (IsFightUp(itemModel.itemId, itemModel.score) == 1)
-            {
-                dict.Add(itemModel.gridIndex, itemModel);
-                itemModelDict.Add(equipPlace, dict);
-            }
-        }
-        else
-        {
-            if (IsFightUp(itemModel.itemId, itemModel.score) == 1)
-            {
-                itemModelDict[equipPlace].Add(itemModel.gridIndex, itemModel);
-            }
-        }
-
-    }
-
-    public ItemModel GetBagSortBetterEquip(int equipPlace, int index)
-    {
-        ItemModel itemModel = null;
-        if (itemModelDict.ContainsKey(equipPlace))
-        {
-            itemModelDict[equipPlace].TryGetValue(index, out itemModel);
-        }
-        return itemModel;
-    }
+    
 
     bool IsCanPutOn(ItemModel item)
     {
@@ -1009,7 +882,6 @@
         return true;
     }
 
-    #endregion
 
     #region 寰楀埌鐗╁搧鐨勫搧璐ㄩ鑹�
     private Dictionary<int, int> wingRefineQualityDict;
diff --git a/Main/System/KnapSack/Logic/ItemModel.cs b/Main/System/KnapSack/Logic/ItemModel.cs
index bb054fd..4950563 100644
--- a/Main/System/KnapSack/Logic/ItemModel.cs
+++ b/Main/System/KnapSack/Logic/ItemModel.cs
@@ -9,7 +9,7 @@
 
     public ItemConfig config { get; private set; }
     public ItemInfo itemInfo { get; private set; }
-    public int score { get; private set; }
+    private int score;
     public Dictionary<int, List<int>> useDataDict { get; private set; }
 
     public string guid { get { return itemInfo == null ? string.Empty : itemInfo.guid; } }
diff --git a/Main/System/KnapSack/Logic/SinglePack.cs b/Main/System/KnapSack/Logic/SinglePack.cs
index 325bfb2..ceea737 100644
--- a/Main/System/KnapSack/Logic/SinglePack.cs
+++ b/Main/System/KnapSack/Logic/SinglePack.cs
@@ -1,4 +1,5 @@
 锘縰sing System.Collections.Generic;
+using System.Linq;
 
 public class SinglePack
 {
@@ -207,6 +208,11 @@
         return count;
     }
 
+    public List<ItemModel> GetItems()
+    {
+        return items.Values.ToList();
+    }
+    
     public List<ItemModel> GetItems(FilterParams filterParams)
     {
         var list = new List<ItemModel>();
@@ -353,7 +359,7 @@
         itemIDs.Clear();
     }
 
-    public struct FilterParams
+    public class FilterParams
     {
         public List<int> levels;
         public List<int> qualitys;
diff --git a/Main/System/KnapSack/New/CommonItemBaisc.cs b/Main/System/KnapSack/New/CommonItemBaisc.cs
index ff3afdc..2298e1d 100644
--- a/Main/System/KnapSack/New/CommonItemBaisc.cs
+++ b/Main/System/KnapSack/New/CommonItemBaisc.cs
@@ -195,7 +195,7 @@
     public virtual void Init(ItemModel model, bool isCompare = false)
     {
         itemId = model.itemId;
-        InitUI(model.guid, model.itemId, (ulong)model.count, model.score, model.isAuction, model.packType, isCompare, model.useDataDict);
+        InitUI(model.guid, model.itemId, (ulong)model.count, model.isAuction, model.packType, isCompare, model.useDataDict);
     }
 
     /// <summary>
@@ -205,10 +205,10 @@
     public virtual void Init(ItemCellModel model)
     {
         itemId = model.itemId;
-        InitUI(model.guid, model.itemId, model.count, model.score, false, model.packType, model.isCompare, model.useDataDic);
+        InitUI(model.guid, model.itemId, model.count, false, model.packType, model.isCompare, model.useDataDic);
     }
 
-    private void InitUI(string guid, int itemId, ulong count, int score, bool isAuction, PackType type, bool isCompare, Dictionary<int, List<int>> useDataDic)
+    private void InitUI(string guid, int itemId, ulong count, bool isAuction, PackType type, bool isCompare, Dictionary<int, List<int>> useDataDic)
     {
         var config = ItemConfig.Get(itemId);
         if (config == null) return;
@@ -317,11 +317,11 @@
             return 99;
         }
 
-        if (ItemLogicUtility.Instance.IsRealmEquip(itemId))
-        {
-            return EquipModel.Instance.CompareToCurrent(guid);
-        }
-        else
+        // if (ItemLogicUtility.Instance.IsRealmEquip(itemId))
+        // {
+        //     return EquipModel.Instance.CompareToCurrent(guid);
+        // }
+        // else
         {
             return 0;
         }
diff --git a/Main/System/KnapSack/PackManager.cs b/Main/System/KnapSack/PackManager.cs
index 568630d..b351c6e 100644
--- a/Main/System/KnapSack/PackManager.cs
+++ b/Main/System/KnapSack/PackManager.cs
@@ -14,7 +14,7 @@
     public event Action<PackType, string, bool> ChangeItemEvent; // 鑳屽寘绫诲瀷锛孏UID锛屾槸鍚﹀垱寤�
 
     //鍒犻櫎鐗╁搧锛屽彲鑳芥壒閲忓垹闄ゆ敞鎰忔晥鐜�
-    public event Action<PackType, string> DeleteItemEvent; // 鑳屽寘绫诲瀷锛孏UID
+    public event Action<PackType, string, int, int, int> DeleteItemEvent; // 鑳屽寘绫诲瀷锛孏UID, 鐗╁搧ID锛岀储寮�, 鍒犻櫎鍘熷洜
 
     // 鍗曠墿鍝佸埛鏂� 鍦ㄥ緱鍒版柊鐗╁搧銆佺墿鍝佹暟閲忕殑鏀瑰彉锛屾竻鐞嗚鐗╁搧鏃跺潎浼氳Е鍙� ; 浣�0725鏁翠釜鑳屽寘鍒锋柊涓嶈Е鍙戯紝濡傛灉鏈夐渶瑕佸崟鐙暟閲忓埛鏂颁簨浠跺彟澶栧鐞�
     // 瑙﹀彂姣旇緝棰戠箒锛岀晫闈娇鐢ㄦ椂鍙互鍋氫釜姹囨�诲悗寤惰繜鍒锋柊
@@ -25,8 +25,6 @@
     public event Action<int> refreshItemDayUseCountEvent;  //鍒锋柊鐗╁搧姣忔棩浣跨敤鏁伴噺
     public event Action<int> refreshItemSumUseCountEvent;  //鍒锋柊鐗╁搧鎬讳娇鐢ㄦ暟閲�
     public event Action<PackType, string, bool> RefreshItemLockEvent; //鐗╁搧閿佸畾鍒锋柊 鑳屽寘绫诲瀷锛実uid锛岄攣瀹氱姸鎬�
-
-    public bool isPlayBetterEquipEffect { get; set; }  //鏁寸悊鑳屽寘鏃舵槸鍚︽挱鏀剧壒鏁�
 
     
     private Dictionary<PackType, SinglePack> playerPackDict = new Dictionary<PackType, SinglePack>();
@@ -111,7 +109,6 @@
         itemSumUseCntDict.Clear();
         itemGUIDDict.Clear();
         PackGirdServerBuyCountDict.Clear();
-        isPlayBetterEquipEffect = false;
     }
 
 
@@ -181,10 +178,6 @@
             playerPackDict.Add(packType, new SinglePack(packType));
         }
 
-        if (isPlayBetterEquipEffect)
-        {
-            ItemLogicUtility.Instance.ClearSortedBetterEquip();
-        }
 
         for (int i = 0; i < packInfo.ItemCount; i++)
         {
@@ -192,10 +185,7 @@
             var item = playerPackDict[packType].UpdateItem(itemInfo);
             AddItemGUIDDict(item, true);
 
-            if (isPlayBetterEquipEffect)
-            {
-                ItemLogicUtility.Instance.SetBagSortBetterEquipList(GetItemByGuid(itemInfo.guid));
-            }
+
         }
 
         if (refrechPackEvent != null)
@@ -208,7 +198,6 @@
 
     public void UpdateItem(H0704_tagRolePackRefresh serverItem)
     {
-        isPlayBetterEquipEffect = false;
         SetLookIndex(null);
         PackType type = (PackType)serverItem.PackType;
         if (!playerPackDict.ContainsKey(type))
@@ -321,7 +310,6 @@
     public void RefreshItemCount(H0707_tagItemCountRefresh refresh)
     {
         SetLookIndex(null);
-        isPlayBetterEquipEffect = false;
         PackType type = (PackType)refresh.PackType;
         SinglePack singlePack = null;
         playerPackDict.TryGetValue(type, out singlePack);
@@ -367,7 +355,6 @@
 
     public void RemoveItem(H0709_tagClearItem clearItem)
     {
-        isPlayBetterEquipEffect = false;
         SetLookIndex(null);
         PackType type = (PackType)clearItem.PackType;
 
@@ -385,9 +372,9 @@
             guid = itemModel.guid;
             int itemId = itemModel.itemId;
 
-            DeleteItemDictByGUID(type, itemModel.guid);
-
             singlePack.RemoveItem(clearItem.ItemIndex);
+            DeleteItemDictByGUID(type, itemModel.guid,itemId, clearItem.ItemIndex, clearItem.ClearType);
+
             if (RefreshItemEvent != null)
             {
                 RefreshItemEvent(type, clearItem.ItemIndex, itemId);
@@ -411,7 +398,6 @@
 
     public void UseItemSuccess(H0706_tagUseItemSuccess success)
     {
-        isPlayBetterEquipEffect = false;
         SetLookIndex(null);
         if (success.PlayerID != PlayerDatas.Instance.baseData.PlayerID)
         {
@@ -441,14 +427,14 @@
         ChangeItemEvent?.Invoke(itemModel.packType, itemModel.guid, showNewItem);
     }
 
-    void DeleteItemDictByGUID(PackType type, string guid)
+    void DeleteItemDictByGUID(PackType type, string guid, int itemID = 0, int index = 0, int clearType = -1)
     {
         if (itemGUIDDict.ContainsKey(guid))
         {
             if (itemGUIDDict[guid].packType == type)
             {
                 itemGUIDDict.Remove(guid);
-                DeleteItemEvent?.Invoke(type, guid);
+                DeleteItemEvent?.Invoke(type, guid, itemID, index, clearType);
             }
         }
     }
@@ -740,6 +726,18 @@
         }
     }
 
+    public List<ItemModel> GetItems(PackType packType)
+    {
+        if (playerPackDict.ContainsKey(packType))
+        {
+            return playerPackDict[packType].GetItems();
+        }
+        else
+        {
+            return null;
+        }
+    }
+
     //閫氳繃id鎵剧墿鍝侊紝娉ㄦ剰妫�鏌ユ槸鍚︽寚瀹氳儗鍖�
     public string GetItemGUIDByID(int itemId, bool includeAuction = true, PackType packType = PackType.Item)
     {
diff --git a/Main/System/Main/AutoFightModel.cs b/Main/System/Main/AutoFightModel.cs
new file mode 100644
index 0000000..1439254
--- /dev/null
+++ b/Main/System/Main/AutoFightModel.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+
+using UnityEngine;
+public class AutoFightModel : GameSystemManager<AutoFightModel>
+{
+    public int fightSpeed = 1; //鎴樻枟鍊嶆暟锛氬�艰秺澶ц秺蹇紝褰卞搷鎴樻枟琛ㄧ幇锛屾帀钀介�熷害绛�
+
+    public bool isAutoAttack; //鑷姩鏀诲嚮
+    public override void Init()
+    {
+
+    }
+
+    public override void Release()
+    {
+
+    }
+
+    void ParseConfig()
+    {
+    }
+
+}
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Main/AutoFightModel.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Main/AutoFightModel.cs.meta
index 142c67b..356587f 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Main/AutoFightModel.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: ba186d3dcc7ee6144b80ba4a293e11de
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Main/EquipOnMainUI.cs b/Main/System/Main/EquipOnMainUI.cs
new file mode 100644
index 0000000..501f06b
--- /dev/null
+++ b/Main/System/Main/EquipOnMainUI.cs
@@ -0,0 +1,144 @@
+锘縰sing UnityEngine;
+
+using DG.Tweening;
+using Cysharp.Threading.Tasks;
+
+
+public class EquipOnMainUI : MonoBehaviour
+{
+
+    [SerializeField] RectTransform[] slotEquips; //瑁呭鏍煎瓙
+    [SerializeField] RectTransform[] flyEquips;
+    [SerializeField] RectTransform flyStartPos;
+
+
+    EquipCell[] m_EquipSlots;
+    EquipCell[] m_EquipFlySlots;
+
+    void Awake()
+    {
+        if (m_EquipSlots == null)
+        {
+            m_EquipSlots = new EquipCell[slotEquips.Length];
+            for (int i = 0; i < slotEquips.Length; i++)
+            {
+                m_EquipSlots[i] = slotEquips[i].GetComponent<EquipCell>();
+            }
+        }
+
+        if (m_EquipFlySlots == null)
+        {
+            m_EquipFlySlots = new EquipCell[flyEquips.Length];
+            for (int i = 0; i < flyEquips.Length; i++)
+            {
+                m_EquipFlySlots[i] = flyEquips[i].GetComponent<EquipCell>();
+            }
+        }
+    }
+
+    //涓荤晫闈㈠垏鎹㈡ā寮忚Е鍙�
+    private void OnEnable()
+    {
+
+        PackManager.Instance.refrechPackEvent += OnRefrechPackEvent;
+        //packModel.refreshItemCountEvent += PackModel_refreshItemCountEvent;
+        EquipModel.Instance.OnEquipOPResultAction += OnEquipResult;
+        DisplaySlotEquip();
+        for (int i = 0; i < flyEquips.Length; i++)
+        {
+            flyEquips[i].SetActive(false);
+        }
+    }
+
+
+    private void OnDisable()
+    {
+        PackManager.Instance.refrechPackEvent -= OnRefrechPackEvent;
+        //packModel.refreshItemCountEvent -= PackModel_refreshItemCountEvent;
+        EquipModel.Instance.OnEquipOPResultAction -= OnEquipResult;
+    }
+
+
+
+
+    void OnRefrechPackEvent(PackType type)
+    {
+        if (type == PackType.Equip)
+        {
+            DisplaySlotEquip();
+        }
+    }
+
+
+
+    private void OnEquipResult(bool isDone, int index)
+    {
+        //绌挎埓鎴栬�� 鏇挎崲涓斿垎瑙f垚鍔燂紝鎵嶅仛椋樼殑琛ㄧ幇锛屾湭鍒嗚В鐨勪笉鍋氳〃鐜�
+        if (!isDone)
+        {
+            return;
+        }
+        FlyToEquipGird(index);
+    }
+
+
+
+    //鏄剧ず瑁呭鏍煎瓙
+    void DisplaySlotEquip()
+    {
+        for (int i = 0; i < slotEquips.Length; i++)
+        {
+            var equipItem = PackManager.Instance.GetItemByIndex(PackType.Equip, i);
+            m_EquipSlots[i].Init(equipItem);
+        }
+    }
+
+    void FlyToEquipGird(int equipIndex)
+    {
+        var equipInfo = PackManager.Instance.GetItemByIndex(PackType.Equip, equipIndex);
+        var flyEquip = m_EquipFlySlots[equipIndex];
+        if (equipInfo == null)
+        {
+            flyEquip.SetActive(false);
+            return;
+        }
+        int itemID = equipInfo.config.ID;
+        flyEquip.Init(equipInfo);
+        flyEquip.SetActive(true);
+
+        flyEquip.transform.localPosition = new Vector3(flyStartPos.localPosition.x + Random.Range(-80, 80), flyStartPos.localPosition.y + Random.Range(-20, 20), 0);
+        FlyToEquipCell(flyEquip, equipIndex, equipInfo).Forget();
+
+
+    }
+
+    async UniTask FlyToEquipCell(EquipCell flyEquip, int equipIndex, ItemModel equipInfo)
+    {
+        //绛夊緟鐣岄潰鍏抽棴鍚庯紝鎵嶅鐞嗗悗缁�昏緫
+        while (UIManager.Instance.IsOpened<EquipExchangeWin>())
+        {
+            await UniTask.Yield();
+        }
+
+
+        flyEquip.transform.DOMove(new Vector3(slotEquips[equipIndex].position.x, slotEquips[equipIndex].position.y, 0), 0.5f).OnComplete(() =>
+        {
+            flyEquip.SetActive(false);
+
+            slotEquips[equipIndex].SetActive(true);
+            m_EquipSlots[equipIndex].Init(equipInfo);
+
+            //itemCell鍙樺ぇ鍐嶅彉鍥�1鍊�
+            slotEquips[equipIndex].transform.DOScale(Vector3.one * 1.3f, 0.3f).OnComplete(() =>
+            {
+                slotEquips[equipIndex].transform.DOScale(Vector3.one, 0.3f);
+            });
+        });
+}
+
+}
+
+
+
+
+
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Main/EquipOnMainUI.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Main/EquipOnMainUI.cs.meta
index 142c67b..57a004e 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Main/EquipOnMainUI.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 9e81838537ed3f3438cb3559673725f8
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Main/FightPowerManager.cs b/Main/System/Main/FightPowerManager.cs
new file mode 100644
index 0000000..dfc2a0f
--- /dev/null
+++ b/Main/System/Main/FightPowerManager.cs
@@ -0,0 +1,236 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+public class FightPowerManager : Singleton<FightPowerManager>
+{
+    string propertyFormula;
+
+    public FightPowerManager()
+    {
+        var config = FuncConfigConfig.Get("HeroAttrFormula");
+        propertyFormula = config.Numerical1;
+    }
+
+
+    //瑁呭鎴樺姏涓烘渶缁堟�绘垬鍔涚殑缁撴灉姣旓紙鎻愬崌鏁翠釜瑙掕壊鎬绘垬鍔涳級
+    public int CalculatePower(int level)
+    {
+        // Equation.Instance.Clear();
+        // Equation.Instance.AddKeyValue("equipScoreTotal", CountEquipScore(level));
+        // var power = Equation.Instance.Eval<int>(scoreFormula);
+
+        // var propertyContainer = new Properties();
+
+        // Equation.Instance.Clear();
+        // var keys = propertyContainer.keys;
+        // for (int i = 0; i < keys.Count; i++)
+        // {
+        //     var id = keys[i];
+        //     var value = propertyContainer[id];
+        //     var config = PlayerPropertyConfig.Get(id);
+        //     Equation.Instance.AddKeyValue(config.Parameter, value);
+        // }
+
+        // var propertyPower = Equation.Instance.Eval<int>(propertyFormula);
+        // power += propertyPower;
+
+
+        return 0;
+    }
+
+    //鍜岃韩涓婅澶囧姣�
+    public long GetFightPowerChange(ItemModel item)
+    {
+        return 0;
+    }
+
+
+
+
+    class Properties
+    {
+        Dictionary<int, int> tables = new Dictionary<int, int>();
+
+        public List<int> keys { get { return new List<int>(tables.Keys); } }
+
+        public int this[int id] { get { return tables[id]; } }
+
+        public void Add(int id, int value)
+        {
+            if (id == 7)
+            {
+                Add(67, value);
+                Add(68, value);
+            }
+            else
+            {
+                if (tables.ContainsKey(id))
+                {
+                    tables[id] = tables[id] + value;
+                }
+                else
+                {
+                    tables[id] = value;
+                }
+            }
+        }
+
+        public void AddRange(List<int> ids, List<int> values)
+        {
+            if (ids.IsNullOrEmpty() || values.IsNullOrEmpty())
+            {
+                return;
+            }
+
+            var count = Mathf.Min(ids.Count, values.Count);
+            for (int i = 0; i < count; i++)
+            {
+                Add(ids[i], values[i]);
+            }
+        }
+
+    }
+
+
+
+    #region 璁$畻鎴樻枟鍔�
+    public static readonly string FightPowerFormula = "FightpowerFormula";
+
+    // public static int GetFightPower(Dictionary<int, int> _propertyDict)
+    // {
+    //     Equation.Instance.Clear();
+    //     if (_propertyDict == null || _propertyDict.Count == 0)
+    //     {
+    //         return 0;
+    //     }
+
+    //     foreach (var _key in _propertyDict.Keys)
+    //     {
+    //         PlayerPropertyConfig cfg = PlayerPropertyConfig.Get(_key);
+    //         if (cfg != null)
+    //         {
+    //             if (_key == 7)
+    //             {
+    //                 Equation.Instance.AddKeyValue("MinAtk", _propertyDict[_key]);
+    //                 Equation.Instance.AddKeyValue("MaxAtk", _propertyDict[_key]);
+    //             }
+    //             else if (_key == 24)
+    //             {
+    //                 Equation.Instance.AddKeyValue("PetMinAtk", _propertyDict[_key]);
+    //                 Equation.Instance.AddKeyValue("PetMaxAtk", _propertyDict[_key]);
+    //             }
+    //             else
+    //             {
+    //                 ulong attrValue = (ulong)_propertyDict[_key];
+    //                 var fightParm = GetFightPowerParmByAttrId(_key);
+    //                 if (_key == 11)
+    //                 {
+    //                     var playerLv = PlayerDatas.Instance.baseData.LV;
+    //                     var paramConfig = FightPowerParamConfig.Get(playerLv);
+    //                     Equation.Instance.AddKeyValue("AtkSpeedParameter", paramConfig.AtkSpeedParameter);
+    //                 }
+    //                 else
+    //                 {
+    //                     if (fightParm != 0)
+    //                     {
+    //                         attrValue = attrValue * (ulong)fightParm;
+    //                     }
+    //                 }
+    //                 Equation.Instance.AddKeyValue(cfg.Parameter, attrValue);
+    //             }
+    //         }
+
+    //     }
+    //     FuncConfigConfig funcCfg = FuncConfigConfig.Get(FightPowerFormula);
+    //     return Equation.Instance.Eval<int>(funcCfg.Numerical1);
+    // }
+
+    // public static int GetFightPowerParmByAttrId(int attrId)
+    // {
+    //     int playerLv = PlayerDatas.Instance.baseData.LV;
+    //     FightPowerParamConfig paramConfig = FightPowerParamConfig.Get(playerLv);
+    //     PlayerPropertyConfig cfg = PlayerPropertyConfig.Get(attrId);
+    //     if (paramConfig == null || cfg == null) return 0;
+
+    //     switch (cfg.Parameter)
+    //     {
+    //         case "Hit":
+    //             return paramConfig.Hit;
+    //         case "Miss":
+    //             return paramConfig.Miss;
+    //         case "IgnoreDefRate":
+    //             return paramConfig.IgnoreDefRate;
+    //         case "DamChanceDef":
+    //             return paramConfig.DamChanceDef;
+    //         case "FaintRate":
+    //             return paramConfig.FaintRate;
+    //         case "LuckyHitRateReduce":
+    //             return paramConfig.LuckyHitRateReduce;
+    //         case "SkillAtkRate":
+    //             return paramConfig.SkillAtkRate;
+    //         case "SkillAtkRateReduce":
+    //             return paramConfig.SkillAtkRateReduce;
+    //         case "DamagePerPVP":
+    //             return paramConfig.DamagePerPVP;
+    //         case "DamagePerPVPReduce":
+    //             return paramConfig.DamagePerPVPReduce;
+    //         case "DamBackPer":
+    //             return paramConfig.DamBackPer;
+    //         case "IgnoreDefRateReduce":
+    //             return paramConfig.IgnoreDefRateReduce;
+    //         case "FaintDefRate":
+    //             return paramConfig.FaintDefRate;
+    //         case "AtkSpeedParameter":
+    //             return paramConfig.AtkSpeedParameter;
+    //         case "JobAHurtAddPer":
+    //             return paramConfig.JobAHurtAddPer;
+    //         case "JobBHurtAddPer":
+    //             return paramConfig.JobBHurtAddPer;
+    //         case "JobCHurtAddPer":
+    //             return paramConfig.JobCHurtAddPer;
+    //         case "JobAAtkReducePer":
+    //             return paramConfig.JobAAtkReducePer;
+    //         case "JobBAtkReducePer":
+    //             return paramConfig.JobBAtkReducePer;
+    //         case "JobCAtkReducePer":
+    //             return paramConfig.JobCAtkReducePer;
+    //         case "SuperHitRate":
+    //             return paramConfig.SuperHitRate;
+    //         case "LuckyHitRate":
+    //             return paramConfig.LuckyHitRate;
+    //         case "SuperHitRateReduce":
+    //             return paramConfig.SuperHitRateReduce;
+    //         case "FinalHurtPer":
+    //             return paramConfig.FinalHurtPer;
+    //         case "FinalHurtReducePer":
+    //             return paramConfig.FinalHurtReducePer;
+    //         case "NPCHurtAddPer":
+    //             return paramConfig.NPCHurtAddPer;
+    //         case "NormalHurtPer":
+    //             return paramConfig.NormalHurtPer;
+    //         case "FabaoHurtPer":
+    //             return paramConfig.FabaoHurtPer;
+    //         case "AffairSpeedPer":
+    //             return paramConfig.AffairSpeedPer;
+    //         case "FamilyBossHurtPer":
+    //             return paramConfig.FamilyBossHurtPer;
+    //         case "FamilyWarHPPer":
+    //             return paramConfig.FamilyWarHPPer;
+    //         case "FamilyWarAtkPer":
+    //             return paramConfig.FamilyWarAtkPer;
+    //         case "FamilySitExpPer":
+    //             return paramConfig.FamilySitExpPer;
+    //         case "BossFinalHurtPer":
+    //             return paramConfig.BossFinalHurtPer;
+    //     }
+
+    //     return 0;
+    // }
+
+    #endregion
+
+}
+
+
diff --git a/Main/System/Equip/EquipFightPower.cs.meta b/Main/System/Main/FightPowerManager.cs.meta
similarity index 100%
rename from Main/System/Equip/EquipFightPower.cs.meta
rename to Main/System/Main/FightPowerManager.cs.meta
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 047a210..1ccc79c 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -27,6 +27,8 @@
 
     [SerializeField] Button changeHeroPosBtn;
 
+    [SerializeField] Button autoBtn;
+
     /// <summary>
     /// 鍒濆鍖栫粍浠�
     /// </summary>
@@ -37,11 +39,34 @@
         {
             UIManager.Instance.OpenWindow<MainBossEnterWin>();
         });
-        
+
         changeHeroPosBtn.AddListener(() =>
         {
             HeroUIManager.Instance.selectTeamType = TeamType.Story;
             UIManager.Instance.OpenWindow<HeroPosWin>();
+        });
+
+        autoBtn.AddListener(()=>
+        {
+            //娴嬭瘯鎷惧彇鎵�鏈夌墿鍝�
+            var items = PackManager.Instance.GetItems(PackType.DropItem);
+            List<int> dropindexs = new List<int>();
+            for (int i = 0; i < items.Count; i++)
+            {
+                var item = items[i];
+                if (dropindexs.Count > 5)
+                {
+                    EquipModel.Instance.NotifyItemDrop(dropindexs, BattleManager.Instance.storyBattleField.battleRootNode.blueTeamNodeList[Random.Range(0, 5)].GetComponent<RectTransform>());
+                    dropindexs.Clear();
+                }
+
+                dropindexs.Add(item.gridIndex);
+            }
+            if (dropindexs.Count > 0)
+            {
+                EquipModel.Instance.NotifyItemDrop(dropindexs, BattleManager.Instance.storyBattleField.battleRootNode.blueTeamNodeList[Random.Range(0,5)].GetComponent<RectTransform>());
+                dropindexs.Clear();
+            }
         });
     }
 
@@ -126,7 +151,14 @@
             taskText.text = taskConfig.TaskDescribe;
             taskNumText.text = string.Format("({0}/{1})", task.CurValue, taskConfig.NeedValue);
             taskNumText.color = task.CurValue >= taskConfig.NeedValue ? UIHelper.GetUIColor(TextColType.NavyYellow) :  UIHelper.GetUIColor(TextColType.Red);
-            taskEffect.SetActive(TaskManager.Instance.GetMainTaskState() == 2);
+            if (TaskManager.Instance.GetMainTaskState() == 2)
+            { 
+                taskEffect.Play();
+            }
+            else
+            {
+                taskEffect.Stop();
+            }
             awardIcon.SetOrgSprite(ItemConfig.Get(taskConfig.AwardItemList[0][0]).IconKey);
             awardCnt.text = taskConfig.AwardItemList[0][1].ToString();
         }
diff --git a/Main/System/Main/MoneyMoveByPath.cs b/Main/System/Main/MoneyMoveByPath.cs
new file mode 100644
index 0000000..fcef22c
--- /dev/null
+++ b/Main/System/Main/MoneyMoveByPath.cs
@@ -0,0 +1,115 @@
+锘縰sing DG.Tweening;
+using System.Collections.Generic;
+using UnityEngine;
+
+//鑾峰緱璐у竵鍔ㄧ敾
+public class MoneyMoveByPath : MonoBehaviour
+{
+    [Header("绗竴娈靛姩鐢荤Щ鍔ㄦ椂闂�")]
+    public float duration1 = 1f;      // 鍔ㄧ敾鎸佺画鏃堕棿
+    [Header("闅忔満鍒濆宸﹀彸闂磋窛")]
+    public float spacing = 50f;         // 璁剧疆鍥剧墖涔嬮棿鐨勯棿闅�
+    [Header("X鍙傝�冨亸绉诲��")]
+    public float XPath = 50f;       
+    [Header("Y鍙傝�冨亸绉诲��")]
+    public float YPath = 100f;
+    [Header("Y鍙傝�冨亸绉诲��")]
+    public AnimationCurve heightCurve; // 鐢ㄤ簬瀹氫箟璺緞楂樺害鐨勬洸绾�
+    [Header("绗簩娈靛姩鐢婚鍒扮洰鐨勫湴")]
+    public float duration2 = 0.4f;     // 鍔ㄧ敾鎸佺画鏃堕棿
+    public Transform targetPosition;
+    List<ImageEx> imgMoneys = new List<ImageEx>();
+    
+    /// <summary>
+    /// 鎾斁鎺夎惤鍔ㄧ敾
+    /// </summary>
+    /// <param name="targetPosition">鐩殑鍦板潗鏍�</param>
+    /// <param name="moneyType">璐у竵绫诲瀷</param>
+    /// <param name="num">鎺夊嚑涓揣甯�</param>
+    public void PlayAnimation(int moneyType, int num)
+    {
+        int createImgCnt = 0;
+        if (imgMoneys.IsNullOrEmpty())
+        {
+            createImgCnt = num;
+        }
+        else
+        {
+            createImgCnt = Mathf.Max(0, num - imgMoneys.Count);
+        }
+        if (createImgCnt > 0)
+        {
+            for (int i = 0; i < createImgCnt; i++)
+            {
+                var imgMoney = new GameObject("moneyIcon" + i);
+                imgMoney.AddMissingComponent<ImageEx>();
+                //鎸傜埗鑺傜偣
+                imgMoney.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
+                var moneyImg = imgMoney.GetComponent<ImageEx>();
+                moneyImg.SetSprite(StringUtility.Contact("Money_Type_", moneyType));
+                moneyImg.raycastTarget = false;
+                moneyImg.GetComponent<RectTransform>().sizeDelta = new Vector2(40, 40);
+                imgMoneys.Add(moneyImg);
+            }
+        }
+
+        //閫氳繃 heightCurve 鐢熸垚璺緞锛屾椂闂翠负x 鎬绘椂闂翠负1锛寉涓洪珮搴︼紝鍋忕Щ閲忎负100
+        int pointCount = 30;
+        Vector3[] points = new Vector3[pointCount];
+        for (int i = 0; i < pointCount; i++)
+        {
+            float x = i / (pointCount - 1f);
+            float y = heightCurve.Evaluate(x) * YPath;
+            points[i] = new Vector3(x * XPath, y, 0);
+
+        }
+
+
+        
+
+        for (int i = 0; i < imgMoneys.Count; i++)
+        {
+            var moneyImg = imgMoneys[i];
+            
+            if (num <= i)
+            {
+                moneyImg.transform.localScale = Vector3.zero;
+            }
+            else
+            {
+                moneyImg.transform.localScale = Vector3.one;
+                int randDir = Random.Range(0, 2) == 0 ? 1 : -1;
+                float offsetX = Random.Range(0, spacing);
+
+                // x y 闅忔満涓嬪樊寮�
+                float randX = Random.Range(0.2f, 1f);
+                float randY = Random.Range(0.6f, 1f);
+                Vector3[] points2 = new Vector3[pointCount];
+                for (int j = 0; j < points.Length; j++)
+                {
+                    points2[j] = new Vector3((points[j].x + offsetX)* randDir * randX, points[j].y * randY, points[j].z);
+                }
+                moneyImg.transform.localPosition = points2[0];
+
+
+                moneyImg.transform.DOLocalPath(points2, duration1, PathType.CatmullRom).SetEase(Ease.InOutSine).OnComplete(() =>
+                {
+                    if (targetPosition != null)
+                    {
+                        //绉诲姩鍒扮洰鏍囦綅缃�
+                        moneyImg.transform.DOMove(targetPosition.position, duration2).OnComplete(() =>
+                        {
+                            moneyImg.transform.localScale = Vector3.zero;
+                        });
+                    }
+                    else
+                    {
+                        moneyImg.transform.localScale = Vector3.zero;
+                    }
+                });
+
+
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs.meta b/Main/System/Main/MoneyMoveByPath.cs.meta
similarity index 83%
copy from Main/Config/Configs/EquipGSParamConfig.cs.meta
copy to Main/System/Main/MoneyMoveByPath.cs.meta
index 142c67b..08bb533 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs.meta
+++ b/Main/System/Main/MoneyMoveByPath.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f510c442e570ac446af81fa008cc0367
+guid: 4bf9701377419a14f9d4969bc2138ac5
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Message/HrefAnalysis.cs b/Main/System/Message/HrefAnalysis.cs
index 9d57751..ff1c108 100644
--- a/Main/System/Message/HrefAnalysis.cs
+++ b/Main/System/Message/HrefAnalysis.cs
@@ -261,7 +261,7 @@
                             {
                                 colorType = text.colorType == RichText.ColorType.Dark ? 0 : 1;
                             }
-                            presentHrefInfo.unlineColor = UIHelper.GetUIColor(quality, colorType == 1);
+                            presentHrefInfo.unlineColor = UIHelper.GetUIColorByFunc(quality, colorType == 1);
                         }
                     }
                     break;
diff --git a/Main/System/Tip/ConfirmCancel.cs b/Main/System/Tip/ConfirmCancel.cs
index 9e73ac6..dabaeca 100644
--- a/Main/System/Tip/ConfirmCancel.cs
+++ b/Main/System/Tip/ConfirmCancel.cs
@@ -123,7 +123,7 @@
     public static Action<bool> OnToggleSingleConfirmEvent;
     public static Action<bool, bool> OnToggleConfirmEventEx;
     //甯oggle鐨勭‘璁ゅ拰鍙栨秷
-    public static void ToggleConfirmCancel(string title, string content, string toggleTxt, Action<bool, bool> func, bool _toggle = false)
+    public static void ToggleConfirmCancel(string title, string content, string toggleTxt, Action<bool, bool> func, string okName = "", bool _toggle = false)
     {
         generalTitle = title;
         generalContent = content;
@@ -131,7 +131,7 @@
         OnToggleSingleConfirmEvent = null;
         OnToggleConfirmEvent = func;
         toggleOpenState = _toggle;
-        OKName = null;
+        OKName = okName;
         CancelName = null;
         if (!UIManager.Instance.IsOpened<ToggleConfirmWin>())
         {
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 837e293..e4f43ec 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -411,29 +411,16 @@
 {
     Weapon = 1,         // 涓绘墜
     Weapon2 = 2,       // 鍓墜
-    Hat = 3,                // 甯藉瓙
+    Hat = 3,                // 澶寸洈
     Clothes = 4,          // 琛f湇
     Belt = 5,                // 鑵板甫
     Trousers = 6,         // 瑁ゅ瓙
     Shoes = 7,             // 闉嬪瓙
-    Glove = 8,              //鎵嬪
-    Neck = 9,               //椤归摼
-    FairyCan1 = 10,      //浠欏櫒
-    FairyCan2 = 11,      //浠欏櫒
-    Jade = 12,              //鐜変僵
-
-    Wing = 13,               //缈呰唨
-    Guard = 14,            //瀹堟姢
-
-    PeerlessWeapon1 = 16,//缁濅笘姝﹀櫒
-    PeerlessWeapon2 = 17,//缁濅笘鍓墜
-
-    Mount = 19,              //褰撳墠鐨勫潗楠�
-
-    FashionWeapon = 20,//鏃惰姝﹀櫒
-    FashionClothes = 21, //鏃惰琛f湇
-    FashionWeapon2 = 22,//鏃惰鍓墜
-
+    Wristband = 8,              //鎶よ厱
+    Shawl = 9,               //鎶偐
+    Neck = 10,      //椤归摼
+    Ring= 11,      //鎴掓寚
+    Amulet = 12,              //鎶ょ
 
     retMax,
 };
@@ -808,6 +795,7 @@
     RuneCompound = 22,//绗﹀嵃鍚堟垚
     GatherSoulCompound = 23,//鑱氶瓊鍚堟垚
     GatherSoulDecompose = 24,//鑱氶瓊鍒嗚В
+    EquipOP,   // 25 涓荤晫闈㈣澶囧垎瑙�/鏇挎崲鍥炲 瀵瑰簲 B4 15 涓荤嚎鎺夎惤鐗╁搧鎿嶄綔 #tagCSMainDropItemOP
 
 }
 
@@ -1062,22 +1050,22 @@
 //鍝佽川鏂囧瓧鎻忚竟棰滆壊
 public enum QualityTextColType
 {
-    None = -1,
-    itemcucao = 0, //绮楃硻
-    itemputong = 1, //鏅��
-    itemjingliang = 2, //绮捐壇
-    itemxiyou = 3, //绋�鏈�
-    itemshishi = 4, //鍙茶瘲
-    itemchuanqi = 5, //浼犲
-    itemshenhua = 6, //绁炶瘽
-    itemwuxia = 7, //鏃犳殗
-    itemanjin = 8, //鏆楅噾
-    itemjueyi = 9, //缁濊壓
-    itemyuanzu = 10, //鍏冪
-    itembuxiu = 11, //涓嶆溄
-    itemyonghen = 12, //姘告亽
+    None = 0,
+    itemcucao = 1, //绮楃硻
+    itemputong = 2, //鏅��
+    itemjingliang = 3, //绮捐壇
+    itemxiyou = 4, //绋�鏈�
+    itemshishi = 5, //鍙茶瘲
+    itemchuanqi = 6, //浼犲
+    itemshenhua = 7, //绁炶瘽
+    itemwuxia = 8, //鏃犳殗
+    itemanjin = 9, //鏆楅噾
+    itemjueyi = 10, //缁濊壓
+    itemyuanzu = 11, //鍏冪
+    itembuxiu = 12, //涓嶆溄
+    itemyonghen = 13, //姘告亽
 
-    red = 13, //绾㈣壊
+    red = 14, //绾㈣壊
 }
 
 public enum TextColType
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index f18134d..665b56e 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -372,7 +372,7 @@
 
         if (num >= T)
         {
-            return  StringUtility.Contact(numto2Decimals(num / T).ToString("0.##"), Language.Get("L1070_0"));
+            return StringUtility.Contact(numto2Decimals(num / T).ToString("0.##"), Language.Get("L1070_0"));
         }
         else if (num >= B)
         {
@@ -507,7 +507,7 @@
     public static readonly Color s_BrightPurpleColor = new Color32(218, 72, 213, 255);
     public static readonly Color s_BrightBlueColor = new Color32(0, 107, 227, 255); //006BE3FF
     public static readonly Color s_BrightOrangeColor = new Color32(255, 103, 1, 255); //FF6701FF
-    public static readonly Color s_BrightWhiteColor = new Color32(104, 104, 104, 255); //686868
+    public static readonly Color s_BrightWhiteColor = new Color32(255, 255, 255, 255);    //ffffff //new Color32(104, 104, 104, 255); //686868
     public static readonly Color s_BrightGreenColor = new Color32(36, 139, 18, 255); //248b12
 
     public static readonly Color s_DarkPinkColor = new Color32(255, 124, 124, 255);
@@ -597,43 +597,62 @@
     //     return name;
     // }
 
-    //鐗╁搧 鍚勫姛鑳藉搧璐�
+
+
+    //鐗╁搧 鍚勫姛鑳藉搧璐� 浠庣簿鑹�1鍝佽川 瀵瑰簲 3寮�濮�
     public static Color GetUIColorByFunc(int itemColor, bool bright = true)
     {
-        return GetUIColor(itemColor + 1, bright);
+        return GetUIColor(itemColor + 2, bright);
     }
 
 
-    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐ㄤ粠2寮�濮� 鐢℅etUIColorByFunc
+    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐� 鐢℅etUIColorByFunc
     public static Color GetUIColor(int itemColor, bool bright = true)
     {
         switch (itemColor)
         {
             case 0:
-                return GetUIColor(TextColType.Gray, bright);
             case 1:
-                return GetUIColor(TextColType.White, bright);
+                return GetUIColor(TextColType.Gray, bright);
             case 2:
-                return GetUIColor(TextColType.itemjingliang, bright);
+                return GetUIColor(TextColType.White, bright);
             case 3:
-                return GetUIColor(TextColType.itemxiyou, bright);
+                return GetUIColor(TextColType.itemjingliang, bright);
             case 4:
-                return GetUIColor(TextColType.itemshishi, bright);
+                return GetUIColor(TextColType.itemxiyou, bright);
             case 5:
-                return GetUIColor(TextColType.itemchuanqi, bright);
+                return GetUIColor(TextColType.itemshishi, bright);
             case 6:
-                return GetUIColor(TextColType.itemshenhua, bright);
+                return GetUIColor(TextColType.itemchuanqi, bright);
             case 7:
-                return GetUIColor(TextColType.itemwuxia, bright);
+                return GetUIColor(TextColType.itemshenhua, bright);
             case 8:
-                return GetUIColor(TextColType.itemanjin, bright);
+                return GetUIColor(TextColType.itemwuxia, bright);
             case 9:
-                return GetUIColor(TextColType.itemjueyi, bright);
+                return GetUIColor(TextColType.itemanjin, bright);
             case 10:
-                return GetUIColor(TextColType.itemyuanzu, bright);
             case 11:
-                return GetUIColor(TextColType.itembuxiu, bright);
             case 12:
+            case 13:
+            case 14:
+                return GetUIColor(TextColType.itemjueyi, bright);
+            case 15:
+            case 16:
+            case 17:
+            case 18:
+            case 19:
+                return GetUIColor(TextColType.itemyuanzu, bright);
+            case 20:
+            case 21:
+            case 22:
+            case 23:
+            case 24:
+                return GetUIColor(TextColType.itembuxiu, bright);
+            case 25:
+            case 26:
+            case 27:
+            case 28:
+            case 29:
                 return GetUIColor(TextColType.itemyonghen, bright);
 
 
@@ -712,16 +731,53 @@
         return bright ? s_BrightWhiteColor : s_DarkWhiteColor;
     }
 
-    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐ㄤ粠2寮�濮� 鐢℅etUIOutlineColorByFunc
+    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐� 鐢℅etUIOutlineColorByFunc
     public static Color GetUIOutlineColor(int quality)
     {
-        return GetUIOutlineColor((QualityTextColType)quality);
+        switch (quality)
+        {
+            case 1:
+            case 2:
+            case 3:
+            case 4:
+            case 5:
+            case 6:
+            case 7:
+            case 8:
+            case 9:
+                return GetUIOutlineColor((QualityTextColType)quality);
+            case 10:
+            case 11:
+            case 12:
+            case 13:
+            case 14:
+                return GetUIOutlineColor(QualityTextColType.itemjueyi);
+            case 15:
+            case 16:
+            case 17:
+            case 18:
+            case 19:
+                return GetUIOutlineColor(QualityTextColType.itemyuanzu);
+            case 20:
+            case 21:
+            case 22:
+            case 23:
+            case 24:
+                return GetUIOutlineColor(QualityTextColType.itembuxiu);
+            case 25:
+            case 26:
+            case 27:
+            case 28:
+            case 29:
+                return GetUIOutlineColor(QualityTextColType.itemyonghen);
+        }
+        return GetUIOutlineColor(QualityTextColType.itemputong);
     }
 
-    //鐗╁搧 鍚勫姛鑳藉搧璐�
+    //鐗╁搧 鍚勫姛鑳藉搧璐�  浠庣簿鑹�1鍝佽川 瀵瑰簲 3寮�濮�
     public static Color GetUIOutlineColorByFunc(int quality)
     {
-        return GetUIOutlineColor((QualityTextColType)(quality + 1));
+        return GetUIOutlineColor((QualityTextColType)(quality + 2));
     }
 
     //鎻忚竟棰滆壊锛屽搴斿搧璐�(鏍�)
@@ -774,7 +830,7 @@
         return new Color32(0, 0, 0, 128);
     }
 
-    private static Regex m_TextColorRegex = new Regex("<color=#[0-9a-zA-Z]+>(.*)</color>", RegexOptions.Singleline);
+    // private static Regex m_TextColorRegex = new Regex("<color=#[0-9a-zA-Z]+>(.*)</color>", RegexOptions.Singleline);
 
     public static string AppendColor(TextColType type, string msg, bool bright = true)
     {
@@ -788,7 +844,7 @@
         {
             case TextColType.None:
             case TextColType.White:
-                return StringUtility.Contact("<color=#", bright ? "686868" : "f7f7f7", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#", bright ? "ffffff" : "ffffff", ">", msg, "</color>");
             case TextColType.titleSelectColor:
                 return StringUtility.Contact("<color=#7F4139>", msg, "</color>");
             case TextColType.titleUnSelectColor:
@@ -798,23 +854,56 @@
             case TextColType.Pink:
                 return StringUtility.Contact("<color=#", bright ? "f6408d" : "ff7c7c", ">", msg, "</color>");
             case TextColType.Green:
-                return StringUtility.Contact("<color=#", bright ? "109d06" : "35e122", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#", bright ? "109d06" : "2ae337", ">", msg, "</color>");
             case TextColType.NavyBrown:
-                return StringUtility.Contact("<color=#", "6e4c31", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#6e4c31>", msg, "</color>");
             case TextColType.DarkGreen:
-                return StringUtility.Contact("<color=#", "109d06", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#109d06>", msg, "</color>");
             case TextColType.Black:
-                return StringUtility.Contact("<color=#", "000000", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#000000>", msg, "</color>");
             case TextColType.LightWhite:
-                return StringUtility.Contact("<color=#", "f5f646", ">", msg, "</color>");
+                return StringUtility.Contact("<color=f5f646>", msg, "</color>");
             case TextColType.LightGreen:
-                return StringUtility.Contact("<color=#", "8ddc11", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#8ddc11>", msg, "</color>");
             case TextColType.Gray:
-                return StringUtility.Contact("<color=#", "84797b", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#84797b>", msg, "</color>");
             case TextColType.lightYellow:
-                return StringUtility.Contact("<color=#", "fcedb9", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#fcedb9>", msg, "</color>");
             case TextColType.NavyYellow:
-                return StringUtility.Contact("<color=#", "f2ee02", ">", msg, "</color>");
+                return StringUtility.Contact("<color=#f2ee02>", msg, "</color>");
+            case TextColType.itemjingliang:
+                // 729de4 绮捐壇
+                return StringUtility.Contact("<color=#729de4>", msg, "</color>");
+            case TextColType.itemxiyou:
+                // c87bfa绋�鏈�
+                return StringUtility.Contact("<color=#c87bfa>", msg, "</color>");
+            case TextColType.itemshishi:
+                // f6de56 鍙茶瘲
+                return StringUtility.Contact("<color=#f6de56>", msg, "</color>");
+            case TextColType.itemchuanqi:
+                // fe8534 浼犲
+                return StringUtility.Contact("<color=#fe8534>", msg, "</color>");
+            case TextColType.itemshenhua:
+                // fe4a47 绁炶瘽
+                return StringUtility.Contact("<color=#fe4a47>", msg, "</color>");
+            case TextColType.itemwuxia:
+                // eb5ce9 鏃犵憰
+                return StringUtility.Contact("<color=#eb5ce9>", msg, "</color>");
+            case TextColType.itemanjin:
+                // f9e29f 鏆楅噾
+                return StringUtility.Contact("<color=#f9e29f>", msg, "</color>");
+            case TextColType.itemjueyi:
+                // cdfef2 缁濊壓
+                return StringUtility.Contact("<color=#cdfef2>", msg, "</color>");
+            case TextColType.itemyuanzu:
+                // dfbbed 鍏冪
+                return StringUtility.Contact("<color=#dfbbed>", msg, "</color>");
+            case TextColType.itembuxiu:
+                // 5eeff2 涓嶆溄
+                return  StringUtility.Contact("<color=#5eeff2>", msg, "</color>");
+            case TextColType.itemyonghen:
+                // f5b4ea 姘告亽
+                return StringUtility.Contact("<color=#f5b4ea>", msg, "</color>");
         }
         return msg;
     }
@@ -876,36 +965,66 @@
         }
     }
 
-    public static string AppendColor(int itemColor, string msg, bool bright = true)
+    //鐗╁搧 鍚勫姛鑳藉搧璐�  浠庣簿鑹�1鍝佽川 瀵瑰簲 3寮�濮�
+    /// <summary>
+    /// 棰滆壊瀹氫箟鏍规嵁鍒嗙粍澶勭悊锛屽鏅�氱墿鍝佺殑棰滆壊绮捐壇鏄�1寮�濮嬶紝鏍戝拰瑁呭涔熸槸绮楃硻1寮�濮嬶紝闇�瑕佽皟鏁村尮閰�
+    /// </summary>
+    /// <param name="itemColor"></param>
+    /// <param name="msg"></param>
+    /// <param name="bright"></param>
+    /// <param name="colorGroupType"></param>
+    /// <returns></returns>
+    public static string AppendColor(int itemColor, string msg, bool bright = true, int colorGroupType = 0)
     {
+        if (colorGroupType == 0)
+        {
+            itemColor = itemColor + 2;
+        }
+
         switch (itemColor)
         {
 
-            case 0:
-                return AppendColor(TextColType.Gray, msg, bright);
             case 1:
-                return AppendColor(TextColType.White, msg, bright);
+                return AppendColor(TextColType.Gray, msg, bright);
             case 2:
-                return AppendColor(TextColType.itemjingliang, msg, bright);
+                return AppendColor(TextColType.White, msg, bright);
             case 3:
-                return AppendColor(TextColType.itemxiyou, msg, bright);
+                return AppendColor(TextColType.itemjingliang, msg, bright);
             case 4:
-                return AppendColor(TextColType.itemshishi, msg, bright);
+                return AppendColor(TextColType.itemxiyou, msg, bright);
             case 5:
-                return AppendColor(TextColType.itemchuanqi, msg, bright);
+                return AppendColor(TextColType.itemshishi, msg, bright);
             case 6:
-                return AppendColor(TextColType.itemshenhua, msg, bright);
+                return AppendColor(TextColType.itemchuanqi, msg, bright);
             case 7:
-                return AppendColor(TextColType.itemwuxia, msg, bright);
+                return AppendColor(TextColType.itemshenhua, msg, bright);
             case 8:
-                return AppendColor(TextColType.itemanjin, msg, bright);
+                return AppendColor(TextColType.itemwuxia, msg, bright);
             case 9:
-                return AppendColor(TextColType.itemjueyi, msg, bright);
+                return AppendColor(TextColType.itemanjin, msg, bright);
             case 10:
-                return AppendColor(TextColType.itemyuanzu, msg, bright);
             case 11:
-                return AppendColor(TextColType.itembuxiu, msg, bright);
             case 12:
+            case 13:
+            case 14:
+                return AppendColor(TextColType.itemjueyi, msg, bright);
+            case 15:
+            case 16:
+            case 17:
+            case 18:
+            case 19:
+                return AppendColor(TextColType.itemyuanzu, msg, bright);
+            case 20:
+            case 21:
+            case 22:
+            case 23:
+            case 24:
+                return AppendColor(TextColType.itembuxiu, msg, bright);
+            case 25:
+            case 26:
+            case 27:
+            case 28:
+            case 29:
                 return AppendColor(TextColType.itemyonghen, msg, bright);
 
         }
@@ -931,141 +1050,7 @@
     }
     #endregion
 
-    #region 璁$畻鎴樻枟鍔�
-    public static readonly string FightPowerFormula = "FightpowerFormula";
-
-    // public static int GetFightPower(Dictionary<int, int> _propertyDict)
-    // {
-    //     Equation.Instance.Clear();
-    //     if (_propertyDict == null || _propertyDict.Count == 0)
-    //     {
-    //         return 0;
-    //     }
-
-    //     foreach (var _key in _propertyDict.Keys)
-    //     {
-    //         PlayerPropertyConfig cfg = PlayerPropertyConfig.Get(_key);
-    //         if (cfg != null)
-    //         {
-    //             if (_key == 7)
-    //             {
-    //                 Equation.Instance.AddKeyValue("MinAtk", _propertyDict[_key]);
-    //                 Equation.Instance.AddKeyValue("MaxAtk", _propertyDict[_key]);
-    //             }
-    //             else if (_key == 24)
-    //             {
-    //                 Equation.Instance.AddKeyValue("PetMinAtk", _propertyDict[_key]);
-    //                 Equation.Instance.AddKeyValue("PetMaxAtk", _propertyDict[_key]);
-    //             }
-    //             else
-    //             {
-    //                 ulong attrValue = (ulong)_propertyDict[_key];
-    //                 var fightParm = GetFightPowerParmByAttrId(_key);
-    //                 if (_key == 11)
-    //                 {
-    //                     var playerLv = PlayerDatas.Instance.baseData.LV;
-    //                     var paramConfig = FightPowerParamConfig.Get(playerLv);
-    //                     Equation.Instance.AddKeyValue("AtkSpeedParameter", paramConfig.AtkSpeedParameter);
-    //                 }
-    //                 else
-    //                 {
-    //                     if (fightParm != 0)
-    //                     {
-    //                         attrValue = attrValue * (ulong)fightParm;
-    //                     }
-    //                 }
-    //                 Equation.Instance.AddKeyValue(cfg.Parameter, attrValue);
-    //             }
-    //         }
-
-    //     }
-    //     FuncConfigConfig funcCfg = FuncConfigConfig.Get(FightPowerFormula);
-    //     return Equation.Instance.Eval<int>(funcCfg.Numerical1);
-    // }
-
-    // public static int GetFightPowerParmByAttrId(int attrId)
-    // {
-    //     int playerLv = PlayerDatas.Instance.baseData.LV;
-    //     FightPowerParamConfig paramConfig = FightPowerParamConfig.Get(playerLv);
-    //     PlayerPropertyConfig cfg = PlayerPropertyConfig.Get(attrId);
-    //     if (paramConfig == null || cfg == null) return 0;
-
-    //     switch (cfg.Parameter)
-    //     {
-    //         case "Hit":
-    //             return paramConfig.Hit;
-    //         case "Miss":
-    //             return paramConfig.Miss;
-    //         case "IgnoreDefRate":
-    //             return paramConfig.IgnoreDefRate;
-    //         case "DamChanceDef":
-    //             return paramConfig.DamChanceDef;
-    //         case "FaintRate":
-    //             return paramConfig.FaintRate;
-    //         case "LuckyHitRateReduce":
-    //             return paramConfig.LuckyHitRateReduce;
-    //         case "SkillAtkRate":
-    //             return paramConfig.SkillAtkRate;
-    //         case "SkillAtkRateReduce":
-    //             return paramConfig.SkillAtkRateReduce;
-    //         case "DamagePerPVP":
-    //             return paramConfig.DamagePerPVP;
-    //         case "DamagePerPVPReduce":
-    //             return paramConfig.DamagePerPVPReduce;
-    //         case "DamBackPer":
-    //             return paramConfig.DamBackPer;
-    //         case "IgnoreDefRateReduce":
-    //             return paramConfig.IgnoreDefRateReduce;
-    //         case "FaintDefRate":
-    //             return paramConfig.FaintDefRate;
-    //         case "AtkSpeedParameter":
-    //             return paramConfig.AtkSpeedParameter;
-    //         case "JobAHurtAddPer":
-    //             return paramConfig.JobAHurtAddPer;
-    //         case "JobBHurtAddPer":
-    //             return paramConfig.JobBHurtAddPer;
-    //         case "JobCHurtAddPer":
-    //             return paramConfig.JobCHurtAddPer;
-    //         case "JobAAtkReducePer":
-    //             return paramConfig.JobAAtkReducePer;
-    //         case "JobBAtkReducePer":
-    //             return paramConfig.JobBAtkReducePer;
-    //         case "JobCAtkReducePer":
-    //             return paramConfig.JobCAtkReducePer;
-    //         case "SuperHitRate":
-    //             return paramConfig.SuperHitRate;
-    //         case "LuckyHitRate":
-    //             return paramConfig.LuckyHitRate;
-    //         case "SuperHitRateReduce":
-    //             return paramConfig.SuperHitRateReduce;
-    //         case "FinalHurtPer":
-    //             return paramConfig.FinalHurtPer;
-    //         case "FinalHurtReducePer":
-    //             return paramConfig.FinalHurtReducePer;
-    //         case "NPCHurtAddPer":
-    //             return paramConfig.NPCHurtAddPer;
-    //         case "NormalHurtPer":
-    //             return paramConfig.NormalHurtPer;
-    //         case "FabaoHurtPer":
-    //             return paramConfig.FabaoHurtPer;
-    //         case "AffairSpeedPer":
-    //             return paramConfig.AffairSpeedPer;
-    //         case "FamilyBossHurtPer":
-    //             return paramConfig.FamilyBossHurtPer;
-    //         case "FamilyWarHPPer":
-    //             return paramConfig.FamilyWarHPPer;
-    //         case "FamilyWarAtkPer":
-    //             return paramConfig.FamilyWarAtkPer;
-    //         case "FamilySitExpPer":
-    //             return paramConfig.FamilySitExpPer;
-    //         case "BossFinalHurtPer":
-    //             return paramConfig.BossFinalHurtPer;
-    //     }
-
-    //     return 0;
-    // }
-
-    #endregion
+    
 
     #region 寰楀埌閲戦挶鏁伴噺鏍规嵁閲戦挶绫诲瀷
 
@@ -1267,14 +1252,10 @@
 
     #endregion
 
-    #region 寰楀埌瑁呭浣嶅搴旂殑閮ㄤ綅鍚嶇О
-    public static string GetEquipPlaceName(int place)
+    #region 寰楀埌瑁呭浣嶆垨鑰呯绂忔爲鍝佽川鍚嶇О 甯﹂鑹�
+    public static string GetQualityNameWithColor(int quality, string format="{0}")
     {
-        if (GeneralDefine.equipPlaceNameDict.ContainsKey(place))
-        {
-            return GeneralDefine.equipPlaceNameDict[place];
-        }
-        return "";
+        return AppendColor(quality, string.Format(format, Language.Get("equipQuality" + quality)), true, 1);
     }
     #endregion
 

--
Gitblit v1.8.0