From 1597500ffb8817259fa1c508fc2aeff79bb80770 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 15 七月 2025 22:46:26 +0800
Subject: [PATCH] 117 【武将】武将系统 - 图集

---
 Main/System/Hero/HeroInfo.Fetter.cs                                                |    3 
 Main/System/Main/FuncsBaseWin.cs                                                   |  117 ++++
 Main/System/Hero/HeroInfo.Star.cs                                                  |   12 
 Main/System/HeroUI/HeroBaseWin.cs.meta                                             |    2 
 Main/System/HeroUI.meta                                                            |    8 
 Main/System/HeroUI/HeroCardCell.cs                                                 |   37 +
 Main/System/Hero/HeroInfo.Quality.cs                                               |   11 
 Main/System/Main/FuncsBaseWin.cs.meta                                              |    2 
 Main/System/HeroUI/GiftBaseCell.cs                                                 |  195 ++++++
 Main/System/Tip/PowerAddWin.cs                                                     |   58 -
 Main/ResModule/ResManager.cs                                                       |    9 
 Main/System/Hero/HeroInfo.Level.cs                                                 |   11 
 Main/System/HeroUI/HeroCardLineCell.cs.meta                                        |    2 
 Main/System/Hero/HeroInfo.Properties.cs                                            |    1 
 Main/System/HeroUI/HeroListWin.cs.meta                                             |    2 
 Main/System/Hero/HeroManager.cs                                                    |  150 +++-
 Main/System/Main/HomeWin.cs                                                        |   55 -
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs      |   11 
 Main/System/HeroUI/HeroCardLineCell.cs                                             |   24 
 Main/Config/Configs/HeroConfig.cs                                                  |  160 ++--
 Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB412_tagCSHeroLineupSave.cs   |   58 +-
 Main/System/Hero/HeroInfo.Skin.cs                                                  |   13 
 Main/Config/Configs/HeroTalentConfig.cs                                            |   91 +-
 Main/System/KnapSack/PackManager.cs                                                |   25 
 Main/Utility/EnumHelper.cs                                                         |    2 
 Main/System/Hero/UIHeroController.cs                                               |   65 -
 Main/System/Battle/BattleWin.cs                                                    |    4 
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs                |   35 +
 Main/System/HeroUI/HeroBaseWin.cs                                                  |   75 ++
 Main/System/Hero/HeroInfo.Awake.cs                                                 |   18 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs.meta |    2 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB230_tagCSHeroLVUP.cs         |   30 
 Main/System/Hero/HeroInfo.cs                                                       |  137 +--
 /dev/null                                                                          |   12 
 Main/Utility/UIHelper.cs                                                           |    5 
 Main/System/Hero/HeroInfo.Break.cs                                                 |   17 
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs.meta           |    2 
 Main/System/Main/MainWin.cs                                                        |  164 ++---
 Main/System/HeroUI/GiftBaseCell.cs.meta                                            |    2 
 Main/System/HeroUI/HeroCardCell.cs.meta                                            |    2 
 Main/System/HeroUI/HeroListWin.cs                                                  |   74 ++
 41 files changed, 1,147 insertions(+), 556 deletions(-)

diff --git a/Main/Config/Configs/HeroConfig.cs b/Main/Config/Configs/HeroConfig.cs
index 59fd4f9..88e542d 100644
--- a/Main/Config/Configs/HeroConfig.cs
+++ b/Main/Config/Configs/HeroConfig.cs
@@ -1,104 +1,92 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           2025骞�7鏈�7鏃�
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroConfig : ConfigBase<int, HeroConfig>
-{
-
-    public int HeroID;
-	public int Country;
-	public int Quality;
-	public int[] SkinIDList;
-	public int AtkSkillID;
-	public int AngerSkillID;
-	public int AtkInheritPer;
-	public int DefInheritPer;
-	public int HPInheritPer;
-	public string BatAttrDict;
-	public int[] FetterIDList;
-	public string Tachie;
-	public string SquareIcon;
-	public string RectangleIcon;
-	public string SpineRes;
-	public string BigSizeSpine;
-
-    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 HeroID); 
-
-			int.TryParse(tables[1],out Country); 
-
-			int.TryParse(tables[2],out Quality); 
-
-			if (tables[3].Contains("["))
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           Tuesday, July 15, 2025
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroConfig : ConfigBase<int, HeroConfig>
+{
+
+    public int HeroID;
+	public int Country;
+	public int Quality;
+	public int Class;
+	public int[] SkinIDList;
+	public int AtkSkillID;
+	public int AngerSkillID;
+	public int AtkInheritPer;
+	public int DefInheritPer;
+	public int HPInheritPer;
+	public string BatAttrDict;
+	public int[] FetterIDList;
+
+    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 HeroID); 
+
+			int.TryParse(tables[1],out Country); 
+
+			int.TryParse(tables[2],out Quality); 
+
+			int.TryParse(tables[3],out Class); 
+
+			if (tables[4].Contains("["))
 			{
-				SkinIDList = JsonMapper.ToObject<int[]>(tables[3]);
+				SkinIDList = JsonMapper.ToObject<int[]>(tables[4]);
 			}
 			else
 			{
-				string[] SkinIDListStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				string[] SkinIDListStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
 				SkinIDList = new int[SkinIDListStringArray.Length];
 				for (int i=0;i<SkinIDListStringArray.Length;i++)
 				{
 					 int.TryParse(SkinIDListStringArray[i],out SkinIDList[i]);
 				}
-			}
-
-			int.TryParse(tables[4],out AtkSkillID); 
-
-			int.TryParse(tables[5],out AngerSkillID); 
-
-			int.TryParse(tables[6],out AtkInheritPer); 
-
-			int.TryParse(tables[7],out DefInheritPer); 
-
-			int.TryParse(tables[8],out HPInheritPer); 
-
-			BatAttrDict = tables[9];
-
-			if (tables[10].Contains("["))
+			}
+
+			int.TryParse(tables[5],out AtkSkillID); 
+
+			int.TryParse(tables[6],out AngerSkillID); 
+
+			int.TryParse(tables[7],out AtkInheritPer); 
+
+			int.TryParse(tables[8],out DefInheritPer); 
+
+			int.TryParse(tables[9],out HPInheritPer); 
+
+			BatAttrDict = tables[10];
+
+			if (tables[11].Contains("["))
 			{
-				FetterIDList = JsonMapper.ToObject<int[]>(tables[10]);
+				FetterIDList = JsonMapper.ToObject<int[]>(tables[11]);
 			}
 			else
 			{
-				string[] FetterIDListStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				string[] FetterIDListStringArray = tables[11].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
 				FetterIDList = new int[FetterIDListStringArray.Length];
 				for (int i=0;i<FetterIDListStringArray.Length;i++)
 				{
 					 int.TryParse(FetterIDListStringArray[i],out FetterIDList[i]);
 				}
-			}
-
-			Tachie = tables[11];
-
-			SquareIcon = tables[12];
-
-			RectangleIcon = tables[13];
-
-			SpineRes = tables[14];
-
-			BigSizeSpine = tables[15];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HeroTalentConfig.cs b/Main/Config/Configs/HeroTalentConfig.cs
index eae288d..b3bdc50 100644
--- a/Main/Config/Configs/HeroTalentConfig.cs
+++ b/Main/Config/Configs/HeroTalentConfig.cs
@@ -1,44 +1,47 @@
-锘�//--------------------------------------------------------
-//    [Author]:           YYL
-//    [  Date ]:           Friday, June 27, 2025
-//--------------------------------------------------------
-
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System;
-using UnityEngine;
-using LitJson;
-
-public partial class HeroTalentConfig : ConfigBase<int, HeroTalentConfig>
-{
-
-    public int TalentID;
-	public int Quality;
-	public int AttrID;
-	public int AttrValue;
-
-    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 TalentID); 
-
-			int.TryParse(tables[1],out Quality); 
-
-			int.TryParse(tables[2],out AttrID); 
-
-			int.TryParse(tables[3],out AttrValue); 
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�11鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroTalentConfig : ConfigBase<int, HeroTalentConfig>
+{
+
+    public int TalentID;
+	public string Name;
+	public int Quality;
+	public int AttrID;
+	public int AttrValue;
+
+    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 TalentID); 
+
+			Name = tables[1];
+
+			int.TryParse(tables[2],out Quality); 
+
+			int.TryParse(tables[3],out AttrID); 
+
+			int.TryParse(tables[4],out AttrValue); 
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB230_tagCSHeroLVUP.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB230_tagCSHeroLVUP.cs
index 7721e7e..7eba337 100644
--- a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB230_tagCSHeroLVUP.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB230_tagCSHeroLVUP.cs
@@ -1,18 +1,18 @@
 using UnityEngine;
 using System.Collections;
 
-// B2 30 姝﹀皢鍗囩骇 #tagCSHeroLVUP
-
-public class CB230_tagCSHeroLVUP : GameNetPackBasic {
-    public ushort ItemIndex;    //姝﹀皢鐗╁搧鎵�鍦ㄦ灏嗚儗鍖呬綅缃储寮�
-
-    public CB230_tagCSHeroLVUP () {
-        combineCmd = (ushort)0x03FE;
-        _cmd = (ushort)0xB230;
-    }
-
-    public override void WriteToBytes () {
-        WriteBytes (ItemIndex, NetDataType.WORD);
-    }
-
-}
+// B2 30 姝﹀皢鍗囩骇 #tagCSHeroLVUP
+
+public class CB230_tagCSHeroLVUP : GameNetPackBasic {
+    public ushort ItemIndex;    //姝﹀皢鐗╁搧鎵�鍦ㄦ灏嗚儗鍖呬綅缃储寮�
+
+    public CB230_tagCSHeroLVUP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB230;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (ItemIndex, NetDataType.WORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB412_tagCSHeroLineupSave.cs b/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB412_tagCSHeroLineupSave.cs
index 5bbfe50..08fdd4a 100644
--- a/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB412_tagCSHeroLineupSave.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CB4_FightDefine/CB412_tagCSHeroLineupSave.cs
@@ -1,32 +1,32 @@
 using UnityEngine;
 using System.Collections;
 
-// B4 12 鎴樻枟闃靛淇濆瓨 #tagCSHeroLineupSave
-
-public class CB412_tagCSHeroLineupSave : GameNetPackBasic {
-    public byte LineupID;    //闃靛ID锛�1-涓婚樀瀹癸紱鍏朵粬寰呮墿灞曪紝濡傛煇涓槻瀹堥樀瀹�
-    public byte ShapeType;    //鏈樀瀹归樀鍨嬶紝0涓洪粯璁ら樀鍨嬶紝鍙墿灞曚笉鍚岀殑闃靛瀷
-    public byte PosCnt;
-    public  tagCSHeroLineupPos[] HeroPosList;    // 淇濆瓨鐨勯樀瀹癸紝鍙彂閫佹渶缁堢殑闃靛姝﹀皢浣嶇疆鍗冲彲
-
-    public CB412_tagCSHeroLineupSave () {
-        combineCmd = (ushort)0x03FE;
-        _cmd = (ushort)0xB412;
-    }
-
-    public override void WriteToBytes () {
-        WriteBytes (LineupID, NetDataType.BYTE);
-        WriteBytes (ShapeType, NetDataType.BYTE);
-        WriteBytes (PosCnt, NetDataType.BYTE);
-        for (int i = 0; i < PosCnt; i ++) {
-            WriteBytes (HeroPosList[i].ItemIndex, NetDataType.WORD);
-            WriteBytes (HeroPosList[i].PosNum, NetDataType.BYTE);
-        }
-    }
-
-    public struct tagCSHeroLineupPos {
-        public ushort ItemIndex;        //姝﹀皢鐗╁搧鎵�鍦ㄦ灏嗚儗鍖呬綅缃储寮�
-        public byte PosNum;        //1~n涓婇樀浣嶇疆缂栧彿  
-    }
-
-}
+// B4 12 鎴樻枟闃靛淇濆瓨 #tagCSHeroLineupSave
+
+public class CB412_tagCSHeroLineupSave : GameNetPackBasic {
+    public byte LineupID;    //闃靛ID锛�1-涓婚樀瀹癸紱鍏朵粬寰呮墿灞曪紝濡傛煇涓槻瀹堥樀瀹�
+    public byte ShapeType;    //鏈樀瀹归樀鍨嬶紝0涓洪粯璁ら樀鍨嬶紝鍙墿灞曚笉鍚岀殑闃靛瀷
+    public byte PosCnt;
+    public  tagCSHeroLineupPos[] HeroPosList;    // 淇濆瓨鐨勯樀瀹癸紝鍙彂閫佹渶缁堢殑闃靛姝﹀皢浣嶇疆鍗冲彲
+
+    public CB412_tagCSHeroLineupSave () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB412;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (LineupID, NetDataType.BYTE);
+        WriteBytes (ShapeType, NetDataType.BYTE);
+        WriteBytes (PosCnt, NetDataType.BYTE);
+        for (int i = 0; i < PosCnt; i ++) {
+            WriteBytes (HeroPosList[i].ItemIndex, NetDataType.WORD);
+            WriteBytes (HeroPosList[i].PosNum, NetDataType.BYTE);
+        }
+    }
+
+    public struct tagCSHeroLineupPos {
+        public ushort ItemIndex;        //姝﹀皢鐗╁搧鎵�鍦ㄦ灏嗚儗鍖呬綅缃储寮�
+        public byte PosNum;        //1~n涓婇樀浣嶇疆缂栧彿  
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs
new file mode 100644
index 0000000..ae72da7
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs
@@ -0,0 +1,11 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 22 姝﹀皢鍥鹃壌淇℃伅 #tagSCHeroInfo
+
+public class DTCB122_tagSCHeroInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HB122_tagSCHeroInfo vNetData = vNetPack as HB122_tagSCHeroInfo;
+    }
+}
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs.meta
index ea3af75..a69ea60 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB122_tagSCHeroInfo.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: 66418acd27c801d4598bf44cc0027cef
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs b/Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs
deleted file mode 100644
index efee950..0000000
--- a/Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using UnityEngine;
-using System.Collections;
-
-// B1 22 姝﹀皢淇℃伅 #tagSCHeroInfo
-
-public class CB122_tagSCHeroInfo : GameNetPackBasic {
-    public ushort HeroCnt;
-    public  tagSCHero[] HeroInfoList;
-
-    public CB122_tagSCHeroInfo () {
-        combineCmd = (ushort)0x03FE;
-        _cmd = (ushort)0xB122;
-    }
-
-    public override void WriteToBytes () {
-        WriteBytes (HeroCnt, NetDataType.WORD);
-        for (int i = 0; i < HeroCnt; i ++) {
-            WriteBytes (HeroInfoList[i].HeroID, NetDataType.DWORD);
-            WriteBytes (HeroInfoList[i].SkinState, NetDataType.DWORD);
-            WriteBytes (HeroInfoList[i].BookInitState, NetDataType.BYTE);
-            WriteBytes (HeroInfoList[i].BookStarLV, NetDataType.WORD);
-            WriteBytes (HeroInfoList[i].BookBreakLV, NetDataType.WORD);
-        }
-    }
-
-    public struct tagSCHero {
-        public uint HeroID;        // 姝﹀皢ID
-        public uint SkinState;        // 姝﹀皢鐨偆宸茶В閿佺姸鎬佷俊鎭紝鎸夌毊鑲ゆ墍鍦ㄧ储寮曚簩杩涘埗浣嶈繍绠楀垽鏂槸鍚﹁В閿侊紝0绱㈠紩浣嶉粯璁ょ毊鑲わ紝涓嶇敤楠岃瘉
-        public byte BookInitState;        // 鍥鹃壌婵�娲荤姸鎬侊細0-鏈縺娲伙紱1-鍙縺娲伙紱2-宸叉縺娲�
-        public ushort BookStarLV;        // 鍥鹃壌鏄熺骇绛夌骇
-        public ushort BookBreakLV;        // 鍥鹃壌绐佺牬绛夌骇
-    }
-
-}
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs
new file mode 100644
index 0000000..e20e5d3
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs
@@ -0,0 +1,35 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 22 姝﹀皢鍥鹃壌淇℃伅 #tagSCHeroInfo
+
+public class HB122_tagSCHeroInfo : GameNetPackBasic {
+    public ushort HeroCnt;
+    public  tagSCHero[] HeroInfoList;
+
+    public HB122_tagSCHeroInfo () {
+        _cmd = (ushort)0xB122;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out HeroCnt, vBytes, NetDataType.WORD);
+        HeroInfoList = new tagSCHero[HeroCnt];
+        for (int i = 0; i < HeroCnt; i ++) {
+            HeroInfoList[i] = new tagSCHero();
+            TransBytes (out HeroInfoList[i].HeroID, vBytes, NetDataType.DWORD);
+            TransBytes (out HeroInfoList[i].SkinState, vBytes, NetDataType.DWORD);
+            TransBytes (out HeroInfoList[i].BookInitState, vBytes, NetDataType.BYTE);
+            TransBytes (out HeroInfoList[i].BookStarLV, vBytes, NetDataType.WORD);
+            TransBytes (out HeroInfoList[i].BookBreakLV, vBytes, NetDataType.WORD);
+        }
+    }
+
+    public struct tagSCHero {
+        public uint HeroID;        // 姝﹀皢ID
+        public uint SkinState;        // 姝﹀皢鐨偆宸茶В閿佺姸鎬佷俊鎭紝鎸夌毊鑲ゆ墍鍦ㄧ储寮曚簩杩涘埗浣嶈繍绠楀垽鏂槸鍚﹁В閿侊紝0绱㈠紩浣嶉粯璁ょ毊鑲わ紝涓嶇敤楠岃瘉
+        public byte BookInitState;        // 鍥鹃壌婵�娲荤姸鎬侊細0-鏈縺娲伙紱1-鍙縺娲伙紱2-宸叉縺娲�
+        public ushort BookStarLV;        // 鍥鹃壌鏄熺骇绛夌骇
+        public ushort BookBreakLV;        // 鍥鹃壌绐佺牬绛夌骇
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs.meta
similarity index 84%
rename from Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs.meta
rename to Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs.meta
index b2c4ab0..bddabc3 100644
--- a/Main/Core/NetworkPackage/ServerPack/HB1_Role/CB122_tagSCHeroInfo.cs.meta
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB122_tagSCHeroInfo.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 202d7c3220a898241b3bc011d6a629f9
+guid: e1696a1b8ec22d84e8a41293db691354
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/ResModule/ResManager.cs b/Main/ResModule/ResManager.cs
index b049bde..3d68b85 100644
--- a/Main/ResModule/ResManager.cs
+++ b/Main/ResModule/ResManager.cs
@@ -1,14 +1,10 @@
 锘縰sing UnityEngine;
-using System.Collections;
 using System.Collections.Generic;
-using Cysharp.Threading.Tasks;
 using System;
 using UnityEngine.U2D;
-using LitJson;
 using System.IO;
-using UnityEngine.Networking;
 using UnityEngine.Video;
-using System.Reflection;
+using Spine.Unity;
 
 
 
@@ -77,6 +73,7 @@
         {typeof(Material), "mat"},
         {typeof(VideoClip), "mp4"},
         {typeof(SpriteAtlas), "spriteatlasv2"},
+        {typeof(SkeletonDataAsset), "asset"},
     };
 
 
@@ -145,8 +142,6 @@
         if (!AssetSource.isUseAssetBundle)
         {
 #if UNITY_EDITOR
-            //  TODO YYL 杩樻槸瑕佹壘鍒板瓧绗︿覆闂
-            path = System.Text.RegularExpressions.Regex.Replace(path, @"[\p{C}]", "");
             asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
 #endif
         }
diff --git a/Main/System/Battle/BattleWin.cs b/Main/System/Battle/BattleWin.cs
index 40c6530..796710b 100644
--- a/Main/System/Battle/BattleWin.cs
+++ b/Main/System/Battle/BattleWin.cs
@@ -1,9 +1,5 @@
 锘縰sing UnityEngine;
-using System.Collections;
-using System.Collections.Generic;
 using UnityEngine.UI;
-using DG.Tweening;
-using Cysharp.Threading.Tasks;
 
 public class BattleWin : UIBase
 {
diff --git a/Main/System/Hero/HeroInfo.Awake.cs b/Main/System/Hero/HeroInfo.Awake.cs
index 2f91343..f2174b7 100644
--- a/Main/System/Hero/HeroInfo.Awake.cs
+++ b/Main/System/Hero/HeroInfo.Awake.cs
@@ -4,6 +4,24 @@
 public partial class HeroInfo
 {
 
+    //  瑙夐啋閰嶇疆
+    public HeroAwakeConfig awakeConfig;
+
+    
+    //  鍝佽川瑙夐啋閰嶇疆
+    public HeroQualityAwakeConfig qualityAwakeConfig;
+
+    //  姝﹀皢瑙夐啋绛夌骇
+    public int awakeLevel
+    {
+        get
+        {
+            if (itemHero == null)
+                return 0;
+            return itemHero.GetUseDataFirstValue(76);
+        }
+    }
+
     protected int GetIFByInheritAwakePercent(HeroAttrType attrType)
     {
     	//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.Break.cs b/Main/System/Hero/HeroInfo.Break.cs
index 200e689..54fe5ba 100644
--- a/Main/System/Hero/HeroInfo.Break.cs
+++ b/Main/System/Hero/HeroInfo.Break.cs
@@ -3,6 +3,23 @@
 
 public partial class HeroInfo
 {
+	//  绐佺牬閰嶇疆
+    public HeroBreakConfig breakConfig;
+
+	//  鍝佽川绐佺牬閰嶇疆
+    public HeroQualityBreakConfig qualityBreakConfig;
+
+	//  姝﹀皢绐佺牬绛夌骇
+	public int breakLevel
+	{
+		get
+		{
+			if (itemHero == null)
+				return 0;
+			return itemHero.GetUseDataFirstValue(74);
+		}
+	}
+
 	protected int GetBreakCultivationPercent(HeroAttrType attrType)
 	{
 		//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.Collection.cs b/Main/System/Hero/HeroInfo.Collection.cs
deleted file mode 100644
index 60cf189..0000000
--- a/Main/System/Hero/HeroInfo.Collection.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-public partial class HeroInfo
-{
-	protected int GetCollectionCultivationPercent(HeroAttrType attrType)
-	{
-		//	YYL TODO
-		return 0;
-	}
-
-}
diff --git a/Main/System/Hero/HeroInfo.Fetter.cs b/Main/System/Hero/HeroInfo.Fetter.cs
index 3b47512..b5e0f71 100644
--- a/Main/System/Hero/HeroInfo.Fetter.cs
+++ b/Main/System/Hero/HeroInfo.Fetter.cs
@@ -3,6 +3,9 @@
 
 public partial class HeroInfo
 {
+	//  缇佺粖閰嶇疆
+    public HeroFetterConfig fetterConfig;
+
 	protected int GetIFByInheritFetterPercent(HeroAttrType attrType)
 	{
 		//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.Level.cs b/Main/System/Hero/HeroInfo.Level.cs
index 836c749..cf413f2 100644
--- a/Main/System/Hero/HeroInfo.Level.cs
+++ b/Main/System/Hero/HeroInfo.Level.cs
@@ -3,6 +3,17 @@
 
 public partial class HeroInfo
 {
+	//  姝﹀皢绛夌骇
+    public int heroLevel
+    {
+        get
+        {
+            if (itemHero == null)
+                return 0;
+            return itemHero.GetUseDataFirstValue(70);
+        }
+    }
+	
 	protected int GetLevelCultivationPercent(HeroAttrType attrType)
 	{
 		//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.Properties.cs b/Main/System/Hero/HeroInfo.Properties.cs
index 6bc70de..645338b 100644
--- a/Main/System/Hero/HeroInfo.Properties.cs
+++ b/Main/System/Hero/HeroInfo.Properties.cs
@@ -135,7 +135,6 @@
         cultivationPercent += GetLevelCultivationPercent(attrType);// 绛夌骇缁欑殑鐧惧垎姣� HeroInfo.Level.cs
         cultivationPercent += GetBreakCultivationPercent(attrType);// 绐佺牬缁欑殑鐧惧垎姣� HeroInfo.Break.cs
         cultivationPercent += GetStarCultivationPercent(attrType);// 鍚炲櫖鏄熺骇缁欑殑鐧惧垎姣� HeroInfo.Star.cs
-        cultivationPercent += GetCollectionCultivationPercent(attrType);// 鍥鹃壌缁欑殑鐧惧垎姣� HeroInfo.Collection.cs
         return cultivationPercent;
     }
 
diff --git a/Main/System/Hero/HeroInfo.Quality.cs b/Main/System/Hero/HeroInfo.Quality.cs
index c35973b..f320710 100644
--- a/Main/System/Hero/HeroInfo.Quality.cs
+++ b/Main/System/Hero/HeroInfo.Quality.cs
@@ -3,6 +3,17 @@
 
 public partial class HeroInfo
 {
+    //  鍝佽川閰嶇疆
+    public HeroQualityConfig qualityConfig;
+	
+	public int Quality
+	{
+		get
+		{
+			return heroConfig.Quality;
+		}
+	}
+
 	protected int GetQualityCultivationPercent(HeroAttrType attrType)
 	{
 		//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.Skin.cs b/Main/System/Hero/HeroInfo.Skin.cs
index 2654979..062da55 100644
--- a/Main/System/Hero/HeroInfo.Skin.cs
+++ b/Main/System/Hero/HeroInfo.Skin.cs
@@ -3,9 +3,16 @@
 
 public partial class HeroInfo
 {
-    //  鏈嶅姟鍣ㄦ暟鎹� 鐨偆绱㈠紩
-    public int SkinIndex = 0;
-
+    // 78 # 鑻遍泟浣跨敤鐨勭毊鑲ょ储寮�
+    public int SkinIndex
+    {
+        get
+        {
+            if (itemHero == null)
+                return 0;
+            return itemHero.GetUseDataFirstValue(78);
+        }
+    }
     //  鏈嶅姟鍣ㄦ暟鎹� 鐨偆ID
     public int SkinID;
 
diff --git a/Main/System/Hero/HeroInfo.Star.cs b/Main/System/Hero/HeroInfo.Star.cs
index 33df4df..e966eec 100644
--- a/Main/System/Hero/HeroInfo.Star.cs
+++ b/Main/System/Hero/HeroInfo.Star.cs
@@ -3,6 +3,18 @@
 
 public partial class HeroInfo
 {
+	//  姝﹀皢鏄熺骇
+    public int heroStar
+    {
+        get
+        {
+            if (itemHero == null)
+                return 0;
+            return itemHero.GetUseDataFirstValue(72);
+        }
+    }
+
+
 	protected int GetStarCultivationPercent(HeroAttrType attrType)
 	{
 		//	YYL TODO
diff --git a/Main/System/Hero/HeroInfo.cs b/Main/System/Hero/HeroInfo.cs
index 3232ec2..156e4e8 100644
--- a/Main/System/Hero/HeroInfo.cs
+++ b/Main/System/Hero/HeroInfo.cs
@@ -1,28 +1,16 @@
 using System.Collections.Generic;
 using UnityEngine;
 using LitJson;
-using log4net.Core;
 
+//  姝﹀皢淇℃伅锛氬疄闄呰幏寰楃殑姝﹀皢锛屼笉鍖呭惈鍥鹃壌鏁版嵁
 public partial class HeroInfo
 {
-    //  姝﹀皢鏈嶅姟鍣ㄥ敮涓�ID
-    public long sid;
-
     //  姝﹀皢閰嶇疆琛↖D
     public int heroId;
 
-    //  姝﹀皢绛夌骇
-    public int heroLevel;
-
-    //  姝﹀皢鏄熺骇
-    public int heroStar;
-
-    //  姝﹀皢绐佺牬绛夌骇
-    public int breakLevel;
-
-    //  姝﹀皢瑙夐啋绛夌骇
-    public int awakeLevel;
-
+    //  姝﹀皢閰嶇疆
+    public HeroConfig heroConfig;
+    public ItemModel itemHero;  //寮曠敤鑳屽寘閲岀殑 鏁版嵁鍚屾
 
     public HeroCountry heroCountry
     {
@@ -32,41 +20,36 @@
         }
     }
 
-    public int Quality
+
+    //鏄惁涓荤嚎涓婇樀 81 # 鎵�鍦ㄩ樀瀹逛俊鎭垪琛� [闃靛绫诲瀷*10000+闃靛瀷绫诲瀷*100+浣嶇疆缂栧彿, ...]
+    public bool isInMainBattle
     {
         get
         {
-            return heroConfig.Quality;
+            //浠庡垪琛ㄤ腑鎵惧埌 闃靛涓�1鐨� 涓荤嚎闃靛
+            var list = itemHero.GetUseData(81);
+            if (list != null && list.Count > 0)
+            {
+                var index = list.FindIndex((item) => item / 10000 == 1);
+                if (index >= 0)
+                {
+                    return true;
+                }
+            }
+            return false;
         }
     }
-    // public readonly CB122_tagSCHeroInfo.tagSCHero scHeroInfo;
 
-    //  姝﹀皢閰嶇疆
-    public HeroConfig heroConfig;
-    //  瑙夐啋閰嶇疆
-    public HeroAwakeConfig awakeConfig;
-    //  绐佺牬閰嶇疆
-    public HeroBreakConfig breakConfig;
-    //  缇佺粖閰嶇疆
-    public HeroFetterConfig fetterConfig;
-    //  鍝佽川瑙夐啋閰嶇疆
-    public HeroQualityAwakeConfig qualityAwakeConfig;
-    //  鍝佽川閰嶇疆
-    public HeroQualityConfig qualityConfig;
-    //  鍝佽川绐佺牬閰嶇疆
-    public HeroQualityBreakConfig qualityBreakConfig;
+
+
 
     public List<HeroFetterInfo> fetterInfoList = new List<HeroFetterInfo>();
     public List<HeroTalentInfo> talentList = new List<HeroTalentInfo>();
 
 
-    public HeroInfo(/*CB122_tagSCHeroInfo.tagSCHero _scHeroInfo, */ItemModel _itemHero)
+    public HeroInfo(ItemModel _itemHero)
     {
-        // scHeroInfo = _scHeroInfo;
         UpdateHero(_itemHero);
-        
-        
-        
     }
 
     public HeroInfo(HB424_tagSCTurnFightInit.tagSCTurnFightObj fightObj)
@@ -77,18 +60,13 @@
         heroConfig = HeroConfig.Get(heroId);
         SkinID = (int)fightObj.SkinID;
         skinConfig = HeroSkinConfig.Get(SkinID);
-        heroLevel = (int)fightObj.LV;
     }
 
-    #if UNITY_EDITOR
+#if UNITY_EDITOR
     public HeroInfo()
     {
         heroId = 520001; // 榛樿鑻遍泟ID
-        heroLevel = 1;
-        heroStar = 1;
-        breakLevel = 1;
-        awakeLevel = 1;
-        SkinIndex = 0;
+
         heroConfig = HeroConfig.Get(heroId);
         awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
         breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
@@ -97,58 +75,47 @@
         qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel);
         CalculateProperties();
     }
-    #endif
-
-    // public HeroInfo Clone() => JsonMapper.ToObject<HeroInfo>(JsonMapper.ToJson(this));
+#endif
 
 
-    public void UpdateHero(ItemModel itemHero)
+    public void UpdateHero(ItemModel _itemHero)
     {
+        itemHero = _itemHero;
         // HeroConfigUtility
         heroId = itemHero.config.ID;
-        // 70 # 鑻遍泟绛夌骇
-        heroLevel = itemHero.GetUseData(70)[0];
-        // 72 # 鑻遍泟鏄熺骇
-        heroStar = itemHero.GetUseData(72)[0];
-        // 74 # 鑻遍泟绐佺牬绛夌骇
-        breakLevel = itemHero.GetUseData(74)[0];
-        // 76 # 鑻遍泟瑙夐啋绛夌骇
-        awakeLevel = itemHero.GetUseData(76)[0];
-        // 78 # 鑻遍泟浣跨敤鐨勭毊鑲ょ储寮�
-        SkinIndex = itemHero.GetUseData(78)[0];
 
-
-        // 71 # 鑻遍泟澶╄祴ID鍒楄〃
-        List<int> talentSkillList = itemHero.GetUseData(71);
-        // 73 # 鑻遍泟澶╄祴ID绛夌骇鍒楄〃锛屽搴�71澶╄祴ID鐨勭瓑绾�
-        List<int> talentLvList = itemHero.GetUseData(73);
-        // 75 # 鑻遍泟澶╄祴娲楃偧閿佸畾绱㈠紩鍒楄〃锛屽搴�71澶╄祴ID绱㈠紩
-        List<int> talentLockList = itemHero.GetUseData(75);
 
         InitConfigs();
+        // 71 # 鑻遍泟澶╄祴ID鍒楄〃
+        // List<int> talentSkillList = itemHero.GetUseData(71);
+        // // 73 # 鑻遍泟澶╄祴ID绛夌骇鍒楄〃锛屽搴�71澶╄祴ID鐨勭瓑绾�
+        // List<int> talentLvList = itemHero.GetUseData(73);
+        // // 75 # 鑻遍泟澶╄祴娲楃偧閿佸畾绱㈠紩鍒楄〃锛屽搴�71澶╄祴ID绱㈠紩
+        // List<int> talentLockList = itemHero.GetUseData(75);
 
-        if (talentLockList.Count != talentLvList.Count || talentLvList.Count != talentSkillList.Count)
-        {
-            Debug.LogError("澶╄祴ID鍒楄〃鍙婂悗缁殑鏁版嵁鏁伴噺娌″涓�");
-        }
 
-        //  澶╄祴
-        talentList.Clear();
-        for (int i = 0; i < talentSkillList.Count; i++)
-        {
-            talentList.Add(new HeroTalentInfo(this, talentSkillList[i], talentLvList[i], talentLockList[i]));
-        }
+        // if (talentLockList.Count != talentLvList.Count || talentLvList.Count != talentSkillList.Count)
+        // {
+        //     Debug.LogError("澶╄祴ID鍒楄〃鍙婂悗缁殑鏁版嵁鏁伴噺娌″涓�");
+        // }
 
-        //  缇佺粖
-        fetterInfoList.Clear();
-        for (int i = 0; i < heroConfig.FetterIDList.Length; i++)
-        {
-            fetterInfoList.Add(new HeroFetterInfo(this, heroConfig.FetterIDList[i]));
-        }
+        // //  澶╄祴
+        // talentList.Clear();
+        // for (int i = 0; i < talentSkillList.Count; i++)
+        // {
+        //     talentList.Add(new HeroTalentInfo(this, talentSkillList[i], talentLvList[i], talentLockList[i]));
+        // }
 
-// 77 # 鑻遍泟澶╄祴娲楃偧闅忔満ID鍒楄〃
-// 79 # 鑻遍泟瑙夐啋鏃堕殢鏈哄ぉ璧嬮�夐」ID鍒楄〃
-// 80 # 涓婚樀鍨嬩笂闃典綅缃�
+        // //  缇佺粖
+        // fetterInfoList.Clear();
+        // for (int i = 0; i < heroConfig.FetterIDList.Length; i++)
+        // {
+        //     fetterInfoList.Add(new HeroFetterInfo(this, heroConfig.FetterIDList[i]));
+        // }
+
+        // 77 # 鑻遍泟澶╄祴娲楃偧闅忔満ID鍒楄〃
+        // 79 # 鑻遍泟瑙夐啋鏃堕殢鏈哄ぉ璧嬮�夐」ID鍒楄〃
+        // 80 # 涓婚樀鍨嬩笂闃典綅缃�
     }
 
     protected void InitConfigs()
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index d54640f..3fce894 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -1,10 +1,17 @@
 using System.Collections.Generic;
 using UnityEngine;
 using System;
+using System.Linq;
 
 public class HeroManager : GameSystemManager<HeroManager>
 {
+    //姝﹀皢鍜屽浘閴寸殑鍏崇郴
+    //鍚屼竴涓灏嗗浘閴达紝鍙兘鏈夊涓灏嗭紙鐗╁搧锛夋暟鎹紝鎴栬�呮病鏈夋灏嗭紝浣嗘槸鏈夊浘閴翠俊鎭�
+    //鍒濆鍒涘缓锛�0725锛夛紝鍚庣画璺熼殢鑳屽寘浜嬩欢澧炲姞鍒犻櫎  key = guid
     protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
+
+    //姝﹀皢鍒楄〃鐣岄潰
+    public List<string> heroSortList = new List<string>();
 
     public Action<HeroInfo> onNewHeroEvent;
 
@@ -14,57 +21,81 @@
     {
         base.Init();
 
-        //  娉ㄥ唽涓�鐐逛簨浠�
         PackManager.Instance.refrechPackEvent += refrechPackEvent;
+        PackManager.Instance.CreateItemEvent += CreateHero;
+        PackManager.Instance.DeleteItemEvent += DeleteHero;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
     }
 
     public override void Release()
     {
         base.Release();
         PackManager.Instance.refrechPackEvent -= refrechPackEvent;
+        PackManager.Instance.CreateItemEvent -= CreateHero;
+        PackManager.Instance.DeleteItemEvent -= DeleteHero;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
     }
 
-    public override void RequestNessaryData()
+    void OnBeforePlayerDataInitialize()
     {
-        base.RequestNessaryData();
-
-        
+        heroSortList.Clear();
+        heroInfoDict.Clear();
     }
 
-    public void refrechPackEvent(PackType packType)
+    void refrechPackEvent(PackType packType)
     {
         if (packType == PackType.Hero)
         {
-            // bool change = false;
-            bool isNew = false;
-            //  濡傛灉鏈夊垎鎵规鍒濆鍖栧彲鑳借繕瑕侀夯鐑︿竴鐐�?鍏堢湅鐪�
-            bool isInit = heroInfoDict.Count >= 0;
+            InitHerosInfo();
+        }
+    }
 
-            SinglePack heroPack = PackManager.Instance.GetSinglePack(packType);
-
-            Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
-
-            foreach (ItemModel hero in heroes.Values)
+    void CreateHero(PackType packType, string guid)
+    {
+        if (packType == PackType.Hero)
+        {
+            HeroInfo heroInfo = null;
+            if (!heroInfoDict.TryGetValue(guid, out heroInfo))
             {
-                HeroInfo heroInfo = null;
-                if (!heroInfoDict.TryGetValue(hero.guid, out heroInfo))
-                {
-                    heroInfo = new HeroInfo(hero);
-                    heroInfoDict.Add(hero.guid, heroInfo);
-                    if (!isInit)
-                    {
-                        isNew = true;
-                        onNewHeroEvent?.Invoke(heroInfo);
-                    }
-                }
-                else
-                {
-                    heroInfo.UpdateHero(hero);
-                    //  涔熸湁鍙兘涓嶆槸change
-                    // change = true;
-                    // onHeroChangeEvent?.Invoke(heroInfo);
-                }
+                heroInfo = new HeroInfo(PackManager.Instance.GetItemByGuid(guid));
+                heroInfoDict.Add(guid, heroInfo);
             }
+            else
+            {
+                heroInfo.UpdateHero(PackManager.Instance.GetItemByGuid(guid));
+            }
+        }
+    }
+
+    void DeleteHero(PackType packType, string guid)
+    {
+        if (packType == PackType.Hero)
+        {
+            if (heroInfoDict.ContainsKey(guid))
+            {
+                heroInfoDict.Remove(guid);
+            }
+        }
+    }
+
+    public HeroInfo GetHero(string guid)
+    {
+        if (!heroInfoDict.ContainsKey(guid))
+            return null;
+        return heroInfoDict[guid];
+    }
+
+
+
+    void InitHerosInfo()
+    {   
+        heroInfoDict.Clear();
+        SinglePack heroPack = PackManager.Instance.GetSinglePack(PackType.Hero);
+        Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
+
+        foreach (ItemModel hero in heroes.Values)
+        {
+            CreateHero(hero.packType, hero.guid);
         }
     }
 
@@ -72,7 +103,7 @@
     {
         List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values);
 
-        heroList.Sort((a, b) => 
+        heroList.Sort((a, b) =>
         {
             int power1 = a.CalculatePower();
             int power2 = b.CalculatePower();
@@ -95,9 +126,52 @@
         return retList;
     }
 
-    // public override bool IsNessaryDataReady()
-    // {
-    //     return true;
-    // }
+    public bool waitResortHeroList = false;
+
+
+    //鍒锋柊鏃舵満, 鎵撳紑姝﹀皢鐣岄潰 鎴栬�� 鍏抽棴鍔熻兘鐣岄潰
+    public void SortHeroList()
+    {
+        heroSortList = heroInfoDict.Keys.ToList();
+        heroSortList.Sort(CmpHero);
+    }
+
+
+    int CmpHero(string guidA, string guidB)
+    {
+        HeroInfo heroA = heroInfoDict[guidA];
+        HeroInfo heroB = heroInfoDict[guidB];
+        if (heroA == null || heroB == null)
+        {
+            return 0;
+        }
+        // 鎺掑簭瑙勫垯锛氫笂闃�>姝﹀皢绛夌骇锛炵獊鐮寸瓑绾э紴姝﹀皢瑙夐啋闃剁骇锛炴灏嗗搧璐紴姝﹀皢鍚炲櫖鏄熺骇锛炴灏咺D
+        if (heroA.isInMainBattle != heroB.isInMainBattle)
+        {
+            return heroA.isInMainBattle ? -1 : 1;
+        }
+        if (heroA.heroLevel != heroB.heroLevel)
+        {
+            return heroA.heroLevel > heroB.heroLevel ? -1 : 1;
+        }
+        if (heroA.breakLevel != heroB.breakLevel)
+        {
+            return heroA.breakLevel > heroB.breakLevel ? -1 : 1;
+        }
+        if (heroA.awakeLevel != heroB.awakeLevel)
+        {
+            return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1;
+        }
+        if (heroA.Quality != heroB.Quality)
+        {
+            return heroA.Quality > heroB.Quality ? -1 : 1;
+        }
+        if (heroA.heroStar != heroA.heroStar)
+        {
+            return heroA.heroStar > heroB.heroStar ? -1 : 1;
+        }
+
+        return heroA.heroId.CompareTo(heroB.heroId);
+    }
 
 }
\ No newline at end of file
diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index 1a0269b..1bd1a38 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -1,46 +1,40 @@
 
+using System;
 using Spine.Unity;
 using UnityEngine;
+using UnityEngine.Events;
 using UnityEngine.EventSystems;
 public class UIHeroController : MonoBehaviour
 {
-	public static UIHeroController Create(HeroSkinConfig skinCfg, Transform _parent = null)
+	public void Create(int _skinID, Action _onComplete = null)
 	{
-		// GameObject battleGO = ResManager.Instance.LoadAsset<GameObject>("Hero/SpineRes", skinCfg == null ? "Hero_001" : skinCfg.SpineRes);
+		skinID = _skinID;
+		onComplete = _onComplete;
 		GameObject battleGO = ResManager.Instance.LoadAsset<GameObject>("Hero/SpineRes", "Hero_001");
 		GameObject instanceGO = null;
-		if (_parent != null)
+		if (!transform.gameObject.activeSelf)
 		{
-			instanceGO = GameObject.Instantiate(battleGO, _parent);
+			transform.SetActive(true);
 		}
-		else
-		{
-			instanceGO = GameObject.Instantiate(battleGO);
-		}
-        UIHeroController heroController = instanceGO.AddMissingComponent<UIHeroController>();
-		return heroController;
-	}
-
-	protected SkeletonGraphic skeletonGraphic;
-
-	protected Spine.AnimationState spineAnimationState;
-
-	private Spine.TrackEntry currentTrackEntry;
-
-	private UIEventTrigger uiEventTrigger;
-
-	void Awake()
-	{
-		skeletonGraphic = gameObject.GetComponentInChildren<SkeletonGraphic>(true);
-		uiEventTrigger = UIEventTrigger.Get(skeletonGraphic.gameObject);
-
-		uiEventTrigger.OnClick = OnClick;
-
+		instanceGO = GameObject.Instantiate(battleGO, transform);
+		skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true);
+		var skinConfig = HeroSkinConfig.Get(skinID);
+		skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("Hero/SpineRes/" + skinConfig.SpineRes, skinConfig.SpineRes + "_SkeletonData");
+		skeletonGraphic.Initialize(true);
 		spineAnimationState = skeletonGraphic.AnimationState;
 		PlayAnimation(MotionName.idle, true);
 
 		spineAnimationState.Complete += OnAnimationComplete;
 	}
+	private int skinID;
+	protected SkeletonGraphic skeletonGraphic;
+
+	protected Spine.AnimationState spineAnimationState;
+
+	private Spine.TrackEntry currentTrackEntry;
+	private Action onComplete;
+
+
 
 	void Destroy()
 	{
@@ -57,17 +51,12 @@
         return currentTrackEntry;
     }
 
-    /// <summary>
-    /// 鍔ㄧ敾瀹屾垚浜嬩欢澶勭悊
-    /// </summary>
-    protected virtual void OnAnimationComplete(Spine.TrackEntry trackEntry)
-    {
-        // string animation = trackEntry.Animation.Name;
-        PlayAnimation(MotionName.idle, true);
+	/// <summary>
+	/// 鍔ㄧ敾瀹屾垚浜嬩欢澶勭悊
+	/// </summary>
+	protected virtual void OnAnimationComplete(Spine.TrackEntry trackEntry)
+	{
+		onComplete?.Invoke();
     }
 
-    protected void OnClick(GameObject go,PointerEventData eventData)
-    {
-    	PlayAnimation(MotionName.attack);
-    }
 }
\ No newline at end of file
diff --git a/Main/System/HeroUI.meta b/Main/System/HeroUI.meta
new file mode 100644
index 0000000..b5ac0e0
--- /dev/null
+++ b/Main/System/HeroUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6d5260adadfe89e459f603d5e9453cd7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroUI/GiftBaseCell.cs b/Main/System/HeroUI/GiftBaseCell.cs
new file mode 100644
index 0000000..abb5897
--- /dev/null
+++ b/Main/System/HeroUI/GiftBaseCell.cs
@@ -0,0 +1,195 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+
+public class GiftBaseCell : MonoBehaviour
+{
+
+    Image m_QualityBG;
+    Image qualityBG
+    {
+        get
+        {
+            if (m_QualityBG == null)
+            {
+                m_QualityBG = this.transform.GetComponent<Image>("Container_GiftCell/qualityIcon");
+            }
+            return m_QualityBG;
+        }
+    }
+
+    Button m_GiftBtn;
+    Button giftBtn
+    {
+        get
+        {
+            if (m_GiftBtn == null)
+            {
+                m_GiftBtn = this.transform.GetComponent<Button>("Container_GiftCell");
+            }
+            return m_GiftBtn;
+        }
+    }
+
+
+    Text m_GiftName;
+    Text giftName
+    {
+        get
+        {
+            if (m_GiftName == null)
+            {
+                m_GiftName = this.transform.GetComponent<Text>("Container_GiftCell/name");
+            }
+            return m_GiftName;
+        }
+    }
+
+    Transform m_LvRect;
+    Transform lvRect
+    {
+        get
+        {
+            if (m_LvRect == null)
+            {
+                m_LvRect = this.transform.Find("Container_GiftCell/lvrect");
+            }
+            return m_LvRect;
+        }
+    }
+
+    Text m_LvText;
+    Text lvText
+    {
+        get
+        {
+            if (m_LvText == null)
+            {
+                m_LvText = this.transform.GetComponent<Text>("Container_GiftCell/lv");
+            }
+            return m_LvText;
+        }
+    }
+
+    Image m_StateImg;
+    Image stateImg
+    {
+        get
+        {
+            if (m_StateImg == null)
+            {
+                m_StateImg = this.transform.GetComponent<Image>("Container_GiftCell/state");
+            }
+            return m_StateImg;
+        }
+    }
+
+    void Awake()
+    {
+        LoadPrefab();
+    }
+
+    //showState 0锛氫笉鏄剧ず 1锛氭柊澧� 2锛氭彁鍗�
+    //giftID 0 :浠h〃鏈縺娲荤伆鑹� -1锛氫唬琛ㄤ笉鑳芥縺娲� 妫曡壊锛屽叾浠栨牴鎹厤琛�
+    private void Init(int giftID, int lv, UnityAction onclick = null, int showState = 0)
+    {
+        if (HeroTalentConfig.HasKey(giftID))
+        {
+            var config = HeroTalentConfig.Get(giftID);
+            qualityBG.SetSprite("GiftQualityBG" + config.Quality);
+            giftBtn.AddListener(onclick);
+            giftName.text = config.Name;
+            lvText.text = lv.ToString();
+            lvText.color = GetColor(1);
+            Outline textOutline = lvText.GetComponent<Outline>();
+            textOutline.effectColor = GetOutlineColor(config.Quality);
+            lvRect.SetActive(lv > 0);
+            stateImg.SetActive(showState > 0);
+            stateImg.SetSprite("GiftState" + showState);
+            stateImg.SetNativeSize();
+        }
+        else
+        {
+            qualityBG.SetSprite("GiftQualityBG" + giftID);
+            giftBtn.RemoveAllListeners();
+            giftName.text = string.Empty;
+            lvRect.SetActive(false);
+            stateImg.SetActive(false);
+        }
+    }
+
+    Color32 GetColor(int quality)
+    {
+        if (quality == 1)
+        {
+            //D196FF
+            return new Color32(209, 150, 255, 255);
+        }
+        else if (quality == 2)
+        {
+            //ffda8c
+            return new Color32(255, 218, 140, 255);
+        }
+        else if (quality == 3)
+        {
+            //ffbd88
+            return new Color32(255, 189, 136, 255);
+        }
+        else if (quality == 4)
+        {
+            //ff8888
+            return new Color32(255, 136, 136, 255);
+        }
+        return new Color32(255, 255, 255, 255);
+    }
+
+    Color32 GetOutlineColor(int quality)
+    {
+        if (quality == 1)
+        {
+            //692088
+            return new Color32(105, 32, 136, 255);
+        }
+        else if (quality == 2)
+        {
+            //886220
+            return new Color32(136, 98, 32, 255);
+        }
+        else if (quality == 3)
+        {
+            //884a20
+            return new Color32(136, 74, 32, 255);
+        }
+        else if (quality == 4)
+        {
+            //882020
+            return new Color32(136, 32, 32, 255);
+        }
+        return new Color32(255, 255, 255, 255);
+    }
+
+    GameObject cellContainer;
+    protected void LoadPrefab()
+    {
+        if (cellContainer != null)
+            return;
+        
+        var tmp = transform.Find("Container_SkillCell");
+        if (tmp != null)
+        {
+            cellContainer = tmp.gameObject;
+            return;
+        }
+        if (cellContainer == null)
+        {
+            cellContainer = UIUtility.CreateWidget("SkillBaseCell", "Container_SkillCell");
+
+            if (cellContainer != null)
+            {
+                cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
+                cellContainer.transform.SetAsFirstSibling();
+            }
+        }
+    }
+}
+
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/HeroUI/GiftBaseCell.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/System/HeroUI/GiftBaseCell.cs.meta
index ea3af75..846ce3c 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/HeroUI/GiftBaseCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: fee86d39197e04b4ba659962fa508538
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/HeroUI/HeroBaseWin.cs b/Main/System/HeroUI/HeroBaseWin.cs
new file mode 100644
index 0000000..630301f
--- /dev/null
+++ b/Main/System/HeroUI/HeroBaseWin.cs
@@ -0,0 +1,75 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 姝﹀皢鍒楄〃
+/// </summary>
+public class HeroBaseWin : FunctionsBaseWin
+{
+
+    [SerializeField] List<Image> funcSelectImgList;
+    [SerializeField] List<Image> funcUnSelectImgList;
+
+    /// </summary>
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+    }
+
+
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+    }
+
+    protected override void OnPreClose()
+    {
+        base.OnPreClose();
+    }
+
+
+    public override void Refresh()
+    {
+
+    }
+
+
+    protected override void UpdateButtonsState()
+    {
+        for (int i = 0; i < funcSelectImgList.Count; i++)
+        {
+            if (i == functionOrder)
+            {
+                funcSelectImgList[i].SetActive(true);
+                funcUnSelectImgList[i].SetActive(false);
+
+            }
+            else
+            {
+                funcSelectImgList[i].SetActive(false);
+                funcUnSelectImgList[i].SetActive(true);
+
+            }
+        }
+    }
+
+    protected override void OpenSubUIByTabIndex()
+    {
+        Debug.Log("鎵撳紑瀛愮晫闈� : " + functionOrder);
+        // 涓诲煄 鍐呮斂 姝﹀皢 鎸戞垬 鍏細
+        //鏍规嵁绱㈠紩鎵撳紑涓嶅悓鐨勭晫闈�
+         switch (functionOrder)
+        {
+            case 0:
+                // 鎵撳紑涓婚〉鐣岄潰
+                currentSubUI = UIManager.Instance.OpenWindow<HeroListWin>();
+                break;
+
+            default:
+                Debug.LogWarning("鏈煡鐨勬爣绛剧储寮�: " + functionOrder);
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/HeroUI/HeroBaseWin.cs.meta
similarity index 83%
rename from Main/System/Hero/HeroInfo.Collection.cs.meta
rename to Main/System/HeroUI/HeroBaseWin.cs.meta
index ea3af75..a166376 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/HeroUI/HeroBaseWin.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: 030a392061d061044b14bec47c7c55ab
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/HeroUI/HeroCardCell.cs b/Main/System/HeroUI/HeroCardCell.cs
new file mode 100644
index 0000000..a43bcd6
--- /dev/null
+++ b/Main/System/HeroUI/HeroCardCell.cs
@@ -0,0 +1,37 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+using System.Collections.Generic;
+
+public class HeroCardCell : MonoBehaviour
+{
+    [SerializeField] Button heroCardBtn;
+    [SerializeField] Text lvText;
+    [SerializeField] Image countryImg;
+    [SerializeField] Image jobImg;
+    [SerializeField] UIHeroController heroModel;
+    [SerializeField] Image onStateImg;
+    [SerializeField] RedpointBehaviour redpoint;
+    [SerializeField] Image trainStateImg;
+    [SerializeField] Text nameText;
+    [SerializeField] Image awakeImg;
+    [SerializeField] Text awakeLVText;
+    [SerializeField] List<Image> starImgList;
+
+    public void Display(int index)
+    {
+        var hero = HeroManager.Instance.GetHero(HeroManager.Instance.heroSortList[index]);
+        if (hero == null)
+        {
+            this.gameObject.SetActive(false);
+            return;
+        }
+        this.gameObject.SetActive(true);
+        lvText.text = hero.heroLevel.ToString();
+        var heroConfig = hero.heroConfig;
+        countryImg.SetSprite("herocountry" + hero.heroCountry);
+        jobImg.SetSprite("herojob" + heroConfig.Class);
+        heroModel.Create(heroConfig.SkinIDList[hero.SkinIndex]);
+    }
+}
+
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/HeroUI/HeroCardCell.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/System/HeroUI/HeroCardCell.cs.meta
index ea3af75..ebd9591 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/HeroUI/HeroCardCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: 52a97086b2bf17147818d22c88dac66f
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/HeroUI/HeroCardLineCell.cs b/Main/System/HeroUI/HeroCardLineCell.cs
new file mode 100644
index 0000000..3b68921
--- /dev/null
+++ b/Main/System/HeroUI/HeroCardLineCell.cs
@@ -0,0 +1,24 @@
+锘縰sing UnityEngine;
+using System.Collections.Generic;
+
+public class HeroCardLineCell : CellView
+{
+    [SerializeField] List<HeroCardCell> cardList;
+
+    public void Display(int index)
+    { 
+        for (int i = 0; i < cardList.Count; i++)
+        {
+            if (i + index < HeroManager.Instance.heroSortList.Count)
+            {
+                cardList[i].SetActive(true);
+                cardList[i].Display(index);
+            }
+            else
+            {
+                cardList[i].SetActive(false);
+            }
+        }
+    }
+}
+
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/HeroUI/HeroCardLineCell.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/System/HeroUI/HeroCardLineCell.cs.meta
index ea3af75..fb0f95e 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/HeroUI/HeroCardLineCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: 81637d36456b1a54698c8de938c98bf7
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/HeroUI/HeroListWin.cs b/Main/System/HeroUI/HeroListWin.cs
new file mode 100644
index 0000000..bf6a6e9
--- /dev/null
+++ b/Main/System/HeroUI/HeroListWin.cs
@@ -0,0 +1,74 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 姝﹀皢鍒楄〃
+/// </summary>
+public class HeroListWin : UIBase
+{
+    [SerializeField] Button heroPackBtn;
+    [SerializeField] Text heroPackText;
+    [SerializeField] ScrollerController heroListScroller;
+    [SerializeField] GameObject heroListEmpty;
+    [SerializeField] List<Text> attrOnList; //涓婇樀灞炴�у姞鎴�
+    [SerializeField] GameObject attrOnTip;
+    [SerializeField] Button attrOnTipBtn;
+
+    [SerializeField] GameObject foldObject;
+    [SerializeField] Button unFoldBtn; //灞曞紑鎸夐挳
+    [SerializeField] List<Button> countryBtnList;
+    [SerializeField] GameObject unFoldObject;
+    [SerializeField] Button foldBtn; //鏀惰捣鎸夐挳
+    [SerializeField] List<Button> jobBtnList;   //鍏ㄩ儴锛岃緭鍑恒�佽倝鐩俱�佽緟鍔┿�佹帶鍒�
+    [SerializeField] Button changeHeroPosBtn; //甯冮樀鎸夐挳
+
+
+    private List<Image> countrySelectImgList;
+    private List<Image> jobSelectImgList;
+
+    /// </summary>
+    protected override void InitComponent()
+    {
+
+    }
+
+
+    protected override void OnPreOpen()
+    {
+        heroListScroller.OnRefreshCell += OnRefreshCell;
+        HeroManager.Instance.SortHeroList();
+        CreateScroller();
+    }
+
+    protected override void OnPreClose()
+    {
+        heroListScroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+    public override void Refresh()
+    {
+
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as HeroCardLineCell;
+        _cell.Display(cell.index);
+    }
+
+    void CreateScroller()
+    {
+        heroListScroller.Refresh();
+        for (int i = 0; i < HeroManager.Instance.heroSortList.Count; i++)
+        { 
+            heroListScroller.AddCell(ScrollerDataType.Header, i);
+        }
+        heroListScroller.Restart();
+    }
+
+
+    
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/HeroUI/HeroListWin.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/System/HeroUI/HeroListWin.cs.meta
index ea3af75..30a5040 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/HeroUI/HeroListWin.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: fd17368bc8780f9468e0dbd3919f8974
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/KnapSack/PackManager.cs b/Main/System/KnapSack/PackManager.cs
index 1982acf..a239309 100644
--- a/Main/System/KnapSack/PackManager.cs
+++ b/Main/System/KnapSack/PackManager.cs
@@ -12,10 +12,7 @@
     public static string StrengthAttrShift_RecordKey = "";
     public const string RecordKnapsackTitle = "RecordKnapsackTitle";
 
-    Dictionary<int, int> DrugToDungeonDict { get; set; }   //key 涓硅嵂ID,value鍓湰ID
-    Dictionary<int, int[]> DungeonToDrugDict { get; set; }  //key 鍓湰ID,value涓硅嵂ID鍒楄〃
-    //public List<AttrFruitConfig> makeDruglist { get; private set; }
-    Dictionary<int, Dictionary<int, int>> decomposeAttrDict = new Dictionary<int, Dictionary<int, int>>();
+
     string RoleEquipLocalSave = "";
     List<int> LocalSavePlaceArray { get; set; }
     Dictionary<int, List<int>> sharedUseCountItemDict { get; set; }
@@ -65,7 +62,7 @@
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
         DTC0102_tagCDBPlayer.afterPlayerDataInitializeEvent -= OnAfterPlayerDataInitialize;
         DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
-FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
         // SysNotifyMgr.Instance.sysNotifyEvent -= RefreshSysInfo;
     }
 
@@ -164,6 +161,8 @@
     }
 
     public event Action<PackType> refrechPackEvent; //鍒锋柊鏁翠釜鑳屽寘鏁版嵁
+    public event Action<PackType, string> CreateItemEvent; //寰楀埌鏂扮墿鍝侊紝鍙兘鎵归噺鍒涘缓娉ㄦ剰鏁堢巼
+    public event Action<PackType, string> DeleteItemEvent; //鍒犻櫎鐗╁搧锛屽彲鑳芥壒閲忓垹闄ゆ敞鎰忔晥鐜�
     public event Action<PackType, int, int> refreshItemCountEvent; // 鎱庣敤浼氬崱锛堝崟涓級鏈�鏂扮墿鍝佹暟閲忓埛鏂�(鏃х殑寮冪敤)鍦ㄥ緱鍒版柊鐗╁搧銆佺墿鍝佹暟閲忕殑鏀瑰彉锛屾竻鐞嗚鐗╁搧鏃跺潎浼氳Е鍙� int 浣嶇疆绱㈠紩 int鐗╁搧id
     public event Action<PackType> gridRefreshEvent; //鑳屽寘绌烘牸鍒锋柊
     public event Action<PackType, int, int> itemCntAddEvent; //鐗╁搧鏁伴噺澧炲姞 int 浣嶇疆绱㈠紩 int鐗╁搧id
@@ -336,10 +335,21 @@
         PackType type = (PackType)clearPack.PackIndex;
         SinglePack singlePack = null;
         playerPackDict.TryGetValue(type, out singlePack);
+        List<string> guidList = new List<string>();
         if (singlePack != null)
         {
+            foreach (var item in singlePack.GetAllItems().Values)
+            {
+                guidList.Add(item.guid);
+            }
             singlePack.Clear();
+            foreach (var guid in guidList)
+            {
+                DeleteItemDictByGUID(type, guid);
+            }
         }
+
+
     }
 
     public void RemoveItem(H0709_tagClearItem clearItem)
@@ -419,6 +429,10 @@
     {
         itemGUIDDict[itemModel.guid] = itemModel;
         GetItemEventCtrl(itemModel, showNewItem);
+        if (showNewItem)
+        {
+            CreateItemEvent?.Invoke(itemModel.packType, itemModel.guid);
+        }
     }
 
     void DeleteItemDictByGUID(PackType type, string guid)
@@ -428,6 +442,7 @@
             if (itemGUIDDict[guid].packType == type)
             {
                 itemGUIDDict.Remove(guid);
+                DeleteItemEvent?.Invoke(type, guid);
             }
         }
     }
diff --git a/Main/System/Main/FuncsBaseWin.cs b/Main/System/Main/FuncsBaseWin.cs
new file mode 100644
index 0000000..94d3429
--- /dev/null
+++ b/Main/System/Main/FuncsBaseWin.cs
@@ -0,0 +1,117 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 澶氶〉绛剧晫闈紝绠$悊瀛愮晫闈�
+/// </summary>
+public abstract class FunctionsBaseWin : UIBase
+{
+    // 鏍囩鎸夐挳缁�
+    public Button[] tabButtons;
+
+    // 褰撳墠鎵撳紑鐨勫瓙鐣岄潰
+    protected UIBase currentSubUI;
+
+    /// <summary>
+    /// 鍒濆鍖栫粍浠�
+    /// </summary>
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+
+        // 鍒濆鍖朥I缁勪欢浜嬩欢
+        InitButtonEvents();
+    }
+    protected override void OnPreOpen()
+    {
+        // 榛樿閫変腑绗竴涓爣绛�
+        SelectBottomTab(functionOrder);
+
+    }
+
+    protected override void OnPreClose()
+    {
+        CloseCurrentSubUI();
+    }
+
+
+
+    /// <summary>
+    /// 鍒濆鍖朥I缁勪欢浜嬩欢
+    /// </summary>
+    private void InitButtonEvents()
+    {
+        // 鍒濆鍖栧簳閮ㄦ寜閽�
+        for (int i = 0; i < tabButtons.Length; i++)
+        {
+            int index = i;
+            tabButtons[i].AddListener(() =>
+            {
+                OnTabButtonClicked(index);
+            });
+        }
+
+    }
+
+
+
+    /// <summary>
+    /// 閫夋嫨鏍囩
+    /// </summary>
+    protected void SelectBottomTab(int index)
+    {
+        // 濡傛灉鐐瑰嚮褰撳墠宸查�変腑鐨勬爣绛撅紝涓嶅仛澶勭悊
+        if (functionOrder == index && currentSubUI != null)
+        {
+            return;
+        }
+
+        // 鏇存柊褰撳墠閫変腑鐨勬爣绛剧储寮�
+        functionOrder = index;
+
+        // 鏇存柊鎸夐挳鐘舵��
+        UpdateButtonsState();
+
+        // 鍏抽棴褰撳墠鎵撳紑鐨勫瓙鐣岄潰
+        CloseCurrentSubUI();
+
+        // 鏍规嵁閫変腑鐨勬爣绛炬墦寮�瀵瑰簲鐨勭晫闈�
+        OpenSubUIByTabIndex();
+    }
+
+
+    /// <summary>
+    /// 鍏抽棴褰撳墠鎵撳紑鐨勫瓙鐣岄潰
+    /// </summary>
+    protected void CloseCurrentSubUI()
+    {
+        if (currentSubUI != null)
+        {
+            // 鍏抽棴褰撳墠鐣岄潰
+            currentSubUI.CloseWindow();
+            currentSubUI = null;
+        }
+    }
+
+
+    /// <summary>
+    /// 鏇存柊鎸夐挳鐘舵��
+    /// </summary>
+    protected abstract void UpdateButtonsState();
+
+    /// <summary>
+    /// 鏍规嵁鏍囩绱㈠紩鎵撳紑瀵瑰簲鐨勫瓙鐣岄潰
+    /// </summary>
+    protected abstract void OpenSubUIByTabIndex();
+
+
+    /// <summary>
+    /// 鏍囩鎸夐挳鐐瑰嚮
+    /// </summary>
+    protected virtual void OnTabButtonClicked(int index)
+    {
+        SelectBottomTab(index);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/Main/FuncsBaseWin.cs.meta
similarity index 83%
copy from Main/System/Hero/HeroInfo.Collection.cs.meta
copy to Main/System/Main/FuncsBaseWin.cs.meta
index ea3af75..908b84f 100644
--- a/Main/System/Hero/HeroInfo.Collection.cs.meta
+++ b/Main/System/Main/FuncsBaseWin.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+guid: 1faa0cf7a4ac2bf47bf9487e886af510
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 6fb80c6..e9090b8 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -4,17 +4,10 @@
 using UnityEngine.UI;
 
 /// <summary>
-/// 娓告垙涓荤晫闈�
+/// 娓告垙涓荤晫闈紙涓绘垬鏂楀満鏅級
 /// </summary>
 public class HomeWin : UIBase
 {
-    //澶村儚鍖�
-    [SerializeField] AvatarCell avatarCell;
-    [SerializeField] Text playerNameText;
-    [SerializeField] Text powerText;
-    [SerializeField] OfficialTitleCell officialRankText;
-    [SerializeField] Text goldText;
-    [SerializeField] Text sparText;
 
     //缁忛獙鍖�
     [SerializeField] Text playerLevelText;
@@ -37,7 +30,6 @@
     /// </summary>
     protected override void InitComponent()
     {
-        avatarCell.button.AddListener(() => { });
         taskButton.AddListener(OnClickTaskButton);
         bossBtn.AddListener(() =>
         {
@@ -51,7 +43,6 @@
     public override void Refresh()
     {
         UpdatePlayerInfo();
-        UpdateCurrency();
         UpdateTask();
     }
 
@@ -60,42 +51,32 @@
         PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
         TaskManager.Instance.OnTaskUpdate += UpdateTask;
         Refresh();
+        UIManager.Instance.OpenWindow<BattleWin>();
     }
+    protected override void OnOpen()
+    {
+        base.OnOpen();
+        
+    }
+
 
     protected override void OnPreClose()
     {
         PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
         TaskManager.Instance.OnTaskUpdate -= UpdateTask;
+        UIManager.Instance.CloseWindow<BattleWin>();
     }
 
     void PlayerDataRefresh(PlayerDataType type)
     {
         switch (type)
         {
-            case PlayerDataType.FightPower:
-                powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPoint);
-                break;
-            case PlayerDataType.RealmLevel:
-                officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
-                break;
             case PlayerDataType.TotalExp:
             case PlayerDataType.ExpPoint:
                 ShowExp();
                 break;
-            case PlayerDataType.Gold:
-                goldText.text = UIHelper.GetMoneyCntEx(1).ToString();
-                break;
-            case PlayerDataType.default33:
-                sparText.text = UIHelper.GetMoneyCnt(42).ToString();
-                break;
             case PlayerDataType.LV:
                 playerLevelText.text = PlayerDatas.Instance.baseData.LV.ToString();
-                break;
-            case PlayerDataType.Face:
-            case PlayerDataType.FacePic:
-                avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
-                                                                PlayerDatas.Instance.baseData.face,
-                                                                PlayerDatas.Instance.baseData.facePic));
                 break;
         }
 
@@ -107,17 +88,7 @@
     /// </summary>
     private void UpdatePlayerInfo()
     {
-        // 浠庣帺瀹舵暟鎹腑鑾峰彇淇℃伅骞舵洿鏂癠I
-        avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
-                                                        PlayerDatas.Instance.baseData.face,
-                                                        PlayerDatas.Instance.baseData.facePic));
-
-        playerNameText.text = PlayerDatas.Instance.baseData.PlayerName;
         playerLevelText.text = PlayerDatas.Instance.baseData.LV.ToString();
-        powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPoint);
-
-        officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
-
         ShowExp();
 
     }
@@ -129,14 +100,6 @@
         expSlider.Text.text = PlayerDatas.Instance.baseData.curExp + "/" + PlayerLVConfig.Get(PlayerDatas.Instance.baseData.LV).EXP;
     }
 
-    /// <summary>
-    /// 鏇存柊璐у竵淇℃伅
-    /// </summary>
-    private void UpdateCurrency()
-    {
-        goldText.text = UIHelper.GetMoneyCntEx(1).ToString();
-        sparText.text = UIHelper.ReplaceLargeNumEx(UIHelper.GetMoneyCnt(42));
-    }
 
     void UpdateTask()
     { 
diff --git a/Main/System/Main/MainWin.cs b/Main/System/Main/MainWin.cs
index dfb7b81..b589ac7 100644
--- a/Main/System/Main/MainWin.cs
+++ b/Main/System/Main/MainWin.cs
@@ -6,57 +6,36 @@
 /// <summary>
 /// 娓告垙涓荤晫闈㈠簳閮ㄥ姛鑳芥寜閽�
 /// </summary>
-public class MainWin : UIBase
+public class MainWin : FunctionsBaseWin
 {
-    // 搴曢儴鎸夐挳缁�
-    public Button[] bottomTabButtons;
+        //澶村儚鍖�
+    [SerializeField] AvatarCell avatarCell;
+    [SerializeField] Text playerNameText;
+    [SerializeField] Text powerText;
+    [SerializeField] OfficialTitleCell officialRankText;
+    [SerializeField] Text goldText;
+    [SerializeField] Text sparText;
 
     public Text hammerText;
 
-    
-    // 褰撳墠閫変腑鐨勫簳閮ㄦ爣绛剧储寮�
-    private int currentTabIndex = 0;
-    
-    // 褰撳墠鎵撳紑鐨勫瓙鐣岄潰
-    private UIBase currentSubUI;
-
-    /// <summary>
-    /// 鍒濆鍖栫粍浠�
-    /// </summary>
     protected override void InitComponent()
     {
         base.InitComponent();
-
-        // 鍒濆鍖朥I缁勪欢浜嬩欢
-        InitButtonEvents();
-    }
-    
-    /// <summary>
-    /// 鍒濆鍖朥I缁勪欢浜嬩欢
-    /// </summary>
-    private void InitButtonEvents()
-    {
-        // 鍒濆鍖栧簳閮ㄦ寜閽�
-        for (int i = 0; i < bottomTabButtons.Length; i++)
-        {
-            int index = i; // 鎹曡幏绱㈠紩
-            bottomTabButtons[i].onClick.AddListener(() => {
-                OnBottomTabButtonClicked(index);
-            });
-        }
+        
+        avatarCell.button.AddListener(() => { });
 
     }
-    
+
     public override void Refresh()
     {
         UpdateCurrency();
+        UpdatePlayerInfo();
     }
 
     protected override void OnPreOpen()
     {
         PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
-        // 榛樿閫変腑绗竴涓爣绛�
-        SelectBottomTab(0);
+        base.OnPreOpen();
 
         // 鍒锋柊UI
         Refresh();
@@ -65,29 +44,71 @@
     protected override void OnPreClose()
     {
         PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
+        base.OnPreClose();
+    }
+
+
+    /// <summary>
+    /// 鏇存柊鐜╁淇℃伅
+    /// </summary>
+    private void UpdatePlayerInfo()
+    {
+        // 浠庣帺瀹舵暟鎹腑鑾峰彇淇℃伅骞舵洿鏂癠I
+        avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
+                                                        PlayerDatas.Instance.baseData.face,
+                                                        PlayerDatas.Instance.baseData.facePic));
+
+        playerNameText.text = PlayerDatas.Instance.baseData.PlayerName;
+        powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPoint);
+
+        officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
     }
 
     void PlayerDataRefresh(PlayerDataType type)
     {
-        if (type == PlayerDataType.default26)
+        switch (type)
         {
-            UpdateCurrency();
+            case PlayerDataType.FightPower:
+                powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPoint);
+                break;
+            case PlayerDataType.RealmLevel:
+                officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
+                break;
+            case PlayerDataType.Gold:
+                goldText.text = UIHelper.GetMoneyCntEx(1).ToString();
+                break;
+            case PlayerDataType.default33:
+                sparText.text = UIHelper.GetMoneyCnt(42).ToString();
+                break;
+            case PlayerDataType.Face:
+            case PlayerDataType.FacePic:
+                avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
+                                                                PlayerDatas.Instance.baseData.face,
+                                                                PlayerDatas.Instance.baseData.facePic));
+                break;
+            case PlayerDataType.default26:
+                hammerText.text = UIHelper.GetMoneyCnt(41).ToString();
+                break;
+                
         }
+
     }
 
-    
+
     /// <summary>
     /// 鏇存柊璐у竵淇℃伅
     /// </summary>
     private void UpdateCurrency()
     {
         hammerText.text = UIHelper.GetMoneyCnt(41).ToString();
+        goldText.text = UIHelper.GetMoneyCntEx(1).ToString();
+        sparText.text = UIHelper.ReplaceLargeNumEx(UIHelper.GetMoneyCnt(42));
     }
     
     /// <summary>
     /// 搴曢儴鏍囩鎸夐挳鐐瑰嚮
     /// </summary>
-    private void OnBottomTabButtonClicked(int index)
+    protected override void OnTabButtonClicked(int index)
     {
         if (index == 0)
         { 
@@ -99,66 +120,33 @@
         SelectBottomTab(index);
     }
     
-    /// <summary>
-    /// 閫夋嫨搴曢儴鏍囩
-    /// </summary>
-    private void SelectBottomTab(int index)
-    {
-        // 濡傛灉鐐瑰嚮褰撳墠宸查�変腑鐨勬爣绛撅紝涓嶅仛澶勭悊
-        if (currentTabIndex == index && currentSubUI != null)
-        {
-            return;
-        }
-        
-        // 鏇存柊褰撳墠閫変腑鐨勬爣绛剧储寮�
-        currentTabIndex = index;
-        
-        // 鏇存柊鎸夐挳鐘舵��
-        UpdateButtonsState();
-        
-        // 鍏抽棴褰撳墠鎵撳紑鐨勫瓙鐣岄潰
-        CloseCurrentSubUI();
-        
-        // 鏍规嵁閫変腑鐨勬爣绛炬墦寮�瀵瑰簲鐨勭晫闈�
-        OpenSubUIByTabIndex(index);
-    }
+
     
     /// <summary>
     /// 鏇存柊鎸夐挳鐘舵��
     /// </summary>
-    private void UpdateButtonsState()
+    protected override void UpdateButtonsState()
     {
         // 閬嶅巻鎵�鏈夋寜閽紝璁剧疆閫変腑鐘舵��
-        for (int i = 0; i < bottomTabButtons.Length; i++)
-        {
+        // for (int i = 0; i < tabButtons.Length; i++)
+        // {
 
-            // bottomTabButtons[i].image.color = (i == currentTabIndex) ?  Color.white : Color.gray;
-        }
+        //     // bottomTabButtons[i].image.color = (i == currentTabIndex) ?  Color.white : Color.gray;
+        // }
     }
     
-    /// <summary>
-    /// 鍏抽棴褰撳墠鎵撳紑鐨勫瓙鐣岄潰
-    /// </summary>
-    private void CloseCurrentSubUI()
-    {
-        if (currentSubUI != null)
-        {
-            // 鍏抽棴褰撳墠鐣岄潰
-            currentSubUI.CloseWindow();
-            currentSubUI = null;
-        }
-    }
+
 
     /// <summary>
     /// 鏍规嵁鏍囩绱㈠紩鎵撳紑瀵瑰簲鐨勫瓙鐣岄潰
     /// </summary>
-    private void OpenSubUIByTabIndex(int index)
+    protected override void OpenSubUIByTabIndex()
     {
 
-        Debug.Log("鎵撳紑瀛愮晫闈� : " + index);
+        Debug.Log("鎵撳紑瀛愮晫闈� : " + functionOrder);
         // 涓诲煄 鍐呮斂 姝﹀皢 鎸戞垬 鍏細
         //鏍规嵁绱㈠紩鎵撳紑涓嶅悓鐨勭晫闈�
-         switch (index)
+         switch (functionOrder)
         {
             case 0:
                 // 鎵撳紑涓婚〉鐣岄潰
@@ -167,24 +155,22 @@
                 break;
             case 1:
                 // currentSubUI = UIManager.Instance.OpenUI<CharacterUI>();
-                Debug.Log("鎵撳紑闃靛鐣岄潰");
+                Debug.Log("鎵撳紑鍐呮斂鐣岄潰");
                 break;
             case 2:
-                // currentSubUI = UIManager.Instance.OpenUI<BagUI>();
-                Debug.Log("鎵撳紑鍚岀洘鐣岄潰");
+                currentSubUI = UIManager.Instance.OpenWindow<HeroBaseWin>(0);
+                Debug.Log("鎵撳紑姝﹀皢鐣岄潰");
                 break;
             case 3:
                 // currentSubUI = UIManager.Instance.OpenUI<QuestUI>();
-                Debug.Log("鎵撳紑绂忓埄鐣岄潰");
+                Debug.Log("鎵撳紑鎸戞垬鐣岄潰");
                 break;
             case 4:
                 //currentSubUI = UIManager.Instance.OpenWindow<PlaceWin>();
-                Debug.Log("鎵撳紑鍐掗櫓鐣岄潰");
-                BattleWin battleWin = UIManager.Instance.OpenWindow<BattleWin>();
-                currentSubUI = battleWin;
+                Debug.Log("鎵撳紑鍏細鐣岄潰");
                 break;
             default:
-                Debug.LogWarning("鏈煡鐨勬爣绛剧储寮�: " + index);
+                Debug.LogWarning("鏈煡鐨勬爣绛剧储寮�: " + functionOrder);
                 break;
         }
     }
diff --git a/Main/System/Tip/PowerAddWin.cs b/Main/System/Tip/PowerAddWin.cs
index 614f78f..10c3b7b 100644
--- a/Main/System/Tip/PowerAddWin.cs
+++ b/Main/System/Tip/PowerAddWin.cs
@@ -18,18 +18,7 @@
     [SerializeField] UIFrame uiFrame;
     //[SerializeField] List<PowerUpPosition> powerUpPositions;
 
-    [Header("娣″叆鍙樺ぇ")]
-    [SerializeField] Vector3 startVector;                       //璧峰澶у皬
-
-    [SerializeField] float fadeInToBigDuration;                 //娣″叆鍙樺ぇ鍔ㄧ敾瀹屾垚鏃堕棿
-    [SerializeField] Ease fadeInToBigEaseType;
-    [SerializeField] Vector3 fadeInToBigVector;                 //娣″叆鍙樺ぇ鐩爣澶у皬
-
-    [Header("娣″叆鍙樺皬")]
-    [SerializeField] Vector3 fadeInToSmallVector;               //娣″叆鍙樺皬鐩爣澶у皬
-
-    [SerializeField] float fadeInToSmallDuration;               //娣″叆鍙樺皬鍔ㄧ敾瀹屾垚鏃堕棿
-    [SerializeField] Ease fadeInToSmallEaseType;
+    
 
     [Header("娣″叆鍚庣Щ鍔ㄥ紑濮嬪墠绛夊緟鏃堕棿/s")]
     [SerializeField] float moveStartWaitTime;
@@ -53,17 +42,7 @@
     [Header("绉诲姩缁撴潫鍚庢贰鍑哄紑濮嬪墠绛夊緟鏃堕棿/s")]
     [SerializeField] float moveEndWaitTime;
 
-    [Header("娣″嚭鍙樺ぇ")]
-    [SerializeField] Vector3 fadeOutToBigVector;                //娣″嚭鍙樺ぇ鐩爣澶у皬
-
-    [SerializeField] float fadeOutToBigDuration;                //娣″嚭鍙樺ぇ鍔ㄧ敾瀹屾垚鏃堕棿
-    [SerializeField] Ease fadeOutToBigEaseType;
-
-    [Header("娣″嚭鍙樺皬")]
-    [SerializeField] float fadeOutToSmallDuration;              //娣″嚭鍙樺皬鍔ㄧ敾瀹屾垚鏃堕棿
-
-    [SerializeField] Ease fadeOutToSmallEaseType;
-
+    
     [Header("鎴樺姏鏁板瓧浣嶇疆璁$畻鐩稿叧")]
     [SerializeField] float txtBaseMultiple;                     //鍓嶇疆鐨勬垬鍔涙暟瀛楀瓧姣嶈窛绂诲�嶆暟
 
@@ -108,7 +87,15 @@
         PlayerMainDate.Instance.AddPowerEvent -= ResetToWaitMove;
     }
 
+    protected override void OnOpenAnimationComplete()
+    {
+        fadeInEndTime = Time.time;
+        nowState = AnimeState.WaitMove;
 
+        uiFrame.SetActive(true);
+        uiFrame.SetLoopCount(1);
+        uiFrame.ResetFrame(uiFrameKey);
+    }
 
     #endregion
 
@@ -125,7 +112,7 @@
                 nowState = AnimeState.Move;
 
                 sequence = DOTween.Sequence();
-                sequence.Join(transChange.DOMove(new Vector3(txtBase.rectTransform.position.x, transChange.position.y, transChange.position.z) , moveDuration).SetEase(moveEaseType));
+                sequence.Join(transChange.DOMove(new Vector3(txtBase.rectTransform.position.x, transChange.position.y, transChange.position.z), moveDuration).SetEase(moveEaseType));
                 sequence.Join(txtChange.DOFade(0f, textFadeDuration).SetEase(textFadeEaseType));
                 sequence.Join(imgArrow.DOFade(0f, textFadeDuration).SetEase(textFadeEaseType));
 
@@ -168,14 +155,9 @@
         }
         else if (nowState == AnimeState.WaitFadeOut)
         {
-            if (Time.time - moveEndTime > moveEndWaitTime)
-            {
-                nowState = AnimeState.FadeOut;
-                fadeOutSequence = DOTween.Sequence();
-                fadeOutSequence.Append(transZhanLi.DOScale(fadeOutToBigVector, fadeOutToBigDuration).SetEase(fadeOutToBigEaseType));
-                fadeOutSequence.Append(transZhanLi.DOScale(startVector, fadeOutToSmallDuration).SetEase(fadeOutToSmallEaseType).OnComplete(CloseWindow));
-            }
+            CloseWindow();
         }
+
     }
 
     private void ResetToFadeIn()
@@ -186,25 +168,12 @@
         uiFrame.SetActive(false);
         fadeInEndTime = 0;
         moveEndTime = 0;
-        transZhanLi.transform.localScale = startVector;
         CheckPosition();
         SetNum();
         SetInitPosition(basePower, changePower, isAdd);
         ResetColorA();
         DisplayNum();
         nowState = AnimeState.FadeIn;
-        transZhanLi.DOScale(fadeInToBigVector, fadeInToBigDuration).SetEase(fadeInToBigEaseType).OnComplete(() =>
-        {
-            transZhanLi.DOScale(fadeInToSmallVector, fadeInToSmallDuration).SetEase(fadeInToSmallEaseType).OnComplete(() =>
-            {
-                fadeInEndTime = Time.time;
-                nowState = AnimeState.WaitMove;
-
-                uiFrame.SetActive(true);
-                uiFrame.SetLoopCount(1);
-                uiFrame.ResetFrame(uiFrameKey);
-            });
-        });
     }
 
     private void ResetToWaitMove()
@@ -215,7 +184,6 @@
         uiFrame.SetActive(false);
         fadeInEndTime = Time.time;
         moveEndTime = 0;
-        transZhanLi.transform.localScale = fadeInToSmallVector;
         SetNum();
         SetInitPosition(basePower, changePower, isAdd);
         ResetColorA();
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 17754b0..84ede7f 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -721,7 +721,7 @@
     default41,  // 269 杩囨湡鍨嬩唬閲戝埜
     default42,  // 270 浠欑紭绉垎
     default43,  // 271 骞诲闃佺Н鍒�
-    default44,  
+    default44,  // 272 姝﹀皢鎷涘嫙绉垎
     default45,
     default46,
     default47,
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 2827ce4..38c9366 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -1193,6 +1193,11 @@
                     //骞诲闃佺Н鍒�
                     return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default43);
                 }
+            case 51:
+                {
+                    //姝﹀皢鎷涘嫙绉垎
+                    return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default44);
+                }
             case 98:
                 {
                     //杩囨湡鍨嬩唬閲戝埜

--
Gitblit v1.8.0