From ad54ddbd4c12125fd44e9b7b3fd5bbcd92cce677 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 22 七月 2025 20:15:37 +0800
Subject: [PATCH] 122 子 【武将】武将系统 / 【武将】武将系统-客户端

---
 Main/System/Tip/ItemsConfirmWin.cs          |   93 ++++
 Main/System/HeroUI/HeroShowBaseCell.cs.meta |   11 
 Main/System/HeroUI/HeroCardCell.cs          |    2 
 Main/System/HeroUI/GiftBaseCell.cs          |   25 
 Main/Component/UI/Core/OutlineEx.cs         |   22 
 Main/Component/UI/Common/ItemBaseEffect.cs  |    4 
 Main/System/Tip/ItemsConfirmCell.cs.meta    |   11 
 Main/System/SkillUI/SkillBaseCell.cs        |    9 
 Main/System/HeroUI/HeroShowBaseCell.cs      |  196 ++++++++++
 Main/System/KnapSack/New/CommonItemBaisc.cs |   10 
 Main/Config/Configs/HeroConfig.cs           |    2 
 Main/System/KnapSack/Logic/ItemModel.cs     |    3 
 Main/System/Hero/HeroInfo.Skin.cs           |   17 
 Main/System/Tip/ConfirmCancel.cs            |   71 +--
 Main/Utility/EnumHelper.cs                  |    2 
 Main/System/Hero/HeroInfo.Awake.cs          |   16 
 Main/System/Tip/FuncRules.cs.meta           |   12 
 Main/System/Tip/ItemsConfirmWin.cs.meta     |   11 
 Main/System/Tip/ItemsConfirmCell.cs         |   19 +
 Main/System/Hero/HeroInfo.cs                |   22 
 /dev/null                                   |    8 
 Main/System/Tip/FuncRules.cs                |   25 +
 Main/Utility/UIHelper.cs                    |   67 ++-
 Main/System/Hero/HeroInfo.Break.cs          |   10 
 Main/Config/Configs/HeroSkinConfig.cs       |  121 +++---
 Main/System/HeroUI/HeroHeadBaseCell.cs      |  236 ++++++++++++
 Main/System/HeroUI/HeroHeadBaseCell.cs.meta |   11 
 Main/System/Tip/FuncRuleWin.cs              |   38 ++
 Main/System/Tip/FuncRuleWin.cs.meta         |   12 
 29 files changed, 912 insertions(+), 174 deletions(-)

diff --git a/Main/Component/UI/Common/ItemBaseEffect.cs b/Main/Component/UI/Common/ItemBaseEffect.cs
index 3168dbf..c8cb129 100644
--- a/Main/Component/UI/Common/ItemBaseEffect.cs
+++ b/Main/Component/UI/Common/ItemBaseEffect.cs
@@ -106,8 +106,12 @@
     {
         switch (format)
         {
+            case ItemCellformat.Format_120x120:
+                return 1.2f;
             case ItemCellformat.Format_100x100:
                 return 1.1f;
+            case ItemCellformat.Format_84x84:
+                return 1f;
             case ItemCellformat.Format_80x80:
                 return 0.95f;
             case ItemCellformat.Format_70x70:
diff --git a/Main/Component/UI/Core/OutlineEx.cs b/Main/Component/UI/Core/OutlineEx.cs
index 774d7bd..887988b 100644
--- a/Main/Component/UI/Core/OutlineEx.cs
+++ b/Main/Component/UI/Core/OutlineEx.cs
@@ -9,7 +9,7 @@
 public class OutlineEx : BaseMeshEffect
 {
     [Header("鏂皊hader鎻忚竟")]
-    public Color OutlineColor = Color.white;
+    public Color OutlineColor = new Color(0, 0, 0, 0.5f);// Color.black;
 
     QualityTextColType m_ColorType = QualityTextColType.None;
     public QualityTextColType colorType
@@ -27,8 +27,9 @@
     }
 
 
-    [Range(0, 15)]
-    public int OutlineWidth = 0;
+    [Range(0, 30)]
+    //榛樿10锛屼笉鍚岀殑棰滆壊锛堝寘鎷皟鏁碼lpha锛夎瑙変笂鎻忚竟绮楃粏鏈夊樊寮傦紝鏁卻hader閲屼箻浠�0.2閫傚簲涓嶅悓鎯呭喌
+    public int OutlineWidth = 10;    
 
     private static List<UIVertex> m_VetexList = new List<UIVertex>();
     // 鏉愯川姹狅細Key涓�"棰滆壊_瀹藉害"鏍煎紡鐨勫瓧绗︿覆锛孷alue涓哄搴旂殑鏉愯川; 鍑忓皯鍚堟壒闂锛屽張鑳戒繚鎸佷笉鍚岀殑鎻忚竟锛涘叡鐢ㄦ潗璐ㄤ細鍚屾椂鏀瑰彉鍙傛暟
@@ -69,8 +70,14 @@
         this._Refresh();
     }
 
-
 #if UNITY_EDITOR
+    //鍦ㄧ紪杈戝櫒涓嬫墦寮�涔熷埛鏂颁笅
+    // protected override void OnEnable()
+    // {
+    //     base.OnEnable();
+    //     this._Refresh();
+    // }
+
     protected override void OnValidate()
     {
         base.OnValidate();
@@ -96,6 +103,13 @@
             m_MaterialPool[key] = material;
         }
 
+        if (material == null)
+        {
+            // 闃茶寖鏉愯川琚垹鐨勬儏鍐碉紝鍒涘缓鏂版潗璐�
+            material = new Material(m_Shader);
+            m_MaterialPool[key] = material;
+        }
+
         material.SetColor("_OutlineColor", this.OutlineColor);
         material.SetInt("_OutlineWidth", this.OutlineWidth);
         
diff --git a/Main/Config/Configs/HeroConfig.cs b/Main/Config/Configs/HeroConfig.cs
index 39e4fb0..47c9fd5 100644
--- a/Main/Config/Configs/HeroConfig.cs
+++ b/Main/Config/Configs/HeroConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Wednesday, July 16, 2025
+//    [  Date ]:           2025骞�7鏈�18鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroSkinConfig.cs b/Main/Config/Configs/HeroSkinConfig.cs
index b9c6ef2..30294af 100644
--- a/Main/Config/Configs/HeroSkinConfig.cs
+++ b/Main/Config/Configs/HeroSkinConfig.cs
@@ -1,41 +1,40 @@
-锘�//--------------------------------------------------------
-//    [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 HeroSkinConfig : ConfigBase<int, HeroSkinConfig>
-{
-
-    public int SkinID;
-	public int[] WearAttrIDList;
-	public int[] WearAttrValueList;
-	public int[] AllBatAttrIDList;
-	public int[] AllBatAttrValueList;
-	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 SkinID); 
-
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�7鏈�18鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroSkinConfig : ConfigBase<int, HeroSkinConfig>
+{
+
+    public int SkinID;
+	public int[] WearAttrIDList;
+	public int[] WearAttrValueList;
+	public int[] AllBatAttrIDList;
+	public int[] AllBatAttrValueList;
+	public string Tachie;
+	public string SquareIcon;
+	public string RectangleIcon;
+	public string SpineRes;
+
+    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 SkinID); 
+
 			if (tables[1].Contains("["))
 			{
 				WearAttrIDList = JsonMapper.ToObject<int[]>(tables[1]);
@@ -48,8 +47,8 @@
 				{
 					 int.TryParse(WearAttrIDListStringArray[i],out WearAttrIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[2].Contains("["))
 			{
 				WearAttrValueList = JsonMapper.ToObject<int[]>(tables[2]);
@@ -62,8 +61,8 @@
 				{
 					 int.TryParse(WearAttrValueListStringArray[i],out WearAttrValueList[i]);
 				}
-			}
-
+			}
+
 			if (tables[3].Contains("["))
 			{
 				AllBatAttrIDList = JsonMapper.ToObject<int[]>(tables[3]);
@@ -76,8 +75,8 @@
 				{
 					 int.TryParse(AllBatAttrIDListStringArray[i],out AllBatAttrIDList[i]);
 				}
-			}
-
+			}
+
 			if (tables[4].Contains("["))
 			{
 				AllBatAttrValueList = JsonMapper.ToObject<int[]>(tables[4]);
@@ -90,21 +89,19 @@
 				{
 					 int.TryParse(AllBatAttrValueListStringArray[i],out AllBatAttrValueList[i]);
 				}
-			}
-
-			Tachie = tables[5];
-
-			SquareIcon = tables[6];
-
-			RectangleIcon = tables[7];
-
-			SpineRes = tables[8];
-
-			BigSizeSpine = tables[9];
-        }
-        catch (Exception exception)
-        {
-            Debug.LogError(exception);
-        }
-    }
-}
+			}
+
+			Tachie = tables[5];
+
+			SquareIcon = tables[6];
+
+			RectangleIcon = tables[7];
+
+			SpineRes = tables[8];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/System/Hero/HeroInfo.Awake.cs b/Main/System/Hero/HeroInfo.Awake.cs
index f2174b7..8be924d 100644
--- a/Main/System/Hero/HeroInfo.Awake.cs
+++ b/Main/System/Hero/HeroInfo.Awake.cs
@@ -5,11 +5,23 @@
 {
 
     //  瑙夐啋閰嶇疆
-    public HeroAwakeConfig awakeConfig;
+    public HeroAwakeConfig awakeConfig
+    { 
+        get
+        {
+            return HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
+        }
+    }
 
     
     //  鍝佽川瑙夐啋閰嶇疆
-    public HeroQualityAwakeConfig qualityAwakeConfig;
+    public HeroQualityAwakeConfig qualityAwakeConfig
+    { 
+        get
+        {
+            return HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel);
+        }
+    }
 
     //  姝﹀皢瑙夐啋绛夌骇
     public int awakeLevel
diff --git a/Main/System/Hero/HeroInfo.Break.cs b/Main/System/Hero/HeroInfo.Break.cs
index 54fe5ba..e91b69c 100644
--- a/Main/System/Hero/HeroInfo.Break.cs
+++ b/Main/System/Hero/HeroInfo.Break.cs
@@ -4,10 +4,16 @@
 public partial class HeroInfo
 {
 	//  绐佺牬閰嶇疆
-    public HeroBreakConfig breakConfig;
+    public HeroBreakConfig breakConfig
+	{
+		get
+		{
+			return HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
+		}
+	}
 
 	//  鍝佽川绐佺牬閰嶇疆
-    public HeroQualityBreakConfig qualityBreakConfig;
+	public HeroQualityBreakConfig qualityBreakConfig;
 
 	//  姝﹀皢绐佺牬绛夌骇
 	public int breakLevel
diff --git a/Main/System/Hero/HeroInfo.Skin.cs b/Main/System/Hero/HeroInfo.Skin.cs
index 062da55..3f329fa 100644
--- a/Main/System/Hero/HeroInfo.Skin.cs
+++ b/Main/System/Hero/HeroInfo.Skin.cs
@@ -14,10 +14,23 @@
         }
     }
     //  鏈嶅姟鍣ㄦ暟鎹� 鐨偆ID
-    public int SkinID;
+    public int SkinID
+    {
+        get
+        {
+
+            return heroConfig.SkinIDList[SkinIndex];
+        }
+    }
 
     //  鐨偆閰嶇疆
-    public HeroSkinConfig skinConfig;
+    public HeroSkinConfig skinConfig
+    { 
+        get
+        {
+            return HeroSkinConfig.Get(SkinID);
+        }
+    }
 
     
 }
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.cs b/Main/System/Hero/HeroInfo.cs
index 1839eac..3a4de6d 100644
--- a/Main/System/Hero/HeroInfo.cs
+++ b/Main/System/Hero/HeroInfo.cs
@@ -50,6 +50,14 @@
         }
     }
 
+    public bool isLock
+    { 
+        get
+        {
+            return itemHero.itemInfo.isLock;
+        }
+    }
+
 
 
     public List<HeroFetterInfo> fetterInfoList = new List<HeroFetterInfo>();
@@ -67,9 +75,6 @@
         heroId = 520001; // 榛樿鑻遍泟ID
 
         heroConfig = HeroConfig.Get(heroId);
-        awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
-        breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
-        qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel);
         qualityConfig = HeroQualityConfig.Get(Quality);
         qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel);
         CalculateProperties();
@@ -122,17 +127,6 @@
         //  姝﹀皢閰嶇疆
         heroConfig = HeroConfig.Get(heroId);
 
-        //  瑙夐啋閰嶇疆 (婊$骇涓虹┖)
-        awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
-
-        //  绐佺牬閰嶇疆
-        breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
-
-        //  缇佺粖閰嶇疆 鍙兘闇�瑕乫etterid 鍘绘绱㈡晥鐜囧お浣�
-        // fetterConfig;
-
-        //  鍝佽川瑙夐啋閰嶇疆
-        qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel);
 
         //  鍝佽川閰嶇疆
         qualityConfig = HeroQualityConfig.Get(Quality);
diff --git a/Main/System/HeroUI/GiftBaseCell.cs b/Main/System/HeroUI/GiftBaseCell.cs
index abb5897..afd9460 100644
--- a/Main/System/HeroUI/GiftBaseCell.cs
+++ b/Main/System/HeroUI/GiftBaseCell.cs
@@ -65,7 +65,7 @@
         {
             if (m_LvText == null)
             {
-                m_LvText = this.transform.GetComponent<Text>("Container_GiftCell/lv");
+                m_LvText = this.transform.GetComponent<Text>("Container_GiftCell/lvrect/lv");
             }
             return m_LvText;
         }
@@ -91,7 +91,7 @@
 
     //showState 0锛氫笉鏄剧ず 1锛氭柊澧� 2锛氭彁鍗�
     //giftID 0 :浠h〃鏈縺娲荤伆鑹� -1锛氫唬琛ㄤ笉鑳芥縺娲� 妫曡壊锛屽叾浠栨牴鎹厤琛�
-    private void Init(int giftID, int lv, UnityAction onclick = null, int showState = 0)
+    public void Init(int giftID, int lv, UnityAction onclick = null, int showState = 0)
     {
         if (HeroTalentConfig.HasKey(giftID))
         {
@@ -148,24 +148,24 @@
         if (quality == 1)
         {
             //692088
-            return new Color32(105, 32, 136, 255);
+            return new Color32(105, 32, 136, 128);
         }
         else if (quality == 2)
         {
             //886220
-            return new Color32(136, 98, 32, 255);
+            return new Color32(136, 98, 32, 128);
         }
         else if (quality == 3)
         {
             //884a20
-            return new Color32(136, 74, 32, 255);
+            return new Color32(136, 74, 32, 128);
         }
         else if (quality == 4)
         {
             //882020
-            return new Color32(136, 32, 32, 255);
+            return new Color32(136, 32, 32, 128);
         }
-        return new Color32(255, 255, 255, 255);
+        return new Color32(0, 0, 0, 128);
     }
 
     GameObject cellContainer;
@@ -174,7 +174,7 @@
         if (cellContainer != null)
             return;
         
-        var tmp = transform.Find("Container_SkillCell");
+        var tmp = transform.Find("Container_GiftCell");
         if (tmp != null)
         {
             cellContainer = tmp.gameObject;
@@ -182,7 +182,7 @@
         }
         if (cellContainer == null)
         {
-            cellContainer = UIUtility.CreateWidget("SkillBaseCell", "Container_SkillCell");
+            cellContainer = UIUtility.CreateWidget("GiftBaseCell", "Container_GiftCell");
 
             if (cellContainer != null)
             {
@@ -190,6 +190,13 @@
                 cellContainer.transform.SetAsFirstSibling();
             }
         }
+
+        //缂╂斁鍒板拰鐖秗ect涓�鏍峰ぇ
+        var scale = 1f;
+        var rect = cellContainer.GetComponent<RectTransform>();
+        var parentRect = transform.GetComponent<RectTransform>();
+        scale = parentRect.sizeDelta.x / rect.sizeDelta.x;
+        cellContainer.transform.localScale = new Vector3(scale, scale, scale);
     }
 }
 
diff --git a/Main/System/HeroUI/HeroCardCell.cs b/Main/System/HeroUI/HeroCardCell.cs
index 489a768..9c4ef27 100644
--- a/Main/System/HeroUI/HeroCardCell.cs
+++ b/Main/System/HeroUI/HeroCardCell.cs
@@ -52,7 +52,7 @@
         {
             trainStateImg.SetActive(false);
         }
-        nameText.text = hero.breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv" + heroConfig.Name + hero.breakLevel);
+        nameText.text = hero.breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv", heroConfig.Name, hero.breakLevel);
         awakeImg.SetActive(hero.awakeLevel > 0);
         awakeLVText.text = hero.awakeLevel.ToString();
 
diff --git a/Main/System/HeroUI/HeroHeadBaseCell.cs b/Main/System/HeroUI/HeroHeadBaseCell.cs
new file mode 100644
index 0000000..f780716
--- /dev/null
+++ b/Main/System/HeroUI/HeroHeadBaseCell.cs
@@ -0,0 +1,236 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+using System.Collections.Generic;
+
+public class HeroHeadBaseCell : MonoBehaviour
+{
+
+    Button m_ClickBtn;
+    Button clickBtn
+    {
+        get
+        {
+            if (m_ClickBtn == null)
+            {
+                m_ClickBtn = this.transform.GetComponent<Button>("Container_HeadCell");
+            }
+            return m_ClickBtn;
+        }
+    }
+
+    Image m_QualityBG;
+    Image qualityBG
+    {
+        get
+        {
+            if (m_QualityBG == null)
+            {
+                m_QualityBG = this.transform.GetComponent<Image>("Container_HeadCell/qualityIcon");
+            }
+            return m_QualityBG;
+        }
+    }
+
+    Image m_HeroIcon;
+    Image heroIcon
+    {
+        get
+        {
+            if (m_HeroIcon == null)
+            {
+                m_HeroIcon = this.transform.GetComponent<Image>("Container_HeadCell/heroIcon");
+            }
+            return m_HeroIcon;
+        }
+    }
+
+    Transform m_StarRect;
+    Transform starRect
+    {
+        get
+        {
+            if (m_StarRect == null)
+            {
+                m_StarRect = this.transform.Find("Container_HeadCell/stars");
+            }
+            return m_StarRect;
+        }
+    }
+
+    List<Image> m_StarsImg;
+    List<Image> starsImg
+    {
+        get
+        {
+            if (m_StarsImg == null)
+            {
+                m_StarsImg = new List<Image>();
+                for (int i = 0; i < 5; i++)
+                {
+                    var star = this.transform.GetComponent<Image>("Container_HeadCell/stars/star" + i);
+                    m_StarsImg.Add(star);
+                }
+            }
+            return m_StarsImg;
+        }
+    }
+
+
+    Image m_CountryImg;
+    Image countryImg
+    {
+        get
+        {
+            if (m_CountryImg == null)
+            {
+                m_CountryImg = this.transform.GetComponent<Image>("Container_HeadCell/country");
+            }
+            return m_CountryImg;
+        }
+    }
+
+    Transform m_AwakeLvRect;
+    Transform awakeLvRect
+    {
+        get
+        {
+            if (m_AwakeLvRect == null)
+            {
+                m_AwakeLvRect = this.transform.Find("Container_HeadCell/awakelv");
+            }
+            return m_AwakeLvRect;
+        }
+    }
+
+    Text m_AwakeLvText;
+    Text awakeLvText
+    {
+        get
+        {
+            if (m_AwakeLvText == null)
+            {
+                m_AwakeLvText = this.transform.GetComponent<Text>("Container_HeadCell/awakelv/lv");
+            }
+            return m_AwakeLvText;
+        }
+    }
+
+
+    Text m_LvText;
+    Text lvText
+    {
+        get
+        {
+            if (m_LvText == null)
+            {
+                m_LvText = this.transform.GetComponent<Text>("Container_HeadCell/lv");
+            }
+            return m_LvText;
+        }
+    }
+
+
+    void Awake()
+    {
+        LoadPrefab();
+    }
+
+    // 姝﹀皢灏忓ご鍍忥紝锛堣亴涓氬拰鍚嶇О涓嶅啀姝ょ鐞嗭紝鍚勪釜鐣岄潰鎺掔増涓嶅悓锛�
+    public void Init(int heroID, int skinID = 0, int star = 0, int awakelv = 0, int lv = 0, UnityAction onclick = null)
+    {
+        clickBtn.AddListener(onclick);
+        var heroConfig = HeroConfig.Get(heroID);
+        qualityBG.SetSprite("heroheadBG" + heroConfig.Quality);
+        // int skinID = 0;
+        // if (heroGuid != "")
+        // {
+        //     skinID = HeroManager.Instance.GetHero(heroGuid).SkinID;
+        // }
+        // else
+        // {
+        //     skinID = heroConfig.SkinIDList[0];
+        // }
+        var sprite = UILoader.LoadSprite("HeroHead", HeroSkinConfig.Get(skinID).SquareIcon);
+        if (sprite == null)
+        {
+            heroIcon.SetSprite("herohead_default");
+        }
+        else
+        {
+            heroIcon.overrideSprite = sprite;
+        }
+        for (int i = 0; i < 5; i++)
+        {
+            if (i < star)
+            {
+                starsImg[i].SetSprite("star");
+            }
+            else
+            {
+                starsImg[i].SetSprite("star0");
+            }
+        }
+
+        if (star == 0)
+        {
+            starRect.SetActive(false);
+        }
+        else
+        {
+            starRect.SetActive(true);
+            for (int i = 0; i < starsImg.Count; i++)
+            {
+                if ((star - 1) % starsImg.Count >= i)
+                {
+                    starsImg[i].SetActive(true);
+                    starsImg[i].SetSprite("herostar" + (((star - 1) / starsImg.Count) + 1) * starsImg.Count);
+                }
+                else
+                {
+                    starsImg[i].SetActive(false);
+                }
+            }
+        }
+
+        countryImg.SetSprite("herocountry" + heroConfig.Country);
+        lvText.text = lv.ToString();
+
+        awakeLvRect.SetActive(awakelv > 0);
+        awakeLvText.text = awakelv.ToString();
+
+
+    }
+
+    GameObject cellContainer;
+    protected void LoadPrefab()
+    {
+        if (cellContainer != null)
+            return;
+
+        var tmp = transform.Find("Container_HeadCell");
+        if (tmp != null)
+        {
+            cellContainer = tmp.gameObject;
+            return;
+        }
+        if (cellContainer == null)
+        {
+            cellContainer = UIUtility.CreateWidget("HeroHeadBaseCell", "Container_HeadCell");
+
+            if (cellContainer != null)
+            {
+                cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
+                cellContainer.transform.SetAsFirstSibling();
+            }
+        }
+        
+        //缂╂斁鍒板拰鐖秗ect涓�鏍峰ぇ
+        var scale = 1f;
+        var rect = cellContainer.GetComponent<RectTransform>();
+        var parentRect = transform.GetComponent<RectTransform>();
+        scale = parentRect.sizeDelta.x / rect.sizeDelta.x;
+        cellContainer.transform.localScale = new Vector3(scale, scale, scale);
+    }
+}
+
diff --git a/Main/System/HeroUI/HeroHeadBaseCell.cs.meta b/Main/System/HeroUI/HeroHeadBaseCell.cs.meta
new file mode 100644
index 0000000..f16cbb2
--- /dev/null
+++ b/Main/System/HeroUI/HeroHeadBaseCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5a35d2e277b297c43b183c7cfda88504
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroUI/HeroShowBaseCell.cs b/Main/System/HeroUI/HeroShowBaseCell.cs
new file mode 100644
index 0000000..e0a07f4
--- /dev/null
+++ b/Main/System/HeroUI/HeroShowBaseCell.cs
@@ -0,0 +1,196 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+using System.Collections.Generic;
+
+public class HeroShowBaseCell : MonoBehaviour
+{
+
+    Image m_QualityBG;
+    Image qualityBG
+    {
+        get
+        {
+            if (m_QualityBG == null)
+            {
+                m_QualityBG = this.transform.GetComponent<Image>("Container_HeroShow/dz");
+            }
+            return m_QualityBG;
+        }
+    }
+
+    UIHeroController m_HeroModel;
+    UIHeroController heroModel
+    {
+        get
+        {
+            if (m_HeroModel == null)
+            {
+                m_HeroModel = this.transform.GetComponent<UIHeroController>("Container_HeroShow/rolemodel");
+            }
+            return m_HeroModel;
+        }
+    }
+
+    Transform m_StarRect;
+    Transform starRect
+    {
+        get
+        {
+            if (m_StarRect == null)
+            {
+                m_StarRect = this.transform.Find("Container_HeroShow/stars");
+            }
+            return m_StarRect;
+        }
+    }
+
+    List<Image> m_StarsImg;
+    List<Image> starsImg
+    {
+        get
+        {
+            if (m_StarsImg == null)
+            {
+                m_StarsImg = new List<Image>();
+                for (int i = 0; i < 5; i++)
+                {
+                    var star = this.transform.GetComponent<Image>("Container_HeroShow/stars/star" + i);
+                    m_StarsImg.Add(star);
+                }
+            }
+            return m_StarsImg;
+        }
+    }
+
+
+    Image m_LockState;
+    Image lockState
+    {
+        get
+        {
+            if (m_LockState == null)
+            {
+                m_LockState = this.transform.GetComponent<Image>("Container_HeroShow/lockstate");
+            }
+            return m_LockState;
+        }
+    }
+
+    Text m_Name;
+    Text nameText
+    {
+        get
+        {
+            if (m_Name == null)
+            {
+                m_Name = this.transform.GetComponent<Text>("Container_HeroShow/name");
+            }
+            return m_Name;
+        }
+    }
+
+
+    Text m_LvText;  //姝﹀皢绛夌骇 + 瑙夐啋绛夌骇
+    Text lvText
+    {
+        get
+        {
+            if (m_LvText == null)
+            {
+                m_LvText = this.transform.GetComponent<Text>("Container_HeroShow/lv");
+            }
+            return m_LvText;
+        }
+    }
+
+
+    OutlineEx heroNameOutline;
+    OutlineEx heroLVOutline;
+    void Awake()
+    {
+        LoadPrefab();
+    }
+
+    // 姝﹀皢灏忓ご鍍忥紝锛堣亴涓氬拰鍚嶇О涓嶅啀姝ょ鐞嗭紝鍚勪釜鐣岄潰鎺掔増涓嶅悓锛�
+    public void Init(int heroID, int skinID = 0, int breakLevel = 0, int star = 0, int awakelv = 0, int lv = 0, bool isShowLock = false)
+    {
+        var heroConfig = HeroConfig.Get(heroID);
+        qualityBG.SetSprite("herodz" + heroConfig.Quality);
+        // int skinID = 0;
+        // if (heroGuid != "")
+        // {
+        //     var hero = HeroManager.Instance.GetHero(heroGuid);
+        //     skinID = hero.SkinID;
+        // }
+        // else
+        // {
+        //     skinID = heroConfig.SkinIDList[0];
+        // }
+
+        heroModel.Create(skinID, heroConfig.UIScale);
+
+        if (star == 0)
+        {
+            starRect.SetActive(false);
+        }
+        else
+        {
+            starRect.SetActive(true);
+            for (int i = 0; i < starsImg.Count; i++)
+            {
+                if ((star - 1) % starsImg.Count >= i)
+                {
+                    starsImg[i].SetActive(true);
+                    starsImg[i].SetSprite("herostar" + (((star - 1) / starsImg.Count) + 1) * starsImg.Count);
+                }
+                else
+                {
+                    starsImg[i].SetActive(false);
+                }
+            }
+        }
+
+        lockState.SetActive(isShowLock);
+
+        nameText.text = breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv", heroConfig.Name, breakLevel);
+        nameText.color = UIHelper.GetUIColorByFunc(heroConfig.Quality);
+        heroNameOutline.colorType = (QualityTextColType)heroConfig.Quality;
+        lvText.text = string.Format("{0}{1} {2}", Language.Get("L1094"), lv, awakelv == 0 ? Language.Get("herocard13") : Language.Get("herocard12", awakelv));
+        heroLVOutline.colorType = awakelv == 0 ? QualityTextColType.None : QualityTextColType.red;
+
+    }
+
+    GameObject cellContainer;
+    protected void LoadPrefab()
+    {
+        if (cellContainer != null)
+            return;
+
+        var tmp = transform.Find("Container_HeroShow");
+        if (tmp != null)
+        {
+            cellContainer = tmp.gameObject;
+            return;
+        }
+        if (cellContainer == null)
+        {
+            cellContainer = UIUtility.CreateWidget("HeroShowBaseCell", "Container_HeroShow");
+
+            if (cellContainer != null)
+            {
+                cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
+                cellContainer.transform.SetAsFirstSibling();
+            }
+        }
+
+        //缂╂斁鍒板拰鐖秗ect涓�鏍峰ぇ
+        var scale = 1f;
+        var rect = cellContainer.GetComponent<RectTransform>();
+        var parentRect = transform.GetComponent<RectTransform>();
+        scale = parentRect.sizeDelta.x / rect.sizeDelta.x;
+        cellContainer.transform.localScale = new Vector3(scale, scale, scale);
+        heroNameOutline = nameText.GetComponent<OutlineEx>();
+        heroLVOutline = lvText.GetComponent<OutlineEx>();
+    }
+}
+
diff --git a/Main/System/HeroUI/HeroShowBaseCell.cs.meta b/Main/System/HeroUI/HeroShowBaseCell.cs.meta
new file mode 100644
index 0000000..91febcd
--- /dev/null
+++ b/Main/System/HeroUI/HeroShowBaseCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3fda1dd0f72aa5e4e9902eb5ae19368c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/KnapSack/Logic/ItemModel.cs b/Main/System/KnapSack/Logic/ItemModel.cs
index 6616357..7b674fd 100644
--- a/Main/System/KnapSack/Logic/ItemModel.cs
+++ b/Main/System/KnapSack/Logic/ItemModel.cs
@@ -152,6 +152,7 @@
 
     public string guid; //鐗╁搧鐨勫疄渚婭D
     public int gearScore; //璇勫垎
+    public bool isLock; //鏄惁閿佸畾
 
     public ItemInfo()
     {
@@ -168,6 +169,7 @@
         guid = serverItem.ItemGUID;
         isAuction = serverItem.IsBind;
         gearScore = (int)serverItem.GearScore;
+        isLock = serverItem.IsLocked > 0;
     }
 
     public ItemInfo(H0704_tagRolePackRefresh serverItem)
@@ -180,6 +182,7 @@
         guid = serverItem.ItemGUID;
         isAuction = serverItem.IsBind;
         gearScore = (int)serverItem.GearScore;
+        isLock = serverItem.IsLocked > 0;
     }
 
 }
diff --git a/Main/System/KnapSack/New/CommonItemBaisc.cs b/Main/System/KnapSack/New/CommonItemBaisc.cs
index 3179118..a2bb5ed 100644
--- a/Main/System/KnapSack/New/CommonItemBaisc.cs
+++ b/Main/System/KnapSack/New/CommonItemBaisc.cs
@@ -5,6 +5,7 @@
 
 public enum ItemCellformat
 {
+    Format_120x120,
     Format_100x100,
     Format_84x84,
     Format_80x80,
@@ -141,8 +142,11 @@
                     cellContainer = UIUtility.CreateWidget("ItemCell_84", "Container_ItemCell");
                     break;
                 case ItemCellformat.Format_100x100:
-                        cellContainer = UIUtility.CreateWidget("ItemCell_100", "Container_ItemCell");
-                        break;
+                    cellContainer = UIUtility.CreateWidget("ItemCell_100", "Container_ItemCell");
+                    break;
+                case ItemCellformat.Format_120x120:
+                    cellContainer = UIUtility.CreateWidget("ItemCell_120", "Container_ItemCell");
+                    break;
             }
 
             if (cellContainer != null)
@@ -197,7 +201,7 @@
         {
             //浠i噾鍒�
             countText.SetActive(true);
-            countText.text = count > 1000000 ? UIHelper.ReplaceLargeNum(count / 100.0f) : (count / 100.0f).ToString("0.##");
+            countText.text = count > 1000000 ? UIHelper.ReplaceLargeNum(count / 100.0f) : (count / 100.0f).ToString("0.#");
         }
         else if (Array.IndexOf(packModel.textCountShow2, itemId) != -1)
         {
diff --git a/Main/System/MainLevel.meta b/Main/System/MainLevel.meta
deleted file mode 100644
index 984e3ba..0000000
--- a/Main/System/MainLevel.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: a02c6eff6ff37404ab5bdfb3357a7fa1
-folderAsset: yes
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/System/SkillUI/SkillBaseCell.cs b/Main/System/SkillUI/SkillBaseCell.cs
index d8dd906..1e1b161 100644
--- a/Main/System/SkillUI/SkillBaseCell.cs
+++ b/Main/System/SkillUI/SkillBaseCell.cs
@@ -71,7 +71,7 @@
     {
         if (cellContainer != null)
             return;
-        
+
         var tmp = transform.Find("Container_SkillCell");
         if (tmp != null)
         {
@@ -88,6 +88,13 @@
                 cellContainer.transform.SetAsFirstSibling();
             }
         }
+        
+        //缂╂斁鍒板拰鐖秗ect涓�鏍峰ぇ
+        var scale = 1f;
+        var rect = cellContainer.GetComponent<RectTransform>();
+        var parentRect = transform.GetComponent<RectTransform>();
+        scale = parentRect.sizeDelta.x / rect.sizeDelta.x;
+        cellContainer.transform.localScale = new Vector3(scale, scale, scale);
     }
 }
 
diff --git a/Main/System/Tip/ConfirmCancel.cs b/Main/System/Tip/ConfirmCancel.cs
index 2822c2c..ec15e61 100644
--- a/Main/System/Tip/ConfirmCancel.cs
+++ b/Main/System/Tip/ConfirmCancel.cs
@@ -257,51 +257,40 @@
     //     }
     // }
 
-    // public static string generalItemTip;
-    // public static int generalItemId;
-    // public static int generalItemCnt;
-    // public static Action ItemConfirmEvent;
-    // public static void ShowItemConfirm(string info, int _itemId, int _itemCnt, Action func)
-    // {
-    //     generalItemTip = info;
-    //     generalItemId = _itemId;
-    //     generalItemCnt = _itemCnt;
-    //     ItemConfirmEvent = func;
-    //     if (!UIManager.Instance.IsOpened<ItemConfirmWin>())
-    //     {
-    //         UIManager.Instance.OpenWindow<ItemConfirmWin>();
-    //     }
-    // }
+    public static string generalItemTip;
+    public static string generalItemTip2;
+    public static Action ItemConfirmEvent;
 
-    // public static List<Item> getItems { get; private set; }
-    // //澶氱墿鍝佺‘璁ゆ
-    // public static void ShowItemsConfirm(List<Item> items, string tiltle, string info, string btnText, Action func, int moneyCnt = 0, int type = 0)
-    // {
-    //     getItems = items;
-    //     generalTitle = tiltle;
-    //     generalItemTip = info;
-    //     ItemConfirmEvent = func;
-    //     OKName = btnText;
-    //     ItemConfirmEvent = func;
-    //     moneyType = type;
-    //     moneyNeedCount = moneyCnt;
-    //     if (!UIManager.Instance.IsOpened<ItemsConfirmWin>())
-    //     {
-    //         UIManager.Instance.OpenWindow<ItemsConfirmWin>();
-    //     }
-    // }
+    public static List<Item> getItems { get; private set; }
+    //澶氱墿鍝佺‘璁ゆ
+    public static void ShowItemsConfirm(List<Item> items, string tiltle, string info, string info2, string btnText, Action func, int moneyCnt = 0, int type = 0)
+    {
+        getItems = items;
+        generalTitle = tiltle;
+        generalItemTip = info;
+        generalItemTip2 = info2;
+        ItemConfirmEvent = func;
+        OKName = btnText;
+        ItemConfirmEvent = func;
+        moneyType = type;
+        moneyNeedCount = moneyCnt;
+        if (!UIManager.Instance.IsOpened<ItemsConfirmWin>())
+        {
+            UIManager.Instance.OpenWindow<ItemsConfirmWin>();
+        }
+    }
 
 
 
-    // public static string moneyTitle;
-    // public static string moneyTopInfo;
-    // public static string moneybtnOkText;
-    // public static int moneyType;
-    // public static int moneyNeedCount;
-    // public static ulong moneyHaveCount;
-    // public static string moneyToggleText { get; private set; }
-    // public static bool moneytoggleOpen { get; private set; }
-    // public static bool moneytoggleOpenState { get; private set; }
+    public static string moneyTitle;
+    public static string moneyTopInfo;
+    public static string moneybtnOkText;
+    public static int moneyType;
+    public static int moneyNeedCount;
+    public static ulong moneyHaveCount;
+    public static string moneyToggleText { get; private set; }
+    public static bool moneytoggleOpen { get; private set; }
+    public static bool moneytoggleOpenState { get; private set; }
 
     // public static Action<bool, bool> OnMoneyToggleConfirmAct;
     // public static void MoneyIconToggleConfirm(string title, string topInfo,string okTxt, int type,
diff --git a/Main/System/Tip/FuncRuleWin.cs b/Main/System/Tip/FuncRuleWin.cs
new file mode 100644
index 0000000..7f8dd97
--- /dev/null
+++ b/Main/System/Tip/FuncRuleWin.cs
@@ -0,0 +1,38 @@
+锘�
+using UnityEngine;
+using UnityEngine.UI;
+
+
+public class FuncRuleWin : UIBase
+{
+    [SerializeField] Text m_Title;
+    [SerializeField] Text m_RuleTxt;
+    [SerializeField] RectTransform scrollRect;
+    [SerializeField] float maxHeight = 800f; // 璁剧疆鏈�澶ч珮搴﹂檺鍒�
+
+
+    #region Built-in
+
+
+
+    protected override void OnPreOpen()
+    {
+        var config = RuleConfig.Get(functionOrder);
+
+        m_RuleTxt.text = Language.Get(config.Description);
+        m_Title.text = Language.Get(config.Title);
+
+    }
+
+    //鎵撳紑鍚庡浐瀹氭枃鏈紝涓嶄細鍔ㄦ�佸彉鍖�
+    protected override void NextFrameAfterOpen()
+    {
+        Vector2 newSizeDelta = scrollRect.sizeDelta;
+        newSizeDelta.y = Mathf.Min(newSizeDelta.y, maxHeight); // 闄愬埗鏈�澶ч珮搴�
+        scrollRect.sizeDelta = newSizeDelta;
+    }
+
+
+    #endregion
+
+}
\ No newline at end of file
diff --git a/Main/System/Tip/FuncRuleWin.cs.meta b/Main/System/Tip/FuncRuleWin.cs.meta
new file mode 100644
index 0000000..7fcca27
--- /dev/null
+++ b/Main/System/Tip/FuncRuleWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9ea6dcfb0da70ee4bb61fc19986f8ccb
+timeCreated: 1514008173
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Tip/FuncRules.cs b/Main/System/Tip/FuncRules.cs
new file mode 100644
index 0000000..059e067
--- /dev/null
+++ b/Main/System/Tip/FuncRules.cs
@@ -0,0 +1,25 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+public class FuncRules : MonoBehaviour
+{
+    [SerializeField] Button m_Button;
+    [SerializeField] int m_RuleId;
+
+
+    private void Awake()
+    {
+        m_Button.AddListener(OpenRuleWin);
+    }
+
+    private void OpenRuleWin()
+    {
+        var rule = RuleConfig.Get(m_RuleId);
+        if (!UIManager.Instance.IsOpened<FuncRuleWin>())
+        {
+            UIManager.Instance.OpenWindow<FuncRuleWin>(m_RuleId);
+        }
+    }
+
+
+}
+
diff --git a/Main/System/Tip/FuncRules.cs.meta b/Main/System/Tip/FuncRules.cs.meta
new file mode 100644
index 0000000..54acfb1
--- /dev/null
+++ b/Main/System/Tip/FuncRules.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ef9fe2c109ccba344bf7c63d50f3d784
+timeCreated: 1514008377
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Tip/ItemsConfirmCell.cs b/Main/System/Tip/ItemsConfirmCell.cs
new file mode 100644
index 0000000..34b818d
--- /dev/null
+++ b/Main/System/Tip/ItemsConfirmCell.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
+public class ItemsConfirmCell : CellView
+{
+    [SerializeField] ItemCell itemCell;
+    [SerializeField] Text itemName;
+
+    public void Display(int index)
+    {
+        int itemID = ConfirmCancel.getItems[index].id;
+        itemCell.Init(new ItemCellModel(itemID, false, (ulong)ConfirmCancel.getItems[index].count));
+        itemCell.button.SetListener(() =>
+        {
+            ItemTipUtility.Show(itemID);
+        });
+        itemName.text = ItemConfig.Get(itemID).ItemName;
+    }
+}
diff --git a/Main/System/Tip/ItemsConfirmCell.cs.meta b/Main/System/Tip/ItemsConfirmCell.cs.meta
new file mode 100644
index 0000000..c50c289
--- /dev/null
+++ b/Main/System/Tip/ItemsConfirmCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5e8436e8c402b7e4ab174de4ebbabc02
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Tip/ItemsConfirmWin.cs b/Main/System/Tip/ItemsConfirmWin.cs
new file mode 100644
index 0000000..9668171
--- /dev/null
+++ b/Main/System/Tip/ItemsConfirmWin.cs
@@ -0,0 +1,93 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+//甯︽湁澶氫釜鐗╁搧鐨勬搷浣滄彁绀�
+public class ItemsConfirmWin : UIBase
+{
+    [SerializeField] Text m_Title;
+    [SerializeField] Text m_Info;   //涓婃柟鎻愮ず
+    [SerializeField] Text m_Info2;  //鐗╁搧鍒楄〃涓嬫柟鎻愮ず
+    [SerializeField] ScrollerController m_Scroller;
+    [SerializeField] Button m_ConfirmBtn;
+    [SerializeField] Text m_BtnText;
+    [SerializeField] Transform moneyObj;
+    [SerializeField] Text moneyText;
+    [SerializeField] Image moneyIcon;
+
+
+    #region Built-in
+
+
+    protected override void InitComponent()
+    {
+        m_ConfirmBtn.AddListener(ConfirmBtn);
+    }
+
+    protected override void OnPreOpen()
+    {
+        m_Title.text = ConfirmCancel.generalTitle;
+        m_Info.text = ConfirmCancel.generalItemTip;
+        if (string.IsNullOrEmpty(ConfirmCancel.generalItemTip2))
+        { 
+            m_Info2.SetActive(false);
+        }
+        else
+        { 
+            m_Info2.SetActive(true);
+            m_Info2.text = ConfirmCancel.generalItemTip2;
+        }
+        m_Scroller.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        m_BtnText.text = ConfirmCancel.OKName;
+        if (ConfirmCancel.moneyNeedCount == 0)
+        {
+            moneyObj.SetActive(false);
+        }
+        else
+        {
+            moneyObj.SetActive(true);
+            moneyText.text = UIHelper.AppendColor((ulong)ConfirmCancel.moneyNeedCount > UIHelper.GetMoneyCnt(ConfirmCancel.moneyType) ? TextColType.Red:TextColType.Green,
+                string.Format("{0}/{1}", UIHelper.GetMoneyCnt(ConfirmCancel.moneyType), ConfirmCancel.moneyNeedCount));
+
+            moneyIcon.SetIconWithMoneyType(ConfirmCancel.moneyType);
+        }
+    }
+
+
+    protected override void OnPreClose()
+    {
+        m_Scroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+    #endregion
+
+    private void ConfirmBtn()
+    {
+        if (ConfirmCancel.ItemConfirmEvent != null)
+        {
+            ConfirmCancel.ItemConfirmEvent();
+        }
+    }
+
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as ItemsConfirmCell;
+        _cell?.Display(cell.index);
+    }
+
+    void CreateScroller()
+    {
+        m_Scroller.Refresh();
+        for (int i = 0; i < ConfirmCancel.getItems.Count; i++)
+        {
+            m_Scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        m_Scroller.Restart();
+    }
+}
+
+
+
+
+
diff --git a/Main/System/Tip/ItemsConfirmWin.cs.meta b/Main/System/Tip/ItemsConfirmWin.cs.meta
new file mode 100644
index 0000000..6116fce
--- /dev/null
+++ b/Main/System/Tip/ItemsConfirmWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e503b901a97e01446b04bf27693afb1e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 84ede7f..5370a2b 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -1074,6 +1074,8 @@
     itemyuanzu = 10, //鍏冪
     itembuxiu = 11, //涓嶆溄
     itemyonghen = 12, //姘告亽
+
+    red = 13, //绾㈣壊
 }
 
 public enum TextColType
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 38c9366..2ed1ccc 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -2,8 +2,6 @@
 using System.Text;
 using UnityEngine;
 using System.Linq;
-using System.Xml.Linq;
-using System.Collections;
 using System.Collections.Generic;
 using UnityEngine.UI;
 
@@ -377,15 +375,15 @@
         }
         else if (num >= M)
         {
-            return StringUtility.Contact(numto2Decimals(num / M).ToString("0.##"), Language.Get("L1070"));
+            return StringUtility.Contact(numto2Decimals(num / M).ToString("0.#"), Language.Get("L1070"));
         }
         else if (num >= K)
         {
-            return StringUtility.Contact(numto2Decimals(num / K).ToString("0.##"), Language.Get("L1071"));
+            return StringUtility.Contact(numto2Decimals(num / K).ToString("0.#"), Language.Get("L1071"));
         }
         else
         {
-            return numto2Decimals(num).ToString("0.##");
+            return numto2Decimals(num).ToString("0.#");
         }
     }
 
@@ -407,15 +405,15 @@
         }
         else if (num >= M)
         {
-            return StringUtility.Contact(numto2Decimals(num / M).ToString("0.##"),"m");
+            return StringUtility.Contact(numto2Decimals(num / M).ToString("0.#"), "m");
         }
         else if (num >= K)
         {
-            return StringUtility.Contact(numto2Decimals(num / K).ToString("0.##"), "k");
+            return StringUtility.Contact(numto2Decimals(num / K).ToString("0.#"), "k");
         }
         else
         {
-            return numto2Decimals(num).ToString("0.##");
+            return numto2Decimals(num).ToString("0.#");
         }
     }
 
@@ -594,6 +592,14 @@
     //     return name;
     // }
 
+    //鐗╁搧 鍚勫姛鑳藉搧璐�
+    public static Color GetUIColorByFunc(int itemColor, bool bright = false)
+    {
+        return GetUIColor(itemColor + 1, bright);
+    }
+
+
+    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐ㄤ粠2寮�濮� 鐢℅etUIColorByFunc
     public static Color GetUIColor(int itemColor, bool bright = false)
     {
         switch (itemColor)
@@ -623,7 +629,7 @@
             case 11:
                 return GetUIColor(TextColType.itembuxiu, bright);
             case 12:
-                return GetUIColor(TextColType.itemyonghen, bright);    
+                return GetUIColor(TextColType.itemyonghen, bright);
 
 
         }
@@ -701,53 +707,66 @@
         return bright ? s_BrightWhiteColor : s_DarkWhiteColor;
     }
 
+    //瀵瑰簲鍝佽川(鏍�)锛涚墿鍝� 鍚勫姛鑳藉搧璐ㄤ粠2寮�濮� 鐢℅etUIOutlineColorByFunc
+    public static Color GetUIOutlineColor(int quality)
+    {
+        return GetUIOutlineColor((QualityTextColType)quality);
+    }
 
-    //鎻忚竟棰滆壊锛屽搴斿搧璐�
+    //鐗╁搧 鍚勫姛鑳藉搧璐�
+    public static Color GetUIOutlineColorByFunc(int quality)
+    {
+        return GetUIOutlineColor((QualityTextColType)(quality + 1));
+    }
+
+    //鎻忚竟棰滆壊锛屽搴斿搧璐�(鏍�)
     public static Color GetUIOutlineColor(QualityTextColType type)
     {
         switch (type)
         {
             case QualityTextColType.itemcucao:
                 // 2d2d2d 绮楃硻
-                return new Color32(45, 45, 45, 255);
+                return new Color32(45, 45, 45, 128);
             case QualityTextColType.itemputong:
                 // 424242 鏅��
-                return new Color32(66, 66, 66, 255);
+                return new Color32(66, 66, 66, 128);
             case QualityTextColType.itemjingliang:
                 // 172543 绮捐壇
-                return new Color32(23, 37, 67, 255);
+                return new Color32(23, 37, 67, 128);
             case QualityTextColType.itemxiyou:
                 // 2a0f30 绋�鏈�
-                return new Color32(42, 15, 48, 255);
+                return new Color32(42, 15, 48, 128);
             case QualityTextColType.itemshishi:
                 // 4a2f00 鍙茶瘲
-                return new Color32(74, 47, 0, 255);
+                return new Color32(74, 47, 0, 128);
             case QualityTextColType.itemchuanqi:
                 // 451800 浼犲
-                return new Color32(69, 24, 0, 255);
+                return new Color32(69, 24, 0, 128);
             case QualityTextColType.itemshenhua:
                 // 510000 绁炶瘽
-                return new Color32(81, 0, 0, 255);
+                return new Color32(81, 0, 0, 128);
             case QualityTextColType.itemwuxia:
                 // 43003e 鏃犵憰
-                return new Color32(67, 0, 62, 255);
+                return new Color32(67, 0, 62, 128);
             case QualityTextColType.itemanjin:
                 // 6f4401 鏆楅噾
-                return new Color32(111, 68, 1, 255);
+                return new Color32(111, 68, 1, 128);
             case QualityTextColType.itemjueyi:
                 // 203995 缁濊壓
-                return new Color32(32, 57, 149, 255);
+                return new Color32(32, 57, 149, 128);
             case QualityTextColType.itemyuanzu:
                 // 461f5d 鍏冪
-                return new Color32(70, 31, 93, 255);
+                return new Color32(70, 31, 93, 128);
             case QualityTextColType.itembuxiu:
                 // 2e3975 涓嶆溄
-                return new Color32(46, 57, 117, 255);
+                return new Color32(46, 57, 117, 128);
             case QualityTextColType.itemyonghen:
                 // 5d1d52 姘告亽
-                return new Color32(93, 29, 82, 255);
+                return new Color32(93, 29, 82, 128);
+            case QualityTextColType.red:
+                return s_BrightRedColor;
         }
-        return new Color32(0, 0, 0, 255);
+        return new Color32(0, 0, 0, 128);
     }
 
     private static Regex m_TextColorRegex = new Regex("<color=#[0-9a-zA-Z]+>(.*)</color>", RegexOptions.Singleline);

--
Gitblit v1.8.0