From b4d5a32a7cc9035bb1efa29ad062cd2bd70ad898 Mon Sep 17 00:00:00 2001
From: client_Zxw <826696702@qq.com>
Date: 星期二, 04 九月 2018 16:15:14 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 Core/GameEngine/Model/ConfigManager.cs                                                              |    1 
 Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs.meta                   |   12 
 Fight/GameActor/GActorNpcNoFight.cs                                                                 |    2 
 Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs                   |   28 
 System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs                                                 |  204 +++++
 Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs                    |   34 
 System/Compose/New/ComposeWingsWin.cs                                                               |    2 
 System/Strengthening/GemModel.cs                                                                    |    6 
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs          |   40 +
 System/DailyQuest/DayRemind.cs                                                                      |    2 
 UI/Common/UI3DShowHero.cs                                                                           |   34 
 System/FindPrecious/WorldBossWin.cs                                                                 |    5 
 System/Skill/SkillModel.cs                                                                          |   36 +
 System/FindPrecious/LootPreciousFrameWin.cs                                                         |   11 
 Core/GameEngine/DataToCtl/PackageRegedit.cs                                                         |    3 
 System/DogzDungeon/DogzDungeonModel.cs.meta                                                         |   12 
 System/DogzDungeon/DogzDungeonWin.cs.meta                                                           |   12 
 System/FindPrecious/BossIntroduceBehaviour.cs                                                       |    3 
 Core/GameEngine/Model/Config/DogzDungeonConfig.cs.meta                                              |   12 
 Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs              |   27 
 Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs.meta         |   12 
 Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs.meta                        |   12 
 System/FriendSystem/New/FriendsModel.cs                                                             |    2 
 Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs.meta              |   12 
 System/DogzDungeon.meta                                                                             |    9 
 System/GeneralConfig/GeneralConfig.cs                                                               |    4 
 Core/GameEngine/Model/Config/ItemConfig.cs.meta                                                     |    2 
 Core/NetworkPackage/Socket/ClientSocketController.cs                                                |   30 
 System/Dogz/DogzDetailBehaviour.cs                                                                  |    6 
 System/DogzDungeon/DogzBoxBehaviour.cs.meta                                                         |   12 
 Fight/MapTransferUtility.cs                                                                         |    2 
 System/Compose/New/ComposeTicketWin.cs                                                              |    2 
 System/FindPrecious/FindPreciousBossRebornBehaviour.cs                                              |   31 
 Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs      |   29 
 System/MainInterfacePanel/MainInterfaceWin.cs                                                       |   11 
 Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs.meta               |   12 
 System/Realm/RealmBossShow.cs                                                                       |   18 
 System/Skill/SkillPassWin.cs                                                                        |  144 +++
 System/Mount/MountSkillWin.cs                                                                       |    6 
 Utility/EnumHelper.cs                                                                               |   12 
 Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs                        |   34 
 Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs                             |   36 +
 System/Chat/ChatCenter.cs                                                                           |   17 
 System/DogzDungeon/DogzEliteMonsterBehaviour.cs.meta                                                |   12 
 System/Strengthening/WingsRefined.cs                                                                |    2 
 System/DogzDungeon/DogzEliteMonsterBehaviour.cs                                                     |   60 +
 Fight/Stage/Dungeon/MapArea.cs                                                                      |    2 
 System/Compose/New/ComposeWinModel.cs                                                               |    6 
 System/DogzDungeon/DogzBoxBehaviour.cs                                                              |   64 +
 System/Treasure/TreasureSoulWin.cs                                                                  |    9 
 System/BlastFurnace/TreasureRefineTips.cs                                                           |    2 
 System/MainInterfacePanel/InGamePushContainer.cs                                                    |   10 
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs.meta     |   12 
 Core/GameEngine/Model/Config/ItemConfig.cs                                                          |   11 
 System/Compose/New/ComposeToolsWin.cs                                                               |   63 
 System/DogzDungeon/DogzDungeonWin.cs                                                                |  259 +++++++
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs                   |    4 
 System/KnapSack/Logic/ItemTipsModel.cs                                                              |    2 
 UI/Common/UI3DModelFactory.cs                                                                       |    8 
 System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs.meta                                            |   12 
 System/FindPrecious/FindPreciousBossBriefInfoBehaviour.cs                                           |   19 
 System/MainInterfacePanel/CardLevelTaskButton.cs                                                    |    2 
 System/FindPrecious/FindPreciousModel.cs                                                            |   41 
 Core/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs                                               |   14 
 Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs.meta |   12 
 System/BlastFurnace/FurnaceFireChooseWin.cs                                                         |    2 
 System/Treasure/TreasureCyclicScroll.cs                                                             |   11 
 Core/ResModule/InstanceResourcesLoader.cs                                                           |   24 
 Core/NetworkPackage/GameNetSystem.cs                                                                |   17 
 System/WindowBase/ModelCenter.cs                                                                    |    1 
 System/BlastFurnace/TreasureRefineSuccessWin.cs                                                     |    4 
 Core/GameEngine/Model/Config/DogzDungeonConfig.cs                                                   |   52 +
 System/DogzDungeon/DogzDungeonModel.cs                                                              |  419 +++++++++++
 73 files changed, 1,905 insertions(+), 192 deletions(-)

diff --git a/Core/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs b/Core/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
index 55faed5..2acf253 100644
--- a/Core/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
+++ b/Core/Editor/AssetBundleBrowser/AssetBundleBuildTab.cs
@@ -622,28 +622,34 @@
             AssetsVersionMaker.WriteAssetsVersionFile(Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_UserData.m_OutputPath), fileInfos);
         }
 
+        static int packageIndex
+        {
+            get { return LocalSave.GetInt("ClientPackageIndex", 1); }
+            set { LocalSave.SetInt("ClientPackageIndex", value); }
+        }
+
         private void ExecuteBuildClientPackageIpaAppend()
         {
             var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
-            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, false, false);
+            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, packageIndex, false, false);
         }
 
         private void ExecuteBuildClientPackageIpaReplace()
         {
             var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
-            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, false, true);
+            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, packageIndex, false, true);
         }
 
         private void ExecuteBuildClientPackageApk()
         {
             var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
-            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, false, false);
+            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, packageIndex, false, false);
         }
 
         private void ExecuteBuildClientPackageDevelopApk()
         {
             var outputPath = Application.dataPath.Replace("Assets", m_UserData.m_OutputPath);
-            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, true, false);
+            ClientPackage.BuildPublishers(ClientPackage.SDK_PLUGIN_PROJECT, outputPath, ApkOutputPath, publishers, packageIndex, true, false);
         }
 
         private void ExecuteSwitchVersionConfig()
diff --git a/Core/GameEngine/DataToCtl/PackageRegedit.cs b/Core/GameEngine/DataToCtl/PackageRegedit.cs
index 1701d20..3910faa 100644
--- a/Core/GameEngine/DataToCtl/PackageRegedit.cs
+++ b/Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -11,6 +11,9 @@
     public static void Init()
     {
         // 鐧昏鐩稿簲鐨勬暟鎹綋鍙婂搴旂殑鏁版嵁杞�昏緫绫�
+		Register(typeof(HA326_tagMCNPCIDCollectionCntInfo), typeof(DTCA326_tagMCNPCIDCollectionCntInfo));
+		Register(typeof(HA904_tagGCDogzNPCRefreshTime), typeof(DTCA904_tagGCDogzNPCRefreshTime));
+		Register(typeof(HA714_tagMCNPCCntList), typeof(DTCA714_tagMCNPCCntList));
 		Register(typeof(HAA16_tagMCSuperGiftInfo), typeof(DTCAA16_tagMCSuperGiftInfo));
 		Register(typeof(HAC10_tagGCAllFamilyBossHurtInfoList), typeof(DTCAC10_tagGCAllFamilyBossHurtInfoList));
 		Register(typeof(HA715_tagMCFamilyBossHurtList), typeof(DTCA715_tagMCFamilyBossHurtList));
diff --git a/Core/GameEngine/Model/Config/DogzDungeonConfig.cs b/Core/GameEngine/Model/Config/DogzDungeonConfig.cs
new file mode 100644
index 0000000..724d1a3
--- /dev/null
+++ b/Core/GameEngine/Model/Config/DogzDungeonConfig.cs
@@ -0,0 +1,52 @@
+锘�//--------------------------------------------------------
+//    [Author]:			绗簩涓栫晫
+//    [  Date ]:		   Tuesday, August 21, 2018
+//--------------------------------------------------------
+
+using UnityEngine;
+using System;
+
+namespace TableConfig {
+
+    
+	public partial class DogzDungeonConfig : ConfigBase {
+
+		public int NPCID { get ; private set ; }
+		public int MonsterType { get ; private set ; }
+		public int[] RareItemID;
+		public string PortraitID { get ; private set; } 
+
+		public override string getKey()
+        {
+            return NPCID.ToString();
+        }
+
+		public override void Parse() {
+			try
+            {
+                NPCID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; 
+			
+				MonsterType=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
+			
+				string[] RareItemIDStringArray = rawContents[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				RareItemID = new int[RareItemIDStringArray.Length];
+				for (int i=0;i<RareItemIDStringArray.Length;i++)
+				{
+					 int.TryParse(RareItemIDStringArray[i],out RareItemID[i]);
+				}
+			
+				PortraitID = rawContents[3].Trim();
+            }
+            catch (Exception ex)
+            {
+                DebugEx.Log(ex);
+            }
+		}
+	
+	}
+
+}
+
+
+
+
diff --git a/Core/GameEngine/Model/Config/DogzDungeonConfig.cs.meta b/Core/GameEngine/Model/Config/DogzDungeonConfig.cs.meta
new file mode 100644
index 0000000..006e3ba
--- /dev/null
+++ b/Core/GameEngine/Model/Config/DogzDungeonConfig.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e3a382a765dc3ce4db610c70a6b30d8f
+timeCreated: 1534817173
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/GameEngine/Model/Config/ItemConfig.cs b/Core/GameEngine/Model/Config/ItemConfig.cs
index 2a21780..b7a0b4d 100644
--- a/Core/GameEngine/Model/Config/ItemConfig.cs
+++ b/Core/GameEngine/Model/Config/ItemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:			绗簩涓栫晫
-//    [  Date ]:		   Friday, August 31, 2018
+//    [  Date ]:		   Tuesday, September 04, 2018
 //--------------------------------------------------------
 
 using UnityEngine;
@@ -21,7 +21,7 @@
 		public int UseLV { get ; private set ; }
 		public int CanSell { get ; private set ; }
 		public int CanTrade { get ; private set ; }
-		public int ComposeID { get ; private set ; }
+		public int[] JumpComposeCondi;
 		public int CanDrop { get ; private set ; }
 		public int CanBind { get ; private set ; }
 		public int CDType { get ; private set ; }
@@ -110,7 +110,12 @@
 			
 				CanTrade=IsNumeric(rawContents[9]) ? int.Parse(rawContents[9]):0; 
 			
-				ComposeID=IsNumeric(rawContents[10]) ? int.Parse(rawContents[10]):0; 
+				string[] JumpComposeCondiStringArray = rawContents[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				JumpComposeCondi = new int[JumpComposeCondiStringArray.Length];
+				for (int i=0;i<JumpComposeCondiStringArray.Length;i++)
+				{
+					 int.TryParse(JumpComposeCondiStringArray[i],out JumpComposeCondi[i]);
+				}
 			
 				CanDrop=IsNumeric(rawContents[11]) ? int.Parse(rawContents[11]):0; 
 			
diff --git a/Core/GameEngine/Model/Config/ItemConfig.cs.meta b/Core/GameEngine/Model/Config/ItemConfig.cs.meta
index 7eac071..5cc5a65 100644
--- a/Core/GameEngine/Model/Config/ItemConfig.cs.meta
+++ b/Core/GameEngine/Model/Config/ItemConfig.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: cfc9e4de91b5b6741bf06e2003e353b9
-timeCreated: 1535682711
+timeCreated: 1536031053
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index f85d97b..cc9d88d 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -185,6 +185,7 @@
         AddAsyncTask<AllPeoplePartyAwardConfig>();
         AddAsyncTask<OrderInfoConfig>();
         AddAsyncTask<TrialExchangeConfig>();
+        AddAsyncTask<DogzDungeonConfig>();
         AddAsyncTask<TrialRewardsConfig>();
         AddAsyncTask<DogzEquipPlusConfig>();
         AddAsyncTask<FairyGrabBossConfig>();
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs
new file mode 100644
index 0000000..3a0bd62
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs
@@ -0,0 +1,29 @@
+锘縰sing UnityEngine;
+using System.Collections;
+
+// A2 27 鏌ヨ鍦板浘NPC鏁伴噺淇℃伅 #tagCMQueryNPCCntInfo
+
+public class CA227_tagCMQueryNPCCntInfo : GameNetPackBasic
+{
+    public uint MapID;    // 鐩爣鍦板浘ID
+    public ushort LineID;    // 绾胯矾ID
+    public byte IsNoTimeLimit;    //鏄惁娌℃湁鏌ヨ鏃堕棿闄愬埗,榛樿鏈夐檺鍒�
+    public byte NPCIDListLen;
+    public string NPCIDList;    // 闇�瑕佹煡璇㈢殑NPCID鍒楄〃
+
+    public CA227_tagCMQueryNPCCntInfo()
+    {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xA227;
+    }
+
+    public override void WriteToBytes()
+    {
+        WriteBytes(MapID, NetDataType.DWORD);
+        WriteBytes(LineID, NetDataType.WORD);
+        WriteBytes(IsNoTimeLimit, NetDataType.BYTE);
+        WriteBytes(NPCIDListLen, NetDataType.BYTE);
+        WriteBytes(NPCIDList, NetDataType.Chars, NPCIDListLen);
+    }
+
+}
\ No newline at end of file
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs.meta b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs.meta
new file mode 100644
index 0000000..45c2534
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA2_Interaction/CA227_tagCMQueryNPCCntInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: cd1ae837bd2fb0740a2eebd1bd12e4bf
+timeCreated: 1534765562
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs
new file mode 100644
index 0000000..414807f
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs
@@ -0,0 +1,40 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Monday, August 20, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Snxxz.UI;
+
+public class DTCA326_tagMCNPCIDCollectionCntInfo : DtcBasic
+{
+
+    DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        var package = vNetPack as HA326_tagMCNPCIDCollectionCntInfo;
+
+        for (int i = 0; i < package.NPCCollCntList.Length; i++)
+        {
+            var collect = package.NPCCollCntList[i];
+            if (collect.NPCID == model.bigBoxNpcId)
+            {
+                model.bigBoxCollectCount = collect.CollectionCnt;
+            }
+
+            if (collect.NPCID == model.smallBoxNpcId)
+            {
+                model.smallBoxCollectCount = collect.CollectionCnt;
+            }
+        }
+    }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs.meta
new file mode 100644
index 0000000..baa8642
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA326_tagMCNPCIDCollectionCntInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9fffd651589b82c46a6274d6209639b8
+timeCreated: 1534766485
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs
index ae30b16..5379314 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3B7_tagMCBOSSAttactCnt.cs
@@ -14,6 +14,7 @@
 {
     WorldBossModel worldBossModel { get { return ModelCenter.Instance.GetModel<WorldBossModel>(); } }
     BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
+    DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
 
     public override void Done(GameNetPackBasic vNetPack)
     {
@@ -32,6 +33,9 @@
                 case 1:
                     bossHomeModel.wearyValue = info.KillCnt;
                     break;
+                case 2:
+                    dogzDungeonModel.wearyValue = info.KillCnt;
+                    break;
             }
         }
     }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs
new file mode 100644
index 0000000..75fd6c0
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs
@@ -0,0 +1,28 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Monday, August 20, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Snxxz.UI;
+
+public class DTCA714_tagMCNPCCntList : DtcBasic {
+
+    DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        var package = vNetPack as HA714_tagMCNPCCntList;
+
+        model.UpdateMonsterSurplusInfo(package);
+
+    }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs.meta
new file mode 100644
index 0000000..9f87282
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Interaction/DTCA714_tagMCNPCCntList.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3fe7c73d652077745ac6d4ff21662559
+timeCreated: 1534765878
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs
new file mode 100644
index 0000000..d368d4c
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs
@@ -0,0 +1,27 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Monday, August 20, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Snxxz.UI;
+
+public class DTCA904_tagGCDogzNPCRefreshTime : DtcBasic
+{
+
+    DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        var package = vNetPack as HA904_tagGCDogzNPCRefreshTime;
+        model.UpdateBoxOrEliteRefreshTime(package);
+    }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs.meta
new file mode 100644
index 0000000..b8c260b
--- /dev/null
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA904_tagGCDogzNPCRefreshTime.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 46d9553ef31c5d041a1c7fe24e4101b3
+timeCreated: 1534766114
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/GameNetSystem.cs b/Core/NetworkPackage/GameNetSystem.cs
index f9cf6d7..6b86bca 100644
--- a/Core/NetworkPackage/GameNetSystem.cs
+++ b/Core/NetworkPackage/GameNetSystem.cs
@@ -15,9 +15,11 @@
     DisconnectState disconnectState;
 
     NetState m_NetState;
-    public NetState netState {
+    public NetState netState
+    {
         get { return this.m_NetState; }
-        set {
+        set
+        {
             if (this.m_NetState != value)
             {
                 switch (m_NetState)
@@ -99,9 +101,16 @@
 
     public void BeginConnectGameServer(string _ip, int _port, Action _onConnected)
     {
-        if (socketController != null && socketController.Connected)
+        try
         {
-            socketController.CloseConnect();
+            if (socketController != null && socketController.Connected)
+            {
+                socketController.CloseConnect();
+            }
+        }
+        catch (System.Exception ex)
+        {
+            DebugEx.Log(ex);
         }
 
         socketController = new ClientSocketController();
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs b/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs
new file mode 100644
index 0000000..0facebc
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs
@@ -0,0 +1,34 @@
+锘縰sing UnityEngine;
+using System.Collections;
+
+// A3 26 NPCID宸查噰闆嗘鏁颁俊鎭� #tagMCNPCIDCollectionCntInfo
+
+public class HA326_tagMCNPCIDCollectionCntInfo : GameNetPackBasic
+{
+    public byte CollNPCCnt;    //閲囬泦NPC璁板綍鏁�
+    public tagMCNPCIDCollectionCnt[] NPCCollCntList = null;    // 閲囬泦NPC娆℃暟璁板綍鍒楄〃
+
+    public HA326_tagMCNPCIDCollectionCntInfo()
+    {
+        _cmd = (ushort)0xA326;
+    }
+
+    public override void ReadFromBytes(byte[] vBytes)
+    {
+        TransBytes(out CollNPCCnt, vBytes, NetDataType.BYTE);
+        NPCCollCntList = new tagMCNPCIDCollectionCnt[CollNPCCnt];
+        for (int i = 0; i < CollNPCCnt; i++)
+        {
+            NPCCollCntList[i] = new tagMCNPCIDCollectionCnt();
+            TransBytes(out NPCCollCntList[i].NPCID, vBytes, NetDataType.DWORD);
+            TransBytes(out NPCCollCntList[i].CollectionCnt, vBytes, NetDataType.BYTE);
+        }
+    }
+
+    public struct tagMCNPCIDCollectionCnt
+    {
+        public uint NPCID;        //NPCID
+        public byte CollectionCnt;        //宸查噰闆嗘鏁�
+    }
+
+}
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs.meta b/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs.meta
new file mode 100644
index 0000000..c8dbc1b
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA3_Function/HA326_tagMCNPCIDCollectionCntInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9503ba9edfa7bc648b1a7ceef6d73f09
+timeCreated: 1534766369
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs b/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs
new file mode 100644
index 0000000..ca0bc7f
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs
@@ -0,0 +1,36 @@
+锘縰sing UnityEngine;
+using System.Collections;
+
+// A7 14 閫氱煡鏌ヨ鐨凬PC鏁伴噺 #tagMCNPCCntList
+
+public class HA714_tagMCNPCCntList : GameNetPackBasic
+{
+    public uint MapID;
+    public byte NPCInfoCnt;
+    public tagMCNPCCntInfo[] NPCInfoList = null;
+
+    public HA714_tagMCNPCCntList()
+    {
+        _cmd = (ushort)0xA714;
+    }
+
+    public override void ReadFromBytes(byte[] vBytes)
+    {
+        TransBytes(out MapID, vBytes, NetDataType.DWORD);
+        TransBytes(out NPCInfoCnt, vBytes, NetDataType.BYTE);
+        NPCInfoList = new tagMCNPCCntInfo[NPCInfoCnt];
+        for (int i = 0; i < NPCInfoCnt; i++)
+        {
+            NPCInfoList[i] = new tagMCNPCCntInfo();
+            TransBytes(out NPCInfoList[i].NPCID, vBytes, NetDataType.DWORD);
+            TransBytes(out NPCInfoList[i].Cnt, vBytes, NetDataType.DWORD);
+        }
+    }
+
+    public struct tagMCNPCCntInfo
+    {
+        public uint NPCID;
+        public uint Cnt;
+    }
+
+}
diff --git a/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs.meta b/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs.meta
new file mode 100644
index 0000000..130f045
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA7_Interaction/HA714_tagMCNPCCntList.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: bf9b9299398fb9a458800aa77445fc16
+timeCreated: 1534765697
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs b/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs
new file mode 100644
index 0000000..fc57e26
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs
@@ -0,0 +1,34 @@
+锘縰sing UnityEngine;
+using System.Collections;
+
+// A9 04 閫氱煡绁炲吔鍓湰NPC鍒锋柊鏃堕棿 #tagGCDogzNPCRefreshTime
+
+public class HA904_tagGCDogzNPCRefreshTime : GameNetPackBasic
+{
+    public byte Cnt;    //淇℃伅涓暟
+    public tagDogzTimeInfoObj[] InfoList = null;    //淇℃伅鍒楄〃
+
+    public HA904_tagGCDogzNPCRefreshTime()
+    {
+        _cmd = (ushort)0xA904;
+    }
+
+    public override void ReadFromBytes(byte[] vBytes)
+    {
+        TransBytes(out Cnt, vBytes, NetDataType.BYTE);
+        InfoList = new tagDogzTimeInfoObj[Cnt];
+        for (int i = 0; i < Cnt; i++)
+        {
+            InfoList[i] = new tagDogzTimeInfoObj();
+            TransBytes(out InfoList[i].NPCID, vBytes, NetDataType.DWORD);
+            TransBytes(out InfoList[i].RefreshSecond, vBytes, NetDataType.DWORD);
+        }
+    }
+
+    public struct tagDogzTimeInfoObj
+    {
+        public uint NPCID;        // npcid
+        public uint RefreshSecond;        // 鍒锋柊鍊掕鏃�, 绉�
+    }
+
+}
\ No newline at end of file
diff --git a/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs.meta b/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs.meta
new file mode 100644
index 0000000..574be7e
--- /dev/null
+++ b/Core/NetworkPackage/ServerPack/HA9_Function/HA904_tagGCDogzNPCRefreshTime.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a6d61160de2d3074dbcaade643da682c
+timeCreated: 1534766033
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/Socket/ClientSocketController.cs b/Core/NetworkPackage/Socket/ClientSocketController.cs
index 4fe1a58..766d090 100644
--- a/Core/NetworkPackage/Socket/ClientSocketController.cs
+++ b/Core/NetworkPackage/Socket/ClientSocketController.cs
@@ -9,7 +9,8 @@
 public class ClientSocketController
 {
     Socket m_Socket;
-    public Socket socket {
+    public Socket socket
+    {
         get { return m_Socket; }
     }
 
@@ -114,16 +115,31 @@
     /// </summary>
     public void CloseConnect()
     {
-        isStopTreading = true;
-        if (m_packageThread != null)
+        try
         {
-            m_packageThread.Abort();
+            isStopTreading = true;
+            if (m_packageThread != null)
+            {
+                m_packageThread.Abort();
+            }
+        }
+        catch (System.Exception ex)
+        {
+            DebugEx.Log(ex);
         }
 
-        if (m_Socket != null && m_Socket.Connected)
+        try
         {
-            m_Socket.Shutdown(SocketShutdown.Both);
-            m_Socket.Close();
+            if (m_Socket != null && m_Socket.Connected)
+            {
+                m_Socket.Shutdown(SocketShutdown.Both);
+                m_Socket.Close();
+            }
+
+        }
+        catch (System.Exception ex)
+        {
+            DebugEx.Log(ex);
         }
 
         sendQueue.Clear();
diff --git a/Core/ResModule/InstanceResourcesLoader.cs b/Core/ResModule/InstanceResourcesLoader.cs
index 4b04a5f..371b385 100644
--- a/Core/ResModule/InstanceResourcesLoader.cs
+++ b/Core/ResModule/InstanceResourcesLoader.cs
@@ -76,7 +76,7 @@
         return LoadMob(_assetBundleName, _assetName);
     }
 
-    public static GameObject LoadModelRes(int id)
+    public static GameObject LoadModelRes(int id, bool _ui = false)
     {
 
         ModelResConfig _m = Config.Instance.Get<ModelResConfig>(id);
@@ -95,26 +95,27 @@
 
         if (_m.Type == (int)E_ModelResType.Suit)
         {
-            return LoadModelPrefab(raceSuffix, _name);
+            return LoadModelPrefab(raceSuffix, _name, _ui);
         }
         else if (_m.Type == (int)E_ModelResType.Horse)
         {
-            return LoadModelPrefab(horseSuffix, _name);
+            return LoadModelPrefab(horseSuffix, _name, _ui);
         }
         else if (_m.Type == (int)E_ModelResType.Wing)
         {
-            return LoadModelPrefab(wingSuffix, _name);
+            return LoadModelPrefab(wingSuffix, _name, _ui);
         }
         else if (_m.Type == (int)E_ModelResType.Weapon)
         {
-            return LoadModelPrefab(weaponSuffix, _name);
+            return LoadModelPrefab(weaponSuffix, _name, _ui);
         }
         else if (_m.Type == (int)E_ModelResType.Secondary)
         {
-            return LoadModelPrefab(secondarySuffix, _name);
+            return LoadModelPrefab(secondarySuffix, _name, _ui);
         }
         return null;
     }
+
 
     public static void LoadCreateRole(int job, Action<bool, UnityEngine.Object> _callBack)
     {
@@ -188,6 +189,17 @@
         return _gameObject;
     }
 
+    private static GameObject LoadModelPrefab(string _suffix, string name, bool _ui)
+    {
+        var prefab = LoadModelPrefab(_suffix, _ui ? name + "_UI" : name);
+        if (prefab == null)
+        {
+            prefab = LoadModelPrefab(_suffix, name);
+        }
+
+        return prefab;
+    }
+
     public static GameObject LoadMob(string assetBundleName, string assetName)
     {
         GameObject _gameObject = null;
diff --git a/Fight/GameActor/GActorNpcNoFight.cs b/Fight/GameActor/GActorNpcNoFight.cs
index 7a89724..9dc616c 100644
--- a/Fight/GameActor/GActorNpcNoFight.cs
+++ b/Fight/GameActor/GActorNpcNoFight.cs
@@ -98,7 +98,7 @@
         if (NpcConfig.NPCEffect != 0)
         {
             m_AppearEffect = SFXPlayUtility.Instance.PlayBattleEffect(NpcConfig.NPCEffect, this);
-            //EffectConfig _effectConfig = ConfigManager.Instance.GetTemplate<EffectConfig>(NpcConfig.NPCEffect);
+            //EffectConfig _effectConfig = Config.Instance.Get<EffectConfig>(NpcConfig.NPCEffect);
             //if (_effectConfig != null)
             //{
             //    SoundPlayer.Instance.PlayAudio(m_AudioSource, _effectConfig.audio);
diff --git a/Fight/MapTransferUtility.cs b/Fight/MapTransferUtility.cs
index 9b069cd..bec6394 100644
--- a/Fight/MapTransferUtility.cs
+++ b/Fight/MapTransferUtility.cs
@@ -786,7 +786,7 @@
         //    return;
         //}
 
-        //NPCConfig _npcConfig = ConfigManager.Instance.GetTemplate<NPCConfig>(NpcID);
+        //NPCConfig _npcConfig = Config.Instance.Get<NPCConfig>(NpcID);
         //if (_npcConfig == null)
         //{
         //    return;
diff --git a/Fight/Stage/Dungeon/MapArea.cs b/Fight/Stage/Dungeon/MapArea.cs
index b93891b..f73d338 100644
--- a/Fight/Stage/Dungeon/MapArea.cs
+++ b/Fight/Stage/Dungeon/MapArea.cs
@@ -115,7 +115,7 @@
             {
                 PlayerDatas.Instance.hero.ExitArea((int)E_Type.Boss);
                 PlayerDatas.Instance.hero.currentBossArea = null;
-                //MapConfig _mapConfig = ConfigManager.Instance.GetTemplate<MapConfig>(PlayerDatas.Instance.baseData.MapID);
+                //MapConfig _mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
                 //SoundPlayer.Instance.PlayBackGroundMusic(_mapConfig.Music);
             }
             else
diff --git a/System/BlastFurnace/FurnaceFireChooseWin.cs b/System/BlastFurnace/FurnaceFireChooseWin.cs
index 6bdcf30..f14c81c 100644
--- a/System/BlastFurnace/FurnaceFireChooseWin.cs
+++ b/System/BlastFurnace/FurnaceFireChooseWin.cs
@@ -145,7 +145,7 @@
 
                     break;
                 //case BlastFurnaceFuncTitle.TreasureRefine:
-                //    chinItemModel = ConfigManager.Instance.GetTemplate<ItemConfig>(extraMatIds[cell.index]);
+                //    chinItemModel = Config.Instance.Get<ItemConfig>(extraMatIds[cell.index]);
                 //    if (chinItemModel != null)
                 //    {
                 //        RefreshCellUI(extraMatIds[cell.index], cell, FurnaceModel.GetFireSuccessRate(chinItemModel.Effect1, chinItemModel.EffectValueA1), fireChooseCell, chinItemModel);
diff --git a/System/BlastFurnace/TreasureRefineSuccessWin.cs b/System/BlastFurnace/TreasureRefineSuccessWin.cs
index 4647ad2..c56aed2 100644
--- a/System/BlastFurnace/TreasureRefineSuccessWin.cs
+++ b/System/BlastFurnace/TreasureRefineSuccessWin.cs
@@ -49,7 +49,7 @@
             //if(_treasure != null)
             //{
             //    _refineModel = TreasureRefineConfig.GetTreasureRefineModel(_treasure.id, _treasure.level);
-            //    _tagTreasureModel = ConfigManager.Instance.GetTemplate<TreasureConfig>(_treasure.id);
+            //    _tagTreasureModel = Config.Instance.Get<TreasureConfig>(_treasure.id);
             //    InitUI();
             //}
             
@@ -85,7 +85,7 @@
             //    if(_refineModel.OpenSkill != 0)
             //    {
             //        _openSkillText.gameObject.SetActive(true);
-            //        tagChinSkill = ConfigManager.Instance.GetTemplate<SkillConfig>(_refineModel.OpenSkill);
+            //        tagChinSkill = Config.Instance.Get<SkillConfig>(_refineModel.OpenSkill);
             //        if(tagChinSkill != null)
             //        {
             //            _openSkillText.text = Language.Get("BlastFurnace110",tagChinSkill.SkillName);
diff --git a/System/BlastFurnace/TreasureRefineTips.cs b/System/BlastFurnace/TreasureRefineTips.cs
index a2bfdae..069b0b3 100644
--- a/System/BlastFurnace/TreasureRefineTips.cs
+++ b/System/BlastFurnace/TreasureRefineTips.cs
@@ -155,7 +155,7 @@
 
         private void RefreshDandrugCell(ScrollerDataType type, CellView cell)
         {
-            //TreasureConfig treasureModel = ConfigManager.Instance.GetTemplate<TreasureConfig>(cell.index);
+            //TreasureConfig treasureModel = Config.Instance.Get<TreasureConfig>(cell.index);
             //Treasure treasure = null;
             //FurnaceModel.sTreasureModel.TryGetTreasure(cell.index, out treasure);
             //TreasureRefineConfig nextRefineModel = null;
diff --git a/System/Chat/ChatCenter.cs b/System/Chat/ChatCenter.cs
index 43c4a03..ef94110 100644
--- a/System/Chat/ChatCenter.cs
+++ b/System/Chat/ChatCenter.cs
@@ -777,6 +777,23 @@
                 if (model.dungeonResult.leaderID == PlayerDatas.Instance.baseData.PlayerID
                     && realmConfig != null && realmConfig.IsBigRealm == 1)
                 {
+                    var count = 0;
+                    var configs = Config.Instance.GetAllValues<RealmConfig>();
+                    for (int i = 0; i < configs.Count; i++)
+                    {
+                        if (configs[i].Lv < realmModel.cacheRealmLv && configs[i].IsBigRealm == 1)
+                        {
+                            count++;
+                        }
+                        else if (configs[i].Lv >= realmModel.cacheRealmLv)
+                        {
+                            break;
+                        }
+                    }
+                    if (count >= 3)
+                    {
+                        return;
+                    }
                     var teamModel = ModelCenter.Instance.GetModel<TeamModel>();
                     for (int i = 0; i < teamModel.myTeam.memberCount; i++)
                     {
diff --git a/System/Compose/New/ComposeTicketWin.cs b/System/Compose/New/ComposeTicketWin.cs
index 8f6aaf0..235e0ed 100644
--- a/System/Compose/New/ComposeTicketWin.cs
+++ b/System/Compose/New/ComposeTicketWin.cs
@@ -157,7 +157,7 @@
                     }
                     else if (!composeWinModel.IsEnoughMoney(compoundModel))
                     {
-                        MessageWin.Inst.ShowFixedTip(Language.Get("L1006"));
+                        MessageWin.Inst.ShowFixedTip(Language.Get("Z1011"));
                         isCanCompose = false;
                     }
 
diff --git a/System/Compose/New/ComposeToolsWin.cs b/System/Compose/New/ComposeToolsWin.cs
index 2941d37..5464226 100644
--- a/System/Compose/New/ComposeToolsWin.cs
+++ b/System/Compose/New/ComposeToolsWin.cs
@@ -80,7 +80,7 @@
         }
 
         AchievementGuideEffect guidEffect = null;
-
+        bool isJumpTo;
         protected override void BindController()
         {
             cellCtrl.OnRefreshCell += RefreshCell;
@@ -98,7 +98,7 @@
         {
             DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnComposeAnswer;
             firstTypeDict = composeWinModel.GetFirstTypeModel((int)ComposeFuncType.Item);
-            bool isJumpTo = false;
+            isJumpTo = false;
             if (AchievementGoto.guideAchievementId != 0)
             {
                 SuccessConfig successConfig = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId);
@@ -154,33 +154,7 @@
             if (curSecondType == 0)
             {
                 RefreshUI(null);
-            }
-
-            if (compoundModel != null)
-            {
-                RefreshUI(compoundModel);
-                if (isJumpTo)
-                {
-                    isJumpTo = false;
-                    bool isCanCompose = true;
-                    if (!composeWinModel.IsEnoughFixedMat(compoundModel) || !composeWinModel.IsEnoughUnfixedMat(compoundModel))
-                    {
-                        MessageWin.Inst.ShowFixedTip(Language.Get("Compose101"));
-                        isCanCompose = false;
-                    }
-                    else if (!composeWinModel.IsEnoughMoney(compoundModel))
-                    {
-                        MessageWin.Inst.ShowFixedTip(Language.Get("L1006"));
-                        isCanCompose = false;
-                    }
-
-                    if (isCanCompose)
-                    {
-                        guidEffect = AchievementGuideEffectPool.Require(1);
-                        guidEffect.transform.SetParentEx(composeBtn.transform, Vector3.zero, Quaternion.identity, Vector3.one);
-                    }
-                }
-            }
+            }     
         }
 
         protected override void OnAfterOpen()
@@ -258,7 +232,38 @@
             {
                 cellCtrl.JumpIndex(curThirdType*50, 0, EnhancedUI.EnhancedScroller.EnhancedScroller.TweenType.immediate);
             }
+            CheckJumpModel();
         }
+
+        private void CheckJumpModel()
+        {
+            if (compoundModel != null)
+            {
+                RefreshUI(compoundModel);
+                if (isJumpTo)
+                {
+                    isJumpTo = false;
+                    bool isCanCompose = true;
+                    if (!composeWinModel.IsEnoughFixedMat(compoundModel) || !composeWinModel.IsEnoughUnfixedMat(compoundModel))
+                    {
+                        MessageWin.Inst.ShowFixedTip(Language.Get("Compose101"));
+                        isCanCompose = false;
+                    }
+                    else if (!composeWinModel.IsEnoughMoney(compoundModel))
+                    {
+                        MessageWin.Inst.ShowFixedTip(Language.Get("L1006"));
+                        isCanCompose = false;
+                    }
+
+                    if (isCanCompose)
+                    {
+                        guidEffect = AchievementGuideEffectPool.Require(1);
+                        guidEffect.transform.SetParentEx(composeBtn.transform, Vector3.zero, Quaternion.identity, Vector3.one);
+                    }
+                }
+            }
+        }
+
         private void RefreshCell(ScrollerDataType type, CellView cell)
         {
             Image icon = cell.transform.Find("BtnIcon").GetComponent<Image>();
diff --git a/System/Compose/New/ComposeWinModel.cs b/System/Compose/New/ComposeWinModel.cs
index 70f69fd..5e2296d 100644
--- a/System/Compose/New/ComposeWinModel.cs
+++ b/System/Compose/New/ComposeWinModel.cs
@@ -801,7 +801,9 @@
         ItemConfig itemConfig = Config.Instance.Get<ItemConfig>(itemId);
         if (itemConfig == null) return false;
 
-        ItemCompoundConfig itemCompound = Config.Instance.Get<ItemCompoundConfig>(itemConfig.ComposeID);
+        int[] composeCondi = itemConfig.JumpComposeCondi;
+        if (composeCondi.Length < 3) return false;
+        ItemCompoundConfig itemCompound = GetThirdTypeModellist(composeCondi[0],composeCondi[1],composeCondi[2])[0];
         if(itemCompound.levelNeed <= PlayerDatas.Instance.baseData.LV)
         {
             switch (itemCompound.firstType)
@@ -824,7 +826,7 @@
             }
             this.secondType = itemCompound.secondType;
 
-            if(itemConfig.ComposeID == 223)
+            if(itemCompound.firstType == 5 && itemCompound.secondType == 3)
             {
                 this.thirdType = PlayerDatas.Instance.baseData.Job;
             }
diff --git a/System/Compose/New/ComposeWingsWin.cs b/System/Compose/New/ComposeWingsWin.cs
index 64beeff..480bd52 100644
--- a/System/Compose/New/ComposeWingsWin.cs
+++ b/System/Compose/New/ComposeWingsWin.cs
@@ -161,7 +161,7 @@
                     }
                     else if(!composeWinModel.IsEnoughMoney(compoundModel))
                     {
-                        MessageWin.Inst.ShowFixedTip(Language.Get("L1006"));
+                        MessageWin.Inst.ShowFixedTip(Language.Get("Z1011"));
                         isCanCompose = false;
                     }
 
diff --git a/System/DailyQuest/DayRemind.cs b/System/DailyQuest/DayRemind.cs
index 7e79d34..754d6c4 100644
--- a/System/DailyQuest/DayRemind.cs
+++ b/System/DailyQuest/DayRemind.cs
@@ -43,6 +43,7 @@
     public const string FLASHSALE_REDPOINT = "FlashSale_Redpoint";
     public const string OSTIMEGIFT_REDPOINT = "OSTimeGift_Redpoint";
     public const string OSGIFT_REDPOINT = "OSGitf_Redpoint";
+    public const string TASK_SKILL_HOLE = "TaskSkillHole";
     public Dictionary<string, int[]> dayRemindDic = new Dictionary<string, int[]>();
 
     public bool GetDayRemind(string _remindKey)
@@ -94,6 +95,7 @@
         SetDayRemind(FLASHSALE_REDPOINT);
         SetDayRemind(OSTIMEGIFT_REDPOINT);
         SetDayRemind(OSGIFT_REDPOINT);
+        SetDayRemind(TASK_SKILL_HOLE);
     }
 
     private void SetDayRemind(string _key)
diff --git a/System/Dogz/DogzDetailBehaviour.cs b/System/Dogz/DogzDetailBehaviour.cs
index ae63781..1bf239f 100644
--- a/System/Dogz/DogzDetailBehaviour.cs
+++ b/System/Dogz/DogzDetailBehaviour.cs
@@ -46,7 +46,7 @@
         public void Display(ItemModel data)
         {
             //m_DogzEquip.Display(data);
-            //var config = ConfigManager.Instance.GetTemplate<ItemConfig>(data.itemId);
+            //var config = Config.Instance.Get<ItemConfig>(data.itemId);
             //if (config != null)
             //{
             //    m_ItemNameTxt.text = config.ItemName;
@@ -60,7 +60,7 @@
             //    {
             //        if (index < m_BasePropertys.Length)
             //        {
-            //            var propertyConfig = ConfigManager.Instance.GetTemplate<PlayerPropertyConfig>(_key);
+            //            var propertyConfig = Config.Instance.Get<PlayerPropertyConfig>(_key);
             //            m_BasePropertys[index].gameObject.SetActive(true);
             //            m_BasePropertys[index].Display(_key, data.basePropertyDict[_key]);
             //        }
@@ -79,7 +79,7 @@
             //    {
             //        if (index < m_SpecialPropertys.Length)
             //        {
-            //            var propertyConfig = ConfigManager.Instance.GetTemplate<PlayerPropertyConfig>(_key);
+            //            var propertyConfig = Config.Instance.Get<PlayerPropertyConfig>(_key);
             //            m_SpecialPropertys[index].gameObject.SetActive(true);
             //            m_SpecialPropertys[index].Display(_key, data.specialPropertyDict[_key]);
             //        }
diff --git a/System/DogzDungeon.meta b/System/DogzDungeon.meta
new file mode 100644
index 0000000..652fdb8
--- /dev/null
+++ b/System/DogzDungeon.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 52a985f55841d694dac464804eae545e
+folderAsset: yes
+timeCreated: 1534559436
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/DogzDungeon/DogzBoxBehaviour.cs b/System/DogzDungeon/DogzBoxBehaviour.cs
new file mode 100644
index 0000000..82cbd47
--- /dev/null
+++ b/System/DogzDungeon/DogzBoxBehaviour.cs
@@ -0,0 +1,64 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Saturday, August 18, 2018
+//--------------------------------------------------------
+using UnityEngine;
+using System.Collections;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+
+    public class DogzBoxBehaviour : MonoBehaviour
+    {
+        [SerializeField] Text m_BigBoxCount;
+        [SerializeField] Text m_SmallBoxCount;
+        [SerializeField] RawImage m_RawImage;
+
+        DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+        public void Display()
+        {
+            timer = 0f;
+            UI3DModelExhibition.Instance.BeginShowNPC(model.bigBoxNpcId, Vector3.zero, m_RawImage);
+            DisplayBoxSurplusInfo();
+            model.boxSurplusChangeEvent += OnBoxInfoUpdate;
+        }
+
+        public void Dispose()
+        {
+            model.boxSurplusChangeEvent -= OnBoxInfoUpdate;
+            UI3DModelExhibition.Instance.StopShowNPC();
+        }
+
+        private void OnBoxInfoUpdate()
+        {
+            DisplayBoxSurplusInfo();
+        }
+
+        private void DisplayBoxSurplusInfo()
+        {
+            var boxInfo = model.dogzDungeonBox;
+            m_BigBoxCount.text = boxInfo.bigBoxSurplus.ToString();
+            m_BigBoxCount.color = UIHelper.GetUIColor(boxInfo.bigBoxSurplus > 0 ? TextColType.White : TextColType.Red);
+            m_SmallBoxCount.text = boxInfo.smallBoxSurplus.ToString();
+            m_SmallBoxCount.color = UIHelper.GetUIColor(boxInfo.smallBoxSurplus > 0 ? TextColType.White : TextColType.Red);
+        }
+
+        float timer = 0f;
+        private void LateUpdate()
+        {
+            timer += Time.deltaTime;
+            if (timer > 30)
+            {
+                timer = 0f;
+                model.RequestBoxSurplusInfo();
+            }
+        }
+
+    }
+
+}
+
+
+
diff --git a/System/DogzDungeon/DogzBoxBehaviour.cs.meta b/System/DogzDungeon/DogzBoxBehaviour.cs.meta
new file mode 100644
index 0000000..bab1e41
--- /dev/null
+++ b/System/DogzDungeon/DogzBoxBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2e487abe9c3d74147b7a132a647f110c
+timeCreated: 1534563273
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs b/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs
new file mode 100644
index 0000000..1784381
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs
@@ -0,0 +1,204 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Saturday, August 18, 2018
+//--------------------------------------------------------
+using UnityEngine;
+using System.Collections;
+using UnityEngine.UI;
+using TableConfig;
+using System;
+
+namespace Snxxz.UI
+{
+
+    public class DogzDungeonBreifInfoBehaviour : FindPreciousBossBriefInfoBehaviour
+    {
+
+        [SerializeField] Image m_Attention;
+
+        protected override int selectedBossId
+        {
+            get
+            {
+                return model.selectedBoss;
+            }
+            set
+            {
+                model.selectedBoss = value;
+            }
+        }
+
+        protected override InteractorableState interactorableState
+        {
+            get
+            {
+                var selected = selectedBossId == bossId;
+                var config = Config.Instance.Get<DogzDungeonConfig>(bossId);
+                var dieOrLocked = false;
+                switch (config.MonsterType)
+                {
+                    case 1:
+                    case 2:
+                        dieOrLocked = model.dogzDungeonBox.bigBoxSurplus <= 0;
+                        break;
+                    case 3:
+                        dieOrLocked = model.dogzDungeonElite.eliteSurplus <= 0;
+                        break;
+                    case 4:
+                        dieOrLocked = !model.IsBossUnLocked(bossId) || !findPreciousModel.IsBossAlive(bossId);
+                        break;
+                }
+
+                if (!dieOrLocked)
+                {
+                    return selected ? InteractorableState.NormalSelected : InteractorableState.NormalUnSelected;
+                }
+                else
+                {
+                    return selected ? InteractorableState.DieOrLockedSelected : InteractorableState.DieOrLockedUnSelected;
+                }
+            }
+            set
+            {
+                base.interactorableState = value;
+            }
+        }
+
+        protected override bool isUnLocked
+        {
+            get
+            {
+                return model.IsBossUnLocked(bossId);
+            }
+        }
+
+        DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+        public override void Display(object _data)
+        {
+            base.Display(_data);
+
+            m_Attention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId));
+            var config = Config.Instance.Get<DogzDungeonConfig>(bossId);
+            var npcConfig = Config.Instance.Get<NPCConfig>(bossId);
+
+            DrawBossBaseInfo(config.PortraitID, npcConfig.charName, npcConfig.NPCLV, npcConfig.Realm);
+            UpdateBossRebornCoolDown(isUnLocked);
+            UpdateBossPortrait(interactorableState);
+            OnSelected(bossId);
+
+            model.boxSurplusChangeEvent -= OnGuardInfoUpdate;
+            model.boxSurplusChangeEvent -= OnBoxInfoUpdate;
+            model.dogzDungeonBox.refreshTimeEvent -= OnBoxRefreshTimeChange;
+            model.dogzDungeonElite.refreshTimeEvent -= OnEliteRefreshTimeChange;
+
+            switch (config.MonsterType)
+            {
+                case 1:
+                case 2:
+                    model.dogzDungeonBox.refreshTimeEvent += OnBoxRefreshTimeChange;
+                    model.boxSurplusChangeEvent += OnGuardInfoUpdate;
+                    break;
+                case 3:
+                    model.dogzDungeonElite.refreshTimeEvent += OnEliteRefreshTimeChange;
+                    model.boxSurplusChangeEvent += OnBoxInfoUpdate;
+                    break;
+            }
+
+            model.bossSelectedEvent -= OnSelected;
+            model.bossSelectedEvent += OnSelected;
+        }
+
+        public override void Dispose()
+        {
+            base.Dispose();
+            model.bossSelectedEvent -= OnSelected;
+            model.boxSurplusChangeEvent -= OnGuardInfoUpdate;
+            model.boxSurplusChangeEvent -= OnBoxInfoUpdate;
+            model.dogzDungeonBox.refreshTimeEvent -= OnBoxRefreshTimeChange;
+            model.dogzDungeonElite.refreshTimeEvent -= OnEliteRefreshTimeChange;
+        }
+
+        protected override void UpdateBossRebornCoolDown(bool _isUnLocked)
+        {
+            if (_isUnLocked)
+            {
+                var config = Config.Instance.Get<DogzDungeonConfig>(bossId);
+                var refreshTime = DateTime.Now;
+                switch (config.MonsterType)
+                {
+                    case 1:
+                    case 2:
+                        refreshTime = model.dogzDungeonBox.refreshTime;
+                        break;
+                    case 3:
+                        refreshTime = model.dogzDungeonElite.refreshTime;
+                        break;
+                    case 4:
+                        FindPreciousModel.BossInfo bossInfo;
+                        if (findPreciousModel.TryGetBossInfo(bossId, out bossInfo) && !bossInfo.IsBossAlive())
+                        {
+                            refreshTime = bossInfo.refreshTime;
+                        }
+                        break;
+                }
+
+                if (refreshTime > DateTime.Now)
+                {
+                    m_CoolDown.Begin(refreshTime, OnBossCoolDownCompleted);
+                }
+                else
+                {
+                    m_CoolDown.gameObject.SetActive(false);
+                }
+            }
+            else
+            {
+                m_CoolDown.gameObject.SetActive(false);
+            }
+        }
+
+
+        private void OnBoxRefreshTimeChange()
+        {
+            UpdateBossRebornCoolDown(isUnLocked);
+        }
+
+        private void OnEliteRefreshTimeChange()
+        {
+            UpdateBossRebornCoolDown(isUnLocked);
+        }
+
+        private void OnGuardInfoUpdate()
+        {
+            UpdateBossPortrait(interactorableState);
+        }
+
+        private void OnBoxInfoUpdate()
+        {
+            UpdateBossPortrait(interactorableState);
+        }
+
+        private void OnSelected(int _bossId)
+        {
+            UpdateBossNameLevelFont(interactorableState);
+        }
+
+        protected override void OnSubscribe(int _bossId)
+        {
+            base.OnSubscribe(_bossId);
+            if (bossId != _bossId)
+            {
+                return;
+            }
+
+            m_Attention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId));
+        }
+
+    }
+
+}
+
+
+
+
diff --git a/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs.meta b/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs.meta
new file mode 100644
index 0000000..12234c0
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonBreifInfoBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 61b922330133f6946a1b5f9b6b6f62a6
+timeCreated: 1534559500
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/DogzDungeon/DogzDungeonModel.cs b/System/DogzDungeon/DogzDungeonModel.cs
new file mode 100644
index 0000000..56cb4d1
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonModel.cs
@@ -0,0 +1,419 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TableConfig;
+using System;
+
+namespace Snxxz.UI
+{
+    public class DogzDungeonModel : Model
+    {
+
+        public const int DOGZDUNGEON_REDPOINT = 76009;
+        public const int DATA_MAPID = 21110;
+
+        int m_SelectedBoss = 0;
+        public int selectedBoss
+        {
+            get
+            {
+                return this.m_SelectedBoss;
+            }
+            set
+            {
+                if (this.m_SelectedBoss != value)
+                {
+                    this.m_SelectedBoss = value;
+                    if (bossSelectedEvent != null)
+                    {
+                        bossSelectedEvent(value);
+                    }
+                }
+            }
+        }
+
+        int m_WearyValue = 0;
+        public int wearyValue
+        {
+            get { return m_WearyValue; }
+            set
+            {
+                if (m_WearyValue != value)
+                {
+                    m_WearyValue = value;
+                    if (bossWearyValueChangeEvent != null)
+                    {
+                        bossWearyValueChangeEvent();
+                    }
+                }
+            }
+        }
+
+        int m_BigBoxCollectCount = 0;
+        public int bigBoxCollectCount
+        {
+            get { return m_BigBoxCollectCount; }
+            set
+            {
+                if (m_BigBoxCollectCount != value)
+                {
+                    m_BigBoxCollectCount = value;
+                    if (bigBoxCollectCountChangeEvent != null)
+                    {
+                        bigBoxCollectCountChangeEvent();
+                    }
+                }
+            }
+        }
+
+        int m_SmallBoxCollectCount = 0;
+        public int smallBoxCollectCount
+        {
+            get { return m_SmallBoxCollectCount; }
+            set { m_SmallBoxCollectCount = value; }
+        }
+
+        public event Action<int> bossSelectedEvent;
+        public event Action bossWearyValueChangeEvent;
+        public event Action bigBoxCollectCountChangeEvent;
+        public event Action boxSurplusChangeEvent;
+        public event Action eliteSurplusChangeEvent;
+
+        List<int> sortedBossIds = new List<int>();
+        Dictionary<int, DogzDungeonBossData> bosses = new Dictionary<int, DogzDungeonBossData>();
+        public DogzDungeonBox dogzDungeonBox = new DogzDungeonBox();
+        public DogzDungeonElite dogzDungeonElite = new DogzDungeonElite();
+        Redpoint redpoint = new Redpoint(DOGZDUNGEON_REDPOINT);
+
+        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
+
+        public int bigBoxNpcId = 0;
+        public int smallBoxNpcId = 0;
+        public List<int> eliteMonsters = new List<int>();
+
+        public override void Init()
+        {
+            ParseConfig();
+        }
+
+        public override void UnInit()
+        {
+        }
+
+        public bool TryGetBossData(int _bossId, out DogzDungeonBossData _data)
+        {
+            return bosses.TryGetValue(_bossId, out _data);
+        }
+
+        public List<int> GetNpcIds()
+        {
+            var npcIds = new List<int>();
+            npcIds.Add(bigBoxNpcId);
+            npcIds.Add(eliteMonsters[0]);
+            npcIds.AddRange(bosses.Keys);
+
+            return npcIds;
+        }
+
+        public List<int> GetBosses()
+        {
+            return new List<int>(bosses.Keys);
+        }
+
+        public int GetRecommendNpc()
+        {
+            if (bigBoxCollectCount < 2) //鏈柌鍔�
+            {
+                return bigBoxNpcId;//澶у疂绠眓pc id
+            }
+
+            if (wearyValue < GeneralConfig.Instance.bossWearyValues[2])
+            {
+                var playerLevel = PlayerDatas.Instance.baseData.LV;
+                for (int i = sortedBossIds.Count - 1; i >= 0; i--)
+                {
+                    var bossId = sortedBossIds[i];
+                    var dogzConfig = Config.Instance.Get<DogzDungeonConfig>(bossId);
+                    if (dogzConfig.MonsterType == 3 || dogzConfig.MonsterType == 4)
+                    {
+                        var npcConfig = Config.Instance.Get<NPCConfig>(bossId);
+                        if (IsBossUnLocked(bossId) && findPreciousModel.IsBossAlive(bossId) && playerLevel >= npcConfig.NPCLV)
+                        {
+                            return bossId;
+                        }
+                    }
+                }
+
+                return sortedBossIds[0];
+            }
+
+            return bigBoxNpcId;//澶у疂绠� npcid
+        }
+
+        public int GetRecommendKillElite()
+        {
+            var Elite = dogzDungeonElite.GetAliveElite();
+            if (Elite == 0)
+            {
+                Elite = eliteMonsters[0];
+            }
+
+            return Elite;
+        }
+
+        public bool IsBossUnLocked(int _bossId)
+        {
+            if (_bossId == bigBoxNpcId || _bossId == smallBoxNpcId)
+            {
+                return true;
+            }
+
+            if (eliteMonsters.Contains(_bossId))
+            {
+                return true;
+            }
+
+            return bosses.ContainsKey(_bossId) && bosses[_bossId].isUnLocked;
+        }
+
+        public void RequestBoxAndEliteSurplusInfo()
+        {
+            var sendInfo = new CA227_tagCMQueryNPCCntInfo();
+            sendInfo.MapID = DATA_MAPID;
+            sendInfo.LineID = 0;
+            var stringArray = new string[eliteMonsters.Count + 2];
+            for (int i = 0; i < eliteMonsters.Count; i++)
+            {
+                stringArray[i] = eliteMonsters[i].ToString();
+            }
+
+            stringArray[eliteMonsters.Count] = bigBoxNpcId.ToString();
+            stringArray[eliteMonsters.Count + 1] = smallBoxNpcId.ToString();
+
+            sendInfo.NPCIDList = string.Format("[{0}]", string.Join(",", stringArray));
+            sendInfo.NPCIDListLen = (byte)sendInfo.NPCIDList.Length;
+            GameNetSystem.Instance.SendInfo(sendInfo);
+        }
+
+        public void RequestBoxSurplusInfo()
+        {
+            var sendInfo = new CA227_tagCMQueryNPCCntInfo();
+            sendInfo.MapID = DATA_MAPID;
+            sendInfo.LineID = 0;
+            sendInfo.NPCIDList = string.Format("[{0},{1}]", bigBoxNpcId, smallBoxNpcId);
+            sendInfo.NPCIDListLen = (byte)sendInfo.NPCIDList.Length;
+            GameNetSystem.Instance.SendInfo(sendInfo);
+        }
+
+        public void RequestEliteSurplusInfo()
+        {
+            var sendInfo = new CA227_tagCMQueryNPCCntInfo();
+            sendInfo.MapID = DATA_MAPID;
+            sendInfo.LineID = 0;
+            var stringArray = new string[eliteMonsters.Count];
+            for (int i = 0; i < stringArray.Length; i++)
+            {
+                stringArray[i] = eliteMonsters[i].ToString();
+            }
+
+            sendInfo.NPCIDList = string.Format("[{0}]", string.Join(",", stringArray));
+            sendInfo.NPCIDListLen = (byte)sendInfo.NPCIDList.Length;
+            GameNetSystem.Instance.SendInfo(sendInfo);
+        }
+
+        public void UpdateMonsterSurplusInfo(HA714_tagMCNPCCntList _npcInfoes)
+        {
+            if (_npcInfoes.MapID != DATA_MAPID)
+            {
+                return;
+            }
+
+            var updatedBox = false;
+            var updatedElite = false;
+            for (int i = 0; i < _npcInfoes.NPCInfoList.Length; i++)
+            {
+                var npcInfo = _npcInfoes.NPCInfoList[i];
+                if (npcInfo.NPCID == bigBoxNpcId)
+                {
+                    dogzDungeonBox.bigBoxSurplus = (int)npcInfo.Cnt;
+                    updatedBox = true;
+                }
+
+                if (npcInfo.NPCID == smallBoxNpcId)
+                {
+                    dogzDungeonBox.smallBoxSurplus = (int)npcInfo.Cnt;
+                    updatedBox = true;
+                }
+
+                if (eliteMonsters.Contains((int)npcInfo.NPCID))
+                {
+                    dogzDungeonElite.UpdateEliteInfo((int)npcInfo.NPCID, (int)npcInfo.Cnt);
+                    updatedElite = true;
+                }
+            }
+
+            if (updatedBox)
+            {
+                if (boxSurplusChangeEvent != null)
+                {
+                    boxSurplusChangeEvent();
+                }
+            }
+
+            if (updatedElite)
+            {
+                if (eliteSurplusChangeEvent != null)
+                {
+                    eliteSurplusChangeEvent();
+                }
+            }
+
+        }
+
+        public void UpdateBoxOrEliteRefreshTime(HA904_tagGCDogzNPCRefreshTime _refreshTimes)
+        {
+            for (int i = 0; i < _refreshTimes.InfoList.Length; i++)
+            {
+                var info = _refreshTimes.InfoList[i];
+                if (bigBoxNpcId == info.NPCID || smallBoxNpcId == info.NPCID)
+                {
+                    dogzDungeonBox.UpdateBoxRefreshTime((int)info.RefreshSecond);
+                    RequestBoxSurplusInfo();
+                }
+
+                if (eliteMonsters.Contains((int)info.NPCID))
+                {
+                    dogzDungeonElite.UpdateEliteRefreshTime((int)info.RefreshSecond);
+                    RequestEliteSurplusInfo();
+                }
+            }
+        }
+
+        private void ParseConfig()
+        {
+            var configs = Config.Instance.GetAllValues<DogzDungeonConfig>();
+            foreach (var config in configs)
+            {
+                switch (config.MonsterType)
+                {
+                    case 1:
+                        bigBoxNpcId = config.NPCID;
+                        break;
+                    case 2:
+                        smallBoxNpcId = config.NPCID;
+                        break;
+                    case 3:
+                        eliteMonsters.Add(config.NPCID);
+                        break;
+                    case 4:
+                        bosses[config.NPCID] = new DogzDungeonBossData(config.NPCID);
+                        sortedBossIds.Add(config.NPCID);
+                        break;
+                }
+            }
+
+            sortedBossIds.Sort(DogzDungeonBossData.LevelCompare);
+        }
+    }
+
+    public class DogzDungeonBox
+    {
+        public int bigBoxSurplus;
+        public int smallBoxSurplus;
+        public DateTime refreshTime { get; private set; }
+
+        public event Action refreshTimeEvent;
+
+        public void UpdateBoxInfo(int _big, int _small)
+        {
+            bigBoxSurplus = _big;
+            smallBoxSurplus = _small;
+        }
+
+        public void UpdateBoxRefreshTime(int _seconds)
+        {
+            refreshTime = DateTime.Now + new TimeSpan(_seconds * TimeSpan.TicksPerSecond);
+            DebugEx.Log("瀹濈鍒锋柊鏃堕棿:" + refreshTime);
+            if (refreshTimeEvent != null)
+            {
+                refreshTimeEvent();
+            }
+        }
+    }
+
+    public class DogzDungeonElite
+    {
+        public Dictionary<int, int> eliteCounts = new Dictionary<int, int>();
+        public int eliteSurplus
+        {
+            get
+            {
+                var count = 0;
+                foreach (var eliteCount in eliteCounts.Values)
+                {
+                    count += eliteCount;
+                }
+                return count;
+            }
+        }
+
+        public DateTime refreshTime { get; private set; }
+        public event Action refreshTimeEvent;
+
+        public void UpdateEliteInfo(int _npcId, int _count)
+        {
+            eliteCounts[_npcId] = _count;
+        }
+
+        public void UpdateEliteRefreshTime(int _seconds)
+        {
+            refreshTime = DateTime.Now + new TimeSpan(_seconds * TimeSpan.TicksPerSecond);
+            if (refreshTimeEvent != null)
+            {
+                refreshTimeEvent();
+            }
+            DebugEx.Log("绮捐嫳鍒锋柊鏃堕棿:" + refreshTime);
+        }
+
+        public int GetAliveElite()
+        {
+            foreach (var EliteCount in eliteCounts)
+            {
+                if (EliteCount.Key > 0)
+                {
+                    return EliteCount.Value;
+                }
+            }
+
+            return 0;
+        }
+    }
+
+    public class DogzDungeonBossData
+    {
+        public int id { get; private set; }
+        public bool isUnLocked
+        {
+            get
+            {
+                var config = Config.Instance.Get<NPCConfig>(id);
+                return PlayerDatas.Instance.baseData.LV >= config.NPCLV;
+            }
+        }
+
+        public DogzDungeonBossData(int _id)
+        {
+            this.id = _id;
+        }
+
+        public static int LevelCompare(int a, int b)
+        {
+            var configA = Config.Instance.Get<NPCConfig>(a);
+            var configB = Config.Instance.Get<NPCConfig>(b);
+
+            return configA.NPCLV < configB.NPCLV ? -1 : 1;
+        }
+    }
+
+}
+
diff --git a/System/DogzDungeon/DogzDungeonModel.cs.meta b/System/DogzDungeon/DogzDungeonModel.cs.meta
new file mode 100644
index 0000000..3daa7b5
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonModel.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 978a73f0055381a48aef1e53492b7407
+timeCreated: 1534559596
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/DogzDungeon/DogzDungeonWin.cs b/System/DogzDungeon/DogzDungeonWin.cs
new file mode 100644
index 0000000..9c262c0
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonWin.cs
@@ -0,0 +1,259 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Saturday, August 18, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using TableConfig;
+
+namespace Snxxz.UI
+{
+
+    public class DogzDungeonWin : Window
+    {
+
+        [SerializeField] CyclicScroll m_Bosses;
+        [SerializeField] DogzBoxBehaviour m_BoxBehaviour;
+        [SerializeField] DogzEliteMonsterBehaviour m_EliteMonsterBehaviour;
+        [SerializeField] BossIntroduceBehaviour m_BossIntroduce;
+
+        [SerializeField] Button m_Goto;
+        [SerializeField] ImageEx m_ImageGoto;
+        [SerializeField] Button m_KillRecord;
+        [SerializeField] Transform m_SurpassLevel;
+        [SerializeField] ToggleButton m_Subscribe;
+
+        [SerializeField] RectTransform m_ContainerBoxCollectWeary;
+        [SerializeField] TextEx m_BoxCollectWearyValue;
+        [SerializeField] RectTransform m_ContainerBossKillWeary;
+        [SerializeField] TextEx m_BossKillWearyValue;
+
+        DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
+        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
+
+        #region Built-in
+        protected override void BindController()
+        {
+        }
+
+        protected override void AddListeners()
+        {
+            m_Goto.AddListener(GotoKillBoss);
+            m_KillRecord.AddListener(ShowKillRecords);
+            m_Subscribe.AddListener(SwitchSubscribeBoss);
+        }
+
+        protected override void OnPreOpen()
+        {
+        }
+
+        protected override void OnAfterOpen()
+        {
+            model.bossSelectedEvent += OnBossSelected;
+            findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss;
+        }
+
+        protected override void OnPreClose()
+        {
+            model.bossSelectedEvent -= OnBossSelected;
+            findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss;
+        }
+
+        protected override void OnAfterClose()
+        {
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
+            ShowBosses();
+            model.RequestBoxAndEliteSurplusInfo();
+        }
+        #endregion
+
+        private void ShowBosses()
+        {
+            var bosses = model.GetNpcIds();
+            model.selectedBoss = model.GetRecommendNpc();
+            m_Bosses.Init(bosses);
+            m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));
+
+            // DisplayItemDropTip(model.selectedBoss);
+            DisplayBossBaseInfo(model.selectedBoss);
+            DisplayWearyValue(model.selectedBoss);
+        }
+
+        private void ShowKillRecords()
+        {
+            findPreciousModel.ViewKillRecordsBoss = model.selectedBoss;
+            WindowCenter.Instance.Open<KillRecordsWin>();
+        }
+
+        private void SwitchSubscribeBoss()
+        {
+            if (findPreciousModel.IsBossSubscribed(model.selectedBoss))
+            {
+                findPreciousModel.RequestDeSubscribeBoss(model.selectedBoss);
+            }
+            else
+            {
+                findPreciousModel.RequestSubscribeBoss(model.selectedBoss, false);
+            }
+        }
+
+        private void GotoKillBoss()
+        {
+            if (PlayerDatas.Instance.baseData.MapID == DogzDungeonModel.DATA_MAPID)
+            {
+                WindowCenter.Instance.Close<LootPreciousFrameWin>();
+                WindowCenter.Instance.Open<MainInterfaceWin>();
+            }
+
+            var config = Config.Instance.Get<DogzDungeonConfig>(model.selectedBoss);
+            switch (config.MonsterType)
+            {
+                case 1:
+                case 2:
+                case 3:
+                    if (PlayerDatas.Instance.baseData.MapID != DogzDungeonModel.DATA_MAPID)
+                    {
+                        var map = Config.Instance.Get<MapConfig>(DogzDungeonModel.DATA_MAPID);
+                        var position = new Vector3(map.BornPoints[0].x, 0, map.BornPoints[0].y);
+                        MapTransferUtility.Send_WorldTransfer(DogzDungeonModel.DATA_MAPID, position, MapTransferType.WorldTransport, 0, 0);
+                    }
+                    break;
+                case 4:
+                    MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
+                    break;
+            }
+        }
+
+        private void OnSubscribeBoss(int _bossId)
+        {
+            m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
+        }
+
+        private void OnBossSelected(int _bossId)
+        {
+            //DisplayItemDropTip(_bossId);
+            DisplayBossBaseInfo(_bossId);
+            DisplayWearyValue(_bossId);
+        }
+
+        private void DisplayBossBaseInfo(int _bossId)
+        {
+            var config = Config.Instance.Get<DogzDungeonConfig>(_bossId);
+            switch (config.MonsterType)
+            {
+                case 1:
+                case 2:
+                    m_KillRecord.gameObject.SetActive(false);
+                    m_BossIntroduce.Dispose();
+                    m_BossIntroduce.gameObject.SetActive(false);
+                    m_EliteMonsterBehaviour.Dispose();
+                    m_EliteMonsterBehaviour.gameObject.SetActive(false);
+                    m_BoxBehaviour.gameObject.SetActive(true);
+                    m_BoxBehaviour.Display();
+                    break;
+                case 3:
+                    m_KillRecord.gameObject.SetActive(false);
+                    m_BossIntroduce.Dispose();
+                    m_BossIntroduce.gameObject.SetActive(false);
+                    m_BoxBehaviour.gameObject.SetActive(false);
+                    m_BoxBehaviour.Dispose();
+
+                    m_EliteMonsterBehaviour.gameObject.SetActive(true);
+                    m_EliteMonsterBehaviour.Display();
+                    break;
+                case 4:
+                    m_KillRecord.gameObject.SetActive(true);
+                    m_BoxBehaviour.Dispose();
+                    m_BoxBehaviour.gameObject.SetActive(false);
+                    m_EliteMonsterBehaviour.Dispose();
+                    m_EliteMonsterBehaviour.gameObject.SetActive(false);
+
+                    m_BossIntroduce.gameObject.SetActive(true);
+                    m_BossIntroduce.Display(_bossId, true);
+                    m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(_bossId);
+                    break;
+            }
+        }
+
+        private void DisplayItemDropTip(int _bossId)
+        {
+            var config = Config.Instance.Get<DogzDungeonConfig>(model.selectedBoss);
+            switch (config.MonsterType)
+            {
+                case 1:
+                case 2:
+                case 3:
+                    m_SurpassLevel.gameObject.SetActive(false);
+                    break;
+                case 4:
+                    var npcDropConfig = Config.Instance.Get<NPCDropItemConfig>(_bossId);
+                    m_SurpassLevel.gameObject.SetActive(npcDropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > npcDropConfig.MaxLV);
+                    m_SurpassLevel.gameObject.SetActive(true);
+                    break;
+            }
+        }
+
+        private void DisplayWearyValue(int _bossId)
+        {
+            var config = Config.Instance.Get<DogzDungeonConfig>(model.selectedBoss);
+            switch (config.MonsterType)
+            {
+                case 1:
+                case 2:
+                    m_ContainerBoxCollectWeary.gameObject.SetActive(true);
+                    m_ContainerBossKillWeary.gameObject.SetActive(false);
+                    var bigBoxCollectCountLimit = 2;
+                    m_BoxCollectWearyValue.text = StringUtility.Contact(model.bigBoxCollectCount, "/", bigBoxCollectCountLimit);
+                    m_BoxCollectWearyValue.colorType = model.bigBoxCollectCount >= bigBoxCollectCountLimit ? TextColType.Red : TextColType.DarkGreen;
+                    break;
+                case 3:
+                case 4:
+                    m_ContainerBoxCollectWeary.gameObject.SetActive(false);
+                    m_ContainerBossKillWeary.gameObject.SetActive(true);
+                    var wearyValueLimit = GeneralConfig.Instance.bossWearyValues[2];
+                    m_BossKillWearyValue.text = StringUtility.Contact(model.wearyValue, "/", wearyValueLimit);
+                    m_BossKillWearyValue.colorType = model.wearyValue >= wearyValueLimit ? TextColType.Red : TextColType.DarkGreen;
+                    break;
+            }
+        }
+
+        private void EnterDogzDungeon()
+        {
+            var error = 0;
+            if (TestEnterDungeon(out error))
+            {
+                MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
+            }
+            else
+            {
+                ProcessEnterDungeonError(error);
+            }
+        }
+
+        private bool TestEnterDungeon(out int _error)
+        {
+            _error = 0;
+            return true;
+        }
+
+        private void ProcessEnterDungeonError(int _error)
+        {
+        }
+
+
+    }
+
+}
+
+
+
+
diff --git a/System/DogzDungeon/DogzDungeonWin.cs.meta b/System/DogzDungeon/DogzDungeonWin.cs.meta
new file mode 100644
index 0000000..6c8005a
--- /dev/null
+++ b/System/DogzDungeon/DogzDungeonWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e5074977b4d949f40b8568222ecfc23b
+timeCreated: 1534559453
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/DogzDungeon/DogzEliteMonsterBehaviour.cs b/System/DogzDungeon/DogzEliteMonsterBehaviour.cs
new file mode 100644
index 0000000..92542fb
--- /dev/null
+++ b/System/DogzDungeon/DogzEliteMonsterBehaviour.cs
@@ -0,0 +1,60 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Saturday, August 18, 2018
+//--------------------------------------------------------
+using UnityEngine;
+using System.Collections;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+
+    public class DogzEliteMonsterBehaviour : MonoBehaviour
+    {
+        [SerializeField] Text m_Elite;
+        [SerializeField] RawImage m_RawImage;
+
+        DogzDungeonModel model { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
+
+        public void Display()
+        {
+            timer = 0f;
+            UI3DModelExhibition.Instance.BeginShowNPC(model.eliteMonsters[0], Vector3.zero, m_RawImage);
+            DisplayGuardSurplusInfo();
+            model.boxSurplusChangeEvent += OnGuardInfoUpdate;
+        }
+
+        public void Dispose()
+        {
+            model.boxSurplusChangeEvent -= OnGuardInfoUpdate;
+            UI3DModelExhibition.Instance.StopShowNPC();
+        }
+
+        private void OnGuardInfoUpdate()
+        {
+            DisplayGuardSurplusInfo();
+        }
+
+        private void DisplayGuardSurplusInfo()
+        {
+            var guard = model.dogzDungeonElite;
+            m_Elite.text = guard.eliteSurplus.ToString();
+            m_Elite.color = UIHelper.GetUIColor(guard.eliteSurplus > 0 ? TextColType.White : TextColType.Red);
+        }
+
+        float timer = 0f;
+        private void LateUpdate()
+        {
+            timer += Time.deltaTime;
+            if (timer > 30f)
+            {
+                timer = 0f;
+                model.RequestEliteSurplusInfo();
+            }
+        }
+    }
+
+}
+
+
+
diff --git a/System/DogzDungeon/DogzEliteMonsterBehaviour.cs.meta b/System/DogzDungeon/DogzEliteMonsterBehaviour.cs.meta
new file mode 100644
index 0000000..b5a5ede
--- /dev/null
+++ b/System/DogzDungeon/DogzEliteMonsterBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e1cbf382b6be57544a7603a6af20a97f
+timeCreated: 1534563304
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/FindPrecious/BossIntroduceBehaviour.cs b/System/FindPrecious/BossIntroduceBehaviour.cs
index 18bb249..08ac38f 100644
--- a/System/FindPrecious/BossIntroduceBehaviour.cs
+++ b/System/FindPrecious/BossIntroduceBehaviour.cs
@@ -131,6 +131,9 @@
                     }
                     unusualRewards = demonJarConfig.RareItemID;
                     break;
+                case FindPreciousType.DogzDungeon:
+                    undoubtedlyRewards = Config.Instance.Get<DogzDungeonConfig>(bossId).RareItemID;
+                    break;
             }
 
             if (m_UndoubtedlyRewardGroup != null)
diff --git a/System/FindPrecious/FindPreciousBossBriefInfoBehaviour.cs b/System/FindPrecious/FindPreciousBossBriefInfoBehaviour.cs
index df5c0ba..732b3f8 100644
--- a/System/FindPrecious/FindPreciousBossBriefInfoBehaviour.cs
+++ b/System/FindPrecious/FindPreciousBossBriefInfoBehaviour.cs
@@ -83,7 +83,7 @@
             findPreciousModel.bossInfoUpdateEvent -= OnBossInfoUpdate;
         }
 
-        protected void DrawBossBaseInfo(string _icon, string _name, int _level, int _realm)
+        protected virtual void DrawBossBaseInfo(string _icon, string _name, int _level, int _realm)
         {
             m_Portrait.SetSprite(_icon);
             m_Portrait.SetNativeSize();
@@ -134,7 +134,7 @@
             m_Portrait.material = isGray ? m_GrayMaterial : m_NormalMaterial;
         }
 
-        protected void UpdateBossRebornCoolDown(bool _isUnLocked)
+        protected virtual void UpdateBossRebornCoolDown(bool _isUnLocked)
         {
             if (_isUnLocked)
             {
@@ -224,13 +224,16 @@
                 }
             }
 
-            if (isRebornRightNow && !m_RefreshAtOnce.gameObject.activeInHierarchy)
+            if (m_RefreshAtOnce != null)
             {
-                m_RefreshAtOnce.gameObject.SetActive(true);
-            }
-            else if (!isRebornRightNow && m_RefreshAtOnce.gameObject.activeInHierarchy)
-            {
-                m_RefreshAtOnce.gameObject.SetActive(false);
+                if (isRebornRightNow && !m_RefreshAtOnce.gameObject.activeInHierarchy)
+                {
+                    m_RefreshAtOnce.gameObject.SetActive(true);
+                }
+                else if (!isRebornRightNow && m_RefreshAtOnce.gameObject.activeInHierarchy)
+                {
+                    m_RefreshAtOnce.gameObject.SetActive(false);
+                }
             }
         }
 
diff --git a/System/FindPrecious/FindPreciousBossRebornBehaviour.cs b/System/FindPrecious/FindPreciousBossRebornBehaviour.cs
index b1fc650..197dda7 100644
--- a/System/FindPrecious/FindPreciousBossRebornBehaviour.cs
+++ b/System/FindPrecious/FindPreciousBossRebornBehaviour.cs
@@ -27,6 +27,7 @@
         DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
         DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
         BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
+        DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
 
         private void OnEnable()
         {
@@ -45,7 +46,7 @@
             if (model.currentBossNotify != 0)
             {
                 var type = model.GetBossFindPreciousType(model.currentBossNotify);
-                if (type == FindPreciousModel.FindPreciousType.DemonJar)
+                if (type == FindPreciousType.DemonJar)
                 {
                     if (demonJarModel.GetSurplusTimes() <= 0)
                     {
@@ -83,19 +84,22 @@
 
             switch (type)
             {
-                case FindPreciousModel.FindPreciousType.DemonJar:
+                case FindPreciousType.DemonJar:
                     GotoKillDemonJarBoss(bossId);
                     break;
-                case FindPreciousModel.FindPreciousType.WorldBoss:
+                case FindPreciousType.WorldBoss:
                     GotoKillWorldBoss(bossId);
                     break;
-                case FindPreciousModel.FindPreciousType.BossHome:
+                case FindPreciousType.BossHome:
                     GotoKillBossHomeBoss(bossId);
                     break;
-                case FindPreciousModel.FindPreciousType.ElderGodArea:
+                case FindPreciousType.ElderGodArea:
                     GotoKillElderGodAreaBoss(bossId);
                     break;
-                case FindPreciousModel.FindPreciousType.PersonalBoss:
+                case FindPreciousType.PersonalBoss:
+                    break;
+                case FindPreciousType.DogzDungeon:
+                    GotoKillDogzDungeonBoss(bossId);
                     break;
             }
 
@@ -244,6 +248,21 @@
 
         }
 
+        private void GotoKillDogzDungeonBoss(int _bossId)
+        {
+            var mapId = PlayerDatas.Instance.baseData.MapID;
+            var mapConfig = Config.Instance.Get<MapConfig>(mapId);
+
+            if (mapConfig.MapFBType == (int)MapType.OpenCountry)
+            {
+                MapTransferUtility.Instance.MoveToNPC(_bossId);
+            }
+            else
+            {
+                SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo");
+            }
+        }
+
         private void EnterBossHome(int _floor,int _bossId)
         {
             var error = 0;
diff --git a/System/FindPrecious/FindPreciousModel.cs b/System/FindPrecious/FindPreciousModel.cs
index 0a171ca..69a7498 100644
--- a/System/FindPrecious/FindPreciousModel.cs
+++ b/System/FindPrecious/FindPreciousModel.cs
@@ -1,10 +1,10 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using System;
-using TableConfig;
-using System.Text;
-
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+using TableConfig;
+using System.Text;
+
 namespace Snxxz.UI
 {
     public class FindPreciousModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk, IMapInitOk, ISwitchAccount
@@ -14,7 +14,8 @@
         Redpoint findPreciousRedpoint = new Redpoint(FINDPRECIOUS_REDPOINTID);
 
         int m_ViewKillRecordsBoss = 0;
-        public int ViewKillRecordsBoss {
+        public int ViewKillRecordsBoss
+        {
             get { return this.m_ViewKillRecordsBoss; }
             set { this.m_ViewKillRecordsBoss = value; }
         }
@@ -23,9 +24,11 @@
         List<int> bossNotifies = new List<int>();
 
         int m_CurrentBossNotify = 0;
-        public int currentBossNotify {
+        public int currentBossNotify
+        {
             get { return m_CurrentBossNotify; }
-            private set {
+            private set
+            {
                 if (m_CurrentBossNotify != value)
                 {
                     m_CurrentBossNotify = value;
@@ -424,6 +427,10 @@
             {
                 return FindPreciousType.PersonalBoss;
             }
+            else if (Config.Instance.ContainKey<DogzDungeonConfig>(_bossId))
+            {
+                return FindPreciousType.DogzDungeon;
+            }
 
             return FindPreciousType.None;
         }
@@ -649,16 +656,6 @@
 
         }
 
-        public enum FindPreciousType
-        {
-            None,
-            WorldBoss,
-            BossHome,
-            PersonalBoss,
-            ElderGodArea,
-            DemonJar,
-        }
-
     }
-}
-
+}
+
diff --git a/System/FindPrecious/LootPreciousFrameWin.cs b/System/FindPrecious/LootPreciousFrameWin.cs
index 3eb7c7f..d050756 100644
--- a/System/FindPrecious/LootPreciousFrameWin.cs
+++ b/System/FindPrecious/LootPreciousFrameWin.cs
@@ -16,6 +16,7 @@
         [SerializeField] FunctionButtonGroup m_FunctionGroup;
         [SerializeField] FunctionButton m_DemonJar;
         [SerializeField] FunctionButton m_FairyGrabBoss;
+        [SerializeField] FunctionButton m_DogzDungeon;
 
         [SerializeField] Button m_Left;
         [SerializeField] Button m_Right;
@@ -31,8 +32,8 @@
         protected override void AddListeners()
         {
             m_DemonJar.AddListener(ShowDemonJar);
+            m_DogzDungeon.AddListener(ShowDogzDungeon);
             m_FairyGrabBoss.AddListener(FairyGrabBoss);
-
             m_Left.AddListener(ShowLastFunction);
             m_Right.AddListener(ShowNextFunction);
             m_Close.AddListener(CloseClick);
@@ -85,9 +86,17 @@
             functionOrder = m_FairyGrabBoss.order;
         }
 
+        private void ShowDogzDungeon()
+        {
+            CloseSubWindows();
+            WindowCenter.Instance.Open<DogzDungeonWin>();
+            functionOrder = m_DogzDungeon.order;
+        }
+
         private void CloseSubWindows()
         {
             WindowCenter.Instance.CloseImmediately<DemonJarWin>();
+            WindowCenter.Instance.CloseImmediately<DogzDungeonWin>();
             WindowCenter.Instance.CloseImmediately<FairyGrabBossWin>();
         }
 
diff --git a/System/FindPrecious/WorldBossWin.cs b/System/FindPrecious/WorldBossWin.cs
index 61c9e70..1e16710 100644
--- a/System/FindPrecious/WorldBossWin.cs
+++ b/System/FindPrecious/WorldBossWin.cs
@@ -43,8 +43,9 @@
 
         protected override void OnPreOpen()
         {
-            m_WearyValue.text = StringUtility.Contact(model.wearyValue, "/", GeneralConfig.Instance.bossWearyValues[0] + model.extraBossWearyValue);
-            m_WearyValue.colorType = model.wearyValue >= GeneralConfig.Instance.bossWearyValues[0]+model.extraBossWearyValue ? TextColType.Red : TextColType.DarkGreen;
+            var wearyValueLimit = GeneralConfig.Instance.bossWearyValues[0] + model.extraBossWearyValue;
+            m_WearyValue.text = StringUtility.Contact(model.wearyValue, "/", wearyValueLimit);
+            m_WearyValue.colorType = model.wearyValue >= wearyValueLimit ? TextColType.Red : TextColType.DarkGreen;
         }
 
         protected override void OnAfterOpen()
diff --git a/System/FriendSystem/New/FriendsModel.cs b/System/FriendSystem/New/FriendsModel.cs
index fa4853c..667adea 100644
--- a/System/FriendSystem/New/FriendsModel.cs
+++ b/System/FriendSystem/New/FriendsModel.cs
@@ -133,7 +133,7 @@
         ChatCtrl.Inst.PteChatName = name;
         LanguageVerify.toPlayerLevel = 0;
         MapConfig mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-        string msg = StringUtility.Contact(Language.Get("KillOthersDes", mapConfig.Name,StringUtility.Contact("<color=#FF0101FF", UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName), "</color>")),ChatCtrl.KILL_IDENTIFY);
+        string msg = StringUtility.Contact(Language.Get("KillOthersDes", mapConfig.Name,StringUtility.Contact("<color=#FF0101FF>", UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName), "</color>")),ChatCtrl.KILL_IDENTIFY);
         ChatCtrl.Inst.SendChatInfo(ChatInfoType.Friend,msg);
     }
 
diff --git a/System/GeneralConfig/GeneralConfig.cs b/System/GeneralConfig/GeneralConfig.cs
index 8fad424..28d0b32 100644
--- a/System/GeneralConfig/GeneralConfig.cs
+++ b/System/GeneralConfig/GeneralConfig.cs
@@ -116,6 +116,7 @@
     public List<int> bossHomeNoRebornRemindMaps = null;
     public List<int> elderGodNoRebornRemindMaps = null;
     public List<int> demonJarNoRebornRemindMaps = null;
+    public List<int> dogzNoRebornRemindMaps = null;
 
     public string[][] ModeDefaultConfig { get; private set; }
     public int[] RealmGroup { get; private set; }
@@ -126,6 +127,7 @@
     public int inGameDownLoadHighestLevelPoint { get; private set; }
 
     public List<int> dungeonCanUseMoneyIds { get; private set; }
+    public int dogzBoxLimit { get; private set; }
 
     public Dictionary<int, int> dungeonRebornClientTimes { get; private set; }
     public int[] CompareEquipPlaces { get; private set; }
@@ -406,6 +408,7 @@
             bossHomeNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 2));
             elderGodNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 3));
             demonJarNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 4));
+            dogzNoRebornRemindMaps = new List<int>(GetIntArray("NoRebornRemindMap", 5));
 
             if (ModeDefaultConfig == null)
             {
@@ -440,6 +443,7 @@
 
             dungeonCanUseMoneyIds = new List<int>(GetIntArray("FBEnterTickeyAuto", 1));
             dungeonRebornClientTimes = ConfigParse.GetDic<int, int>(GetInputString("DuplicatesRebornTime", 2));
+            dogzBoxLimit = GetInt("DogzBoxLimit");
 
             fairyGrabBossMapLines = ConfigParse.GetDic<int, int>(GetInputString("MapLine", 2));
             var grabBossMaps = fairyGrabBossMapLines.Keys.ToList();
diff --git a/System/KnapSack/Logic/ItemTipsModel.cs b/System/KnapSack/Logic/ItemTipsModel.cs
index 143c8e7..8cac379 100644
--- a/System/KnapSack/Logic/ItemTipsModel.cs
+++ b/System/KnapSack/Logic/ItemTipsModel.cs
@@ -612,7 +612,7 @@
 
             if (!isOverdue)
             {
-                if(attrData.itemConfig.ComposeID != 0)
+                if(attrData.itemConfig.JumpComposeCondi != null && attrData.itemConfig.JumpComposeCondi.Length > 0)
                 {
                     attrData.SetTipsFuncBtn(ItemWinBtnType.compose, (ItemWinBtnType, ItemAttrData) => {
                         int jumpId = 0;
diff --git a/System/MainInterfacePanel/CardLevelTaskButton.cs b/System/MainInterfacePanel/CardLevelTaskButton.cs
index 4e83c85..01ee0fc 100644
--- a/System/MainInterfacePanel/CardLevelTaskButton.cs
+++ b/System/MainInterfacePanel/CardLevelTaskButton.cs
@@ -66,7 +66,7 @@
             m_TitlesText.text= "<color=#feed28> " + TaskTitle(TaskId) + " </color>";
             string str = _AllMissionDict[TaskId].InforList;
             m_ContentsText.gameObject.SetActive(false);
-            //var config = ConfigManager.Instance.GetTemplate<TASKINFOConfig>(str);
+            //var config = Config.Instance.Get<TASKINFOConfig>(str);
             //if (config != null)
             //{
             //    m_ContentsText.text = config.show_writing;
diff --git a/System/MainInterfacePanel/InGamePushContainer.cs b/System/MainInterfacePanel/InGamePushContainer.cs
index 0eea09e..c9b4bc9 100644
--- a/System/MainInterfacePanel/InGamePushContainer.cs
+++ b/System/MainInterfacePanel/InGamePushContainer.cs
@@ -206,18 +206,20 @@
                     var mapId = PlayerDatas.Instance.baseData.MapID;
                     switch (findPreciousType)
                     {
-                        case FindPreciousModel.FindPreciousType.WorldBoss:
+                        case FindPreciousType.WorldBoss:
                             show = !GeneralConfig.Instance.worldBossNoRebornRemindMaps.Contains(mapId);
                             break;
-                        case FindPreciousModel.FindPreciousType.BossHome:
+                        case FindPreciousType.BossHome:
                             show = !GeneralConfig.Instance.bossHomeNoRebornRemindMaps.Contains(mapId);
                             break;
-                        case FindPreciousModel.FindPreciousType.ElderGodArea:
+                        case FindPreciousType.ElderGodArea:
                             show = !GeneralConfig.Instance.elderGodNoRebornRemindMaps.Contains(mapId);
                             break;
-                        case FindPreciousModel.FindPreciousType.DemonJar:
+                        case FindPreciousType.DemonJar:
                             show = !GeneralConfig.Instance.demonJarNoRebornRemindMaps.Contains(mapId);
                             break;
+                        case FindPreciousType.DogzDungeon:
+                            break;
                     }
 
                     if (show)
diff --git a/System/MainInterfacePanel/MainInterfaceWin.cs b/System/MainInterfacePanel/MainInterfaceWin.cs
index 9f68072..58a0678 100644
--- a/System/MainInterfacePanel/MainInterfaceWin.cs
+++ b/System/MainInterfacePanel/MainInterfaceWin.cs
@@ -295,7 +295,16 @@
                 if (isNeutralMap)
                 {
                     m_BossBriefInfos.gameObject.SetActive(true);
-                    m_BossBriefInfos.Display(ModelCenter.Instance.GetModel<WorldBossModel>().GetWorldBosses(PlayerDatas.Instance.baseData.MapID));
+                    if (PlayerDatas.Instance.baseData.MapID==DogzDungeonModel.DATA_MAPID)
+                    {
+                        var bosses = ModelCenter.Instance.GetModel<DogzDungeonModel>().GetBosses();
+                        m_BossBriefInfos.Display(bosses);
+                    }
+                    else
+                    {
+                        var bosses = ModelCenter.Instance.GetModel<WorldBossModel>().GetWorldBosses(PlayerDatas.Instance.baseData.MapID);
+                        m_BossBriefInfos.Display(bosses);
+                    }
                 }
                 else
                 {
diff --git a/System/Mount/MountSkillWin.cs b/System/Mount/MountSkillWin.cs
index e31101c..75fb6b2 100644
--- a/System/Mount/MountSkillWin.cs
+++ b/System/Mount/MountSkillWin.cs
@@ -226,12 +226,12 @@
                         if (_GetMountSkills.ContainsKey(_MountList[Index]))//瑙i攣
                         {
                             _MountSkill.Lock.SetActive(false);
-                          //  _MountSkill.MountNameTxt1.text = ConfigManager.Instance.GetTemplate<HorseConfig>(_MountSkillDic[(_MountList[Index])].HorseID).Name;
+                          //  _MountSkill.MountNameTxt1.text = Config.Instance.Get<HorseConfig>(_MountSkillDic[(_MountList[Index])].HorseID).Name;
                             _MountSkill.SkillTex.material = MaterialUtility.GetUIDefaultGraphicMaterial();//浜�
                         }
                         else//鏈В閿�
                         {
-                        //    _MountSkill.MountNameTxt1.text = ConfigManager.Instance.GetTemplate<HorseConfig>(_MountSkillDic[(_MountList[Index])].HorseID).Name;
+                        //    _MountSkill.MountNameTxt1.text = Config.Instance.Get<HorseConfig>(_MountSkillDic[(_MountList[Index])].HorseID).Name;
                             _MountSkill.Lock.SetActive(false);
                         }
 
@@ -302,7 +302,7 @@
             _mountSkill.SkillTex.material = MaterialUtility.GetDefaultSpriteGrayMaterial();//鐏�
             _mountSkill.Lock.SetActive(true);
             _mountSkill.SkillNameTxt.text = SkillConfig.GetSkillTypeIDAndSkillLV(SkillID, 1).SkillName;
-         //   _mountSkill.MountNameTxt1.text = "<color=#ff2828>" + ConfigManager.Instance.GetTemplate<HorseConfig>(_MountSkillDic[SkillID].HorseID).Name + "</color>";
+         //   _mountSkill.MountNameTxt1.text = "<color=#ff2828>" + Config.Instance.Get<HorseConfig>(_MountSkillDic[SkillID].HorseID).Name + "</color>";
         }
 
         void Consumables(int SkillID)
diff --git a/System/Realm/RealmBossShow.cs b/System/Realm/RealmBossShow.cs
index 891a8e6..26a105a 100644
--- a/System/Realm/RealmBossShow.cs
+++ b/System/Realm/RealmBossShow.cs
@@ -1,8 +1,8 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using TableConfig;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TableConfig;
 namespace Snxxz.UI
 {
     public class RealmBossShow : MonoBehaviour
@@ -244,7 +244,7 @@
                 newClothes = item == null ? newClothes = config.BaseEquip[0] : item.ChangeOrd;
             }
 
-            var _prefab = InstanceResourcesLoader.LoadModelRes(newClothes);
+            var _prefab = InstanceResourcesLoader.LoadModelRes(newClothes,true);
             if (!_prefab)
             {
                 newClothes = config.BaseEquip[0];
@@ -257,7 +257,7 @@
 
         private void LoadClothes(int resID)
         {
-            var prefab = InstanceResourcesLoader.LoadModelRes(resID);
+            var prefab = InstanceResourcesLoader.LoadModelRes(resID,true);
             if (clothesModel == null)
             {
                 clothesModel = Instantiate(prefab, Constants.Special_Hide_Position, Quaternion.identity);
@@ -287,7 +287,7 @@
             }
         }
 
-        public void LoadClothesEffect(int job,int clothedID, int suitLevel)
+        public void LoadClothesEffect(int job, int clothedID, int suitLevel)
         {
             var _equipModel = ModelCenter.Instance.GetModel<PlayerPackModel>().GetSinglePackModel(PackType.rptEquip);
             if (_equipModel == null)
@@ -389,5 +389,5 @@
             }
         }
     }
-}
-
+}
+
diff --git a/System/Skill/SkillModel.cs b/System/Skill/SkillModel.cs
index daca465..c988c69 100644
--- a/System/Skill/SkillModel.cs
+++ b/System/Skill/SkillModel.cs
@@ -49,6 +49,7 @@
         public bool jumpToPass { get; set; }
         public int minTaskHole { get; private set; }
         public int maxTaskHole { get; private set; }
+        public int immediatelyUnlockTask { get; private set; }
         void ParseConfig()
         {
             for (int i = 1; i <= 3; i++)
@@ -85,6 +86,8 @@
                 passEquipCnt = int.Parse(funcCfg.Numerical2);
                 taskHoleDict = ConfigParse.GetDic<int, int>(funcCfg.Numerical4);
             }
+            funcCfg = Config.Instance.Get<FuncConfigConfig>("PassiveSkillTask");
+            immediatelyUnlockTask = int.Parse(funcCfg.Numerical2);
             funcCfg = Config.Instance.Get<FuncConfigConfig>("PassSkillEquipGetWay");
             if (funcCfg != null)
             {
@@ -350,6 +353,7 @@
                     taskHoleCondition = result;
                 }
             }
+            UpdateTaskHoleRedpoint();
         }
 
         RolePromoteModel m_PromoteModel;
@@ -527,6 +531,7 @@
             }
             playerLoginOk = true;
             UpdateRedpoint();
+            UpdateTaskHoleRedpoint();
         }
 
         public void CheckEquipPassSkill(PlayerSkillData _skill)
@@ -645,6 +650,36 @@
             DayRemind.Instance.SetDayRemind(DayRemind.PASS_SKILL_REDPOINT, true);
             UpdateRedpoint();
         }
+
+        public Redpoint taskHoleRedpoint = new Redpoint(10302, 1030299);
+        void UpdateTaskHoleRedpoint()
+        {
+            taskHoleRedpoint.state = RedPointState.None;
+            if (DayRemind.Instance.GetDayRemind(DayRemind.TASK_SKILL_HOLE))
+            {
+                return;
+            }
+            foreach (var hole in taskHoleDict.Keys)
+            {
+                var taskId = taskHoleDict[hole];
+                if (taskId == immediatelyUnlockTask)
+                {
+                    var config = Config.Instance.Get<PyTaskConfig>(taskId);
+                    if (PlayerDatas.Instance.baseData.LV >= config.lv
+                        && !IsTaskHoleUnlock(hole))
+                    {
+                        taskHoleRedpoint.state = RedPointState.Simple;
+                    }
+                    return;
+                }
+            }
+        }
+
+        public void SetTaskHoleRemind()
+        {
+            DayRemind.Instance.SetDayRemind(DayRemind.TASK_SKILL_HOLE, true);
+            UpdateTaskHoleRedpoint();
+        }
         #endregion
 
         private void OnFuncStateChangeEvent(int _id)
@@ -652,6 +687,7 @@
             if (_id == 109)
             {
                 UpdateRedpoint();
+                UpdateTaskHoleRedpoint();
             }
         }
     }
diff --git a/System/Skill/SkillPassWin.cs b/System/Skill/SkillPassWin.cs
index cc3ad72..f41ac36 100644
--- a/System/Skill/SkillPassWin.cs
+++ b/System/Skill/SkillPassWin.cs
@@ -32,6 +32,7 @@
         [Header("GetWay")]
         [SerializeField]
         Button m_GetWayBtn;
+        [SerializeField] Button m_ImmediatelyUnlock;
         [SerializeField] ScrollerController scrollerController;
         [SerializeField] RectTransform m_ContainerGetWay;
         [SerializeField] ClickScreenOtherSpace clickOtherSpace;
@@ -68,6 +69,9 @@
             }
         }
 
+        PlayerMainDate taskMain { get { return ModelCenter.Instance.GetModel<PlayerMainDate>(); } }
+        PlayerPackModel pack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
+
         static readonly Color equipHoleLimitColor = new Color32(250, 3, 3, 255);
         static readonly Color equipHoleUnLimitColor = new Color32(51, 8, 0, 255);
         #region Built-in
@@ -100,6 +104,7 @@
             }
             scrollerController.OnRefreshCell += OnRefreshCell;
             m_GetWayBtn.onClick.AddListener(OnGetWayBtn);
+            m_ImmediatelyUnlock.onClick.AddListener(ImmediatelyUnlock);
             clickOtherSpace.AddListener(() =>
             {
                 m_ContainerGetWay.gameObject.SetActive(false);
@@ -111,6 +116,7 @@
             m_DragImg.gameObject.SetActive(false);
             m_ContainerGetWay.gameObject.SetActive(false);
             m_GetWayBtn.gameObject.SetActive(false);
+            m_ImmediatelyUnlock.gameObject.SetActive(false);
             flipScroll.locked = false;
             PlayerSkillDatas.OnRefreshSkill += OnRefreshSkill;
             model.OnRefreshSltSkill += OnRefreshSltSkill;
@@ -136,6 +142,24 @@
         {
             base.OnActived();
             UpdatePageBtn();
+
+            if (model.taskHoleRedpoint.state == RedPointState.Simple)
+            {
+                model.SetTaskHoleRemind();
+                for (int i = 0; i < equipPassSkills.Count; i++)
+                {
+                    PassSkillLimit limit;
+                    if (model.TryGetPassSkillLimit(i, out limit))
+                    {
+                        if (limit.OpenSkillSlots > 0
+                            && model.taskHoleDict[limit.OpenSkillSlots] == model.immediatelyUnlockTask)
+                        {
+                            OnClickEquipHole(i, false);
+                            return;
+                        }
+                    }
+                }
+            }
         }
 
         protected override void OnAfterOpen()
@@ -237,33 +261,44 @@
             flipScroll.RefreshActive();
             var _equipIndex = GetEquipHoleIndex(model.presentSltSkillID);
             SetEquipHoleSelect(_equipIndex);
-            m_GetWayBtn.gameObject.SetActive(CheckOpenGetWays(_equipIndex));
+            m_GetWayBtn.gameObject.SetActive(CheckOpenGetWays(_equipIndex) == 1);
+            m_ImmediatelyUnlock.gameObject.SetActive(CheckOpenGetWays(_equipIndex) == 2);
             OnUpdateSltSkillInfo();
         }
 
-        private bool CheckOpenGetWays(int _index)
+        private int CheckOpenGetWays(int _index)
         {
             PassSkillLimit _limit;
             if (model.TryGetPassSkillLimit(_index, out _limit))
             {
                 if (_limit.level > 0 && PlayerDatas.Instance.baseData.LV < _limit.level)
                 {
-                    return true;
+                    return 1;
                 }
                 else if (_limit.vipLv > 0 && PlayerDatas.Instance.baseData.VIPLv < _limit.vipLv)
                 {
-                    return true;
+                    return 1;
                 }
                 else if (_limit.MountLv > 0 && promoteModel.GetMountTotallv() < _limit.MountLv)
                 {
-                    return true;
+                    return 1;
                 }
                 else if (_limit.OpenSkillSlots > 0 && !model.IsTaskHoleUnlock(_limit.OpenSkillSlots))
                 {
-                    return false;
+                    if (model.taskHoleDict.ContainsKey(_limit.OpenSkillSlots))
+                    {
+                        var taskId = model.taskHoleDict[_limit.OpenSkillSlots];
+                        var config = Config.Instance.Get<PyTaskConfig>(taskId);
+                        if (PlayerDatas.Instance.baseData.LV >= config.lv
+                            && taskId == model.immediatelyUnlockTask)
+                        {
+                            return 2;
+                        }
+                    }
+                    return 3;
                 }
             }
-            return false;
+            return 0;
         }
 
         private void OnRefreshPlayerInfo(PlayerDataRefresh type)
@@ -411,19 +446,29 @@
                         {
                             SetEquipSkillDeActive(i);
                             equipPassSkills[i].skillData.m_SkillNameTxt.color = equipHoleLimitColor;
-                            var taskName = string.Empty;
+
                             if (model.taskHoleDict.ContainsKey(limit.OpenSkillSlots))
                             {
-                                var taskConfig = Config.Instance.Get<PyTaskConfig>(model.taskHoleDict[limit.OpenSkillSlots]);
-                                if (taskConfig != null)
+                                var taskId = model.taskHoleDict[limit.OpenSkillSlots];
+                                var config = Config.Instance.Get<PyTaskConfig>(taskId);
+                                if (PlayerDatas.Instance.baseData.LV < config.lv)
                                 {
-                                    var taskInfoConfig = Config.Instance.Get<TASKINFOConfig>(taskConfig.name);
-                                    taskName = taskInfoConfig == null ? string.Empty : taskInfoConfig.show_writing;
+                                    equipPassSkills[i].skillData.m_SkillNameTxt.text =
+                                        UIHelper.ReplaceNewLine(Language.Get("PassSkillHoleLimitTask_6", config.lv));
+                                    continue;
                                 }
                             }
                             equipPassSkills[i].skillData.m_SkillNameTxt.text =
                                 UIHelper.ReplaceNewLine(Language.Get(StringUtility.Contact("PassSkillHoleLimitTask_", limit.OpenSkillSlots)));
                             continue;
+                        }
+                        else if (model.taskHoleDict[limit.OpenSkillSlots] == model.immediatelyUnlockTask
+                            && model.IsTaskHoleUnlock(limit.OpenSkillSlots))
+                        {
+                            if (m_ImmediatelyUnlock.gameObject.activeSelf)
+                            {
+                                m_ImmediatelyUnlock.gameObject.SetActive(false);
+                            }
                         }
                     }
                 }
@@ -445,7 +490,7 @@
                 var dis = Vector3.Distance(des.center, src.center);
                 if (dis < rect.rect.width / 2)
                 {
-                    if (CheckOpenGetWays(i))
+                    if (CheckOpenGetWays(i) != 0)
                     {
                         //SoundPlayer.Instance.PlayUIAudio(2);
                         return;
@@ -477,7 +522,8 @@
             UpdatePassEquipPageBtn();
             var _equipIndex = GetEquipHoleIndex(model.presentSltSkillID);
             SetEquipHoleSelect(_equipIndex);
-            m_GetWayBtn.gameObject.SetActive(CheckOpenGetWays(_equipIndex));
+            m_GetWayBtn.gameObject.SetActive(CheckOpenGetWays(_equipIndex) == 1);
+            m_ImmediatelyUnlock.gameObject.SetActive(CheckOpenGetWays(_equipIndex) == 2);
         }
 
         private void UpdatePassEquipPageBtn()
@@ -488,10 +534,11 @@
             }
         }
 
-        private void OnClickEquipHole(int index)
+        private void OnClickEquipHole(int index, bool requireRemind = true)
         {
             PassSkillLimit limit;
             m_GetWayBtn.gameObject.SetActive(false);
+            m_ImmediatelyUnlock.gameObject.SetActive(false);
             SetEquipHoleSelect(index);
             if (model.TryGetPassSkillLimit(index, out limit))
             {
@@ -499,7 +546,10 @@
                 {
                     if (PlayerDatas.Instance.baseData.LV < limit.level)
                     {
-                        SysNotifyMgr.Instance.ShowTip("PassEquipLimitLevel", limit.level);
+                        if (requireRemind)
+                        {
+                            SysNotifyMgr.Instance.ShowTip("PassEquipLimitLevel", limit.level);
+                        }
                         m_GetWayBtn.gameObject.SetActive(true);
                     }
                 }
@@ -507,7 +557,10 @@
                 {
                     if (PlayerDatas.Instance.baseData.VIPLv < limit.vipLv)
                     {
-                        SysNotifyMgr.Instance.ShowTip("PassEquipLimitVip", limit.vipLv);
+                        if (requireRemind)
+                        {
+                            SysNotifyMgr.Instance.ShowTip("PassEquipLimitVip", limit.vipLv);
+                        }
                         m_GetWayBtn.gameObject.SetActive(true);
                         return;
                     }
@@ -516,7 +569,10 @@
                 {
                     if (promoteModel.GetMountTotallv() < limit.MountLv)
                     {
-                        SysNotifyMgr.Instance.ShowTip("PassEquipLimitMountLevel", limit.MountLv);
+                        if (requireRemind)
+                        {
+                            SysNotifyMgr.Instance.ShowTip("PassEquipLimitMountLevel", limit.MountLv);
+                        }
                         m_GetWayBtn.gameObject.SetActive(true);
                     }
                 }
@@ -524,17 +580,24 @@
                 {
                     if (!model.IsTaskHoleUnlock(limit.OpenSkillSlots))
                     {
-                        var taskName = string.Empty;
                         if (model.taskHoleDict.ContainsKey(limit.OpenSkillSlots))
                         {
-                            var taskConfig = Config.Instance.Get<PyTaskConfig>(model.taskHoleDict[limit.OpenSkillSlots]);
-                            if (taskConfig != null)
+                            var taskId = model.taskHoleDict[limit.OpenSkillSlots];
+                            var config = Config.Instance.Get<PyTaskConfig>(taskId);
+                            if (PlayerDatas.Instance.baseData.LV < config.lv)
                             {
-                                var taskInfoConfig = Config.Instance.Get<TASKINFOConfig>(taskConfig.name);
-                                taskName = taskInfoConfig == null ? string.Empty : taskInfoConfig.show_writing;
+                                m_GetWayBtn.gameObject.SetActive(false);
+                                return;
+                            }
+                            if (taskId == model.immediatelyUnlockTask)
+                            {
+                                m_ImmediatelyUnlock.gameObject.SetActive(true);
                             }
                         }
-                        SysNotifyMgr.Instance.ShowTip(StringUtility.Contact("PassSkillHoleLimitTask_", limit.OpenSkillSlots));
+                        if (requireRemind)
+                        {
+                            SysNotifyMgr.Instance.ShowTip(StringUtility.Contact("PassSkillHoleLimitTask_", limit.OpenSkillSlots));
+                        }
                         m_GetWayBtn.gameObject.SetActive(false);
                     }
                 }
@@ -562,6 +625,39 @@
             m_ContainerGetWay.gameObject.SetActive(true);
         }
 
+        void ImmediatelyUnlock()
+        {
+            var count = pack.GetItemCountByID(PackType.rptItem, taskMain.ItemID);
+            if (count >= taskMain.ItemNumber)
+            {
+                task.CompletionOfTask(model.immediatelyUnlockTask);
+            }
+            else
+            {
+                var requireJade = (ulong)((taskMain.ItemNumber - count) * taskMain.UnitPrice);
+                ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("PassiveSkillTask3", requireJade), 
+                    (bool isOk) =>
+                {
+                    if (isOk)
+                    {
+                        if (UIHelper.GetMoneyCnt(1) >= requireJade)
+                        {
+                            task.CompletionOfTask(model.immediatelyUnlockTask);
+                        }
+                        else
+                        {
+                            if (VersionConfig.Get().isBanShu)
+                            {
+                                SysNotifyMgr.Instance.ShowTip("GoldErr");
+                                return;
+                            }
+                            WindowCenter.Instance.Open<RechargeTipWin>();
+                        }
+                    }
+                });
+            }
+        }
+
         private void OnClickFunc(CellView cell)
         {
             WindowJumpMgr.Instance.WindowJumpTo((JumpUIType)cell.index);
diff --git a/System/Strengthening/GemModel.cs b/System/Strengthening/GemModel.cs
index 662f23f..e29f4dd 100644
--- a/System/Strengthening/GemModel.cs
+++ b/System/Strengthening/GemModel.cs
@@ -288,7 +288,7 @@
                 redpointList[i - 1].state = RedPointState.None;
                 if (item != null)
                 {
-                    ItemConfig itemCfg = ConfigManager.Instance.GetTemplate<ItemConfig>((int)item.itemInfo.ItemID);
+                    ItemConfig itemCfg = Config.Instance.Get<ItemConfig>((int)item.itemInfo.ItemID);
                     List<ItemModel> list = IsBagHaveGem(FuncConfigConfig.GetGemTypeByEquipPos(item.itemInfo.ItemPlace));
                     if (list == null || list.Count == 0) continue;
                     uint[] stones = PlayerStoneData.Instance.GetStoneInfo(i);
@@ -350,7 +350,7 @@
             ItemModel item = playerPack.GetItemModelByIndex(PackType.rptEquip, _index);
             if (item != null)
             {
-                ItemConfig itemCfg = ConfigManager.Instance.GetTemplate<ItemConfig>((int)item.itemInfo.ItemID);
+                ItemConfig itemCfg = Config.Instance.Get<ItemConfig>((int)item.itemInfo.ItemID);
                 List<ItemModel> list = IsBagHaveGem(FuncConfigConfig.GetGemTypeByEquipPos(item.itemInfo.ItemPlace));
                 if (list == null || list.Count == 0)
                 {
@@ -497,7 +497,7 @@
 
         public bool GetMinLevelGem(int _type, int _itemId, out int _pos, out int _hole)
         {
-            _pos = 0;_hole = 0;
+            _pos = 0; _hole = 0;
             int _minItemId = 0;
             for (int i = 1; i <= 10; i++)
             {
diff --git a/System/Strengthening/WingsRefined.cs b/System/Strengthening/WingsRefined.cs
index b56518c..a2892f5 100644
--- a/System/Strengthening/WingsRefined.cs
+++ b/System/Strengthening/WingsRefined.cs
@@ -212,7 +212,7 @@
             {
                 expValue+= Sort2(key);
                 //ItemModel model = playerPack.GetItemModelByIndex(PackType.rptItem, key);
-                //expValue += ConfigManager.Instance.GetTemplate<WingRefineExpConfig>(model.itemInfo.ItemID).EXPupper;
+                //expValue += Config.Instance.Get<WingRefineExpConfig>(model.itemInfo.ItemID).EXPupper;
             }
         }
         return _currentRefiningAll > expValue;
diff --git a/System/Treasure/TreasureCyclicScroll.cs b/System/Treasure/TreasureCyclicScroll.cs
index c9de8f3..9bbf74d 100644
--- a/System/Treasure/TreasureCyclicScroll.cs
+++ b/System/Treasure/TreasureCyclicScroll.cs
@@ -21,7 +21,8 @@
         TreasureAchievement showAchievementBehaviour;
 
         bool m_Showing = false;
-        public bool showing {
+        public bool showing
+        {
             get { return m_Showing; }
             private set { m_Showing = value; }
         }
@@ -118,13 +119,9 @@
                 for (int i = 0; i < infiniteItems.Count; i++)
                 {
                     var item = infiniteItems[i] as TreasureAchievement;
-                    if (item != null && preIndex + i < datas.Count)
+                    if (item != null && preIndex + i <= datas.Count)
                     {
-                        if (item.achievementGroup != datas[preIndex + i])
-                        {
-                            item.gameObject.SetActive(true);
-                            item.Display(datas[preIndex + i]);
-                        }
+                        item.Display(datas[preIndex + i]);
                     }
                 }
 
diff --git a/System/Treasure/TreasureSoulWin.cs b/System/Treasure/TreasureSoulWin.cs
index 8a487d1..25dc3d2 100644
--- a/System/Treasure/TreasureSoulWin.cs
+++ b/System/Treasure/TreasureSoulWin.cs
@@ -24,7 +24,6 @@
         [SerializeField] Text m_SoulDescription;
         [SerializeField] Image m_SoulTarget;
         [SerializeField] UIEffect m_SoulEffect;
-        [SerializeField] PositionTween m_PositionTween;
         [SerializeField] Button m_Active;
         [SerializeField] Text m_ActiveText;
         [SerializeField] Button m_GotoRealm;
@@ -91,6 +90,11 @@
             achievementModel.achievementCompletedEvent += AchievementCompletedEvent;
             m_TreasureSoulBtn.state = TitleBtnState.Click;
             Display();
+        }
+
+        protected override void OnActived()
+        {
+            base.OnActived();
             DisplaySelect();
         }
 
@@ -275,8 +279,6 @@
                     }
                     m_ContainerPreview.gameObject.SetActive(!special.active);
                     m_SoulEffect.StopImediatly();
-                    m_PositionTween.Stop();
-                    m_PositionTween.SetStartState();
                     if (!special.active)
                     {
                         DisplayPreview(model.selectSoul);
@@ -285,7 +287,6 @@
                     {
                         m_SoulEffect.effect = config.effectId;
                         m_SoulEffect.Play();
-                        m_PositionTween.Play();
                     }
                 }
             }
diff --git a/System/WindowBase/ModelCenter.cs b/System/WindowBase/ModelCenter.cs
index 836574e..c59e5b4 100644
--- a/System/WindowBase/ModelCenter.cs
+++ b/System/WindowBase/ModelCenter.cs
@@ -187,6 +187,7 @@
             RegisterModel<TrialDungeonModel>();
             RegisterModel<ActivitiesPushMgr>();
             RegisterModel<MultipleRealmPointModel>();
+            RegisterModel<DogzDungeonModel>();
             RegisterModel<DogzModel>();
             RegisterModel<TreasureSoulModel>();
             RegisterModel<FairyGrabBossModel>();
diff --git a/UI/Common/UI3DModelFactory.cs b/UI/Common/UI3DModelFactory.cs
index 425916d..2a2d348 100644
--- a/UI/Common/UI3DModelFactory.cs
+++ b/UI/Common/UI3DModelFactory.cs
@@ -134,7 +134,7 @@
 
     public static GameObject LoadUIHorse(int id)
     {
-        var prefab = InstanceResourcesLoader.LoadModelRes(id);
+        var prefab = InstanceResourcesLoader.LoadModelRes(id, true);
         if (prefab == null)
         {
             return null;
@@ -156,7 +156,7 @@
 
     public static void ReleaseUIHourse(int id, GameObject model)
     {
-        var prefab = InstanceResourcesLoader.LoadModelRes(id);
+        var prefab = InstanceResourcesLoader.LoadModelRes(id, true);
         var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
 
         var animator = model.GetComponent<Animator>();
@@ -282,7 +282,7 @@
 
     public static GameObject LoadUIWing(int _id)
     {
-        var prefab = InstanceResourcesLoader.LoadModelRes(_id);
+        var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
         if (prefab == null)
         {
             return null;
@@ -300,7 +300,7 @@
 
     public static void ReleaseUIWing(int _id, GameObject _model)
     {
-        var prefab = InstanceResourcesLoader.LoadModelRes(_id);
+        var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
         var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
         var animator = _model.GetComponent<Animator>();
         if (animator != null)
diff --git a/UI/Common/UI3DShowHero.cs b/UI/Common/UI3DShowHero.cs
index 3837d50..33738ec 100644
--- a/UI/Common/UI3DShowHero.cs
+++ b/UI/Common/UI3DShowHero.cs
@@ -48,7 +48,7 @@
 
             if (weaponId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
+                prefab = InstanceResourcesLoader.LoadModelRes(weaponId, true);
                 if (prefab)
                 {
                     pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -59,7 +59,7 @@
 
             if (secondaryId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId);
+                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId, true);
                 if (prefab)
                 {
                     if (secondaryModel)
@@ -74,7 +74,7 @@
 
             if (wingsId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(wingsId);
+                prefab = InstanceResourcesLoader.LoadModelRes(wingsId, true);
                 if (prefab)
                 {
                     pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -86,7 +86,7 @@
 
             if (clothesId != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(clothesId);
+                prefab = InstanceResourcesLoader.LoadModelRes(clothesId, true);
                 if (prefab)
                 {
                     pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -137,7 +137,7 @@
 
             if (weaponModel)
             {
-                GameObject prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
+                GameObject prefab = InstanceResourcesLoader.LoadModelRes(weaponId, true);
                 if (prefab)
                 {
                     GameObjectPoolManager.Instance.ReleaseGameObject(prefab, weaponModel);
@@ -177,7 +177,7 @@
                 UnloadClothes();
             }
 
-            var _prefab = InstanceResourcesLoader.LoadModelRes(newClothes);
+            var _prefab = InstanceResourcesLoader.LoadModelRes(newClothes, true);
             if (!_prefab)
             {
                 newClothes = config.BaseEquip[0];
@@ -212,7 +212,7 @@
 
         private void LoadClothes(int resID)
         {
-            var prefab = InstanceResourcesLoader.LoadModelRes(resID);
+            var prefab = InstanceResourcesLoader.LoadModelRes(resID, true);
             if (prefab)
             {
                 var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
@@ -247,7 +247,7 @@
                 return;
             }
 
-            var prefab = InstanceResourcesLoader.LoadModelRes(clothesId);
+            var prefab = InstanceResourcesLoader.LoadModelRes(clothesId, true);
             var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
             pool.Release(clothesModel);
             clothesModel = null;
@@ -289,18 +289,18 @@
 
             if (oldWeapon != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldWeapon, true);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(weaponModel);
                 weaponModel = null;
             }
 
-            prefab = InstanceResourcesLoader.LoadModelRes(newWeapon);
+            prefab = InstanceResourcesLoader.LoadModelRes(newWeapon, true);
 
             if (!prefab)
             {
                 newWeapon = config.BaseEquip[1];
-                prefab = InstanceResourcesLoader.LoadModelRes(newWeapon);
+                prefab = InstanceResourcesLoader.LoadModelRes(newWeapon, true);
             }
 
             if (prefab)
@@ -345,7 +345,7 @@
 
             if (oldSecondary != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldSecondary, true);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(secondaryModel);
                 secondaryModel = null;
@@ -353,11 +353,11 @@
 
             if (newSecondary != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(newSecondary);
+                prefab = InstanceResourcesLoader.LoadModelRes(newSecondary, true);
                 if (!prefab)
                 {
                     newSecondary = config.BaseEquip[2];
-                    prefab = InstanceResourcesLoader.LoadModelRes(newSecondary);
+                    prefab = InstanceResourcesLoader.LoadModelRes(newSecondary, true);
                 }
 
                 if (prefab)
@@ -395,7 +395,7 @@
 
             if (oldWings != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(oldWings);
+                prefab = InstanceResourcesLoader.LoadModelRes(oldWings, true);
                 pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                 pool.Release(wingsModel);
                 wingsModel = null;
@@ -403,12 +403,12 @@
 
             if (newWings != 0)
             {
-                prefab = InstanceResourcesLoader.LoadModelRes(newWings);
+                prefab = InstanceResourcesLoader.LoadModelRes(newWings, true);
 
                 if (!prefab)
                 {
                     newWings = config.BaseEquip[3];
-                    prefab = InstanceResourcesLoader.LoadModelRes(newWings);
+                    prefab = InstanceResourcesLoader.LoadModelRes(newWings, true);
                 }
 
                 if (prefab)
diff --git a/Utility/EnumHelper.cs b/Utility/EnumHelper.cs
index c8a0384..cea4844 100644
--- a/Utility/EnumHelper.cs
+++ b/Utility/EnumHelper.cs
@@ -1116,11 +1116,13 @@
 
 public enum FindPreciousType
 {
-    WorldBoss,
-    BossHome,
-    PersonalBoss,
-    ElderGodArea,
-    DemonJar,
+    WorldBoss = 0,
+    BossHome = 1,
+    PersonalBoss = 2,
+    ElderGodArea = 3,
+    DemonJar = 4,
+    DogzDungeon = 5,
+    None = 99,
 }
 
 public enum GotServerRewardType

--
Gitblit v1.8.0