From 8d06932ebf186837e048da4822bd837dbf90e212 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期日, 28 四月 2019 10:33:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into ViewOtherPlayer

---
 System/Skill/TalentModel.cs                                                                         |    4 
 System/Skill/ExpertSkillSelectWin.cs                                                                |  246 ++++++++++++++++++
 System/Skill/ExpertSkillSelectWin.cs.meta                                                           |    4 
 System/Skill/TreasureSkillWin.cs                                                                    |  233 +++++++++--------
 Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs.meta                     |    4 
 Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs      |   18 +
 /dev/null                                                                                           |   12 
 System/Skill/ExpertSkillConditionCell.cs.meta                                                       |    4 
 Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs.meta |    4 
 Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs                          |   29 ++
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs.meta           |    4 
 Core/GameEngine/DataToCtl/PackageRegedit.cs                                                         |    2 
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs                |   23 +
 Lua/Gen/SnxxzUITreasureSkillModelWrap.cs                                                            |   30 --
 System/Skill/ExpertSkillConditionCell.cs                                                            |   39 +++
 System/Skill/TreasureSkillModel.cs                                                                  |   62 +---
 Utility/UIHelper.cs                                                                                 |   24 +
 17 files changed, 535 insertions(+), 207 deletions(-)

diff --git a/Core/GameEngine/DataToCtl/PackageRegedit.cs b/Core/GameEngine/DataToCtl/PackageRegedit.cs
index 4c550e1..4642a13 100644
--- a/Core/GameEngine/DataToCtl/PackageRegedit.cs
+++ b/Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -27,6 +27,7 @@
         // 鐧昏鐩稿簲鐨勬暟鎹綋鍙婂搴旂殑鏁版嵁杞�昏緫绫�
         Register(typeof(HA719_tagSCPlayerEquipCacheResult) ,typeof(DTCA719_tagSCPlayerEquipCacheResult));
         Register(typeof(HB108_tagMCYinjiStartTime) ,typeof(DTCB108_tagMCYinjiStartTime));
+		Register(typeof(HA309_tagMCSkillElementInfo), typeof(DTCA309_tagMCSkillElementInfo));
 		Register(typeof(HA325_tagMCNPCAttackCountInfo), typeof(DTCA325_tagMCNPCAttackCountInfo));
 		Register(typeof(HB215_tagMCFBBuyBuffInfo), typeof(DTCB215_tagMCFBBuyBuffInfo));
 		Register(typeof(HA718_tagMCCollectAwardItemInfo), typeof(DTCA718_tagMCCollectAwardItemInfo));
@@ -205,7 +206,6 @@
         Register(typeof(HA003_tagUniversalGameRecInfo), typeof(DTCA003_tagUniversalGameRecInfo));
         Register(typeof(HA505_tagMCFamilyRedPacketGoldLimit), typeof(DTCA505_tagMCFamilyRedPacketGoldLimit));
         Register(typeof(H0403_tagPlayerLoginLoadOK), typeof(DTC0403_tagPlayerLoginLoadOK));//鏁版嵁鍒濆鍖栧畬鎴�
-        Register(typeof(HA309_tagMCEquipPartSuiteLVInfo), typeof(DTCA309_tagMCEquipPartSuiteLVInfo));   //寰楀埌濂楄鏁版嵁
         Register(typeof(HA814_tagMCMakeItemAnswer), typeof(DTCA814_tagMCMakeItemAnswer));   //寰楀埌鍚堟垚缁撴灉鍥炲簲
         Register(typeof(HA317_tagMCAllEquipAttrActiveInfo), typeof(DTCA317_tagMCAllEquipAttrActiveInfo));   //寰楀埌婵�娲诲叏韬槦绾у拰鍏ㄨ韩寮哄寲鐨勪俊鎭�
         Register(typeof(HA321_tagMCPrayElixirResult), typeof(DTCA321_tagMCPrayElixirResult)); //绁堢涓硅嵂缁撴灉
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs
deleted file mode 100644
index ed8ac34..0000000
--- a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing UnityEngine;
-using System.Collections;
-
-// A5 16 娉曞疂鐘舵�佽褰� #tagCMMagicWeaponState
-
-public class CA516_tagCMMagicWeaponState : GameNetPackBasic
-{
-    public uint MWID;    //娉曞疂ID
-
-    public CA516_tagCMMagicWeaponState()
-    {
-        combineCmd = (ushort)0x03FE;
-        _cmd = (ushort)0xA516;
-    }
-
-    public override void WriteToBytes()
-    {
-        WriteBytes(MWID, NetDataType.DWORD);
-    }
-
-}
\ No newline at end of file
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs.meta b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs.meta
deleted file mode 100644
index c5a9f5e..0000000
--- a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMMagicWeaponState.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: fef0a43fa19650746a96b85190b2d9e9
-timeCreated: 1526307751
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs
new file mode 100644
index 0000000..9b29f7c
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 16 选择技能五行专精 #tagCMSelectSkillElement

+

+public class CA516_tagCMSelectSkillElement : GameNetPackBasic {

+    public uint SkillTypeID;    // 专精技能ID

+

+    public CA516_tagCMSelectSkillElement () {

+        combineCmd = (ushort)0x03FE;

+        _cmd = (ushort)0xA516;

+    }

+

+    public override void WriteToBytes () {

+        WriteBytes (SkillTypeID, NetDataType.DWORD);

+    }

+

+}

diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs.meta
similarity index 75%
rename from Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
rename to Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs.meta
index 7d492d5..f94d177 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA516_tagCMSelectSkillElement.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: e480e4bafe9ec364b9268eb18d798dc6
-timeCreated: 1520495140
+guid: 0b5750f7339b52d45a810522f59a3c35
+timeCreated: 1556262141
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs
deleted file mode 100644
index 882c5ef..0000000
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using UnityEngine;
-using System.Collections;
-using Snxxz.UI;
-
-// A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo
-
-
-
-public class DTCA309_tagMCEquipPartSuiteLVInfo : DtcBasic
-{
-
-    public override void Done(GameNetPackBasic vNetPack)
-    {
-
-        base.Done(vNetPack);
-
-        HA309_tagMCEquipPartSuiteLVInfo vNetData = vNetPack as HA309_tagMCEquipPartSuiteLVInfo;
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-        if (_hero != null)
-        {
-            _hero.SyncSuitEffect();
-        }
-    }
-
-}
-
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs.meta
deleted file mode 100644
index 2bf50e8..0000000
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: 60a5607a19624b64fa48488f1f958d87
-timeCreated: 1520495140
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs
new file mode 100644
index 0000000..437e580
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs
@@ -0,0 +1,23 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Friday, April 26, 2019
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Snxxz.UI;
+public class DTCA309_tagMCSkillElementInfo : DtcBasic {
+
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        var package = vNetPack as HA309_tagMCSkillElementInfo;
+        ModelCenter.Instance.GetModel<TreasureSkillModel>().OnReceivePackage(package);
+    }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs.meta
similarity index 75%
copy from Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
copy to Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs.meta
index 7d492d5..881abaa 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA309_tagMCSkillElementInfo.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: e480e4bafe9ec364b9268eb18d798dc6
-timeCreated: 1520495140
+guid: a2ec01cc7e3c6574e93dcce646183874
+timeCreated: 1556262100
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs b/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs
deleted file mode 100644
index 6722994..0000000
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using UnityEngine;
-using System.Collections;
-
-// A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo

-

-public class HA309_tagMCEquipPartSuiteLVInfo : GameNetPackBasic {

-    public byte Count;    // 信息个数

-    public  tagMCEquipPartSuiteLV[] InfoList;    // 信息列表

-

-    public HA309_tagMCEquipPartSuiteLVInfo () {

-        _cmd = (ushort)0xA309;

-    }

-

-    public override void ReadFromBytes (byte[] vBytes) {

-        TransBytes (out Count, vBytes, NetDataType.BYTE);

-        InfoList = new tagMCEquipPartSuiteLV[Count];

-        for (int i = 0; i < Count; i ++) {

-            InfoList[i] = new tagMCEquipPartSuiteLV();

-            TransBytes (out InfoList[i].EquipIndex, vBytes, NetDataType.BYTE);

-            TransBytes (out InfoList[i].Len, vBytes, NetDataType.WORD);

-            TransBytes (out InfoList[i].SuiteLVInfo, vBytes, NetDataType.Chars, InfoList[i].Len);

-        }

-    }

-

-    public struct tagMCEquipPartSuiteLV {

-        public byte EquipIndex;

-        public ushort Len;        //长度

-        public string SuiteLVInfo;        //{套装类型:等级}

-    }

-

-}

diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs b/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs
new file mode 100644
index 0000000..2e92e27
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 09 技能五行专精信息 #tagMCSkillElementInfo

+

+public class HA309_tagMCSkillElementInfo : GameNetPackBasic {

+    public byte Cnt;    // 数量

+    public  tagMCSkillElementData[] InfoList;

+

+    public HA309_tagMCSkillElementInfo () {

+        _cmd = (ushort)0xA309;

+    }

+

+    public override void ReadFromBytes (byte[] vBytes) {

+        TransBytes (out Cnt, vBytes, NetDataType.BYTE);

+        InfoList = new tagMCSkillElementData[Cnt];

+        for (int i = 0; i < Cnt; i ++) {

+            InfoList[i] = new tagMCSkillElementData();

+            TransBytes (out InfoList[i].MainSkillID, vBytes, NetDataType.DWORD);

+            TransBytes (out InfoList[i].ElementSkillID, vBytes, NetDataType.DWORD);

+        }

+    }

+

+    public struct tagMCSkillElementData {

+        public uint MainSkillID;        // 主技能ID

+        public uint ElementSkillID;        // 专精技能ID

+    }

+

+}

diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta b/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs.meta
similarity index 75%
copy from Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
copy to Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs.meta
index 7d492d5..b2c1020 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ b/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCSkillElementInfo.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: e480e4bafe9ec364b9268eb18d798dc6
-timeCreated: 1520495140
+guid: 4b9b3842aec0ac643ac31cd4d81c0df3
+timeCreated: 1556262074
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs b/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs
deleted file mode 100644
index 6e51251..0000000
--- a/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-锘縰sing UnityEngine;
-using System.Collections;
-
-/** 鍏呭�兼椿鍔ㄦ帓琛屾濂栧姳棰嗗彇璁板綍 */
-public class HA309_tagGoldActionBankPrizeRecord : GameNetPackBasic {
-	
-	public int		RecordLen;
-	public string	Record;	//size = RecordLen
-	
-	public HA309_tagGoldActionBankPrizeRecord () {
-		_cmd = (ushort)0xA309;
-	}
-	
-	/** 浠庡瓧鑺傚寘涓В鏋愪俊鎭� */
-	public override void ReadFromBytes (byte[] vBytes) {
-		TransBytes (out RecordLen, vBytes, NetDataType.DWORD);
-		TransBytes (out Record, vBytes, NetDataType.Chars, RecordLen);
-	}
-}
diff --git a/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs.meta b/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs.meta
deleted file mode 100644
index 8c272b4..0000000
--- a/Core/NetworkPackage/ServerPack/MapServerPack/HA3_Activity/HA309_tagGoldActionBankPrizeRecord.cs.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 5ef5a299c58334c4a9d829caf9e424fc
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
diff --git a/Lua/Gen/SnxxzUITreasureSkillModelWrap.cs b/Lua/Gen/SnxxzUITreasureSkillModelWrap.cs
index a255ef1..fc271ff 100644
--- a/Lua/Gen/SnxxzUITreasureSkillModelWrap.cs
+++ b/Lua/Gen/SnxxzUITreasureSkillModelWrap.cs
@@ -30,7 +30,6 @@
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetSkills", _m_TryGetSkills);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetSkill", _m_TryGetSkill);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetPotential", _m_TryGetPotential);
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsPotentialUnlock", _m_IsPotentialUnlock);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "OnReceivePackage", _m_OnReceivePackage);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryLevelUpTreasureSkill", _m_TryLevelUpTreasureSkill);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryLevelUpPotential", _m_TryLevelUpPotential);
@@ -293,35 +292,6 @@
                     
                     
                     return 2;
-                }
-                
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _m_IsPotentialUnlock(RealStatePtr L)
-        {
-		    try {
-            
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-            
-            
-                Snxxz.UI.TreasureSkillModel gen_to_be_invoked = (Snxxz.UI.TreasureSkillModel)translator.FastGetCSObj(L, 1);
-            
-            
-                
-                {
-                    int _skillId = LuaAPI.xlua_tointeger(L, 2);
-                    
-                        bool gen_ret = gen_to_be_invoked.IsPotentialUnlock( _skillId );
-                        LuaAPI.lua_pushboolean(L, gen_ret);
-                    
-                    
-                    
-                    return 1;
                 }
                 
             } catch(System.Exception gen_e) {
diff --git a/System/Skill/ExpertSkillConditionCell.cs b/System/Skill/ExpertSkillConditionCell.cs
new file mode 100644
index 0000000..c6e01f7
--- /dev/null
+++ b/System/Skill/ExpertSkillConditionCell.cs
@@ -0,0 +1,39 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+    public class ExpertSkillConditionCell : CellView
+    {
+        [SerializeField] Text m_Condition;
+        [SerializeField] Text m_Description;
+        [SerializeField] Image m_Line;
+
+        TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
+
+        public void Display(int skillId, int level)
+        {
+            var skillConfig = SkillConfig.Get(skillId + level - 1);
+            var property = skillConfig.RequireProperty();
+            var propertyConfig = PlayerPropertyConfig.Get(property);
+            m_Condition.text = string.Format("{0}鐏垫牴{1}婵�娲�", propertyConfig.Name, skillConfig.RequirePropertyValue());
+            m_Description.text = skillConfig.Description;
+
+            m_Line.gameObject.SetActive(level < skillConfig.SkillMaxLV);
+
+            var currentValue = UIHelper.GetPropertyValue((PropertyType)property);
+
+            if (currentValue >= skillConfig.RequirePropertyValue())
+            {
+                m_Description.color = UIHelper.s_LightYellow;
+            }
+            else
+            {
+                m_Description.color = UIHelper.s_Gray;
+            }
+        }
+    }
+}
+
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta b/System/Skill/ExpertSkillConditionCell.cs.meta
similarity index 75%
copy from Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
copy to System/Skill/ExpertSkillConditionCell.cs.meta
index 7d492d5..8fddc6f 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ b/System/Skill/ExpertSkillConditionCell.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: e480e4bafe9ec364b9268eb18d798dc6
-timeCreated: 1520495140
+guid: 03b9196771194cd4bb103743372d875c
+timeCreated: 1556261565
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/System/Skill/ExpertSkillSelectWin.cs b/System/Skill/ExpertSkillSelectWin.cs
new file mode 100644
index 0000000..fca16ae
--- /dev/null
+++ b/System/Skill/ExpertSkillSelectWin.cs
@@ -0,0 +1,246 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Friday, April 26, 2019
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+
+    public class ExpertSkillSelectWin : Window
+    {
+        [SerializeField] PositionTween m_PositionTween;
+        [SerializeField] SkillExpertWidget[] m_SkillExperts;
+        [SerializeField] UIAlphaTween m_AlphaTween;
+        [SerializeField] Image m_SkillIcon;
+        [SerializeField] Text m_SkillName;
+        [SerializeField] Text m_Reiki;
+        [SerializeField] ScrollerController m_Controller;
+        [SerializeField] Button m_Select;
+        [SerializeField] Button m_Close1;
+        [SerializeField] Button m_Close2;
+
+        public static int selectSkillId = 0;
+
+        bool m_OpenDetail = false;
+
+        int m_SelectExpert = 0;
+        int selectExpert
+        {
+            get { return m_SelectExpert; }
+            set
+            {
+                if (m_SelectExpert != value)
+                {
+                    if (!m_OpenDetail)
+                    {
+                        m_OpenDetail = true;
+                        DisplayAnimation();
+                    }
+                    m_SelectExpert = value;
+                    DisplaySelect();
+                    DisplayDetail();
+                }
+            }
+        }
+
+        TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+            m_Controller.OnRefreshCell += OnRefreshCell;
+            m_Select.AddListener(OnSelect);
+            m_Close1.AddListener(CloseClick);
+            m_Close2.AddListener(CloseClick);
+        }
+
+        protected override void OnPreOpen()
+        {
+            m_PositionTween.SetStartState();
+            m_AlphaTween.SetStartState();
+
+            m_OpenDetail = false;
+
+            Display();
+        }
+
+        protected override void OnAfterOpen()
+        {
+        }
+
+        protected override void OnPreClose()
+        {
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+
+        void Display()
+        {
+            SetDefaultSelect();
+
+            DisplayExperts();
+            DisplaySelect();
+            DisplayDetail();
+        }
+
+        void SetDefaultSelect()
+        {
+            m_SelectExpert = 0;
+            model.TryGetExpertSkill(selectSkillId, out m_SelectExpert);
+        }
+
+        void DisplayExperts()
+        {
+            TreasureSkill skill;
+            if (model.TryGetSkill(selectSkillId, out skill))
+            {
+                for (int i = 0; i < m_SkillExperts.Length; i++)
+                {
+                    var potential = skill.potentials[i];
+                    m_SkillExperts[i].Display(potential.id, OnSelect);
+                }
+            }
+        }
+
+        void DisplaySelect()
+        {
+            for (int i = 0; i < m_SkillExperts.Length; i++)
+            {
+                m_SkillExperts[i].SetSelect(selectExpert == m_SkillExperts[i].skillId);
+            }
+        }
+
+        void DisplayDetail()
+        {
+            if (selectExpert != 0)
+            {
+                var level = 0;
+                TreasurePotential expert;
+                if (model.TryGetPotential(selectExpert, out expert))
+                {
+                    level = expert.level;
+                }
+
+                SkillConfig skillConfig;
+                if (level == 0)
+                {
+                    skillConfig = SkillConfig.Get(selectExpert);
+                }
+                else
+                {
+                    skillConfig = SkillConfig.Get(selectExpert + level - 1);
+                }
+
+                m_SkillIcon.SetSprite(skillConfig.IconName);
+                m_SkillName.text = skillConfig.SkillName;
+
+                var property = skillConfig.RequireProperty();
+                var propertyConfig = PlayerPropertyConfig.Get(property);
+                m_Reiki.text = propertyConfig.Name;
+                m_Reiki.color = UIHelper.GetPropertyColor(property);
+
+                m_Controller.Refresh();
+                for (int i = 1; i <= skillConfig.SkillMaxLV; i++)
+                {
+                    m_Controller.AddCell(ScrollerDataType.Header, i);
+                }
+                m_Controller.Restart();
+            }
+        }
+
+        void DisplayAnimation()
+        {
+            m_PositionTween.Play();
+            m_AlphaTween.Play();
+        }
+
+        private void OnSelect()
+        {
+            if (selectExpert != 0)
+            {
+                var pak = new CA516_tagCMSelectSkillElement();
+                pak.SkillTypeID = (uint)selectExpert;
+                GameNetSystem.Instance.SendInfo(pak);
+            }
+            CloseImmediately();
+        }
+
+        private void OnSelect(int skillId)
+        {
+            selectExpert = skillId;
+        }
+
+        private void OnRefreshCell(ScrollerDataType type, CellView cell)
+        {
+            var expertCell = cell as ExpertSkillConditionCell;
+            expertCell.Display(selectExpert, cell.index);
+        }
+
+
+        #endregion
+
+        [Serializable]
+        public class SkillExpertWidget
+        {
+            [SerializeField] Image m_Icon;
+            [SerializeField] Text m_SkillName;
+            [SerializeField] Text m_Reiki;
+            [SerializeField] Transform m_ContainerSelect;
+            [SerializeField] Text m_Use;
+            [SerializeField] Button m_Select;
+
+            public int skillId { get; private set; }
+
+            TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
+
+            public void Display(int skillId, Action<int> func)
+            {
+                this.skillId = skillId;
+
+                var skillConfig = SkillConfig.Get(skillId);
+
+                m_Icon.SetSprite(skillConfig.IconName);
+                m_SkillName.text = skillConfig.SkillName;
+
+                var property = skillConfig.RequireProperty();
+                var propertyConfig = PlayerPropertyConfig.Get(property);
+                m_Reiki.text = propertyConfig.Name;
+                m_Reiki.color = UIHelper.GetPropertyColor(property);
+
+                var selectExpertSkill = 0;
+                model.TryGetExpertSkill(ExpertSkillSelectWin.selectSkillId, out selectExpertSkill);
+                m_Use.gameObject.SetActive(selectExpertSkill == skillId);
+
+                m_Select.SetListener(() =>
+                {
+                    if (func != null)
+                    {
+                        func(skillId);
+                    }
+                });
+            }
+
+            public void SetSelect(bool select)
+            {
+                m_ContainerSelect.gameObject.SetActive(select);
+            }
+        }
+
+    }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta b/System/Skill/ExpertSkillSelectWin.cs.meta
similarity index 75%
copy from Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
copy to System/Skill/ExpertSkillSelectWin.cs.meta
index 7d492d5..55cbc1b 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA309_tagMCEquipPartSuiteLVInfo.cs.meta
+++ b/System/Skill/ExpertSkillSelectWin.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: e480e4bafe9ec364b9268eb18d798dc6
-timeCreated: 1520495140
+guid: a594ab781c4fff047b992a7bd9a9a9a9
+timeCreated: 1556250942
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/System/Skill/TalentModel.cs b/System/Skill/TalentModel.cs
index 4faff7a..02233d6 100644
--- a/System/Skill/TalentModel.cs
+++ b/System/Skill/TalentModel.cs
@@ -565,7 +565,7 @@
             {
                 return 0;
             }
-            return config.StateSkillLV / 10000;
+            return config.StateSkillLV / 100000;
         }
 
         public static int RequirePropertyValue(this SkillConfig config)
@@ -574,7 +574,7 @@
             {
                 return 0;
             }
-            return config.StateSkillLV % 10000;
+            return config.StateSkillLV % 100000;
         }
     }
 }
diff --git a/System/Skill/TreasurePotentialBehaviour.cs b/System/Skill/TreasurePotentialBehaviour.cs
deleted file mode 100644
index e0d6830..0000000
--- a/System/Skill/TreasurePotentialBehaviour.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using UnityEngine.UI;
-
-namespace Snxxz.UI
-{
-    public class TreasurePotentialBehaviour : MonoBehaviour
-    {
-        [SerializeField] Transform m_ContainerLock;
-        [SerializeField] Transform m_ContainerUnlock;
-        [SerializeField] Text m_PotentialName;
-        [SerializeField] Text m_PotentialLevel;
-        [SerializeField] Text m_PotentialLimit;
-        [SerializeField] Text m_PotentialCondition;
-        [SerializeField] Image m_PotentialIcon;
-        [SerializeField] Button m_Func;
-        [SerializeField] RedpointBehaviour m_Redpoint;
-        [SerializeField] UIEffect m_UnlockEffect;
-
-        int skillId = 0;
-
-        TreasureSkillModel model
-        {
-            get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); }
-        }
-
-        private void Awake()
-        {
-            m_Func.AddListener(OnFunc);
-        }
-
-        public void Display(int skillId)
-        {
-            this.skillId = skillId;
-
-            bool isOpen = model.IsPotentialUnlock(skillId);
-            m_ContainerLock.gameObject.SetActive(!isOpen);
-            m_ContainerUnlock.gameObject.SetActive(isOpen);
-
-            TreasurePotential potential;
-            if (model.TryGetPotential(skillId, out potential))
-            {
-                {
-                    var skillConfig = potential.GetSkillConfig(potential.level);
-                    m_PotentialName.text = skillConfig.SkillName;
-                    m_PotentialIcon.SetSprite(skillConfig.IconName);
-                    m_PotentialLimit.gameObject.SetActive(potential.level == 0);
-                    m_PotentialLevel.gameObject.SetActive(potential.level > 0);
-                    m_PotentialLevel.text = StringUtility.Contact("LV", potential.level);
-                    m_PotentialIcon.material = potential.level > 0 ? MaterialUtility.GetUIDefaultGraphicMaterial()
-                        : MaterialUtility.GetInstantiatedSpriteGrayMaterial();
-                }
-
-
-                if (!isOpen)
-                {
-                    var treasureSkillId = 0;
-                    if (model.ContainsSkill(skillId, out treasureSkillId))
-                    {
-                        var skillConfig = SkillConfig.Get(treasureSkillId);
-                        m_PotentialCondition.text = Language.Get("TreasurePotentialUnlock", skillConfig.SkillName, potential.openLevel);
-                    }
-                }
-
-                m_Redpoint.redpointId = potential.levelUpRedpoint.id;
-            }
-        }
-
-        public void StartUnlock()
-        {
-            m_UnlockEffect.Play();
-        }
-
-        public void StopUnlock()
-        {
-            m_UnlockEffect.StopImediatly();
-        }
-
-        private void OnFunc()
-        {
-            bool isOpen = model.IsPotentialUnlock(skillId);
-            if (isOpen)
-            {
-                TreasurePotentialLevelUpWin.selectPotentialId = skillId;
-                WindowCenter.Instance.Open<TreasurePotentialLevelUpWin>();
-            }
-        }
-    }
-}
-
diff --git a/System/Skill/TreasurePotentialBehaviour.cs.meta b/System/Skill/TreasurePotentialBehaviour.cs.meta
deleted file mode 100644
index a4ed0ca..0000000
--- a/System/Skill/TreasurePotentialBehaviour.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: c5024aa76e8f6f647aa17c0e4406cbff
-timeCreated: 1550647552
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/System/Skill/TreasureSkillModel.cs b/System/Skill/TreasureSkillModel.cs
index f0237f4..c24c433 100644
--- a/System/Skill/TreasureSkillModel.cs
+++ b/System/Skill/TreasureSkillModel.cs
@@ -10,6 +10,7 @@
     {
         Dictionary<int, TreasureSkill> treasureSkills = new Dictionary<int, TreasureSkill>();
         Dictionary<int, List<int>> jobTreasureSkills = new Dictionary<int, List<int>>();
+        Dictionary<int, int> m_ExpertSkills = new Dictionary<int, int>();
 
         public List<int> skillLevelUpItems = new List<int>();
 
@@ -44,6 +45,7 @@
         public event Action<int> treasureSkillRefresh;
         public event Action<int> skillLevelUpRefresh;
         public event Action<int, int> potentialLevelRefresh;
+        public event Action expertSkillRefresh;
         public override void Init()
         {
             ParseConfig();
@@ -58,6 +60,7 @@
             {
                 skill.Reset();
             }
+            m_ExpertSkills.Clear();
             serverInited = false;
         }
 
@@ -107,8 +110,7 @@
                     treasureSkills.Add(config.limitSkillId, treasureSkill);
                     index++;
                 }
-                treasureSkill.potentials.Add(new TreasurePotential(config.id, 0,
-                    config.limitLevel, treasureSkill.redpoint.id));
+                treasureSkill.potentials.Add(new TreasurePotential(config.id, 0, treasureSkill.redpoint.id));
                 var skillConfig = SkillConfig.Get(config.limitSkillId);
 
                 List<int> skills;
@@ -160,6 +162,11 @@
             return treasureSkills.TryGetValue(skillId, out treasureSkill);
         }
 
+        public bool TryGetExpertSkill(int skillId,out int _skill)
+        {
+            return m_ExpertSkills.TryGetValue(skillId, out _skill);
+        }
+
         public bool TryGetPotential(int skillId, out TreasurePotential potential)
         {
             var treasureSkillId = 0;
@@ -172,21 +179,6 @@
                     return x.id == skillId;
                 });
                 return potential != null;
-            }
-            return false;
-        }
-
-        public bool IsPotentialUnlock(int skillId)
-        {
-            var treasureSkillId = 0;
-            if (ContainsSkill(skillId, out treasureSkillId))
-            {
-                var treasureSkill = treasureSkills[treasureSkillId];
-                TreasurePotential potential;
-                if (TryGetPotential(skillId, out potential))
-                {
-                    return treasureSkill.level >= potential.openLevel;
-                }
             }
             return false;
         }
@@ -249,6 +241,19 @@
                 }
 
                 UpdateRedpoint();
+            }
+        }
+
+        public void OnReceivePackage(HA309_tagMCSkillElementInfo package)
+        {
+            for (int i = 0; i < package.Cnt; i++)
+            {
+                var data = package.InfoList[i];
+                m_ExpertSkills[(int)data.MainSkillID] = (int)data.ElementSkillID;
+            }
+            if (expertSkillRefresh != null)
+            {
+                expertSkillRefresh();
             }
         }
 
@@ -369,20 +374,6 @@
                 {
                     skill.levelUpRedpoint.state = RedPointState.None;
                 }
-
-                foreach (var potential in skill.potentials)
-                {
-                    if (requireRemind && funcOpen && IsPotentialUnlock(potential.id) &&
-                        TryLevelUpPotential(potential.id, out error)
-                        && skill.level > 0)
-                    {
-                        potential.levelUpRedpoint.state = RedPointState.Simple;
-                    }
-                    else
-                    {
-                        potential.levelUpRedpoint.state = RedPointState.None;
-                    }
-                }
             }
         }
     }
@@ -456,23 +447,16 @@
     public class TreasurePotential
     {
         public readonly int id;
-        public readonly int openLevel;
         public readonly int maxLevel;
         public int level { get; private set; }
 
-        public Redpoint levelUpRedpoint { get; private set; }
-
-        public TreasurePotential(int id, int level, int openLevel, int redpointBase)
+        public TreasurePotential(int id, int level, int redpointBase)
         {
             this.id = id;
             this.level = level;
-            this.openLevel = openLevel;
 
             var config = SkillConfig.Get(id);
             maxLevel = config.SkillMaxLV;
-
-            levelUpRedpoint = new Redpoint(redpointBase,
-                TreasureSkillModel.REDPOINTID_BASE + TreasureSkillModel.redpointIndex++);
         }
 
         public SkillConfig GetSkillConfig(int level)
diff --git a/System/Skill/TreasureSkillWin.cs b/System/Skill/TreasureSkillWin.cs
index e780213..4e5a279 100644
--- a/System/Skill/TreasureSkillWin.cs
+++ b/System/Skill/TreasureSkillWin.cs
@@ -16,23 +16,15 @@
     {
         [SerializeField] ScrollerController m_Controller;
 
-        [SerializeField] Text m_SkillName;
-        [SerializeField] Text m_SkillLevel;
-        [SerializeField] Text m_SkillCoolDown;
-        [SerializeField] Transform m_ContainerNow;
-        [SerializeField] Text m_SkillDescNow;
-        [SerializeField] Transform m_ContainerNext;
-        [SerializeField] Text m_SkillDescNext;
-        [SerializeField] Transform m_ContainerLevelUp;
+        [SerializeField] SkillWidget m_SkillNow;
+        [SerializeField] SkillWidget m_SkillNext;
+        [SerializeField] SkillExpertWidget m_SkillExpert;
+        [SerializeField] Button m_ExpertSelect;
+        [SerializeField] Transform m_ContainerMax;
+
         [SerializeField] ItemBehaviour m_Item;
-        [SerializeField] Button m_GetWay;
         [SerializeField] Button m_LevelUp;
         [SerializeField] RedpointBehaviour m_LevelRedpoint;
-        [SerializeField] UIEffect m_LevelUpEffect;
-        [SerializeField] Transform m_ContainerMax;
-        [SerializeField] TreasurePotentialBehaviour[] m_TreasurePotentials;
-
-        List<Clock> clocks = new List<Clock>();
 
         TreasureSkillModel model
         {
@@ -53,6 +45,7 @@
         {
             m_Controller.OnRefreshCell += OnRefreshCell;
             m_LevelUp.AddListener(LevelUp);
+            m_ExpertSelect.AddListener(ExpertSelect);
         }
 
         protected override void OnPreOpen()
@@ -75,6 +68,7 @@
             model.selectRefresh += SelectRefresh;
             model.skillLevelUpRefresh += SkillLevelUpRefresh;
             packModel.refreshItemCountEvent += RefreshItemCountEvent;
+            model.expertSkillRefresh += ExpertSkillRefresh;
         }
 
         protected override void OnAfterOpen()
@@ -87,18 +81,8 @@
             model.selectRefresh -= SelectRefresh;
             model.skillLevelUpRefresh -= SkillLevelUpRefresh;
             packModel.refreshItemCountEvent -= RefreshItemCountEvent;
+            model.expertSkillRefresh -= ExpertSkillRefresh;
             model.SetAlreadyRemind();
-
-            for (int i = 0; i < m_TreasurePotentials.Length; i++)
-            {
-                m_TreasurePotentials[i].StopUnlock();
-            }
-
-            foreach (var clock in clocks)
-            {
-                Clock.Stop(clock);
-            }
-            clocks.Clear();
         }
 
         protected override void OnAfterClose()
@@ -108,7 +92,7 @@
 
         void SetDefaultSelect()
         {
-            var selectSkill = 0;
+            var _skill = 0;
             List<int> list;
             if (model.TryGetSkills(out list))
             {
@@ -117,29 +101,29 @@
                     TreasureSkill skill;
                     if (model.TryGetSkill(skillId, out skill))
                     {
-                        if (selectSkill == 0 && skill.level > 0)
+                        if (_skill == 0 && skill.level > 0)
                         {
-                            selectSkill = skillId;
+                            _skill = skillId;
                         }
                         if (skill.redpoint.state == RedPointState.Simple)
                         {
-                            selectSkill = skillId;
+                            _skill = skillId;
                         }
                     }
                 }
-                if (selectSkill == 0)
+                if (_skill == 0)
                 {
-                    selectSkill = list[0];
+                    _skill = list[0];
                 }
             }
-            model.selectSkill = selectSkill;
+            model.selectSkill = _skill;
         }
 
         private void Display()
         {
             DisplaySkills();
             DisplaySkillDetial();
-            DisplayPotentials();
+            DisplayExpertSkill();
         }
 
         private void DisplaySkills()
@@ -159,7 +143,6 @@
         void DisplaySkillDetial()
         {
             TreasureSkill skill;
-            m_GetWay.RemoveAllListeners();
             if (model.TryGetSkill(model.selectSkill, out skill))
             {
                 var config = skill.GetSkillConfig(skill.level);
@@ -167,50 +150,41 @@
                 {
                     return;
                 }
-                m_SkillName.text = config.SkillName;
-                m_SkillLevel.text = Language.Get("SkillActLevel", skill.level);
-                m_SkillCoolDown.text = Language.Get("L1065", config.CoolDownTime / 1000);
-                m_SkillDescNow.text = config.Description;
-                m_LevelRedpoint.redpointId = skill.levelUpRedpoint.id;
+
+                m_SkillNow.Display(skill.skillId, skill.level);
 
                 bool isMax = skill.level >= skill.maxLevel;
-                m_ContainerNext.gameObject.SetActive(!isMax);
-                m_ContainerLevelUp.gameObject.SetActive(!isMax);
+                m_SkillNext.SetActive(!isMax);
                 m_ContainerMax.gameObject.SetActive(isMax);
 
                 if (!isMax)
                 {
-                    var nextSkillConfig = SkillConfig.Get(skill.skillId + skill.level);
-                    m_SkillDescNext.text = nextSkillConfig.Description;
-                    m_Item.SetItem(nextSkillConfig.ExAttr4, nextSkillConfig.ExAttr5);
-                    m_GetWay.AddListener(() =>
-                    {
-                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.Daily_EmperorRelic);
-                    });
+                    var upConfig = SkillConfig.Get(skill.skillId + skill.level);
+                    m_Item.SetItem(upConfig.ExAttr4, upConfig.ExAttr5);
+                    m_SkillNext.Display(skill.skillId, skill.level + 1);
                 }
             }
         }
 
-        private void DisplayPotentials()
+        void DisplayExpertSkill()
         {
-            for (int i = 0; i < m_TreasurePotentials.Length; i++)
+            var skillId = 0;
+            var level = 0;
+            if (model.TryGetExpertSkill(model.selectSkill, out skillId))
             {
-                DisplayPotential(i);
+                TreasurePotential potential;
+                if (model.TryGetPotential(skillId, out potential))
+                {
+                    level = potential.level;
+                }
             }
+            m_SkillExpert.Display(skillId, level);
         }
 
-        private void DisplayPotential(int index)
+        private void ExpertSelect()
         {
-            TreasureSkill skill;
-            if (!model.TryGetSkill(model.selectSkill, out skill))
-            {
-                return;
-            }
-            if (index < m_TreasurePotentials.Length)
-            {
-                m_TreasurePotentials[index].gameObject.SetActive(index < skill.potentials.Count);
-                m_TreasurePotentials[index].Display(skill.potentials[index].id);
-            }
+            ExpertSkillSelectWin.selectSkillId = model.selectSkill;
+            WindowCenter.Instance.Open<ExpertSkillSelectWin>();
         }
 
         private void LevelUp()
@@ -245,20 +219,8 @@
 
         private void SelectRefresh()
         {
-            for (int i = 0; i < m_TreasurePotentials.Length; i++)
-            {
-                m_TreasurePotentials[i].StopUnlock();
-            }
-
-            foreach (var clock in clocks)
-            {
-                Clock.Stop(clock);
-            }
-            clocks.Clear();
-
             m_Controller.m_Scorller.RefreshActiveCellViews();
             DisplaySkillDetial();
-            DisplayPotentials();
         }
 
         private void SkillLevelUpRefresh(int id)
@@ -267,44 +229,12 @@
             {
                 m_Controller.m_Scorller.RefreshActiveCellViews();
                 DisplaySkillDetial();
-
-                m_LevelUpEffect.Play();
-
-                TreasureSkill skill;
-                if (model.TryGetSkill(model.selectSkill, out skill))
-                {
-                    for (int i = 0; i < skill.potentials.Count; i++)
-                    {
-                        var index = i;
-                        if (index < m_TreasurePotentials.Length &&
-                            skill.potentials[index].openLevel == skill.level)
-                        {
-                            m_TreasurePotentials[index].StartUnlock();
-                            Clock clock = null;
-                            clock = Clock.AlarmAfter(1, () =>
-                              {
-                                  DisplayPotential(index);
-                                  if (clock != null && clocks.Contains(clock))
-                                  {
-                                      clocks.Remove(clock);
-                                  }
-                              });
-                            clocks.Add(clock);
-                        }
-                    }
-                }
             }
-            else
-            {
-                var skillId = 0;
-                if (model.ContainsSkill(id, out skillId))
-                {
-                    if (skillId == model.selectSkill)
-                    {
-                        DisplayPotentials();
-                    }
-                }
-            }
+        }
+
+        private void ExpertSkillRefresh()
+        {
+            DisplayExpertSkill();
         }
 
         private void RefreshItemCountEvent(PackType packType, int arg2, int itemId)
@@ -314,6 +244,87 @@
                 DisplaySkillDetial();
             }
         }
+
+        [Serializable]
+        public class SkillWidget
+        {
+            [SerializeField] Transform m_Container;
+            [SerializeField] Text m_SkillLevel;
+            [SerializeField] Text m_SkillCoolDown;
+            [SerializeField] Text m_SkillDesc;
+
+            TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
+
+            public void Display(int skillId, int level)
+            {
+                m_SkillLevel.text = Language.Get("SkillActLevel", level);
+                TreasureSkill skill;
+                model.TryGetSkill(skillId, out skill);
+                var skillConfig = skill.GetSkillConfig(level);
+                m_SkillCoolDown.text = skillConfig.CoolDownTime == 0 ? string.Empty
+                    : Language.Get("L1065", skillConfig.CoolDownTime / 1000);
+                m_SkillDesc.text = skillConfig.Description;
+            }
+
+            public void SetActive(bool active)
+            {
+                m_Container.gameObject.SetActive(active);
+            }
+        }
+
+        [Serializable]
+        public class SkillExpertWidget
+        {
+            [SerializeField] Image m_SkillIcon;
+            [SerializeField] Transform m_ContainerReiki;
+            [SerializeField] Text m_Reiki;
+            [SerializeField] Text m_UnSelectRemind;
+            [SerializeField] Text m_SwitchRemind;
+            [SerializeField] Text m_Description;
+
+            TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }
+
+            public void Display(int skillId, int level)
+            {
+                m_SkillIcon.gameObject.SetActive(skillId != 0);
+                m_UnSelectRemind.gameObject.SetActive(skillId == 0);
+                m_SwitchRemind.gameObject.SetActive(skillId != 0);
+                m_Description.gameObject.SetActive(skillId != 0);
+                m_ContainerReiki.gameObject.SetActive(skillId != 0);
+
+                if (skillId != 0)
+                {
+                    SkillConfig skillConfig;
+                    if (level == 0)
+                    {
+                        skillConfig = SkillConfig.Get(skillId);
+                    }
+                    else
+                    {
+                        skillConfig = SkillConfig.Get(skillId + level - 1);
+                    }
+
+                    m_SkillIcon.SetSprite(skillConfig.IconName);
+
+                    var property = skillConfig.RequireProperty();
+                    var propertyConfig = PlayerPropertyConfig.Get(property);
+                    m_Reiki.text = propertyConfig.Name;
+                    m_Reiki.color = UIHelper.GetPropertyColor(property);
+                    if (level == 0)
+                    {
+                        var conditionLabel = string.Format("{0}鐏垫牴{1}婵�娲�", propertyConfig.Name, skillConfig.RequirePropertyValue());
+                        conditionLabel = UIHelper.AppendColor(TextColType.Red, conditionLabel, true);
+                        m_Description.text = StringUtility.Contact(skillConfig.Description, conditionLabel);
+                        m_Description.color = UIHelper.s_Gray;
+                    }
+                    else
+                    {
+                        m_Description.text = skillConfig.Description;
+                        m_Description.color = UIHelper.s_NavyBrown;
+                    }
+                }
+            }
+        }
     }
 
 }
diff --git a/Utility/UIHelper.cs b/Utility/UIHelper.cs
index 7cee7ac..67405bd 100644
--- a/Utility/UIHelper.cs
+++ b/Utility/UIHelper.cs
@@ -440,7 +440,7 @@
     public static readonly Color s_DarkPinkColor = new Color32(255, 124, 124, 255);
     public static readonly Color s_DarkRedColor = new Color32(250, 1, 1, 255);
     public static readonly Color s_DarkPurpleColor = new Color32(236, 75, 246, 255);
-    public static readonly Color s_DarkBlueColor = new Color32(49, 206, 251, 255);
+    public static readonly Color s_DarkBlueColor = new Color32(49, 206, 251, 255);//31cefb
     public static readonly Color s_DarkOrangeColor = new Color32(248, 152, 59, 255);
     public static readonly Color s_DarkWhiteColor = new Color32(247, 247, 247, 255);
     public static readonly Color s_DarkGreenColor = new Color32(53, 225, 34, 255); //35e122
@@ -448,9 +448,11 @@
     public static readonly Color s_NavyBrown = new Color32(64, 28, 6, 255);//401c06
     public static readonly Color s_Black = new Color32(0, 0, 0, 255);
     public static readonly Color s_NavyYellow = new Color32(255, 239, 71, 255);
-    public static readonly Color s_LightGreen = new Color32(141, 220, 17, 255);
+    public static readonly Color s_LightGreen = new Color32(141, 220, 17, 255);//8ddc11
     public static readonly Color s_LightYellow = new Color32(255, 244, 205, 255); //fff4cd
     public static readonly Color s_Gray = new Color32(204, 204, 204, 255);
+    public static readonly Color s_Gold = new Color32(255, 239, 71, 255);//ffef47
+    public static readonly Color s_EarthYellow = new Color32(248, 152, 59, 255);//f8983b
 
     public static readonly Color s_BrightDanLV0 = new Color32(102, 102, 102, 255); //666666
     public static readonly Color s_BrightDanLV1 = new Color32(148, 96, 255, 255); //9460ff
@@ -692,6 +694,24 @@
         }
         return _itemColor;
     }
+
+    public static Color GetPropertyColor(int property)
+    {
+        switch ((PropertyType)property)
+        {
+            case PropertyType.Mater:
+                return s_Gold;
+            case PropertyType.Wood:
+                return s_LightGreen;
+            case PropertyType.Water:
+                return s_DarkBlueColor;
+            case PropertyType.Fire:
+                return s_GrayDanLV5;
+            case PropertyType.Earth:
+                return s_EarthYellow;
+        }
+        return s_NavyBrown;
+    }
     #endregion
 
     #region 璁$畻鎴樻枟鍔�

--
Gitblit v1.8.0