From cc069d4dba57573a9c08811784edb613b91d127a Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 27 八月 2025 15:56:10 +0800
Subject: [PATCH] 108 【主界面】仙树升级

---
 Main/Config/PartialConfigs/ChestsAwardConfig.cs                                            |    7 
 Main/System/Message/RichTextMgr.cs                                                         |    1 
 Main/Utility/TimeUtility.cs                                                                |   15 +
 Main/System/Main/MoneyMoveByPath.cs                                                        |    2 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs.meta            |   11 
 Main/System/Battle/Motion/MotionBase.cs                                                    |    1 
 Main/System/Message/ImgAnalysis.cs                                                         |   16 
 Main/System/Equip/BlessLVManager.cs.meta                                                   |   11 
 Main/System/Redpoint/MainRedDot.cs                                                         |    3 
 Main/Utility/ComponentExtersion.cs                                                         |   34 ++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs              |   13 
 Main/Component/UI/Effect/TimeMgr.cs                                                        |   10 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs                 |   18 +
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs.meta                   |   11 
 Main/System/Main/HomeWin.cs                                                                |   27 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs.meta         |   11 
 Main/System/Equip/BlessLVTimeUpWin.cs                                                      |  112 +++++++
 Main/Main.cs                                                                               |    1 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs.meta |   11 
 Main/System/Equip/BlessLVManager.cs                                                        |  177 +++++++++++
 Main/System/Equip/BlessLVWin.cs.meta                                                       |   11 
 Main/Utility/UIHelper.cs                                                                   |   28 +
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs      |   20 +
 Main/System/Equip/BlessLVTimeUpWin.cs.meta                                                 |   11 
 Main/System/Equip/BlessLVCell.cs.meta                                                      |   11 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                       |    1 
 Main/System/Equip/BlessLVWin.cs                                                            |  214 ++++++++++++++
 Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs                        |   25 +
 Main/System/Recharge/GotoChargeWin.cs                                                      |    5 
 Main/System/Equip/BlessLVCell.cs                                                           |   44 ++
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs                          |    4 
 31 files changed, 823 insertions(+), 43 deletions(-)

diff --git a/Main/Component/UI/Effect/TimeMgr.cs b/Main/Component/UI/Effect/TimeMgr.cs
index f968fa8..e1be090 100644
--- a/Main/Component/UI/Effect/TimeMgr.cs
+++ b/Main/Component/UI/Effect/TimeMgr.cs
@@ -9,13 +9,11 @@
     private Dictionary<Component, TimeItem> timeItems = new Dictionary<Component, TimeItem>();
     private List<TimeItem> timeItemList = new List<TimeItem>();
     private int hourBuff = -1;
-    private int minuteBuff = -1;
     public int dayBuff = -1;
     public int monthBuff { get { return LocalSave.GetInt("month"); } private set { LocalSave.SetInt("month", value); } }
     public int weekBuff { get { return LocalSave.GetInt("week"); } private set { LocalSave.SetInt("week", value); } }
     public event Action OnDayEvent;
     public event Action OnHourEvent;
-    public event Action OnMinuteEvent;
     public event Action OnMonthAfterPlayerDataInitializeEvent;
     public event Action OnWeekAfterPlayerDataInitializeEvent;
 
@@ -55,14 +53,6 @@
                     OnHourEvent();
                 }
                 hourBuff = TimeUtility.ServerNow.Hour;
-            }
-            if (minuteBuff != TimeUtility.ServerNow.Minute)
-            {
-                if (OnMinuteEvent != null)
-                {
-                    OnMinuteEvent();
-                }
-                minuteBuff = TimeUtility.ServerNow.Minute;
             }
         }
         catch (Exception e)
diff --git a/Main/Config/PartialConfigs/ChestsAwardConfig.cs b/Main/Config/PartialConfigs/ChestsAwardConfig.cs
index f9d7212..22d599b 100644
--- a/Main/Config/PartialConfigs/ChestsAwardConfig.cs
+++ b/Main/Config/PartialConfigs/ChestsAwardConfig.cs
@@ -1,9 +1,4 @@
-锘�//--------------------------------------------------------
-//    [Author]:			绗簩涓栫晫
-//    [  Date ]:		   Sunday, February 04, 2018
-//--------------------------------------------------------
-
-using System.Collections.Generic;
+锘縰sing System.Collections.Generic;
 
 public partial class ChestsAwardConfig : ConfigBase<int, ChestsAwardConfig>
 {
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs
new file mode 100644
index 0000000..4845a31
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 23 浠欐爲鍗囩骇 #tagCMTreeLVUP
+
+public class CB223_tagCMTreeLVUP : GameNetPackBasic {
+    public byte Type;    // 0-寮�濮嬪崌绾э紙璇锋眰鎵i櫎娑堣�楋紝寮�濮嬪崌绾у�掕鏃讹級锛�1-鎵ц鍗囩骇锛堝墠绔嚜琛屽�掕鏃讹紝鏃堕棿鍒板悗鍙戦�佽绫诲瀷锛�
+
+    public CB223_tagCMTreeLVUP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB223;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (Type, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs.meta
new file mode 100644
index 0000000..cdadcb9
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB223_tagCMTreeLVUP.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 647b6a53269ebc54ba1cdbbd2d5d3c79
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs
new file mode 100644
index 0000000..6bfbdef
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 24 浣跨敤浠欐爲鍗囩骇鍑忔椂鐗╁搧 #tagCMUseTreeLVUPTimeItem
+
+public class CB224_tagCMUseTreeLVUPTimeItem : GameNetPackBasic {
+    public uint UseCount;    // 浣跨敤涓暟
+    public byte IsAutoBuy;    // 涓嶈冻涓暟鏄惁鑷姩璐拱
+
+    public CB224_tagCMUseTreeLVUPTimeItem () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB224;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (UseCount, NetDataType.DWORD);
+        WriteBytes (IsAutoBuy, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs.meta
new file mode 100644
index 0000000..42d1f12
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB224_tagCMUseTreeLVUPTimeItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7fc725d02eee6f745bb03e23287408a0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs
new file mode 100644
index 0000000..de37929
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs
@@ -0,0 +1,13 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 21 浠欐爲淇℃伅 #tagMCTreeInfo
+
+public class DTCB121_tagMCTreeInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        HB121_tagMCTreeInfo vNetData = vNetPack as HB121_tagMCTreeInfo;
+        BlessLVManager.Instance.UpdateBlessLVInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs.meta
new file mode 100644
index 0000000..738d4e8
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB121_tagMCTreeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b2ffbbf1287918e4f964b34b469a7fec
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index cb38be7..240cbf2 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -110,6 +110,7 @@
         Register(typeof(HA814_tagMCMakeItemAnswer), typeof(DTCA814_tagMCMakeItemAnswer));
         Register(typeof(HB122_tagSCHeroInfo), typeof(DTCB122_tagSCHeroInfo));
         Register(typeof(HA338_tagMCInvestInfo), typeof(DTCA338_tagMCInvestInfo));
+        Register(typeof(HB121_tagMCTreeInfo), typeof(DTCB121_tagMCTreeInfo));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs
new file mode 100644
index 0000000..89ad806
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs
@@ -0,0 +1,25 @@
+using UnityEngine;
+using System.Collections;
+
+// B1 21 浠欐爲淇℃伅 #tagMCTreeInfo
+
+public class HB121_tagMCTreeInfo : GameNetPackBasic {
+    public byte TreeLV;    // 褰撳墠浠欐爲绛夌骇
+    public byte LVUPState;    // 0-闈炲崌绾т腑锛�1-鍗囩骇涓�
+    public uint LVUPRemainTime;    // 鍗囩骇鍓╀綑鏃堕棿锛岀锛涘綋鍗囩骇涓笖鍊掕鏃朵负0鏃跺彲鍙戦�丅223鎵ц鍗囩骇鍖呰繘琛屽崌绾�
+    public byte FreeTimeCnt;    // 浠婃棩宸插厤璐瑰噺鏃舵鏁�
+    public uint FreeTimeLast;    // 涓婃鍏嶈垂鍑忔椂鏃堕棿鎴�
+
+    public HB121_tagMCTreeInfo () {
+        _cmd = (ushort)0xB121;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out TreeLV, vBytes, NetDataType.BYTE);
+        TransBytes (out LVUPState, vBytes, NetDataType.BYTE);
+        TransBytes (out LVUPRemainTime, vBytes, NetDataType.DWORD);
+        TransBytes (out FreeTimeCnt, vBytes, NetDataType.BYTE);
+        TransBytes (out FreeTimeLast, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs.meta
new file mode 100644
index 0000000..bedc28c
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HB1_Role/HB121_tagMCTreeInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5d4fec1aa2a73b64086988aef86ec5c6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index 50a5315..c7a1e90 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -76,6 +76,7 @@
         managers.Add(PlayerMainDate.Instance);
         managers.Add(HeroUIManager.Instance);
         managers.Add(InvestModel.Instance);
+        managers.Add(BlessLVManager.Instance);
 
         foreach (var manager in managers)
         {
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
index 5a8d509..e56eb36 100644
--- a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -15,6 +15,10 @@
 
 	public override bool IsFinished()
 	{
+		if (null == skillBase)
+		{
+			return true;
+		}
 		return skillBase.IsFinished();
 	}
 
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 306e2d3..1cb828c 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -152,6 +152,7 @@
         if (anim == null)
         {
             BattleDebug.LogError($"鎵句笉鍒板姩鐢�: {skillConfig.SkillMotionName}");
+            _onComplete?.Invoke();
             return null;
         }
 
diff --git a/Main/System/Equip/BlessLVCell.cs b/Main/System/Equip/BlessLVCell.cs
new file mode 100644
index 0000000..36f73a5
--- /dev/null
+++ b/Main/System/Equip/BlessLVCell.cs
@@ -0,0 +1,44 @@
+锘縰sing UnityEngine;
+using UnityEngine.UI;
+
+
+public class BlessLVCell : CellView
+{
+    [SerializeField] Text qualityName;
+    [SerializeField] Text qualityRate;
+    [SerializeField] Text qualityNextRate;
+    [SerializeField] Image qualityIcon;
+    
+    [SerializeField] OutlineEx qualityNameOutline;
+
+
+    public void Display(int index)
+    {
+        var startQuality = BlessLVManager.Instance.GetStartEquipQuality();
+        var config = TreeLVConfig.Get(BlessLVManager.Instance.m_TreeLV);
+        var nextConfig = TreeLVConfig.Get(BlessLVManager.Instance.m_TreeLV + 1);
+        var quality = startQuality + index;
+        qualityName.text = Language.Get("equipQuality" + quality);
+        qualityName.color = UIHelper.GetUIColor(quality);
+        
+        float rate = 0;
+        if (config != null)
+        {
+            if (quality - 1 < config.EquipColorRateList.Length)
+                rate = config.EquipColorRateList[quality - 1] / 100.0f;
+        }
+        qualityRate.text = rate + "%";
+        if (nextConfig != null)
+        {
+            if (quality - 1 < nextConfig.EquipColorRateList.Length)
+                rate = nextConfig.EquipColorRateList[quality - 1] / 100.0f;
+        }
+        qualityNextRate.text = rate + "%";
+        qualityIcon.SetSprite("TreeItemQuality_" + quality);
+        qualityNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(quality);
+    }
+
+   
+}
+
+
diff --git a/Main/System/Equip/BlessLVCell.cs.meta b/Main/System/Equip/BlessLVCell.cs.meta
new file mode 100644
index 0000000..c0a2ef3
--- /dev/null
+++ b/Main/System/Equip/BlessLVCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bcbe9f8e3b41b3049be9a08f505fde26
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Equip/BlessLVManager.cs b/Main/System/Equip/BlessLVManager.cs
new file mode 100644
index 0000000..8253544
--- /dev/null
+++ b/Main/System/Equip/BlessLVManager.cs
@@ -0,0 +1,177 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+
+
+public class BlessLVManager : GameSystemManager<BlessLVManager>
+{
+    public int m_TreeLV { get; private set; }    // 褰撳墠浠欐爲绛夌骇
+    public int m_LVUPState { get; private set; } // 0-闈炲崌绾т腑锛�1-鍗囩骇涓�
+    public int m_LVUPRemainTime { get; private set; } // 鍗囩骇鍓╀綑鏃堕棿锛岀锛涘綋鍗囩骇涓笖鍊掕鏃朵负0鏃跺彲鍙戦�丅223鎵ц鍗囩骇鍖呰繘琛屽崌绾�
+    public int m_FreeTimeCnt { get; private set; }    // 浠婃棩宸插厤璐瑰噺鏃舵鏁�
+    public int m_FreeTimeLast { get; private set; } // 涓婃鍏嶈垂鍑忔椂鏃堕棿鎴�
+    public event Action OnBlessLVUpdateEvent;
+    int m_LVPackTime; //鏀跺寘鏃堕棿鐢ㄤ簬璁$畻鍓╀綑鏃堕棿m_LVUPRemainTime
+
+    public int upgradeTreeMoneyType; //鍗囩骇浠欐爲娑堣�楃殑璐у竵绫诲瀷
+    public int timeUpTreeItemID; //鍔犻�熶粰鏍戝崌绾х殑閬撳叿ID
+    public int timeUpTreeItemSubTime; //鍑忓皯浠欐爲鍗囩骇鏃堕棿鐨勯亾鍏峰噺灏戠殑鏃堕棿
+    public int dayFreeMaxTimes; //姣忔棩鍏嶈垂鍗囩骇娆℃暟
+    public int freeTimeCD; //鍏嶈垂鍑忓皯鏃堕棿鐨勫喎鍗碈D 鍒�
+    public int freeSubTime; //鍏嶈垂鍑忓皯鐨勬椂闂� 鍒�
+
+    public int lastTreeLV; //涓婁竴娆℃爲鐨勭瓑绾� 鐢ㄤ簬鎵撳紑鐣岄潰鐨勬椂鍊欐挱鏀句笅鍗囩骇鐗规晥
+
+    public override void Init()
+    {
+        m_TreeLV = 0;
+        m_LVUPState = 0;
+        m_LVUPRemainTime = 0;
+        m_LVPackTime = 0;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOK;
+        GlobalTimeEvent.Instance.fiveSecondEvent += OnTimeEvent;
+
+        ParseConfig();
+    }
+
+    public override void Release()
+    {
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOK;
+        GlobalTimeEvent.Instance.fiveSecondEvent -= OnTimeEvent;
+    }
+
+    void OnPlayerLoginOK()
+    {
+        lastTreeLV = 0;
+        AutoUpgrade();
+        UpdateTreeRedpoint();
+    }
+
+
+    void ParseConfig()
+    {
+        var config = FuncConfigConfig.Get("TreeLVUP");
+        upgradeTreeMoneyType = int.Parse(config.Numerical1);
+        var arr = config.Numerical2.Split('|');
+        timeUpTreeItemID = int.Parse(arr[0]);
+        timeUpTreeItemSubTime = int.Parse(arr[1]);
+        dayFreeMaxTimes = int.Parse(config.Numerical3);
+        freeTimeCD = int.Parse(config.Numerical4);
+        freeSubTime = int.Parse(config.Numerical5);
+    }
+
+    public void UpdateBlessLVInfo(HB121_tagMCTreeInfo netPack)
+    {
+        m_TreeLV = netPack.TreeLV;
+        m_LVUPState = netPack.LVUPState;
+        m_LVUPRemainTime = (int)netPack.LVUPRemainTime;
+        m_FreeTimeCnt = netPack.FreeTimeCnt;
+        m_FreeTimeLast = (int)netPack.FreeTimeLast;
+        m_LVPackTime = TimeUtility.AllSeconds;
+        if (lastTreeLV == 0)
+        {
+            lastTreeLV = m_TreeLV;
+        }
+        OnBlessLVUpdateEvent?.Invoke();
+        UpdateTreeRedpoint();
+        AutoUpgrade();
+    }
+
+    public int GetLVUPRemainTime()
+    {
+        if (m_LVUPState == 0)
+            return 0;
+        return m_LVUPRemainTime - (TimeUtility.AllSeconds - m_LVPackTime);
+    }
+
+    public int GetFreeRemainTime()
+    {
+        if (m_LVUPState == 0)
+            return 0;
+        return m_FreeTimeLast + freeTimeCD * 60 - TimeUtility.AllSeconds;
+    }
+
+    Redpoint redpointTree = new Redpoint(MainRedDot.BlessLVRedpoint);
+    Redpoint redpointTreeItem = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10);
+    Redpoint redpointTreeFree = new Redpoint(MainRedDot.BlessLVRedpoint, MainRedDot.BlessLVRedpoint * 10 + 1);
+    void UpdateTreeRedpoint()
+    {
+        redpointTreeFree.state = RedPointState.None;
+        redpointTreeItem.state = RedPointState.None;
+        redpointTree.state = RedPointState.None;
+        var config = TreeLVConfig.Get(m_TreeLV);
+        if (config == null) return;
+        //闈炲崌绾т腑妫�鏌ュ崌绾ф潗鏂�
+        if (m_LVUPState == 0)
+        {
+
+            if (UIHelper.GetMoneyCnt(upgradeTreeMoneyType) >= config.LVUPNeedMoney)
+            {
+                redpointTree.state = RedPointState.Simple;
+            }
+        }
+        else
+        {
+            //妫�鏌ユ椂闂撮亾鍏� 鍜� 鍏嶈垂鐨勬椂闂�
+            if (PackManager.Instance.GetSinglePack(PackType.Item).HasItem(timeUpTreeItemID))
+            {
+                redpointTreeItem.state = RedPointState.Simple;
+                return;
+            }
+            if (m_FreeTimeCnt > 0 && GetFreeRemainTime() <= 0)
+            {
+                redpointTreeFree.state = RedPointState.Simple;
+                return;
+            }
+
+
+        }
+    }
+
+    public void AutoUpgrade()
+    {
+        //鏃堕棿缁撴潫鑷姩閫氱煡鏈嶅姟绔崌绾э紝鎴栬�呮墦寮�鐣岄潰鏃讹紝鎴栬�呬笂绾� 閮藉仛妫�鏌�
+        if (m_LVUPState == 0)
+        {
+            return;
+        }
+        if (GetLVUPRemainTime() > 0)
+        {
+            return;
+        }
+        var pack = new CB223_tagCMTreeLVUP();
+        pack.Type = 1;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    void OnTimeEvent()
+    {
+        //鍗囩骇涓鏌� 鍊掕鏃剁粨鏉燂紱闈炲崌绾т腑妫�鏌ュ厤璐规鏁版椂闂� 绾㈢偣
+        if (m_LVUPState == 1)
+        {
+            //鍗囩骇
+            AutoUpgrade();
+        }
+
+        UpdateTreeRedpoint();
+
+    }
+
+
+    //瑁呭鍝佽川鐨勮捣濮嬭〃鐜�,鏈�灏�1
+    public int GetStartEquipQuality()
+    {
+        var rateList = TreeLVConfig.Get(m_TreeLV).EquipColorRateList;
+        for (int i = 0; i < rateList.Length; i++)
+        {
+            if (rateList[i] != 0)
+                return i + 1;
+        }
+        return 1;
+    }
+
+
+}
+
+
diff --git a/Main/System/Equip/BlessLVManager.cs.meta b/Main/System/Equip/BlessLVManager.cs.meta
new file mode 100644
index 0000000..49162d7
--- /dev/null
+++ b/Main/System/Equip/BlessLVManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4ec372b43a4e10e4798aa452c7c1f6aa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Equip/BlessLVTimeUpWin.cs b/Main/System/Equip/BlessLVTimeUpWin.cs
new file mode 100644
index 0000000..47e2708
--- /dev/null
+++ b/Main/System/Equip/BlessLVTimeUpWin.cs
@@ -0,0 +1,112 @@
+锘�
+
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BlessLVTimeUpWin : UIBase
+{
+    [SerializeField] ItemCell itemCell;
+    [SerializeField] Text itemCntTxt;
+    [SerializeField] LongPressButton subBtn;
+    [SerializeField] LongPressButton addBtn;
+    [SerializeField] Text timeText;
+    [SerializeField] Button speedBtn;
+
+    protected override void InitComponent()
+    {
+        addBtn.SetListener(OnClickPlus);
+        addBtn.onPress.AddListener(OnClickPlus);
+        subBtn.SetListener(OnClickReduce);
+        subBtn.onPress.AddListener(OnClickReduce);
+        speedBtn.AddListener(OnSpeedUP);
+    }
+
+    protected override void OnPreOpen()
+    {
+        int count = (int)PackManager.Instance.GetItemCountByID(PackType.Item, BlessLVManager.Instance.timeUpTreeItemID);
+        itemCell.Init(new ItemCellModel(BlessLVManager.Instance.timeUpTreeItemID, false, count));
+        itemCell.button.AddListener(() =>
+        {
+            ItemTipUtility.Show(BlessLVManager.Instance.timeUpTreeItemID);
+        });
+
+        var remainTime = BlessLVManager.Instance.GetLVUPRemainTime();
+        int needCount = (int)Math.Ceiling((float)remainTime / BlessLVManager.Instance.timeUpTreeItemSubTime);
+        showCount = Math.Min(count, needCount);
+        RefreshCount(needCount, remainTime);
+        RefreshBtn(showCount);
+    }
+
+    int showCount;
+    void RefreshCount(int needCount, int remainTime)
+    {
+
+        itemCntTxt.text = showCount + "/" + needCount;
+        timeText.text = Language.Get("L1100", Language.Get("BlessTree8"), TimeUtility.SecondsToDHMSEx(remainTime)) +
+        UIHelper.AppendColor(TextColType.DarkGreen, "(" + TimeUtility.SecondsToDHMSEx(showCount * BlessLVManager.Instance.timeUpTreeItemSubTime) + ")");
+
+    }
+
+    void RefreshBtn(int maxCount)
+    {
+        if (showCount >= maxCount)
+        {
+            addBtn.interactable = false;
+            addBtn.SetColorful(null, false);
+        }
+        else
+        {
+            addBtn.interactable = true;
+            addBtn.SetColorful(null, true);
+        }
+
+        if (showCount == 0)
+        {
+            subBtn.interactable = false;
+            subBtn.SetColorful(null, false);
+        }
+        else
+        {
+            subBtn.interactable = true;
+            subBtn.SetColorful(null, true);
+        }
+    }
+
+
+    void OnClickPlus()
+    {
+        int count = (int)PackManager.Instance.GetItemCountByID(PackType.Item, BlessLVManager.Instance.timeUpTreeItemID);
+        var remainTime = BlessLVManager.Instance.GetLVUPRemainTime();
+        int needCount = (int)Math.Ceiling((float)remainTime / BlessLVManager.Instance.timeUpTreeItemSubTime);
+        if (showCount == Math.Min(count, needCount))
+            return;
+        showCount++;
+        RefreshCount(needCount, remainTime);
+        RefreshBtn(Math.Min(count, needCount));
+    }
+
+    void OnClickReduce()
+    {
+        if (showCount == 0)
+            return;
+        var remainTime = BlessLVManager.Instance.GetLVUPRemainTime();
+        showCount--;
+        itemCntTxt.text = showCount.ToString();
+        int needCount = (int)Math.Ceiling((float)remainTime / BlessLVManager.Instance.timeUpTreeItemSubTime);
+        RefreshCount(needCount, remainTime);
+
+        int count = (int)PackManager.Instance.GetItemCountByID(PackType.Item, BlessLVManager.Instance.timeUpTreeItemID);
+        RefreshBtn(Math.Min(count, needCount));
+    }
+
+    void OnSpeedUP()
+    {
+        var pack = new CB224_tagCMUseTreeLVUPTimeItem();
+        pack.UseCount = (uint)showCount;
+        GameNetSystem.Instance.SendInfo(pack);
+        CloseWindow();
+    }
+}
+
+
diff --git a/Main/System/Equip/BlessLVTimeUpWin.cs.meta b/Main/System/Equip/BlessLVTimeUpWin.cs.meta
new file mode 100644
index 0000000..65e7c76
--- /dev/null
+++ b/Main/System/Equip/BlessLVTimeUpWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71aa0a65d75dea04c9bded1f9bc01fc3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Equip/BlessLVWin.cs b/Main/System/Equip/BlessLVWin.cs
new file mode 100644
index 0000000..f744334
--- /dev/null
+++ b/Main/System/Equip/BlessLVWin.cs
@@ -0,0 +1,214 @@
+锘�
+using System;
+
+using UnityEngine;
+using UnityEngine.UI;
+
+
+public class BlessLVWin : UIBase
+{
+    [SerializeField] Text curLVTxt;
+    [SerializeField] Text nextLVTxt;
+    [SerializeField] ScrollerController scroller;
+    [SerializeField] Text leftTime;
+    [SerializeField] Transform upgradeOnState;  //鍗囩骇涓寜閽�
+    [SerializeField] Text itemCntTxt;
+    [SerializeField] Image itemIcon;
+    [SerializeField] Button timeUpBtn;  //鍔犻�熸椂闂存寜閽�
+    [SerializeField] Button freeBtn;
+    [SerializeField] Text freeLeftTime;
+
+    [SerializeField] Transform upgradeWaiteState; //寰呭崌绾�
+    [SerializeField] Image processImg;  //杩涘害
+    [SerializeField] Text moneyText;
+    [SerializeField] Image moneyTypeImg;
+    [SerializeField] Button upgradeButton;
+    [SerializeField] UIEffectPlayer upgradeEffect;
+    [SerializeField] UIEffectPlayer btnEffect;
+
+
+
+
+    protected override void InitComponent()
+    {
+
+        timeUpBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<BlessLVTimeUpWin>();
+        });
+
+        upgradeButton.AddListener(OnUpgrade);
+
+        freeBtn.AddListener(() =>
+        {
+            var pack = new CA504_tagCMPlayerGetReward();
+            pack.RewardType = 82;
+            GameNetSystem.Instance.SendInfo(pack);
+        });
+    }
+
+
+    protected override void OnPreOpen()
+    {
+        BlessLVManager.Instance.OnBlessLVUpdateEvent += Display;
+        PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
+        GlobalTimeEvent.Instance.secondEvent += OnTimeEvent;
+        scroller.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+        Display();
+        BlessLVManager.Instance.AutoUpgrade();
+    }
+
+
+    protected override void OnPreClose()
+    {
+        BlessLVManager.Instance.OnBlessLVUpdateEvent -= Display;
+        PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
+        GlobalTimeEvent.Instance.secondEvent -= OnTimeEvent;
+        scroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+
+    void DisplayLVUPEffect()
+    {
+        if (BlessLVManager.Instance.lastTreeLV != BlessLVManager.Instance.m_TreeLV)
+        {
+            BlessLVManager.Instance.lastTreeLV = BlessLVManager.Instance.m_TreeLV;
+            upgradeEffect.Play();
+        }
+        else
+        {
+            upgradeEffect.Stop();
+        }
+    }
+
+    void OnTimeEvent()
+    {
+        if (BlessLVManager.Instance.m_LVUPState == 1)
+        {
+            if (BlessLVManager.Instance.GetLVUPRemainTime() > 0)
+            {
+                TimeUpShow();
+            }
+        }
+    }
+
+
+
+
+    void Display()
+    {
+        curLVTxt.text = Language.Get("L1100", Language.Get("BlessTree2"), BlessLVManager.Instance.m_TreeLV);
+        nextLVTxt.text = Language.Get("L1100", Language.Get("BlessTree3"), BlessLVManager.Instance.m_TreeLV + 1);
+        var config = TreeLVConfig.Get(BlessLVManager.Instance.m_TreeLV);
+        itemIcon.SetItemSprite(BlessLVManager.Instance.timeUpTreeItemID);
+
+        //寰呭崌绾�
+        if (BlessLVManager.Instance.m_LVUPState == 0)
+        {
+            upgradeOnState.SetActive(false);
+            upgradeWaiteState.SetActive(true);
+            leftTime.text = Language.Get("L1100", Language.Get("BlessTree8"), TimeUtility.SecondsToDHMSEx(config.LVUPNeedTime));
+            ShowMoney();
+            moneyTypeImg.SetIconWithMoneyType(BlessLVManager.Instance.upgradeTreeMoneyType);
+        }
+        else
+        {
+            upgradeOnState.SetActive(true);
+            upgradeWaiteState.SetActive(false);
+            TimeUpShow();
+        }
+        DisplayLVUPEffect();
+        scroller.m_Scorller.RefreshActiveCellViews();
+    }
+
+    void TimeUpShow()
+    {
+        var remainTime = BlessLVManager.Instance.GetLVUPRemainTime();
+        leftTime.text = Language.Get("L1100", Language.Get("BlessTree8"), TimeUtility.SecondsToDHMSEx(remainTime));
+        long itemCnt = PackManager.Instance.GetItemCountByID(PackType.Item, BlessLVManager.Instance.timeUpTreeItemID);
+        int needCount = (int)Math.Ceiling((float)remainTime / BlessLVManager.Instance.timeUpTreeItemSubTime);
+        itemCntTxt.text = itemCnt + "/" + needCount;
+        itemCntTxt.color = itemCnt >= needCount ? UIHelper.GetUIColor(TextColType.Green, true) : UIHelper.GetUIColor(TextColType.Red, true);
+
+        if (BlessLVManager.Instance.m_FreeTimeCnt < BlessLVManager.Instance.dayFreeMaxTimes)
+        {
+            var freeeRemainTime = BlessLVManager.Instance.GetFreeRemainTime();
+            if (freeeRemainTime > 0)
+            {
+                freeLeftTime.text = TimeUtility.SecondsToHMS(freeeRemainTime);
+                freeBtn.interactable = false;
+            }
+            else
+            {
+                freeLeftTime.text = "";
+                freeBtn.interactable = true;
+            }
+
+        }
+        else
+        {
+            freeLeftTime.text = "";
+            freeBtn.interactable = false;
+        }
+    }
+
+    void CreateScroller()
+    {
+        scroller.Refresh();
+        for (int i = 0; i < 13; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+    }
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as BlessLVCell;
+        _cell.Display(cell.index);
+    }
+
+    private void OnPlayerDataRefreshEvent(PlayerDataType type)
+    {
+        if (type == UIHelper.moneyTypeToPlayerDataType[BlessLVManager.Instance.upgradeTreeMoneyType])
+        {
+            ShowMoney();
+        }
+    }
+
+
+    void ShowMoney()
+    {
+        var config = TreeLVConfig.Get(BlessLVManager.Instance.m_TreeLV);
+        string needMoney = config.LVUPNeedMoney.ToString();
+        if (config.LVUPNeedMoney >= 1000000)
+            needMoney = UIHelper.ReplaceLargeNum(config.LVUPNeedMoney);
+
+        long lsMoney = UIHelper.GetMoneyCnt(BlessLVManager.Instance.upgradeTreeMoneyType);
+        string money = lsMoney.ToString();
+        if (lsMoney >= 1000000)
+            money = UIHelper.ReplaceLargeNum(lsMoney);
+
+        moneyText.text = money + "/" + needMoney;
+        // moneyText.color = lsMoney >= config.LVUPNeedMoney ? UIHelper.GetUIColor(TextColType.Green, true) : UIHelper.GetUIColor(TextColType.Red, true);
+        moneyTypeImg.SetIconWithMoneyType(BlessLVManager.Instance.upgradeTreeMoneyType);
+        processImg.fillAmount = (float)lsMoney / config.LVUPNeedMoney;
+    }
+
+    void OnUpgrade()
+    {
+        var config = TreeLVConfig.Get(BlessLVManager.Instance.m_TreeLV);
+        if (config.LVUPNeedMoney > UIHelper.GetMoneyCnt(BlessLVManager.Instance.upgradeTreeMoneyType))
+        {
+            ItemTipUtility.ShowMoneyTip(BlessLVManager.Instance.upgradeTreeMoneyType);
+            return;
+        }
+
+        var pack = new CB223_tagCMTreeLVUP();
+        pack.Type = 0;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+}
+
+
diff --git a/Main/System/Equip/BlessLVWin.cs.meta b/Main/System/Equip/BlessLVWin.cs.meta
new file mode 100644
index 0000000..2e4667a
--- /dev/null
+++ b/Main/System/Equip/BlessLVWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e9b4d07c3a38a1b4cb30eea29e82efa5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index f4e73cd..277c3f0 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -28,7 +28,8 @@
     [SerializeField] Button changeHeroPosBtn;
 
     [SerializeField] Button autoBtn;
-
+    [SerializeField] Button  blessLVBtn;
+    [SerializeField] Text blessLVText;
 
     //鍏朵粬鍔熻兘鍏ュ彛
     [SerializeField] Button monthCardBtn;
@@ -78,37 +79,41 @@
         {
             InvestModel.Instance.BuyInvest(InvestModel.monthCardType);
         });
+
+        blessLVBtn.AddListener(()=>
+        { 
+            UIManager.Instance.OpenWindow<BlessLVWin>();
+        });
     }
 
 
 
 
-    public override void Refresh()
+    public void Display()
     {
         UpdatePlayerInfo();
         UpdateTask();
         RefreshRecharge();
+        ShowBlessLV();
     }
 
     protected override void OnPreOpen()
     {
         PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
         TaskManager.Instance.OnTaskUpdate += UpdateTask;
-        Refresh();
+        BlessLVManager.Instance.OnBlessLVUpdateEvent += ShowBlessLV;
+        Display();
         // var battleWin = UIManager.Instance.OpenWindow<BattleWin>();
         // battleWin.SetBattleField(BattleManager.Instance.storyBattleField);
     }
-    protected override void OnOpen()
-    {
-        base.OnOpen();
-        
-    }
+
 
 
     protected override void OnPreClose()
     {
         PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
         TaskManager.Instance.OnTaskUpdate -= UpdateTask;
+        BlessLVManager.Instance.OnBlessLVUpdateEvent -= ShowBlessLV;
 
         //  鍏抽棴鐨勬椂鍊欐妸鎴樻枟鐣岄潰涔熺粰鍏充簡 铏界劧鏄湪澶栭潰寮�鐨�
         UIManager.Instance.CloseWindow<BattleWin>();
@@ -135,6 +140,12 @@
         monthCardBtn.SetActive(!InvestModel.Instance.IsInvested(InvestModel.monthCardType));
     }
 
+
+    void ShowBlessLV()
+    {
+        blessLVText.text = BlessLVManager.Instance.m_TreeLV.ToString();
+    }
+    
     /// <summary>
     /// 鏇存柊鐜╁淇℃伅
     /// </summary>
diff --git a/Main/System/Main/MoneyMoveByPath.cs b/Main/System/Main/MoneyMoveByPath.cs
index fcef22c..bcd0f0f 100644
--- a/Main/System/Main/MoneyMoveByPath.cs
+++ b/Main/System/Main/MoneyMoveByPath.cs
@@ -46,7 +46,7 @@
                 //鎸傜埗鑺傜偣
                 imgMoney.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
                 var moneyImg = imgMoney.GetComponent<ImageEx>();
-                moneyImg.SetSprite(StringUtility.Contact("Money_Type_", moneyType));
+                moneyImg.SetIconWithMoneyType(moneyType);
                 moneyImg.raycastTarget = false;
                 moneyImg.GetComponent<RectTransform>().sizeDelta = new Vector2(40, 40);
                 imgMoneys.Add(moneyImg);
diff --git a/Main/System/Message/ImgAnalysis.cs b/Main/System/Message/ImgAnalysis.cs
index 5d6e268..bd82e5b 100644
--- a/Main/System/Message/ImgAnalysis.cs
+++ b/Main/System/Message/ImgAnalysis.cs
@@ -131,6 +131,11 @@
                         presentImgInfo.spriteName = array[1];
                     }
                     break;
+                case "folder":
+                    { 
+                        presentImgInfo.folderName = array[1];
+                    }
+                    break;
                 case "face":
                     {
                         presentImgInfo.spriteName = array[1];
@@ -143,7 +148,7 @@
                                 height = (int)RichTextMgr.Inst.presentRichText.FaceSize;
                             }
                             else
-                            { 
+                            {
                                 if (UIFrameMgr.Inst.ContainsDynamicImage(presentImgInfo.spriteName))
                                 {
                                     var list = UIFrameMgr.Inst.GetDynamicImage(presentImgInfo.spriteName);
@@ -189,7 +194,14 @@
         if (presentImgInfo.IsFace) return;
         if (IconConfig.isInit)
         {
-            presentImgInfo.sprite = UILoader.LoadSprite(presentImgInfo.spriteName);
+            if (!string.IsNullOrEmpty(presentImgInfo.folderName))
+            {
+                presentImgInfo.sprite = UILoader.LoadSprite(presentImgInfo.folderName, presentImgInfo.spriteName);
+            }
+            else
+            {
+                presentImgInfo.sprite = UILoader.LoadSprite(presentImgInfo.spriteName);
+            }
         }
 
         if (presentImgInfo.sprite != null)
diff --git a/Main/System/Message/RichTextMgr.cs b/Main/System/Message/RichTextMgr.cs
index ea35079..991ffca 100644
--- a/Main/System/Message/RichTextMgr.cs
+++ b/Main/System/Message/RichTextMgr.cs
@@ -122,6 +122,7 @@
 
         public Sprite sprite;
         public string spriteName;
+        public string folderName;  //娌℃湁鍦╥con琛ㄤ腑閰嶇疆鐨勶紝鐩存帴閰嶇疆鍥剧墖鍚�,闇�閰嶇疆鏂囦欢澶硅矾寰�
         public bool IsFace;
         public float scale; //缂╂斁鍥剧墖鐨勫悓鏃讹紝浜屾缂╂斁浜嗗浘鐗囧湪鏂囨湰閽熺殑鍗犱綅澶у皬,鏌ョ湅鍑芥暟InverseToRichText
 
diff --git a/Main/System/Recharge/GotoChargeWin.cs b/Main/System/Recharge/GotoChargeWin.cs
index c6189f7..1ae1f4b 100644
--- a/Main/System/Recharge/GotoChargeWin.cs
+++ b/Main/System/Recharge/GotoChargeWin.cs
@@ -1,8 +1,3 @@
-//--------------------------------------------------------
-//    [Author]:           绗簩涓栫晫
-//    [  Date ]:           Wednesday, May 09, 2018
-//--------------------------------------------------------
-
 using System;
 using UnityEngine;
 using UnityEngine.UI;
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index 8e66132..6cf8139 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -78,7 +78,8 @@
     #region 浠欑洘娲诲姩绾㈢偣
     public readonly Redpoint fairyActivityRedpoint = new Redpoint(218);
     #endregion
-
+        
+    public static int BlessLVRedpoint = 399;  //绁濈绛夌骇绾㈢偣
     public static int DailySpecialsRedpoint = 439;  //姣忔棩鐗规儬鍏ュ彛绾㈢偣
 
     public static int BlessedLandRedpoint = 444; //绂忓湴绾㈢偣
diff --git a/Main/Utility/ComponentExtersion.cs b/Main/Utility/ComponentExtersion.cs
index 223e472..68c49cd 100644
--- a/Main/Utility/ComponentExtersion.cs
+++ b/Main/Utility/ComponentExtersion.cs
@@ -306,6 +306,40 @@
         _image.overrideSprite = sprite;
     }
 
+    public static void SetItemSprite(this Image _image, int itemID)
+    {
+        if (_image == null)
+        {
+            return;
+        }
+
+        var itemConfig = ItemConfig.Get(itemID);
+        if (itemConfig == null)
+        {
+            return;
+        }
+
+        var sprite = UILoader.LoadSprite("icon", itemConfig.IconKey);
+        _image.overrideSprite = sprite;
+    }
+
+    public static void SetSkillSprite(this Image _image, int skillID)
+    {
+        if (_image == null)
+        {
+            return;
+        }
+
+        var skillConfig = SkillConfig.Get(skillID);
+        if (skillConfig == null)
+        {
+            return;
+        }
+
+        var sprite = UILoader.LoadSprite("SkillIcon", skillConfig.IconName);
+        _image.overrideSprite = sprite;
+    }
+
     public static void SetActive(this Component compoent, bool active)
     {
         if (compoent != null)
diff --git a/Main/Utility/TimeUtility.cs b/Main/Utility/TimeUtility.cs
index 6f2678a..e49d754 100644
--- a/Main/Utility/TimeUtility.cs
+++ b/Main/Utility/TimeUtility.cs
@@ -345,6 +345,21 @@
     }
 
     //渚嬪瓙
+    //澶т簬24灏忔椂鏄剧ず锛歺澶﹛x灏忔椂xx鍒�
+    //灏忎簬24灏忔椂鏄剧ず锛歺x:xx:xx
+    public static string SecondsToDHMSEx(int _seconds)
+    {
+        int days = _seconds / 86400;
+        int hours = _seconds % 86400 / 3600;
+        int mins = _seconds % 3600 / 60;
+        int seconds = _seconds % 60;
+        if (days > 0)
+        {
+            return StringUtility.Contact(days, Language.Get("L1074"), hours.ToString("D2"), Language.Get("L1072"), mins.ToString("D2"), Language.Get("L1073"));
+        }
+        return StringUtility.Contact(hours.ToString("D2"), ":", mins.ToString("D2"), ":", seconds.ToString("D2"));
+    }
+    //渚嬪瓙
     //x澶�
     //x鏃�
     //x鍒唜绉�
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index f28674e..e4599f8 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -69,20 +69,28 @@
     public static void SetIconWithMoneyType(this Image _image, int moneyType)
     {
         if (_image == null) return;
-        string iconKey = StringUtility.Contact("Money_Type_", moneyType);
-        _image.SetSprite(iconKey);
-    }
-
-    public static void SetSmallIconWithMoneyType(this Image _image, int moneyType)
-    {
-        if (_image == null) return;
-        string iconKey = StringUtility.Contact("SmallMoney", moneyType);
-        _image.SetSprite(iconKey);
+        // string iconKey = StringUtility.Contact("Money_Type_", moneyType);
+        if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
+        {
+            _image.SetOrgSprite(ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey);
+        }
+        else
+        { 
+            Debug.LogError("MoneyDisplayModel 涓洪厤缃揣甯佺被鍨嬶細" + moneyType);
+        }
     }
 
     public static string GetIconNameWithMoneyType(int moneyType)
     {
-        return StringUtility.Contact("Money_Type_", moneyType);
+        if (GeneralDefine.MoneyDisplayModel.ContainsKey(moneyType))
+        {
+            return ItemConfig.Get(GeneralDefine.MoneyDisplayModel[moneyType]).IconKey;
+        }
+        else
+        {
+            Debug.LogError("MoneyDisplayModel 涓洪厤缃揣甯佺被鍨嬶細" + moneyType);
+            return "";
+        }
     }
 
     /// <summary>

--
Gitblit v1.8.0