From d2dd33cc0ca421e276d50abc46688f5db83aa42b Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期二, 13 十一月 2018 19:45:39 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/Treasure/TreasureExhibitionBehaviour.cs                                         |    2 
 System/Chat/ChatCenter.cs                                                              |    2 
 System/Compose/New/ComposeEquipWin.cs                                                  |    7 
 System/Treasure/FairyTreasureWin.cs                                                    |   70 ++
 Core/SFX/SFXPlayUtility.cs                                                             |    5 
 System/MainInterfacePanel/PowerAddWin.cs                                               |    2 
 System/Treasure/TreasureBaseWin.cs                                                     |  288 +++++++++++
 System/MainInterfacePanel/CoinTaskTipModel.cs                                          |    4 
 UI/Common/UI3DShowHero.cs                                                              |   24 
 System/Treasure/TreasureDemonBehaviour.cs                                              |    5 
 System/Treasure/DemonTreasureWin.cs                                                    |   70 ++
 Fight/Stage/StageManager.cs                                                            |   41 +
 System/Treasure/TreasureSelectWin.cs                                                   |    2 
 System/Treasure/FairyTreasureCollectPanel.cs                                           |   18 
 System/Achievement/AchievementModel.cs                                                 |   30 
 System/Treasure/TreasureCollectBriefInfoBehaviour.cs                                   |    2 
 System/GeneralConfig/GeneralDefine.cs                                                  |    6 
 System/Treasure/DemonTreasureWin.cs.meta                                               |   12 
 System/Treasure/TreasureLevelUpWin.cs                                                  |  315 ++----------
 System/MainInterfacePanel/FlyingShoesTask.cs                                           |    4 
 System/Store/StoreModel.cs                                                             |  254 ++++++++++
 System/WindowJump/WindowJumpMgr.cs                                                     |    8 
 System/MainInterfacePanel/PlayerTaskDatas.cs                                           |    2 
 System/WorldMap/LocalMapTreasure.cs                                                    |    2 
 Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs |    3 
 System/Treasure/FairyTreasureCollectPanelPattern3.cs                                   |    4 
 System/Treasure/FairyTreasureCollectPanelPattern5.cs                                   |    8 
 Core/ResModule/AssetBundle/AssetBundleUtility.cs                                       |   41 +
 Core/ResModule/InstanceResourcesLoader.cs                                              |  217 ++++++++
 System/BossShow/BossShowModel.cs                                                       |    4 
 System/Treasure/FairyTreasureWin.cs.meta                                               |   12 
 System/Treasure/UI3DTreasureSelectStage.cs                                             |    1 
 System/Treasure/TreasureBaseWin.cs.meta                                                |   12 
 33 files changed, 1,138 insertions(+), 339 deletions(-)

diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
index af0faa5..616e43a 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
@@ -68,7 +68,8 @@
             {
                 SkillHelper.Instance.OnSpSkillChange(vNetData.NewSkillID, 1);
             }
+
+            InstanceResourcesLoader.PreloadSkillEffect(vNetData.NewSkillID);
         }
     }
-
 }
diff --git a/Core/ResModule/AssetBundle/AssetBundleUtility.cs b/Core/ResModule/AssetBundle/AssetBundleUtility.cs
index e2b4702..9919ef1 100644
--- a/Core/ResModule/AssetBundle/AssetBundleUtility.cs
+++ b/Core/ResModule/AssetBundle/AssetBundleUtility.cs
@@ -8,6 +8,8 @@
 public class AssetBundleUtility : SingletonMonobehaviour<AssetBundleUtility>
 {
     private List<AssetBundleInfo> m_AssetBundleInfoList = new List<AssetBundleInfo>();
+    private List<string> m_LoadingAssetBundleList = new List<string>();
+    private List<string> m_LoadingAssetList = new List<string>();
     private Dictionary<string, AssetInfo> m_AssetInfoDict = new Dictionary<string, AssetInfo>();
     private Dictionary<string, AssetBundle> m_AssetBundleDict = new Dictionary<string, AssetBundle>();
     private Dictionary<string, Dictionary<string, UnityEngine.Object>> m_AssetDict = new Dictionary<string, Dictionary<string, UnityEngine.Object>>();
@@ -187,6 +189,18 @@
             yield break;
         }
 
+        if (m_LoadingAssetBundleList.Contains(assetBundleName))
+        {
+            while (!m_AssetBundleDict.ContainsKey(assetBundleName))
+            {
+                // Debug.Log(Time.frameCount + " ] 姝e湪鍔犺浇AssetBundle: " + assetBundleName + ", 璇风瓑寰�...");
+                yield return null;
+            }
+            yield break;
+        }
+
+        m_LoadingAssetBundleList.Add(assetBundleName);
+
         var _assetBundleInfo = GetAssetBundleInfo(assetBundleName);
         if (_assetBundleInfo == null)
         {
@@ -211,6 +225,8 @@
         }
 
         CacheAssetBundle(assetBundleName, _request.assetBundle);
+
+        m_LoadingAssetBundleList.Remove(assetBundleName);
     }
 
     private IEnumerator Co_LoadAssetBundleDependenice(AssetBundleInfo assetBundleInfo)
@@ -242,11 +258,35 @@
 
     private IEnumerator Co_DoLoadAsset(string assetBundleName, string assetName, Action<bool, UnityEngine.Object> callBack = null)
     {
+#if UNITY_5
+        assetBundleName = assetBundleName.ToLower();
+#endif
+
 #if UNITY_EDITOR
         RunTimeABLoadLog.AddLog(assetBundleName, assetName, UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
 #endif
 
         yield return Co_LoadAssetBundle(assetBundleName);
+
+        string _checkTag = assetBundleName + "@" + assetName;
+        if (m_LoadingAssetList.Contains(_checkTag))
+        {
+            while (!m_AssetDict.ContainsKey(assetBundleName)
+                || !m_AssetDict[assetBundleName].ContainsKey(assetName))
+            {
+                //                Debug.Log(Time.frameCount + " ] 姝e湪鍔犺浇Asset: " + _checkTag + ", 璇风瓑寰�...");
+                yield return null;
+            }
+
+            if (callBack != null)
+            {
+                callBack(true, m_AssetDict[assetBundleName][assetName]);
+            }
+
+            yield break;
+        }
+
+        m_LoadingAssetList.Add(_checkTag);
 
         var request = m_AssetBundleDict[assetBundleName].LoadAssetAsync(assetName);
         while (!request.isDone)
@@ -270,6 +310,7 @@
             }
         }
 
+        m_LoadingAssetList.Remove(_checkTag);
     }
 
     private IEnumerator Co_DoLoadAsset(AssetInfo assetInfo, Action<bool, UnityEngine.Object> callBack = null)
diff --git a/Core/ResModule/InstanceResourcesLoader.cs b/Core/ResModule/InstanceResourcesLoader.cs
index 1a3d2f9..df3f2ce 100644
--- a/Core/ResModule/InstanceResourcesLoader.cs
+++ b/Core/ResModule/InstanceResourcesLoader.cs
@@ -29,25 +29,25 @@
     public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Fight()
     {
         return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[1][1]);
+                                                          GeneralDefine.ModeDefaultConfig[1][1].Replace("Prefab_Race_", ""));
     }
 
     public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Func()
     {
         return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[0][1]);
+                                                          GeneralDefine.ModeDefaultConfig[0][1].Replace("Prefab_Race_", ""));
     }
 
     public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Horse()
     {
         return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[3][1]);
+                                                          GeneralDefine.ModeDefaultConfig[3][1].Replace("Prefab_Horse_", ""));
     }
 
     public static RuntimeAnimatorController LoadDefaultMobAnimatorController_Pet()
     {
         return AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix,
-                                                          GeneralDefine.ModeDefaultConfig[2][1]);
+                                                          GeneralDefine.ModeDefaultConfig[2][1].Replace("Prefab_Race_", ""));
     }
 
     public static GameObject LoadDefaultFightNPC()
@@ -60,6 +60,25 @@
     {
         return LoadMob(GeneralDefine.ModeDefaultConfig[0][0],
                        GeneralDefine.ModeDefaultConfig[0][1]);
+    }
+
+    public static void AsyncLoadDefaultFuncNpc(Action<bool, UnityEngine.Object> callBack)
+    {
+        AsyncLoadNpc(GeneralDefine.ModeDefaultConfig[0][0],
+                     GeneralDefine.ModeDefaultConfig[0][1],
+                     callBack);
+    }
+    public static void AsyncLoadDefaultFightNpc(Action<bool, UnityEngine.Object> callBack)
+    {
+        AsyncLoadNpc(GeneralDefine.ModeDefaultConfig[1][0],
+                     GeneralDefine.ModeDefaultConfig[1][1],
+                     callBack);
+    }
+    public static void AsyncLoadDefaultPet(Action<bool, UnityEngine.Object> callBack)
+    {
+        AsyncLoadNpc(GeneralDefine.ModeDefaultConfig[2][0],
+                     GeneralDefine.ModeDefaultConfig[2][1],
+                     callBack);
     }
 
     public static GameObject LoadDefaultHorse()
@@ -228,6 +247,84 @@
         return prefab;
     }
 
+    public static void AsyncLoadModelRes(int id, Action<bool, UnityEngine.Object> callback = null)
+    {
+        ModelResConfig _m = Config.Instance.Get<ModelResConfig>(id);
+
+        if (_m == null)
+        {
+            return;
+        }
+
+        string _name = _m.ResourcesName;
+        int _index = _name.IndexOf('/');
+        if (_index != -1)
+        {
+            _name = _name.Substring(_index + 1);
+        }
+
+        string _suffix = string.Empty;
+
+        if (_m.Type == (int)E_ModelResType.Suit)
+        {
+            _suffix = raceSuffix;
+        }
+        else if (_m.Type == (int)E_ModelResType.Horse)
+        {
+            _suffix = horseSuffix;
+        }
+        else if (_m.Type == (int)E_ModelResType.Wing)
+        {
+            _suffix = wingSuffix;
+        }
+        else if (_m.Type == (int)E_ModelResType.Weapon)
+        {
+            _suffix = weaponSuffix;
+        }
+        else if (_m.Type == (int)E_ModelResType.Secondary)
+        {
+            _suffix = secondarySuffix;
+        }
+        else if (_m.Type == (int)E_ModelResType.Hand)
+        {
+            _suffix = handSuffix;
+        }
+
+        if (AssetSource.mobFromEditor)
+        {
+#if UNITY_EDITOR
+            string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
+                                                        "Mob/",
+                                                        _suffix + _name,
+                                                        ".prefab");
+
+            var _gameObject = AssetDatabase.LoadAssetAtPath<GameObject>(_resourcePath);
+
+            if (_gameObject)
+            {
+                if (callback != null)
+                {
+                    callback(true, _gameObject);
+                }
+            }
+            else
+            {
+                if (callback != null)
+                {
+                    callback(false, null);
+                }
+            }
+#endif
+        }
+        else
+        {
+            string _bundleName = StringUtility.Contact(ResourcesPath.MOB_FOLDER_NAME, "prefab_race_" + _name.Replace("_UI", ""));
+            string _assetName = _suffix + _name;
+
+            AssetBundleUtility.Instance.Co_LoadAsset(_bundleName, _assetName, callback);
+        }
+    }
+
     public static GameObject LoadMob(string assetBundleName, string assetName)
     {
         GameObject _gameObject = null;
@@ -301,8 +398,7 @@
         return _gameObject;
     }
 
-
-    public static void LoadEffectAsync(int _id, Action<bool, UnityEngine.Object> _callBack)
+    public static void LoadEffectAsync(int _id, Action<bool, UnityEngine.Object> _callBack = null)
     {
         GameObject gameObject = null;
         var config = Config.Instance.Get<EffectConfig>(_id);
@@ -334,4 +430,113 @@
             AssetBundleUtility.Instance.Co_LoadAsset(bundleName, config.fxName, _callBack);
         }
     }
+
+    public static void AsyncLoadNpc(int npcID, Action<bool, UnityEngine.Object> callBack = null)
+    {
+        NPCConfig _m = Config.Instance.Get<NPCConfig>(npcID);
+
+        if (_m == null || _m.MODE.Equals("0"))
+        {
+            if (callBack != null)
+            {
+                callBack(false, null);
+            }
+        }
+
+        string _assetName;
+        string _assetBundleName;
+
+        if (GAMgr.Instance.s_NpcID2Assetname.TryGetValue(npcID, out _assetName))
+        {
+            _assetBundleName = GAMgr.Instance.s_NpcID2BundleName[npcID];
+        }
+        else
+        {
+            _assetName = StringUtility.Contact(raceSuffix, _m.MODE);
+            _assetBundleName = StringUtility.Contact(ResourcesPath.MOB_FOLDER_NAME, _assetName);
+            GAMgr.Instance.s_NpcID2Assetname[npcID] = _assetName;
+            GAMgr.Instance.s_NpcID2BundleName[npcID] = _assetBundleName;
+        }
+
+        AsyncLoadNpc(_assetBundleName, _assetName, callBack);
+    }
+
+    public static void AsyncLoadNpc(string assetBundleName, string assetName, Action<bool, UnityEngine.Object> callBack = null)
+    {
+        if (AssetSource.mobFromEditor)
+        {
+#if UNITY_EDITOR
+            string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
+                                                        "Mob/",
+                                                        assetName,
+                                                        ".prefab");
+
+            var _p = AssetDatabase.LoadAssetAtPath<GameObject>(_resourcePath);
+            if (callBack != null)
+            {
+                callBack(true, _p);
+            }
+#endif
+        }
+        else
+        {
+            AssetBundleUtility.Instance.Co_LoadAsset(assetBundleName, assetName, callBack);
+        }
+    }
+
+    public static void PreloadSkillEffect(int id)
+    {
+        var _skillInfo = SkillHelper.Instance.Get(id);
+        // 鎶�鑳界壒鏁堥鍔犺浇
+        if (_skillInfo.config.EffectName > 0)
+        {
+            InstanceResourcesLoader.LoadEffectAsync(_skillInfo.config.EffectName);
+        }
+        if (_skillInfo.config.BuffEffectID > 0)
+        {
+            InstanceResourcesLoader.LoadEffectAsync(_skillInfo.config.EffectName);
+        }
+
+        var _soSkill = _skillInfo.soFile;
+        if (_soSkill != null)
+        {
+            for (int i = 0; i < _soSkill.animationEventList.Count; ++i)
+            {
+                if (_soSkill.animationEventList[i].frameEventType == E_FrameEventType.OnPlayEffect)
+                {
+                    if (_soSkill.animationEventList[i].intParam > 0)
+                    {
+                        InstanceResourcesLoader.LoadEffectAsync(_soSkill.animationEventList[i].intParam);
+                    }
+                }
+                else if (_soSkill.animationEventList[i].frameEventType == E_FrameEventType.OnSkillEvent)
+                {
+                    var _param = _soSkill.animationEventList[i].intParam;
+                    var _type = SoSkill.GetAttactType(_param);
+                    var _id = SoSkill.GetFrameEventId(_param);
+                    if (_type == SoSkill.E_AttackType.Sweep)
+                    {
+                        var _config = ScriptableObjectLoader.LoadSoSweepHit(_id);
+                        if (_config.hitEffectId > 0)
+                        {
+                            InstanceResourcesLoader.LoadEffectAsync(_config.hitEffectId);
+                        }
+                    }
+                    else if (_type == SoSkill.E_AttackType.FlyObject)
+                    {
+                        var _config = ScriptableObjectLoader.LoadSoFlyObject(_id);
+                        if (_config.hitEffectId > 0)
+                        {
+                            InstanceResourcesLoader.LoadEffectAsync(_config.hitEffectId);
+                        }
+
+                        if (_config.ammoEffectId > 0)
+                        {
+                            InstanceResourcesLoader.LoadEffectAsync(_config.hitEffectId);
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
diff --git a/Core/SFX/SFXPlayUtility.cs b/Core/SFX/SFXPlayUtility.cs
index 1733ea4..485c57e 100644
--- a/Core/SFX/SFXPlayUtility.cs
+++ b/Core/SFX/SFXPlayUtility.cs
@@ -18,7 +18,6 @@
     public SFXController PlayEffectAsync(int id, Transform parent, float scale = 1)
     {
         var config = Config.Instance.Get<EffectConfig>(id);
-        Debug.LogFormat("[{0}] 寮�濮嬪紓姝ュ姞杞�: {1}", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), config.fxName);
         var bundleName = StringUtility.Contact(ResourcesPath.EFFECT_Folder_Name, config.packageName);
         if (AssetSource.effectFromEditor || AssetBundleUtility.Instance.JudgeExistAsset(bundleName, config.fxName))
         {
@@ -41,7 +40,6 @@
         }
         else
         {
-            Debug.LogFormat("[{0}] 寮�濮嬪紓姝ュ姞杞�: {1}", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), config.fxName);
             AssetBundleUtility.Instance.Co_LoadAsset(bundleName, config.fxName, OnEffectLoaded);
             return null;
         }
@@ -55,7 +53,6 @@
             if (_prefab)
             {
                 GameObjectPoolManager.Instance.CacheGameObject(_prefab, 1, false);
-                Debug.LogFormat("[{0}] 寮傛鍔犺浇: {1} 瀹屾瘯", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), _prefab.name);
             }
         }
     }
@@ -134,7 +131,7 @@
         }
         else
         {
-            Debug.LogFormat("[{0}] 寮�濮嬪紓姝ュ姞杞�: {1}", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), config.fxName);
+            // Debug.LogFormat("[{0}] 寮�濮嬪紓姝ュ姞杞�: {1}", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), config.fxName);
             AssetBundleUtility.Instance.Co_LoadAsset(bundleName, config.fxName, OnEffectLoaded);
             return null;
         }
diff --git a/Fight/Stage/StageManager.cs b/Fight/Stage/StageManager.cs
index 803999b..28b6234 100644
--- a/Fight/Stage/StageManager.cs
+++ b/Fight/Stage/StageManager.cs
@@ -8,7 +8,7 @@
 
 [XLua.LuaCallCSharp]
 public class StageManager : Singleton<StageManager>
-
+
 {
     private Stage m_CurrentStage;
 
@@ -19,32 +19,40 @@
     public event Action<float> loadingProgressEvent;
 
     bool m_IsServerPreparing = false;
-    public bool isServerPreparing {
+    public bool isServerPreparing
+    {
         get { return m_IsServerPreparing; }
         set { m_IsServerPreparing = value; }
     }
 
-    public Stage.E_StageType StageType {
-        get {
+    public Stage.E_StageType StageType
+    {
+        get
+        {
             return m_StageType;
         }
     }
 
-    public Stage CurrentStage {
-        get {
+    public Stage CurrentStage
+    {
+        get
+        {
             return m_CurrentStage;
         }
     }
 
     int m_CurrentMapId;
-    public int currentMapId {
+    public int currentMapId
+    {
         get { return m_CurrentMapId; }
         private set { m_CurrentMapId = value; }
     }
 
     int m_CurrentMapResID;
-    public int currentMapResId {
-        get {
+    public int currentMapResId
+    {
+        get
+        {
             return m_CurrentMapResID;
         }
         private set { m_CurrentMapResID = value; }
@@ -55,9 +63,11 @@
 
 
     float m_LoadingProgress = 0f;
-    float loadingProgress {
+    float loadingProgress
+    {
         get { return m_LoadingProgress; }
-        set {
+        set
+        {
             m_LoadingProgress = value;
             if (loadingProgressEvent != null)
             {
@@ -584,6 +594,15 @@
         _hero.RequestLight();
 
         PlayerDatas.Instance.hero = _hero;
+
+        var _preloadEffectList = GeneralDefine.PreloadSkillEffect[_hero.JobSetup.Job - 1];
+        if (_preloadEffectList != null && _preloadEffectList.Length > 0)
+        {
+            foreach (var _id in _preloadEffectList)
+            {
+                InstanceResourcesLoader.PreloadSkillEffect(_id);
+            }
+        }
     }
 
     private string GetAssetBundleNameByStageId(int stageID, int mapResID)
diff --git a/System/Achievement/AchievementModel.cs b/System/Achievement/AchievementModel.cs
index dd15d84..91c9b4a 100644
--- a/System/Achievement/AchievementModel.cs
+++ b/System/Achievement/AchievementModel.cs
@@ -179,7 +179,7 @@
                 switch (config.Type)
                 {
                     case 3:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
 
                         var hasTask = taskmodel.GetQuestState(config.Condition[0]) != -1;
@@ -234,7 +234,7 @@
                                 else
                                 {
                                     taskmodel.DailyBountyMove();
-                                    WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                                    WindowCenter.Instance.Close<TreasureBaseWin>();
                                     WindowCenter.Instance.Open<MainInterfaceWin>();
                                 }
                             }
@@ -243,7 +243,7 @@
                     case 1:
                         if (PlayerDatas.Instance.baseData.LV < GeneralDefine.achievementEarlierStageLevel)
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
                             WindowCenter.Instance.Open<MainInterfaceWin>();
                             taskmodel.AutomaticTripToTask(taskmodel.currentMission);
                         }
@@ -257,7 +257,7 @@
                         break;
                     case 4:
                     case 86:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         var mapModel = ModelCenter.Instance.GetModel<MapModel>();
                         var pointId = mapModel.GetRecommendHangPoint();
                         var mapEventConfig = Config.Instance.Get<MapEventPointConfig>(pointId);
@@ -265,12 +265,12 @@
                         WindowCenter.Instance.Open<LocalMapWin>();
                         break;
                     case 36:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         MapTransferUtility.Instance.MoveToNPC(config.Condition[0]);
                         break;
                     case 37:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         MapTransferUtility.Instance.MoveToLocalMapPosition(config.Condition2.Vector3Parse());
                         break;
@@ -292,7 +292,7 @@
                         {
                             if (PlayerDatas.Instance.baseData.LV < GeneralDefine.achievementEarlierStageLevel)
                             {
-                                WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                                WindowCenter.Instance.Close<TreasureBaseWin>();
                                 WindowCenter.Instance.Open<MainInterfaceWin>();
                                 taskmodel.AutomaticTripToTask(taskmodel.currentMission);
                             }
@@ -333,7 +333,7 @@
                         else
                         {
                             AchievementGoto.guideAchievementId = _achievementId;
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid82);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -358,7 +358,7 @@
                         {
                             AchievementGoto.guideAchievementId = _achievementId;
                             playerPack.SetLookIndex(guid83);
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
                             WindowCenter.Instance.Close<MainInterfaceWin>();
                             WindowCenter.Instance.Open<KnapSackWin>();
                         }
@@ -379,7 +379,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid84);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -402,7 +402,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid85);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -417,7 +417,7 @@
                         }
                         else
                         {
-                            WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Close<TreasureBaseWin>();
 
                             playerPack.SetLookIndex(guid90);
                             WindowCenter.Instance.Close<MainInterfaceWin>();
@@ -425,7 +425,7 @@
                         }
                         break;
                     case 109:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
 
                         var skillId = SkillConfig.FindSkillByJob(config.Condition, PlayerDatas.Instance.baseData.Job);
                         if (skillId != 0)
@@ -483,7 +483,7 @@
                                 }
                                 treasureModel.currentCategory = TreasureCategory.Human;
                                 treasureModel.selectedTreasure = treasureId;
-                                if (!WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                                if (!WindowCenter.Instance.IsOpen<TreasureBaseWin>())
                                 {
                                     WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureCollectSoul);
                                 }
@@ -491,7 +491,7 @@
                         }
                         break;
                     default:
-                        WindowCenter.Instance.Close<TreasureLevelUpWin>();
+                        WindowCenter.Instance.Close<TreasureBaseWin>();
 
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         break;
diff --git a/System/BossShow/BossShowModel.cs b/System/BossShow/BossShowModel.cs
index 502a120..98eef9d 100644
--- a/System/BossShow/BossShowModel.cs
+++ b/System/BossShow/BossShowModel.cs
@@ -80,10 +80,10 @@
                 ActiveBossShowCam(true);
                 CameraController.Instance.CameraObject.enabled = false;
 
-                if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
                 {
                     WindowJumpMgr.Instance.ClearJumpData();
-                    WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.CloseImmediately<TreasureSelectWin>();
                     WindowCenter.Instance.Open<MainInterfaceWin>();
                 }
diff --git a/System/Chat/ChatCenter.cs b/System/Chat/ChatCenter.cs
index 20cc9ed..1e11ab1 100644
--- a/System/Chat/ChatCenter.cs
+++ b/System/Chat/ChatCenter.cs
@@ -779,7 +779,7 @@
         private void CheckChatFloatOpen()
         {
             if (WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !WindowCenter.Instance.IsOpen<LoadingWin>()
-                && StageManager.Instance.CurrentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+                && StageManager.Instance.CurrentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureBaseWin>())
             {
                 if (!WindowCenter.Instance.IsOpen<ChatFloatWin>())
                 {
diff --git a/System/Compose/New/ComposeEquipWin.cs b/System/Compose/New/ComposeEquipWin.cs
index 2a55d14..d4b0585 100644
--- a/System/Compose/New/ComposeEquipWin.cs
+++ b/System/Compose/New/ComposeEquipWin.cs
@@ -323,6 +323,7 @@
 
             if (preSecondType != curSecondType)
             {
+                isIncreaseRate = false;
                 preSecondType = curSecondType;
                 curComposeEquipIndex = -1;
                 selectModel.ClearSelectModel();
@@ -352,6 +353,7 @@
 
             if (preThirdType != curThirdType)
             {
+                isIncreaseRate = false;
                 preThirdType = curThirdType;
             }
             curComposeEquipIndex = -1;
@@ -572,13 +574,14 @@
                 composeBtn.gameObject.SetActive(true);
                 onekeyPutBtn.gameObject.SetActive(true);
                 UpdateComposeMat();
+                RefreshComposeSuccessRate();
             }
-
-            RefreshComposeSuccessRate();
         }
 
         public void RefreshComposeSuccessRate()
         {
+            if (compoundModel == null) return;
+
             successRate = 0;
             int increaseRate = 0;
             if (compoundModel != null)
diff --git a/System/GeneralConfig/GeneralDefine.cs b/System/GeneralConfig/GeneralDefine.cs
index 5394965..08c720e 100644
--- a/System/GeneralConfig/GeneralDefine.cs
+++ b/System/GeneralConfig/GeneralDefine.cs
@@ -122,6 +122,7 @@
     public static List<int> dogzNoRebornRemindMaps = null;
 
     public static string[][] ModeDefaultConfig { get; private set; }
+    public static int[][] PreloadSkillEffect { get; private set; }
     public static int[] RealmGroup { get; private set; }
     public static float PrefightAtkRange { get; private set; }
 
@@ -529,6 +530,11 @@
             fairyLandBuffCondition = GetInt("XjmjAddHarm", 1);
             fairyLandBuffId = GetInt("XjmjAddHarm", 2);
             achievementEarlierStageLevel = GetInt("AchieveLV");
+
+            func = Config.Instance.Get<FuncConfigConfig>("PreloadSkillEffect");
+            PreloadSkillEffect = new int[2][];
+            PreloadSkillEffect[0] = GetIntArray("PreloadSkillEffect");
+            PreloadSkillEffect[1] = GetIntArray("PreloadSkillEffect", 2);
         }
         catch (Exception ex)
         {
diff --git a/System/MainInterfacePanel/CoinTaskTipModel.cs b/System/MainInterfacePanel/CoinTaskTipModel.cs
index 6c62199..408416c 100644
--- a/System/MainInterfacePanel/CoinTaskTipModel.cs
+++ b/System/MainInterfacePanel/CoinTaskTipModel.cs
@@ -114,7 +114,7 @@
     private IEnumerator PopupPanel()
     {
         yield return WaitingForSecondConst.WaitMS1500;
-        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
@@ -136,7 +136,7 @@
     private IEnumerator FairyAuTaskPanel()
     {
         yield return WaitingForSecondConst.WaitMS1500;
-        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (NewBieCenter.Instance.inGuiding || ModelCenter.Instance.GetModel<TreasureModel>().newGotShowing || WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
diff --git a/System/MainInterfacePanel/FlyingShoesTask.cs b/System/MainInterfacePanel/FlyingShoesTask.cs
index 6f4d306..175840b 100644
--- a/System/MainInterfacePanel/FlyingShoesTask.cs
+++ b/System/MainInterfacePanel/FlyingShoesTask.cs
@@ -189,7 +189,7 @@
                         {
                             treasureModel.selectedTreasure = _treasureId;
                             treasureModel.openFromTaskId = Task_ID;
-                            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Open<TreasureBaseWin>();
                         }
                         return;
                     }
@@ -211,7 +211,7 @@
                         {
                             treasureModel.selectedTreasure = _treasureId;
                             treasureModel.openFromTaskId = Task_ID;
-                            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                            WindowCenter.Instance.Open<TreasureBaseWin>();
                         }
                     }
                     break;
diff --git a/System/MainInterfacePanel/PlayerTaskDatas.cs b/System/MainInterfacePanel/PlayerTaskDatas.cs
index fd76410..e70ecba 100644
--- a/System/MainInterfacePanel/PlayerTaskDatas.cs
+++ b/System/MainInterfacePanel/PlayerTaskDatas.cs
@@ -1295,7 +1295,7 @@
             yield break;
         }
 
-        if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+        if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
         {
             yield break;
         }
diff --git a/System/MainInterfacePanel/PowerAddWin.cs b/System/MainInterfacePanel/PowerAddWin.cs
index acb494c..a5b9a37 100644
--- a/System/MainInterfacePanel/PowerAddWin.cs
+++ b/System/MainInterfacePanel/PowerAddWin.cs
@@ -121,7 +121,7 @@
         void CheckPosition()
         {
             var type = WindowType.None;
-            if (WindowCenter.Instance.IsOpen<TreasureLevelUpWin>())
+            if (WindowCenter.Instance.IsOpen<TreasureBaseWin>())
             {
                 type = WindowType.TreasureLevelUp;
             }
diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index e26af1d..a58834a 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -109,6 +109,260 @@
         isLogin = false;
     }
 
+    #region 瑙f瀽鏈湴鏁版嵁
+    public Dictionary<int, List<int>> storeRedRuleDict { get; private set; } //绾㈢偣绫诲瀷 1,鍏嶈垂鍟嗗搧  2,蹇呬拱鍟嗗搧  3,鍧愰獞鐏靛疇 4,鍙喘涔扮墿鍝侊紙绉垎鍏戞崲锛�
+    public Dictionary<int, List<int>> storePushDict { get; private set; } //1锛屾瘡鏃ュ脊1娆�2,鍙脊1娆�
+    private void ParseFuncConfig()
+    {
+        storeRedRuleDict = new Dictionary<int, List<int>>();
+        storePushDict = new Dictionary<int, List<int>>();
+        FuncConfigConfig storeRedRules = Config.Instance.Get<FuncConfigConfig>("StoreRedRules");
+        if(storeRedRules != null)
+        {
+            JsonData redRules = JsonMapper.ToObject(storeRedRules.Numerical1);
+            foreach(var type in redRules.Keys)
+            {
+                int redType = 0;
+                int.TryParse(type,out redType);
+                JsonData shops = redRules[type];
+                if (!storeRedRuleDict.ContainsKey(redType))
+                {
+                    List<int> shopIdlist = new List<int>();
+                    if(shops.IsArray)
+                    {
+                        for(int i = 0; i < shops.Count; i++)
+                        {
+                            int shopId = 0;
+                            int.TryParse(shops[i].ToString(),out shopId);
+                            shopIdlist.Add(shopId);
+                        }
+                    }
+                    storeRedRuleDict.Add(redType,shopIdlist);
+                }
+            }
+
+            JsonData pushRules = JsonMapper.ToObject(storeRedRules.Numerical2);
+            foreach(var type in pushRules.Keys)
+            {
+                int pushType = 0;
+                int.TryParse(type,out pushType);
+                JsonData shops = pushRules[type];
+                if (!storePushDict.ContainsKey(pushType))
+                {
+                    List<int> shopIdlist = new List<int>();
+                    if (shops.IsArray)
+                    {
+                        for (int i = 0; i < shops.Count; i++)
+                        {
+                            int shopId = 0;
+                            int.TryParse(shops[i].ToString(), out shopId);
+                            shopIdlist.Add(shopId);
+                        }
+                    }
+                    storePushDict.Add(pushType, shopIdlist);
+                }
+            }
+        }
+    }
+
+    public Dictionary<int,List<StoreConfig>> storeTypeDict { get; private set; } 
+    private void ParseStoreConfig()
+    {
+        storeTypeDict = new Dictionary<int, List<StoreConfig>>();
+        List<StoreConfig> storeConfigs = Config.Instance.GetAllValues<StoreConfig>();
+        for(int i = 0; i < storeConfigs.Count; i++)
+        {
+            var config = storeConfigs[i];
+            if(config.ShopType != 0)
+            {
+                if(!storeTypeDict.ContainsKey(config.ShopType))
+                {
+                    List<StoreConfig> configs = new List<StoreConfig>();
+                    configs.Add(config);
+                    storeTypeDict.Add(config.ShopType,configs);
+                }
+                else
+                {
+                    storeTypeDict[config.ShopType].Add(config);
+                }
+            }
+        }
+
+        foreach(var type in storeTypeDict.Keys)
+        {
+            var configs = storeTypeDict[type];
+            configs.Sort(CompareByShopSort);
+        }
+    }
+
+    public int CompareByShopSort(StoreConfig start, StoreConfig end)
+    {
+        int sort1 = start.ShopSort;
+        int sort2 = end.ShopSort;
+        if (sort1.CompareTo(sort2) != 0) return sort1.CompareTo(sort2);
+
+        return 0;
+    }
+    #endregion
+
+    #region 鑾峰彇鏁版嵁
+    public bool TryGetRedTypeByShopId(int shopId, out int type)
+    {
+        type = 0;
+        foreach (var key in storeRedRuleDict.Keys)
+        {
+            List<int> idlist = storeRedRuleDict[key];
+            if (idlist.Contains(shopId))
+            {
+                type = key;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public bool TryGetPushTypeByShopId(int shopId, out int type)
+    {
+        type = 0;
+        foreach (var key in storePushDict.Keys)
+        {
+            List<int> idlist = storePushDict[key];
+            if (idlist.Contains(shopId))
+            {
+                type = key;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private Dictionary<int, List<StoreConfig>> showStoreTypeDict = new Dictionary<int, List<StoreConfig>>();
+    public void UpdateShowStore()
+    {
+        showStoreTypeDict.Clear();
+        foreach(var type in storeTypeDict.Keys)
+        {
+            var configs = storeTypeDict[type];
+            List<StoreConfig> showConfigs = new List<StoreConfig>();
+            if(!showStoreTypeDict.ContainsKey(type))
+            {
+                for (int i = 0; i < configs.Count; i++)
+                {
+                    var config = configs[i];
+                    int remainNum = 0;
+                    bool isSellOut = TryGetIsSellOut(config, out remainNum);
+                    if(isSellOut && config.TheOnlyShop == 1)
+                    {
+
+                    }
+                }
+            }
+        }
+    }
+  
+    public bool TryGetIsSellOut(StoreConfig storeConfig, out int remainCnt)
+    {
+        int canBuyCnt = 0;
+        int addBuyCnt = 0;
+        remainCnt = 0;
+        bool isLimitBuy = TryGetLimitBuy(storeConfig, out canBuyCnt, out addBuyCnt);
+        if (!isLimitBuy) return false;
+
+        int remainNum = canBuyCnt;
+        BuyShopItemLimit shopItemLimit = GetBuyShopLimit((uint)storeConfig.ID);
+        if (shopItemLimit != null)
+        {
+            remainNum -= shopItemLimit.BuyCnt;
+        }
+
+        if (remainNum <= 0)
+        {
+            return true;
+        }
+        return false;
+    }
+
+    public bool TryGetLimitBuy(StoreConfig config, out int canBuyCnt, out int addBuyCnt)
+    {
+        canBuyCnt = 0;
+        addBuyCnt = 0;
+        if (config == null) return false;
+
+        int[] canBuyNums = config.PurchaseNumber;
+        if (canBuyNums == null || canBuyNums.Length < 1) return false;
+
+        int curVipIndex = -1;
+        int nexVipIndex = -1;
+        bool isVipBuy = TryGetVipBuy(config, out curVipIndex, out nexVipIndex);
+        if (isVipBuy)
+        {
+            if (curVipIndex != -1)
+            {
+                canBuyCnt = canBuyNums[curVipIndex];
+            }
+
+            if (nexVipIndex != -1)
+            {
+                addBuyCnt = canBuyNums[nexVipIndex] - canBuyCnt;
+            }
+            return true;
+        }
+        else
+        {
+            if (canBuyNums[0] != 0)
+            {
+                canBuyCnt = canBuyNums[0];
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    public bool TryGetVipBuy(StoreConfig config, out int curVipIndex, out int nextVipIndex)
+    {
+        curVipIndex = -1;
+        nextVipIndex = -1;
+        bool isVipBuy = false;
+        if (config == null) return false;
+
+        var vipLvs = config.VIPLV;
+        if (vipLvs == null || vipLvs.Length < 1) return false;
+
+        for(int i =  0; i < vipLvs.Length; i++)
+        {
+            var vipLv = vipLvs[i];
+            if(vipLv != 0)
+            {
+                isVipBuy = true;
+            }
+        }
+      
+        if (isVipBuy)
+        {
+            int playerVip = PlayerDatas.Instance.baseData.VIPLv;
+            for (int i = vipLvs.Length - 1; i > -1; i--)
+            {
+                var vipLv = vipLvs[i];
+                if (vipLv > playerVip)
+                {
+                    nextVipIndex = i;
+                }
+                else if (vipLv <= playerVip)
+                {
+                    curVipIndex = i;
+                    break;
+                }
+            }
+
+        }
+
+        return isVipBuy;
+    }
+    #endregion
+
     public string GetStoreRefreshTimeByType(int type)
     {
         if (resetTimeDict == null || !resetTimeDict.ContainsKey(type)) return string.Empty;
diff --git a/System/Treasure/DemonTreasureWin.cs b/System/Treasure/DemonTreasureWin.cs
new file mode 100644
index 0000000..8c484fc
--- /dev/null
+++ b/System/Treasure/DemonTreasureWin.cs
@@ -0,0 +1,70 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI {
+
+    public class DemonTreasureWin : Window
+    {
+        [SerializeField] TreasureDemonBehaviour m_TreasureDemonBehaviour;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+        }
+
+        protected override void OnPreOpen()
+        {
+            UI3DTreasureSelectStage.Instance.SetStartState();
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+            m_TreasureDemonBehaviour.Display(model.selectedTreasure, true);
+        }
+
+        protected override void OnAfterOpen()
+        {
+            
+        }
+
+        protected override void OnPreClose()
+        {
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+            model.SetTreasureUnlockShow(TreasureCategory.Demon, 0);
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+
+        private void TreasureSelectedEvent(int obj)
+        {
+            m_TreasureDemonBehaviour.Display(model.selectedTreasure, false);
+        }
+
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/DemonTreasureWin.cs.meta b/System/Treasure/DemonTreasureWin.cs.meta
new file mode 100644
index 0000000..c08e49e
--- /dev/null
+++ b/System/Treasure/DemonTreasureWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9a3ed68d5cc690a458ae6f67f431841b
+timeCreated: 1542095044
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/FairyTreasureCollectPanel.cs b/System/Treasure/FairyTreasureCollectPanel.cs
index eb0b92e..079ca25 100644
--- a/System/Treasure/FairyTreasureCollectPanel.cs
+++ b/System/Treasure/FairyTreasureCollectPanel.cs
@@ -12,8 +12,10 @@
 {
     public class FairyTreasureCollectPanel : MonoBehaviour
     {
-
+        [SerializeField] Image m_TreasureNameIcon;
+        [SerializeField] PositionTween m_NameTween;
         [SerializeField] TreasureContainer[] m_TreasureContainers;
+        
 
         public void Display(int _treasureId, bool _tween = false)
         {
@@ -33,6 +35,20 @@
                 }
             }
 
+            var config = Config.Instance.Get<TreasureConfig>(_treasureId);
+            if (config != null)
+            {
+                m_TreasureNameIcon.SetSprite(config.TreasureNameIcon);
+            }
+
+            if (_tween)
+            {
+                m_NameTween.Play();
+            }
+            else
+            {
+                m_NameTween.SetEndState();
+            }
         }
 
         public void Dispose()
diff --git a/System/Treasure/FairyTreasureCollectPanelPattern3.cs b/System/Treasure/FairyTreasureCollectPanelPattern3.cs
index ea250cf..7316355 100644
--- a/System/Treasure/FairyTreasureCollectPanelPattern3.cs
+++ b/System/Treasure/FairyTreasureCollectPanelPattern3.cs
@@ -130,7 +130,7 @@
                         FuncOpen.Instance.ProcessorFuncErrorTip(124);
                         return;
                     }
-                    WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.Open<TreasureFindHostWin>();
                     break;
             }
@@ -145,7 +145,7 @@
             }
             if (show)
             {
-                WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<MainInterfaceWin>();
             }
             show = false;
diff --git a/System/Treasure/FairyTreasureCollectPanelPattern5.cs b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
index 9d3587a..e71fe04 100644
--- a/System/Treasure/FairyTreasureCollectPanelPattern5.cs
+++ b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
@@ -182,7 +182,7 @@
         private void DisplayFurnacesHole()
         {
             m_ContainerHoles.gameObject.SetActive(treasure.state == TreasureState.Collected);
-            if (treasure.state == TreasureState.Collected)
+            if (treasure.state == TreasureState.Collected && treasure.stage == 0)
             {
                 var _list = model.GetFurnacesAchievements();
                 for (int i = 0; i < m_FurnacesIcons.Length; i++)
@@ -218,7 +218,7 @@
                     m_FurnacesIcons[i].gameObject.SetActive(achievement != null && achievement.completed);
                 }
             }
-            else
+            if (treasure.state == TreasureState.Collected && treasure.stage >= 1)
             {
                 for (int i = 0; i < m_FurnacesIcons.Length; i++)
                 {
@@ -257,7 +257,7 @@
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
                 WindowJumpMgr.Instance.ClearJumpData();
-                WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
                 WindowCenter.Instance.Open<MainInterfaceWin>();
                 if (WindowCenter.Instance.IsOpen<DialogueDuidanceWin>())
@@ -439,7 +439,7 @@
 
         private void GotoStove()
         {
-            WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
+            WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
             WindowCenter.Instance.Close<MainInterfaceWin>();
             WindowCenter.Instance.Open<BlastFurnaceWin>();
         }
diff --git a/System/Treasure/FairyTreasureWin.cs b/System/Treasure/FairyTreasureWin.cs
new file mode 100644
index 0000000..94702c7
--- /dev/null
+++ b/System/Treasure/FairyTreasureWin.cs
@@ -0,0 +1,70 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI {
+
+    public class FairyTreasureWin : Window
+    {
+        [SerializeField] FairyTreasureCollectPanel m_TreasureFairyBehaviour;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+        }
+
+        protected override void OnPreOpen()
+        {
+            UI3DTreasureSelectStage.Instance.SetStartState();
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+            m_TreasureFairyBehaviour.Dispose();
+            m_TreasureFairyBehaviour.Display(model.selectedTreasure, true);
+        }
+
+        protected override void OnAfterOpen()
+        {
+            
+        }
+
+        protected override void OnPreClose()
+        {
+            m_TreasureFairyBehaviour.Dispose();
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+        private void TreasureSelectedEvent(int obj)
+        {
+            m_TreasureFairyBehaviour.Dispose();
+            m_TreasureFairyBehaviour.Display(model.selectedTreasure, false);
+        }
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/FairyTreasureWin.cs.meta b/System/Treasure/FairyTreasureWin.cs.meta
new file mode 100644
index 0000000..6c47012
--- /dev/null
+++ b/System/Treasure/FairyTreasureWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e51dda432d4101d459487613d8918b7e
+timeCreated: 1542095817
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/TreasureBaseWin.cs b/System/Treasure/TreasureBaseWin.cs
new file mode 100644
index 0000000..497684f
--- /dev/null
+++ b/System/Treasure/TreasureBaseWin.cs
@@ -0,0 +1,288 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Tuesday, November 13, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using TableConfig;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+
+    public class TreasureBaseWin : Window
+    {
+        [SerializeField] RectTransform m_DisplayContainer;
+        [SerializeField] Image m_TreasureTitle;
+        [SerializeField] DragSelectComponent m_DragSelect;
+        [SerializeField] Button m_Left;
+        [SerializeField] Button m_Right;
+        [SerializeField] Button m_Back;
+
+        public static event Func<int, bool> allowSelectTreasure;
+        public static event Func<int> allowBack;
+        public static event Action<int> prepareSelectTreasure;
+        public static event Action prepareBack;
+
+        bool backToSelectWindow = false;
+
+        TreasureModel model
+        {
+            get { return ModelCenter.Instance.GetModel<TreasureModel>(); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+            m_Left.onClick.AddListener(Left);
+            m_Right.onClick.AddListener(Right);
+            m_Back.onClick.AddListener(Back);
+        }
+
+        protected override void OnPreOpen()
+        {
+            backToSelectWindow = false;
+            m_DisplayContainer.gameObject.SetActive(false);
+            if (UI3DTreasureSelectStage.Instance.IsOpen)
+            {
+                if (UI3DTreasureSelectStage.Instance.jumpTreasure != 0)
+                {
+                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.jumpTreasure;
+                }
+                else
+                {
+                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.selectTreasure;
+                }
+            }
+        }
+
+        protected override void OnAfterOpen()
+        {
+            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete += OnCameraCloserComplete;
+            UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete;
+            m_DragSelect.onDragComplete += OnDragComplete;
+            model.treasureSelectedEvent += TreasureSelectedEvent;
+
+            CameraManager.uiCamera.enabled = true;
+            if (!UI3DTreasureSelectStage.Instance.IsOpen)
+            {
+                UI3DTreasureSelectStage.Instance.Open(true, model.currentCategory);
+                var _list = model.GetTreasureCategory(model.currentCategory);
+                var _index = _list.FindIndex((x) =>
+                {
+                    return x == model.selectedTreasure;
+                });
+                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
+                OnCameraCloserComplete();
+            }
+            else if (UI3DTreasureSelectStage.Instance.CloserComplete)
+            {
+                OnCameraCloserComplete();
+            }
+        }
+
+        protected override void OnPreClose()
+        {
+            CloseSubWindows();
+
+            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete -= OnCameraCloserComplete;
+            UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete;
+            m_DragSelect.onDragComplete -= OnDragComplete;
+            model.treasureSelectedEvent -= TreasureSelectedEvent;
+
+            if (!backToSelectWindow)
+            {
+                UI3DTreasureSelectStage.Instance.Close();
+            }
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+        #endregion
+
+        private void TreasureSelectedEvent(int treasureId)
+        {
+            DisplaySelects();
+            var list = model.GetTreasureCategory(model.currentCategory);
+            var index = list.FindIndex((x) =>
+            {
+                return x == treasureId;
+            });
+            if (index != -1)
+            {
+                UI3DTreasureSelectStage.Instance.GotoImmediatly(index);
+            }
+        }
+
+        private void OnCameraCloserComplete()
+        {
+            if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
+            {
+                WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
+            }
+            CloseSubWindows();
+            m_DisplayContainer.gameObject.SetActive(true);
+            switch (model.currentCategory)
+            {
+                case TreasureCategory.Human:
+                    m_TreasureTitle.SetSprite("XT_FB_45");
+                    m_Left.image.SetSprite("XT_FB_33");
+                    m_Right.image.SetSprite("XT_FB_34");
+                    WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                    break;
+                case TreasureCategory.Demon:
+                    m_TreasureTitle.SetSprite("XT_FB_46");
+                    m_Left.image.SetSprite("XT_FB_35");
+                    m_Right.image.SetSprite("XT_FB_36");
+                    WindowCenter.Instance.Open<DemonTreasureWin>();
+                    break;
+                case TreasureCategory.Fairy:
+                    m_TreasureTitle.SetSprite("XT_FB_47");
+                    m_Left.image.SetSprite("XT_FB_33");
+                    m_Right.image.SetSprite("XT_FB_34");
+                    WindowCenter.Instance.Open<FairyTreasureWin>();
+                    break;
+            }
+            DisplaySelects();
+        }
+
+        private void DisplaySelects()
+        {
+            var leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure + 1);
+            m_Right.gameObject.SetActive(leftRifht != null);
+            leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure - 1);
+            m_Left.gameObject.SetActive(leftRifht != null);
+        }
+
+        private void OnCameraBackComplete()
+        {
+            backToSelectWindow = true;
+            CloseImmediately();
+        }
+
+        private void OnDragComplete(int result)
+        {
+            if (result > 0)
+            {
+                Right();
+            }
+            else if (result < 0)
+            {
+                Left();
+            }
+        }
+
+        private void Left()
+        {
+            var selectTreasure = model.selectedTreasure - 1;
+            if (!AllowSelectTreasure(selectTreasure))
+            {
+                return;
+            }
+            if (prepareSelectTreasure != null)
+            {
+                prepareSelectTreasure(selectTreasure);
+            }
+            model.selectedTreasure = selectTreasure;
+        }
+
+        private void Right()
+        {
+            var selectTreasure = model.selectedTreasure + 1;
+            if (!AllowSelectTreasure(selectTreasure))
+            {
+                return;
+            }
+            if (prepareSelectTreasure != null)
+            {
+                prepareSelectTreasure(selectTreasure);
+            }
+            model.selectedTreasure = selectTreasure;
+        }
+
+        private void Back()
+        {
+            var returnCode = 0;
+            if (allowBack != null)
+            {
+                returnCode = allowBack();
+            }
+            if (returnCode != 0)
+            {
+                return;
+            }
+            if (PlayerDatas.Instance.baseData.LV < model.treasureBackLvLimit
+                            && !WindowJumpMgr.Instance.IsJumpState)
+            {
+                StartBack();
+                return;
+            }
+            if (!WindowJumpMgr.Instance.IsJumpState && model.openFromTreasureList)
+            {
+                StartBack();
+                return;
+            }
+            if (!WindowJumpMgr.Instance.IsJumpState && model.exitRecord >= 4)
+            {
+                StartBack();
+                model.exitRecord = 0;
+                return;
+            }
+            model.openFromTreasureList = false;
+            CloseImmediately();
+            if (!WindowJumpMgr.Instance.IsJumpState)
+            {
+                model.exitRecord++;
+                WindowCenter.Instance.Open<MainInterfaceWin>();
+            }
+        }
+
+        void StartBack()
+        {
+            if (prepareBack != null)
+            {
+                prepareBack();
+            }
+            model.openFromTreasureList = false;
+            CloseSubWindows();
+            m_DisplayContainer.gameObject.SetActive(false);
+            WindowCenter.Instance.Open<TreasureSelectWin>(true);
+            UI3DTreasureSelectStage.Instance.StartBack();
+        }
+
+        private bool AllowSelectTreasure(int treasureId)
+        {
+            Treasure treasure;
+            if (!model.TryGetTreasure(treasureId, out treasure))
+            {
+                return false;
+            }
+            if (allowSelectTreasure != null && !allowSelectTreasure(treasureId))
+            {
+                return false;
+            }
+            return true;
+        }
+
+        private void CloseSubWindows()
+        {
+            var childrens = WindowConfig.Get().FindChildWindows("TreasureBaseWin");
+            foreach (var window in childrens)
+            {
+                WindowCenter.Instance.Close(window);
+            }
+        }
+    }
+
+}
+
+
+
+
diff --git a/System/Treasure/TreasureBaseWin.cs.meta b/System/Treasure/TreasureBaseWin.cs.meta
new file mode 100644
index 0000000..e780902
--- /dev/null
+++ b/System/Treasure/TreasureBaseWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8caae764204324b49a5cdc5ee43c33c4
+timeCreated: 1542077271
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/Treasure/TreasureCollectBriefInfoBehaviour.cs b/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
index 8edc2ca..38f7319 100644
--- a/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
+++ b/System/Treasure/TreasureCollectBriefInfoBehaviour.cs
@@ -384,7 +384,7 @@
                 model.selectedTreasure = displayTreasureId;
                 model.currentCategory = (TreasureCategory)config.Category;
                 model.openFromTreasureCollect = true;
-                WindowCenter.Instance.Open<TreasureLevelUpWin>();
+                WindowCenter.Instance.Open<TreasureBaseWin>();
             }
         }
 
diff --git a/System/Treasure/TreasureDemonBehaviour.cs b/System/Treasure/TreasureDemonBehaviour.cs
index 53ead53..242865e 100644
--- a/System/Treasure/TreasureDemonBehaviour.cs
+++ b/System/Treasure/TreasureDemonBehaviour.cs
@@ -9,6 +9,7 @@
 {
     public class TreasureDemonBehaviour : MonoBehaviour
     {
+        [SerializeField] Image m_TreasureNameIcon;
         [SerializeField] Text m_TreasureDescription;
         [SerializeField] RectTransform m_ContainerFightPower;
         [SerializeField] Text m_FightPower;
@@ -24,6 +25,7 @@
 
         [SerializeField] PositionTween m_DescriptionTween;
         [SerializeField] PositionTween m_SkillTween;
+        [SerializeField] PositionTween m_NameTween;
 
         TreasureModel m_Model;
         TreasureModel model
@@ -74,11 +76,13 @@
                 m_SkillTween.SetStartState();
                 m_DescriptionTween.Play();
                 m_SkillTween.Play();
+                m_NameTween.Play();
             }
             else
             {
                 m_DescriptionTween.SetEndState();
                 m_SkillTween.SetEndState();
+                m_NameTween.SetEndState();
             }
 
             var config = Config.Instance.Get<TreasureConfig>(_id);
@@ -91,6 +95,7 @@
             m_GetBtn.gameObject.SetActive(m_Treasure.state == TreasureState.Collecting);
             m_RecommondPower.gameObject.SetActive(m_Treasure.state != TreasureState.Collected);
             m_ContainerFightPower.gameObject.SetActive(m_Treasure.state == TreasureState.Collected);
+            m_TreasureNameIcon.SetSprite(config.TreasureNameIcon);
 
             if (m_Treasure.state == TreasureState.Locked)
             {
diff --git a/System/Treasure/TreasureExhibitionBehaviour.cs b/System/Treasure/TreasureExhibitionBehaviour.cs
index 6a028a9..07a0525 100644
--- a/System/Treasure/TreasureExhibitionBehaviour.cs
+++ b/System/Treasure/TreasureExhibitionBehaviour.cs
@@ -58,7 +58,7 @@
             {
                 return;
             }
-            if (_window is TreasureSelectWin || _window is TreasureLevelUpWin)
+            if (_window is TreasureSelectWin || _window is TreasureBaseWin)
             {
                 if (!m_NewTreasureEffect.IsPlaying)
                 {
diff --git a/System/Treasure/TreasureLevelUpWin.cs b/System/Treasure/TreasureLevelUpWin.cs
index acecb48..3167699 100644
--- a/System/Treasure/TreasureLevelUpWin.cs
+++ b/System/Treasure/TreasureLevelUpWin.cs
@@ -17,8 +17,6 @@
     {
         [SerializeField] TreasureAnimation m_TreasureAnimation;
         [SerializeField] RectTransform m_DisplayContainer;
-        [SerializeField] Image m_TreasureTitle;
-        [SerializeField] DragSelectComponent m_DragSelect;
 
         [SerializeField] RectTransform m_ContainerUnGet;
         [SerializeField] RectTransform m_ContainerLockDetail;
@@ -54,16 +52,6 @@
         [SerializeField] RectTransform m_ContainerPotential;
         [SerializeField] TreasurePotentialPanel m_TreasurePotential;
 
-        [SerializeField] TreasureDemonBehaviour m_TreasureDemonBehaviour;
-        [SerializeField] FairyTreasureCollectPanel m_TreasureFairyBehaviour;
-
-        [SerializeField] RectTransform m_ContainerSelect;
-        [SerializeField] Image m_LeftRedpoint;
-        [SerializeField] Image m_RightRedpoint;
-        [SerializeField] Button m_LeftBtn;
-        [SerializeField] Button m_RightBtn;
-        [SerializeField] Button m_BackBtn;
-
         TreasureModel m_Model;
         TreasureModel model
         {
@@ -95,9 +83,7 @@
 
         Treasure m_Treasure;
 
-        bool m_CorrectClose = false;
         bool m_OnLevelUpStage = false;
-        bool m_Init = false;
         bool m_NewBieGuide = false;
 
         int mainTaskId = 0;
@@ -118,44 +104,29 @@
 
         protected override void AddListeners()
         {
-            m_BackBtn.onClick.AddListener(OnBack);
             m_GetTreasureBtn.onClick.AddListener(OnGetTreasure);
             m_LevelUpBtn.onClick.AddListener(OnLevelUp);
-            m_LeftBtn.onClick.AddListener(OnLeftBtn);
-            m_RightBtn.onClick.AddListener(OnRightBtn);
             m_Controller.OnRefreshCell += OnRefreshCell;
         }
 
         protected override void OnPreOpen()
         {
-            m_Init = false;
-            if (UI3DTreasureSelectStage.Instance.IsOpen)
-            {
-                if (UI3DTreasureSelectStage.Instance.jumpTreasure != 0)
-                {
-                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.jumpTreasure;
-                }
-                else
-                {
-                    model.selectedTreasure = UI3DTreasureSelectStage.Instance.selectTreasure;
-                }
-            }
-            m_DisplayContainer.gameObject.SetActive(false);
+            m_DisplayContainer.gameObject.SetActive(true);
             m_ContainerSkillShow.gameObject.SetActive(false);
             m_ContainerTip.gameObject.SetActive(false);
-            m_CorrectClose = false;
+
             m_OnLevelUpStage = false;
             m_NewBieGuide = false;
             model.treasureStepUpShow = false;
             m_TreasureAnimation.stepComplete = true;
             beforePlayerLv = PlayerDatas.Instance.baseData.LV;
+
             model.SetTreasureUnlockShow(TreasureCategory.Human, 0);
         }
 
-        protected override void OnAfterOpen()
+        protected override void OnActived()
         {
-            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete += OnCameraCloserComplete;
-            UI3DTreasureSelectStage.Instance.OnCameraBackComplete += OnCameraBackComplete;
+            base.OnActived();
             PlayerTaskDatas.CardLevelChange += CardLevelChange;
             model.treasureLevelProgressUpdateEvent += TreasureLevelProgressUpdateEvent;
             model.treasureSelectedEvent += TreasureSelectedEvent;
@@ -169,39 +140,23 @@
             m_Slider.slider.onValueChanged.AddListener(OnSliderValueUpdate);
             NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
-            model.skillLevelUpRedpointUpdate += SkillLevelUpRedpointUpdate;
-            m_DragSelect.onDragComplete += onDragComplete;
-
-            CameraManager.uiCamera.enabled = true;
-            if (!UI3DTreasureSelectStage.Instance.IsOpen)
-            {
-                UI3DTreasureSelectStage.Instance.Open(true, model.currentCategory);
-                var _list = model.GetTreasureCategory(model.currentCategory);
-                var _index = _list.FindIndex((x) =>
-                {
-                    return x == model.selectedTreasure;
-                });
-                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
-                OnCameraCloserComplete();
-            }
-            else if (UI3DTreasureSelectStage.Instance.CloserComplete && !m_Init)
-            {
-                OnCameraCloserComplete();
-            }
             model.treasureStateChangeEvent += TreasureStateChangeEvent;
-
+            TreasureBaseWin.allowSelectTreasure += AllowSelectTreasure;
+            TreasureBaseWin.prepareSelectTreasure += PrepareSelectTreasure;
+            TreasureBaseWin.allowBack += AllowBack;
+            TreasureBaseWin.prepareBack += PrepareBack;
             mainTaskId = 0;
+
+            Display();
         }
 
-        protected override void OnActived()
+        protected override void OnAfterOpen()
         {
-            base.OnActived();
+            
         }
 
         protected override void OnPreClose()
         {
-            UI3DTreasureSelectStage.Instance.OnCameraCloserComplete -= OnCameraCloserComplete;
-            UI3DTreasureSelectStage.Instance.OnCameraBackComplete -= OnCameraBackComplete;
             model.treasureLevelProgressUpdateEvent -= TreasureLevelProgressUpdateEvent;
             PlayerTaskDatas.CardLevelChange -= CardLevelChange;
             model.treasureSelectedEvent -= TreasureSelectedEvent;
@@ -215,19 +170,16 @@
             NewBieCenter.Instance.guideCompletedEvent -= GuideCompletedEvent;
             model.treasureStateChangeEvent -= TreasureStateChangeEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
-            m_DragSelect.onDragComplete -= onDragComplete;
-            model.skillLevelUpRedpointUpdate -= SkillLevelUpRedpointUpdate;
+            TreasureBaseWin.allowSelectTreasure -= AllowSelectTreasure;
+            TreasureBaseWin.prepareSelectTreasure -= PrepareSelectTreasure;
+            TreasureBaseWin.allowBack -= AllowBack;
+            TreasureBaseWin.prepareBack -= PrepareBack;
             m_Slider.slider.onValueChanged.RemoveAllListeners();
             m_TreasurePotential.Dispose();
             m_AchievementScroll.Dispose();
-            m_TreasureFairyBehaviour.Dispose();
             if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
             {
                 FunctionalGuideCenter.Instance.RemoveGuide(65);
-            }
-            if (!m_CorrectClose)
-            {
-                UI3DTreasureSelectStage.Instance.Close();
             }
             if (m_TreasureAnimation.step == TreasureAnimation.TreasureShowStep.FirstUnLock)
             {
@@ -260,32 +212,11 @@
             if (_id == model.selectedTreasure && _treasure != null
                 && _treasure.state == TreasureState.Collecting && model.serverInited)
             {
-                UpdateStage();
-                if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
-                {
-                    WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
-                }
+                Display();
             }
         }
 
-        private void OnCameraCloserComplete()
-        {
-            m_Init = true;
-            m_DisplayContainer.gameObject.SetActive(true);
-            UpdateStage();
-            if (WindowCenter.Instance.IsOpen<EffectToFaBaoWin>())
-            {
-                WindowCenter.Instance.CloseImmediately<EffectToFaBaoWin>();
-            }
-        }
-
-        private void OnCameraBackComplete()
-        {
-            m_CorrectClose = true;
-            CloseImmediately();
-        }
-
-        private void UpdateStage(int _state = 0)
+        private void Display(int _state = 0)
         {
             m_TreasureAnimation.selectTreasureId = model.selectedTreasure;
             model.TryGetTreasure(model.selectedTreasure, out m_Treasure);
@@ -294,71 +225,9 @@
             model.cacheGotAchievements.Clear();
             var _config = Config.Instance.Get<TreasureConfig>(m_Treasure.id);
             m_TreasureProperty.treasureNameTween.SetEndState();
-            switch (model.currentCategory)
-            {
-                case TreasureCategory.Human:
-                    beforePlayerLv = PlayerDatas.Instance.baseData.LV;
-                    m_TreasureDemonBehaviour.gameObject.SetActive(false);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(false);
-                    model.treasureStepUpShow = false;
-                    SelectHumanTreasure(_state);
-                    m_TreasureTitle.SetSprite("XT_FB_45");
-                    m_LeftBtn.image.SetSprite("XT_FB_33");
-                    m_RightBtn.image.SetSprite("XT_FB_34");
-                    break;
-                case TreasureCategory.Demon:
-                    HideHuman();
-                    m_TreasureAnimation.SetDisplayEnd();
-                    m_TreasureAnimation.TreasureTween();
-                    m_TreasureAnimation.stepComplete = true;
-                    model.treasureStepUpShow = false;
-                    m_TreasureProperty.containerName.gameObject.SetActive(true);
-                    m_TreasureDemonBehaviour.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(false);
-                    m_TreasureDemonBehaviour.Display(m_Treasure.id, _state == 0);
-                    if (_state == 0)
-                    {
-                        m_TreasureProperty.treasureNameTween.Play();
-                    }
-                    m_TreasureTitle.SetSprite("XT_FB_46");
-                    m_LeftBtn.image.SetSprite("XT_FB_35");
-                    m_RightBtn.image.SetSprite("XT_FB_36");
-                    break;
-                case TreasureCategory.Fairy:
-                    HideHuman();
-                    m_TreasureAnimation.SetDisplayEnd();
-                    m_TreasureAnimation.TreasureTween();
-                    m_TreasureAnimation.stepComplete = true;
-                    model.treasureStepUpShow = false;
-                    m_TreasureDemonBehaviour.gameObject.SetActive(false);
-                    m_TreasureProperty.containerName.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.gameObject.SetActive(true);
-                    m_TreasureFairyBehaviour.Dispose();
-                    m_TreasureFairyBehaviour.Display(m_Treasure.id, _state == 0);
-                    if (_state == 0)
-                    {
-                        m_TreasureProperty.treasureNameTween.Play();
-                    }
-                    m_TreasureTitle.SetSprite("XT_FB_47");
-                    m_LeftBtn.image.SetSprite("XT_FB_33");
-                    m_RightBtn.image.SetSprite("XT_FB_34");
-                    break;
-            }
-
-            var _leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure + 1);
-            m_RightBtn.gameObject.SetActive(_leftRifht != null);
-            _leftRifht = Config.Instance.Get<TreasureConfig>(model.selectedTreasure - 1);
-            m_LeftBtn.gameObject.SetActive(_leftRifht != null);
-            var skillLevelUpRedpointTreasure = model.GetSkillLevelUpRedpointTreasure();
-            m_LeftRedpoint.gameObject.SetActive(false);
-            m_RightRedpoint.gameObject.SetActive(false);
-        }
-
-        private void HideHuman()
-        {
-            m_ContainerUnGet.gameObject.SetActive(false);
-            m_ContainerPotential.gameObject.SetActive(false);
-            m_ContainerLevelUp.gameObject.SetActive(false);
+            beforePlayerLv = PlayerDatas.Instance.baseData.LV;
+            model.treasureStepUpShow = false;
+            SelectHumanTreasure(_state);
         }
 
         private void SelectHumanTreasure(int _state = 0)
@@ -434,7 +303,7 @@
                             && FuncOpen.Instance.IsFuncOpen(82) && !model.GetSpAnim(m_Treasure.id))
                         {
                             m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                            UpdateStage(2);
+                            Display(2);
                             return;
                         }
                     }
@@ -451,7 +320,7 @@
                     && !model.GetSpAnim(m_Treasure.id))
                 {
                     m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                    UpdateStage(2);
+                    Display(2);
                 }
             }
         }
@@ -519,68 +388,11 @@
 
         private void TreasureSelectedEvent(int _id)
         {
-            if (!m_TreasureAnimation.stepComplete)
-            {
-                return;
-            }
-            var _list = model.GetTreasureCategory(model.currentCategory);
-            var _index = _list.FindIndex((x) =>
-            {
-                return x == _id;
-            });
-            if (_index != -1)
-            {
-                m_OnLevelUpStage = false;
-                UI3DTreasureSelectStage.Instance.GotoImmediatly(_index);
-                UpdateStage(1);
-            }
+            Display(1);
         }
 
-        private void onDragComplete(int _value)
+        private bool AllowSelectTreasure(int treasureId)
         {
-            if (_value > 0)
-            {
-                OnRightBtn();
-            }
-            else if (_value < 0)
-            {
-                OnLeftBtn();
-            }
-        }
-
-        private void OnLeftBtn()
-        {
-            if (CheckSelectTreasureFunc(model.selectedTreasure - 1))
-            {
-                model.openFromTaskId = 0;
-                if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
-                {
-                    FunctionalGuideCenter.Instance.RemoveGuide(65);
-                }
-                model.selectedTreasure = model.selectedTreasure - 1;
-            }
-        }
-
-        private void OnRightBtn()
-        {
-            if (CheckSelectTreasureFunc(model.selectedTreasure + 1))
-            {
-                model.openFromTaskId = 0;
-                if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
-                {
-                    FunctionalGuideCenter.Instance.RemoveGuide(65);
-                }
-                model.selectedTreasure = model.selectedTreasure + 1;
-            }
-        }
-
-        private bool CheckSelectTreasureFunc(int _id)
-        {
-            Treasure _treasure;
-            if (!model.TryGetTreasure(_id, out _treasure))
-            {
-                return false;
-            }
             if (model.TreasureStageUpLimit(model.selectedTreasure))
             {
                 return false;
@@ -588,49 +400,31 @@
             return m_TreasureAnimation.stepComplete && !model.treasureStepUpShow && !m_NewBieGuide;
         }
 
-        private void OnBack()
+        private void PrepareSelectTreasure(int treasureId)
         {
-            if (!m_TreasureAnimation.stepComplete || model.treasureStepUpShow || m_NewBieGuide)
+            model.openFromTaskId = 0;
+            if (FunctionalGuideCenter.Instance.ExistUnderwayGuide(65))
             {
-                return;
-            }
-            if (model.TreasureStageUpLimit(model.selectedTreasure))
-            {
-                return;
-            }
-            if (PlayerDatas.Instance.baseData.LV < model.treasureBackLvLimit
-                && !WindowJumpMgr.Instance.IsJumpState)
-            {
-                StartBack();
-                return;
-            }
-            if (!WindowJumpMgr.Instance.IsJumpState && model.openFromTreasureList)
-            {
-                StartBack();
-                return;
-            }
-            if (!WindowJumpMgr.Instance.IsJumpState && model.exitRecord >= 4)
-            {
-                StartBack();
-                model.exitRecord = 0;
-                return;
-            }
-            model.openFromTreasureList = false;
-            CloseImmediately();
-            if (!WindowJumpMgr.Instance.IsJumpState)
-            {
-                model.exitRecord++;
-                WindowCenter.Instance.Open<MainInterfaceWin>();
+                FunctionalGuideCenter.Instance.RemoveGuide(65);
             }
         }
 
-        void StartBack()
+        private int AllowBack()
+        {
+            if (!m_TreasureAnimation.stepComplete || model.treasureStepUpShow || m_NewBieGuide)
+            {
+                return 1;
+            }
+            if (model.TreasureStageUpLimit(model.selectedTreasure))
+            {
+                return 1;
+            }
+            return 0;
+        }
+
+        private void PrepareBack()
         {
             model.SetTreasureUnlockShow(TreasureCategory.Human, 0);
-            model.openFromTreasureList = false;
-            m_DisplayContainer.gameObject.SetActive(false);
-            WindowCenter.Instance.Open<TreasureSelectWin>(true);
-            UI3DTreasureSelectStage.Instance.StartBack();
         }
 
         private void OnGetTreasure()
@@ -750,7 +544,7 @@
         private void AchievementCompletedEvent(int _id)
         {
             var config = Config.Instance.Get<TreasureConfig>(model.selectedTreasure);
-            if (!m_Init || config == null || (TreasureCategory)config.Category != TreasureCategory.Human
+            if (config == null || (TreasureCategory)config.Category != TreasureCategory.Human
                 || m_Treasure.state != TreasureState.Collected || m_Treasure.IsHighestStage)
             {
                 return;
@@ -836,7 +630,7 @@
                     else if (FuncOpen.Instance.IsFuncOpen(82) && !model.GetSpAnim(m_Treasure.id))
                     {
                         m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                        UpdateStage(2);
+                        Display(2);
                     }
                     break;
                 case TreasureAnimation.TreasureShowStep.FirstUnLock:
@@ -864,13 +658,13 @@
                 if (m_Treasure.IsHighestStage && FuncOpen.Instance.IsFuncOpen(82))
                 {
                     m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-                    UpdateStage(2);
+                    Display(2);
                 }
                 else
                 {
                     if (mainTaskId != 0)
                     {
-                        CloseImmediately();
+                        WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                         WindowCenter.Instance.Open<MainInterfaceWin>();
                         task.AutomaticTripToTask(mainTaskId);
                     }
@@ -995,8 +789,8 @@
                     break;
                 case TreasureStageUnlock.Treasure:
                     WindowJumpMgr.Instance.ClearJumpData();
+                    WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                     WindowCenter.Instance.Open<MainInterfaceWin>();
-                    CloseImmediately();
                     break;
                 case TreasureStageUnlock.TreasureSoul:
                     TreasureSoulActiveWin.treasureSoulId = stage.treasureSoul;
@@ -1019,7 +813,7 @@
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
                 WindowJumpMgr.Instance.ClearJumpData();
-                CloseImmediately();
+                WindowCenter.Instance.CloseImmediately<TreasureBaseWin>();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
                 WindowCenter.Instance.Open<MainInterfaceWin>();
                 if (WindowCenter.Instance.IsOpen<DialogueDuidanceWin>())
@@ -1218,13 +1012,6 @@
             }
         }
 
-        private void SkillLevelUpRedpointUpdate()
-        {
-            var skillLevelUpRedpointTreasure = model.GetSkillLevelUpRedpointTreasure();
-            m_LeftRedpoint.gameObject.SetActive(false);
-            m_RightRedpoint.gameObject.SetActive(false);
-        }
-
         protected override void LateUpdate()
         {
             base.LateUpdate();
@@ -1251,7 +1038,7 @@
         public void PreviewAnimation()
         {
             m_TreasureAnimation.step = TreasureAnimation.TreasureShowStep.FirstPotential;
-            UpdateStage(2);
+            Display(2);
         }
 
         [ContextMenu("娴嬭瘯鍔熻兘寮�鍚�")]
diff --git a/System/Treasure/TreasureSelectWin.cs b/System/Treasure/TreasureSelectWin.cs
index 580163c..252db53 100644
--- a/System/Treasure/TreasureSelectWin.cs
+++ b/System/Treasure/TreasureSelectWin.cs
@@ -169,7 +169,7 @@
             WindowJumpMgr.Instance.ClearJumpData();
             m_CorrectClose = true;
             CameraManager.uiCamera.enabled = false;
-            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+            WindowCenter.Instance.Open<TreasureBaseWin>();
             CloseImmediately();
         }
 
diff --git a/System/Treasure/UI3DTreasureSelectStage.cs b/System/Treasure/UI3DTreasureSelectStage.cs
index 9da5c32..57da7a0 100644
--- a/System/Treasure/UI3DTreasureSelectStage.cs
+++ b/System/Treasure/UI3DTreasureSelectStage.cs
@@ -426,6 +426,7 @@
             {
                 StopCoroutine(preloadCoroutine);
                 preloadCoroutine = null;
+                Preloading = false;
             }
 
             if (!m_PreloadDict.ContainsKey(currentCategory) && !_closer)
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index c025af1..67d5cbe 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -503,7 +503,7 @@
                 SetJumpLogic<TreasureSoulWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.TreasureCollectSoul:
-                SetJumpLogic<TreasureLevelUpWin>(0);
+                SetJumpLogic<TreasureBaseWin>(0);
                 break;
             case JumpUIType.Kylin:
                 dungeonModel.currentDungeon = new Dungeon(31190, 0);
@@ -617,7 +617,7 @@
             case JumpUIType.LLBT:
                 treasureModel.currentCategory = TreasureCategory.Fairy;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.FYZJTyp1:
             case JumpUIType.FYZJTyp2:
@@ -625,7 +625,7 @@
             case JumpUIType.SHLTyp2:
                 treasureModel.currentCategory = TreasureCategory.Demon;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
 
             case JumpUIType.DhszTs:
@@ -640,7 +640,7 @@
             case JumpUIType.StfTs:
                 treasureModel.currentCategory = TreasureCategory.Human;
                 treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive);
-                SetJumpLogic<TreasureLevelUpWin>(_tagWinSearchModel.TABID);
+                SetJumpLogic<TreasureBaseWin>(_tagWinSearchModel.TABID);
                 break;
             case JumpUIType.FirstRecharge:
                 SetJumpLogic<FirstRechargeWin>(_tagWinSearchModel.TABID, true);
diff --git a/System/WorldMap/LocalMapTreasure.cs b/System/WorldMap/LocalMapTreasure.cs
index 6e82bc7..b0787b3 100644
--- a/System/WorldMap/LocalMapTreasure.cs
+++ b/System/WorldMap/LocalMapTreasure.cs
@@ -55,7 +55,7 @@
 
             model.selectedTreasure = treasureId;
             model.currentCategory = TreasureCategory.Human;
-            WindowCenter.Instance.Open<TreasureLevelUpWin>();
+            WindowCenter.Instance.Open<TreasureBaseWin>();
         }
 
     }
diff --git a/UI/Common/UI3DShowHero.cs b/UI/Common/UI3DShowHero.cs
index fcd4831..b166958 100644
--- a/UI/Common/UI3DShowHero.cs
+++ b/UI/Common/UI3DShowHero.cs
@@ -108,7 +108,7 @@
 
             if (weaponId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(weaponId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
                 if (prefab)
                 {
                     pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -119,7 +119,7 @@
 
             if (secondaryId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId);
                 if (prefab)
                 {
                     if (secondaryModel)
@@ -134,7 +134,7 @@
 
             if (wingsId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(wingsId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(wingsId);
                 if (prefab)
                 {
                     pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -329,18 +329,18 @@
 
             if (oldWeapon != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(weaponModel);
                 weaponModel = null;
             }
 
-            prefab = InstanceResourcesLoader.LoadModelRes(resoureceId, true);
+            prefab = InstanceResourcesLoader.LoadModelRes(resoureceId);
 
             if (!prefab)
             {
                 resoureceId = config.BaseEquip[1];
-                prefab = InstanceResourcesLoader.LoadModelRes(resoureceId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(resoureceId);
             }
 
             if (prefab)
@@ -372,7 +372,7 @@
 
             if (oldSecondary != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(secondaryModel);
                 secondaryModel = null;
@@ -380,12 +380,12 @@
 
             if (secondaryResId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
                 if (!prefab)
                 {
                     var config = Config.Instance.Get<JobSetupConfig>(_job);
                     secondaryResId = config.BaseEquip[2];
-                    prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId, true);
+                    prefab = InstanceResourcesLoader.LoadModelRes(secondaryResId);
                 }
 
                 if (prefab)
@@ -415,7 +415,7 @@
 
             if (oldWings != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldWings, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldWings);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(wingsModel);
                 wingsModel = null;
@@ -423,12 +423,12 @@
 
             if (resourceId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(resourceId, true);
+                prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
 
                 if (!prefab)
                 {
                     resourceId = config.BaseEquip[3];
-                    prefab = InstanceResourcesLoader.LoadModelRes(resourceId, true);
+                    prefab = InstanceResourcesLoader.LoadModelRes(resourceId);
                 }
 
                 if (prefab)

--
Gitblit v1.8.0