From c90cdd78c2bf8bcfa25cec7432a5876f6085ecfb Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期五, 01 二月 2019 11:18:37 +0800
Subject: [PATCH] 3335 切换地图逻辑重构。

---
 Core/GameEngine/Model/Player/Realm/RealmModel.cs                                              |   33 
 Core/GameEngine/Model/Player/Realm/PlayerRealmData.cs                                         |    2 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0113_tagServerHeart.cs                   |    4 
 System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs                                        |    4 
 System/WorldMap/LocalMapFindPath.cs                                                           |   12 
 Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs.meta                                              |    2 
 System/Vip/VipModel.cs                                                                        |   10 
 Fight/Stage/StageLoadProcessor.cs                                                             |  579 +++++++++
 System/Loading/LoadingWin.cs                                                                  |   33 
 System/WorldMap/BossAreaMarkWin.cs                                                            |    5 
 Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs |    2 
 System/WorldMap/MapNameHintWin.cs                                                             |    4 
 System/Tip/ServerTipDetails.cs                                                                |    6 
 System/FairyAu/FairyFeastTransmitShow.cs                                                      |    6 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0104_tagServerDisconnect.cs              |    4 
 Fight/GameActor/GA_Guard.cs                                                                   |    4 
 System/WorldMap/MapUtility.cs                                                                 |   88 +
 Utility/TimeUtility.cs                                                                        |    6 
 System/Welfare/MultipleRealmPointModel.cs                                                     |    6 
 Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA125_tagMCChangeMapFail.cs                  |   24 
 Core/NetworkPackage/DTCFile/ServerPack/HA7_Arena/DTCA709_tagObjInfoListRefresh.cs             |    2 
 Lua/Gen/SnxxzUIMagicianModelWrap.cs                                                           |   17 
 Lua/Gen/DelegatesGensBridge.cs.meta                                                           |    2 
 System/OpenServerActivity/RedEnvelopeModel.cs                                                 |    6 
 Utility/ActorShadowCaster.cs                                                                  |   68 
 Lua/Gen/XLuaGenAutoRegister.cs                                                                |   33 
 System/MainInterfacePanel/PlayerTaskDatas.cs                                                  |    4 
 Fight/MapTransferUtility.cs                                                                   |   37 
 Fight/Stage/StageLoad.cs.meta                                                                 |    4 
 System/FairyAu/FairyGrabBossModel.cs                                                          |   16 
 System/Login/ServerListCenter.cs                                                              |    4 
 System/FairyAu/FairyLeagueModel.cs                                                            |    6 
 System/Realm/RealmBossShow.cs                                                                 |    6 
 Fight/Stage/StageLoadProcessor.cs.meta                                                        |    4 
 Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs.meta                      |    4 
 System/MainInterfacePanel/TipPanel.cs                                                         |   10 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0115_tagAskClientVersion.cs              |    4 
 System/Vip/FirstTimeRechargeModel.cs                                                          |    4 
 System/LoginAd/LoginAdModel.cs                                                                |   12 
 Fight/Actor/Skill/AttackHandler.cs                                                            |    2 
 Lua/Gen/GameNetSystemWrap.cs                                                                  |    2 
 Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0309_tagPlayerLoginInfo.cs        |    2 
 System/Chat/ChatCenter.cs                                                                     |   10 
 System/KnapSack/Logic/PlayerPackModels.cs                                                     |    2 
 System/CrossServerOneVsOne/CrossServerOneVsOneArenaWin.cs                                     |    9 
 Utility/StageLoadTimeOutCatcher.cs                                                            |   54 
 System/Team/TeamModel.cs                                                                      |    4 
 Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs                                                    |   74 +
 System/FairyAu/FairyLeagueMap.cs                                                              |    6 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs             |    4 
 System/Message/BattleHint.cs                                                                  |   20 
 Lua/Gen/SnxxzUIGemModelWrap.cs.meta                                                           |    2 
 System/Guard/GuardModel.cs                                                                    |    2 
 Fight/Stage/CreateRoleStage.cs                                                                |    3 
 System/WorldMap/MapFrameWin.cs                                                                |   10 
 Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA126_tagMCPrepareChangeMap.cs               |   55 
 System/Chat/ChatCtrl.cs                                                                       |    4 
 Core/NetworkPackage/DTCFile/ServerPack/HC0_CrossRealm/DTCC001_tagGCCrossRealmPKMatchOK.cs     |    5 
 Fight/Stage/Dungeon/DungeonStage.cs                                                           |    7 
 Fight/PreFightMission.cs                                                                      |    7 
 Core/GameEngine/Model/Player/PlayerDatas.cs                                                   |   18 
 System/Message/SysNotifyMgr.cs                                                                |    6 
 Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs                                           |    2 
 System/BossShow/BossShowModel.cs                                                              |    4 
 System/FairyAu/FairyModel.cs                                                                  |    6 
 Fight/Stage/Stage.cs                                                                          |    4 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0435_tagPetAppear.cs                      |    4 
 System/AssetVersion/AssetVersionUtility.cs                                                    |   24 
 Fight/Actor/HeroBehaviour.cs                                                                  |    2 
 System/SystemSetting/SettingEffectMgr.cs                                                      |    2 
 Lua/Gen/link.xml                                                                              |    1 
 System/CrossServerBoss/CrossServerBossModel.cs                                                |    7 
 System/Welfare/OperationTimeHepler.cs                                                         |    4 
 System/MainInterfacePanel/CoinTaskTipModel.cs                                                 |    4 
 Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs.meta                                               |    2 
 System/MainInterfacePanel/PKModel.cs                                                          |    4 
 System/WorldMap/MapModel.cs                                                                   |    4 
 Core/GameEngine/DataToCtl/PackageRegedit.cs                                                   |    2 
 Core/GameEngine/DataToCtl/RoleLoginState.cs                                                   |    6 
 System/HeavenBattle/HeavenBattleModel.cs                                                      |    4 
 Core/NetworkPackage/NetPkgCtl.cs                                                              |    4 
 Fight/Stage/StageLoad.cs                                                                      |  425 ++++++
 System/Dungeon/DungeonRuneTowerVictoryWin.cs                                                  |   22 
 Lua/Gen/DelegatesGensBridge.cs                                                                |   70 
 System/FairyAu/FairyBossModel.cs                                                              |   90 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs              |    7 
 System/Message/GMNotify.cs                                                                    |   12 
 System/Store/StoreModel.cs                                                                    |    4 
 Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA202_tagMCAttackMode.cs                 |   16 
 System/WorldMap/WorldMapSkip.cs                                                               |    4 
 Fight/Stage/Dungeon/RuneTowerDungeonStage.cs                                                  |    2 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs                 |   28 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0423_tagObjPropertyRefreshView.cs         |    2 
 Lua/Gen/link.xml.meta                                                                         |    2 
 Fight/Stage/SelectRoleStage.cs                                                                |    7 
 Core/GameEngine/Model/Player/Character/PlayerBaseData.cs                                      |    8 
 System/Team/TeamFailEnterDungeonHandle.cs                                                     |    6 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0408_tagPlayerSummonNPCAppear.cs          |    4 
 System/Login/LoginModel.cs                                                                    |   32 
 Core/GameEngine/Login/Launch.cs                                                               |   12 
 System/WorldMap/MapUtility.cs.meta                                                            |    4 
 Lua/Gen/SnxxzUIMagicianModelWrap.cs.meta                                                      |    2 
 UI/Common/UIRoot.cs                                                                           |    2 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0101_tagServerPrepared.cs                |    4 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs               |   70 -
 System/Login/DisconnectHintWin.cs                                                             |    6 
 Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs                 |  166 --
 System/MainInterfacePanel/FeatureNoticeModel.cs                                               |   28 
 System/Treasure/TreasureModel.cs                                                              |    8 
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs                      |    4 
 Core/NetworkPackage/GameNetPackBasic.cs                                                       |    2 
 System/Activity/ActivityModel.cs                                                              |    6 
 Core/NetworkPackage/Socket/ClientSocket.cs                                                    |    4 
 System/Dungeon/DungeonModel.cs                                                                |    4 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs                     |  257 +--
 System/NewBieGuidance/NewBieCenter.cs                                                         |    7 
 /dev/null                                                                                     |  451 -------
 System/WindowJump/WindowJumpMgr.cs                                                            |    2 
 Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs                           |   47 
 Lua/Gen/SnxxzUIGemModelWrap.cs                                                                |   33 
 Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs                                                   |  148 ++
 System/Welfare/MultipleExpModel.cs                                                            |    6 
 Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0107_tagShowLoginFrm.cs                  |   13 
 System/Chat/VoiceHttpRequest.cs                                                               |   56 
 Core/NetworkPackage/GameNetSystem.cs                                                          |   35 
 Lua/Gen/XLuaGenAutoRegister.cs.meta                                                           |    2 
 System/Dungeon/DungeonFightWin.cs                                                             |    4 
 System/Rune/RuneModel.cs                                                                      |    4 
 128 files changed, 2,179 insertions(+), 1,424 deletions(-)

diff --git a/Core/GameEngine/DataToCtl/PackageRegedit.cs b/Core/GameEngine/DataToCtl/PackageRegedit.cs
index 2707ac5..92f5c6b 100644
--- a/Core/GameEngine/DataToCtl/PackageRegedit.cs
+++ b/Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -491,7 +491,7 @@
     /// </summary>
     /// <param name="vBytes"></param>
     /// <returns></returns>
-    public static GameNetPackBasic TransPack(GameNetSystem.SocketType socketType, ushort cmd, byte[] vBytes)
+    public static GameNetPackBasic TransPack(ServerType socketType, ushort cmd, byte[] vBytes)
     {
 #if UNITY_EDITOR
         int length = vBytes.Length;
diff --git a/Core/GameEngine/DataToCtl/RoleLoginState.cs b/Core/GameEngine/DataToCtl/RoleLoginState.cs
index f14d0d2..18a3532 100644
--- a/Core/GameEngine/DataToCtl/RoleLoginState.cs
+++ b/Core/GameEngine/DataToCtl/RoleLoginState.cs
@@ -32,9 +32,9 @@
             WindowCenter.Instance.Open<DisconnectHintWin>();
         }
 
-        if (StageManager.Instance.isServerPreparing)
-        {
-            return;
+        if (!StageLoad.Instance.IsServerPrepareOk(ServerType.Main))
+        {
+            return;
         }
 
         timer2 += Time.deltaTime;
diff --git a/Core/GameEngine/Login/Launch.cs b/Core/GameEngine/Login/Launch.cs
index f3f7430..fdc6817 100644
--- a/Core/GameEngine/Login/Launch.cs
+++ b/Core/GameEngine/Login/Launch.cs
@@ -241,7 +241,15 @@
             Debug.LogFormat("鍚姩鑰楁椂锛歿0}", timer);
             progressInfo = new ProgressInfo(m_CurrentStage, 1, 1f, 1f);
             this.enabled = false;
-            StageManager.Instance.LoadLoginStage();
+            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+            {
+                toMapId = 1,
+                toLineId = 0,
+                needEmpty = false,
+                needLoadResource = true,
+                serverType = ServerType.Main,
+                isClientLoadMap = true
+            });
         }
     }
 
@@ -261,7 +269,7 @@
         None = 0,
         SDKInit = 1,
         AssetCopy = 2,
-        AssetDecompress=3,
+        AssetDecompress = 3,
         ClientVersion = 4,
         CheckAsset = 5,
         DownLoad = 6,
diff --git a/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs b/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
index 2ef5cc8..64ccc10 100644
--- a/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
+++ b/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
@@ -80,7 +80,7 @@
 
     public void UpdateData(H0102_tagCDBPlayer _serverInfo)
     {
-        if (_serverInfo.socketType == GameNetSystem.SocketType.Main)
+        if (_serverInfo.socketType == ServerType.Main)
         {
             AccID = _serverInfo.AccID;
             PlayerID = _serverInfo.PlayerID;
@@ -151,7 +151,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (_serverInfo.socketType == GameNetSystem.SocketType.CrossSever)
+            if (_serverInfo.socketType == ServerType.CrossSever)
             {
                 HP = _serverInfo.HP;
                 AttackMode = _serverInfo.AttackMode;
@@ -168,7 +168,7 @@
             PlayerDatas.Instance.hero.ActorInfo.familyID = Family;
             if (CrossServerUtility.IsCrossServer())
             {
-                if (_serverInfo.socketType == GameNetSystem.SocketType.CrossSever)
+                if (_serverInfo.socketType == ServerType.CrossSever)
                 {
                     PlayerDatas.Instance.hero.ActorInfo.ResetHp((int)_serverInfo.HP);
                 }
@@ -202,7 +202,7 @@
         Silver = serverInfo.Silver;
         SilverPaper = serverInfo.SilverPaper;
         MapID = serverInfo.MapID;
-        if (serverInfo.socketType == GameNetSystem.SocketType.Main)
+        if (serverInfo.socketType == ServerType.Main)
         {
             mainServerMapIdRecord = MapID;
         }
diff --git a/Core/GameEngine/Model/Player/PlayerDatas.cs b/Core/GameEngine/Model/Player/PlayerDatas.cs
index 537d891..2089d99 100644
--- a/Core/GameEngine/Model/Player/PlayerDatas.cs
+++ b/Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -111,7 +111,7 @@
         {
             if (CrossServerUtility.IsCrossServer())
             {
-                if (vNetData.socketType == GameNetSystem.SocketType.Main)
+                if (vNetData.socketType == ServerType.Main)
                 {
                     if (vNetData.RefreshType[i].RefreshType == (int)PlayerDataRefresh.HP
                      || vNetData.RefreshType[i].RefreshType == (int)PlayerDataRefresh.MaxHP
@@ -186,7 +186,7 @@
                 recordSp = baseData.treasurePotentialSp;
             }
 
-            RefreshProperty(vNetData.socketType == GameNetSystem.SocketType.Main, (PlayerDataRefresh)vNetData.RefreshType, vNetData.Value);
+            RefreshProperty(vNetData.socketType == ServerType.Main, (PlayerDataRefresh)vNetData.RefreshType, vNetData.Value);
 
             if (recordSp > 0 && spNewGetEvent != null)
             {
@@ -593,8 +593,6 @@
                     if (GameNetSystem.Instance.crossServerConnected_Loigc)
                     {
                         GameNetSystem.Instance.crossServerConnected_Loigc = false;
-                        LoadingWin.targetMapResId = 1;
-                        WindowCenter.Instance.Open<LoadingWin>();
                         GameNetSystem.Instance.DisconnectCrossServer();
 
                         if (hero != null)
@@ -607,9 +605,17 @@
                         GameNetSystem.Instance.SendInfo(sendInfo);
                         baseData.MapID = baseData.mainServerMapIdRecord;
                         baseData.dungeonLineId = 0;
-                        DTCA127_tagMCStartChangeMap.LineID = 0;
                         ModelCenter.Instance.GetModel<DungeonModel>().ResetBufData();
-                        StageManager.Instance.Load<DungeonStage>(baseData.MapID, GameNetSystem.SocketType.CrossSever, true);
+
+                        StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+                        {
+                            toMapId = baseData.MapID,
+                            toLineId = 0,
+                            needEmpty = true,
+                            needLoadResource = true,
+                            serverType = ServerType.CrossSever,
+                            isClientLoadMap = true
+                        });
                     }
                 }
                 break;
diff --git a/Core/GameEngine/Model/Player/Realm/PlayerRealmData.cs b/Core/GameEngine/Model/Player/Realm/PlayerRealmData.cs
index ca9fbb6..0df2da8 100644
--- a/Core/GameEngine/Model/Player/Realm/PlayerRealmData.cs
+++ b/Core/GameEngine/Model/Player/Realm/PlayerRealmData.cs
@@ -46,7 +46,7 @@
             data.Job = vNetData.Job;
             data.JobRank = vNetData.JobRank;
             holdDataList.Add(data);
-            if (StageManager.Instance.isLoading)
+            if (StageLoad.Instance.isLoading)
             {
                 return;
             }
diff --git a/Core/GameEngine/Model/Player/Realm/RealmModel.cs b/Core/GameEngine/Model/Player/Realm/RealmModel.cs
index 630dbf5..e3c0598 100644
--- a/Core/GameEngine/Model/Player/Realm/RealmModel.cs
+++ b/Core/GameEngine/Model/Player/Realm/RealmModel.cs
@@ -8,14 +8,12 @@
 using UnityEngine;
 namespace Snxxz.UI
 {
-	[XLua.LuaCallCSharp]
-	public class RealmModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
+    [XLua.LuaCallCSharp]
+    public class RealmModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
     {
         DungeonModel m_DungeonModel;
-        DungeonModel dungeonModel
-        {
-            get
-            {
+        DungeonModel dungeonModel {
+            get {
                 return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel<DungeonModel>());
             }
         }
@@ -35,7 +33,7 @@
             ParseConfig();
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshInfo;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent;
             NewBieCenter.Instance.guideBeginEvent += GuideBeginEvent;
             BossShowModel.Instance.bossShowCompletedEvent += BossShowCompletedEvent;
@@ -58,8 +56,7 @@
 
         public bool excuteRealmOpenGuide { get; private set; }
 
-        public bool realmDungeonState
-        {
+        public bool realmDungeonState {
             get { return LocalSave.GetBool(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "_RealmDungeon_Show")); }
             set { LocalSave.SetBool(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "_RealmDungeon_Show"), value); }
         }
@@ -81,7 +78,7 @@
         IEnumerator Co_GuideComplete()
         {
             yield return null;
-            if (StageManager.Instance.CurrentStage is DungeonStage)
+            if (StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)
             {
                 if (PlayerDatas.Instance.realm.holdDataList.Count > 0
                 && !WindowCenter.Instance.IsOpen<RealmUpHoldWin>() && !NewBieCenter.Instance.inGuiding
@@ -94,7 +91,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 cacheMapId = 0;
                 excuteRealmOpenGuide = false;
@@ -126,7 +123,7 @@
 
         private void BossShowCompletedEvent()
         {
-            if (StageManager.Instance.CurrentStage is DungeonStage)
+            if (StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)
             {
                 if (PlayerDatas.Instance.realm.holdDataList.Count > 0
                && !WindowCenter.Instance.IsOpen<RealmUpHoldWin>() && !NewBieCenter.Instance.inGuiding
@@ -292,19 +289,15 @@
         }
         #endregion
 
-        public bool IsRealmHighest
-        {
-            get
-            {
+        public bool IsRealmHighest {
+            get {
                 var config = Config.Instance.Get<RealmConfig>(PlayerDatas.Instance.baseData.realmLevel + 1);
                 return config == null;
             }
         }
 
-        public bool IsDungeonState
-        {
-            get
-            {
+        public bool IsDungeonState {
+            get {
                 var _realmPoint = PlayerDatas.Instance.extersion.realmPoint;
                 if (IsRealmHighest)
                 {
diff --git a/Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs b/Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs
new file mode 100644
index 0000000..676de89
--- /dev/null
+++ b/Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs
@@ -0,0 +1,47 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace TableConfig
+{
+    public partial class MapResourcesConfig : ConfigBase
+    {
+        static readonly Dictionary<int, int> mapResourcesIdDictionary = new Dictionary<int, int>();
+
+        public static MapResourcesConfig GetConfig(int dataMapId, int lineId)
+        {
+            ParseConfig();
+            var key = dataMapId * 1000 + lineId;
+            if (!mapResourcesIdDictionary.ContainsKey(key))
+            {
+                key = dataMapId * 1000 + 0;
+            }
+
+            var id = mapResourcesIdDictionary[key];
+            var config = Config.Instance.Get<MapResourcesConfig>(id);
+            return config;
+        }
+
+        static bool isInited = false;
+        static void ParseConfig()
+        {
+            if (isInited)
+            {
+                return;
+            }
+
+            var configs = Config.Instance.GetAllValues<MapResourcesConfig>();
+            foreach (var config in configs)
+            {
+                var key = config.DataID * 1000 + config.LineID;
+                mapResourcesIdDictionary[key] = config.ID;
+            }
+
+            isInited = true;
+        }
+
+
+    }
+}
+
+
diff --git a/Lua/Gen/StageManagerWrap.cs.meta b/Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs.meta
similarity index 75%
rename from Lua/Gen/StageManagerWrap.cs.meta
rename to Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs.meta
index a713fe7..4a36971 100644
--- a/Lua/Gen/StageManagerWrap.cs.meta
+++ b/Core/GameEngine/Model/TelPartialConfig/PartialMapResourcesConfig.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: 1316663bef8bbed4f99dc61ee61da170
-timeCreated: 1548853305
+guid: dfb900c52f58d1a41a30b649088b15d3
+timeCreated: 1548676913
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0101_tagServerPrepared.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0101_tagServerPrepared.cs
index 8366b4a..3fcb3e7 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0101_tagServerPrepared.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0101_tagServerPrepared.cs
@@ -14,10 +14,10 @@
         var vNetData = vNetPack as H0101_tagServerPrepared;
         switch (vNetData.socketType)
         {
-            case GameNetSystem.SocketType.Main:
+            case ServerType.Main:
                 ModelCenter.Instance.GetModel<LoginModel>().AccessLogin(vNetData);
                 break;
-            case GameNetSystem.SocketType.CrossSever:
+            case ServerType.CrossSever:
                 CrossServerLogin.Instance.AccessLogin(vNetData);
                 break;
             default:
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
index 3b6c9b0..f798fb5 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -6,8 +6,6 @@
 
 public class DTC0102_tagCDBPlayer : DtcBasic
 {
-    public static bool DEBUG_0102 = false;
-    public static int DEBUG_STEP = 0;
 
     public static event Action beforePlayerDataInitializeEvent;
     public static event Action afterPlayerDataInitializeEvent;
@@ -19,81 +17,69 @@
     {
         base.Done(vNetPack);
 
-        H0102_tagCDBPlayer vNetData = vNetPack as H0102_tagCDBPlayer;
-
-
-        DEBUG_0102 = true;
+        var package = vNetPack as H0102_tagCDBPlayer;
+        StageLoadTimeOutCatcher.RecordProtocol(vNetPack.socketType, "0102", DateTime.Now);
         DTC0403_tagPlayerLoginLoadOK.finishedLogin = false;
-        DEBUG_STEP = 0;
-        if (vNetData.socketType == GameNetSystem.SocketType.Main)
+        MapTransferUtility.Instance.lastMoveToWorldBossTime = float.MinValue;
+        MapTransferUtility.Instance.lastMoveToWorldBossNpcID = 0;
+
+        if (package.socketType == ServerType.Main)
         {
             DTC0403_tagPlayerLoginLoadOK.neverLoginOk = true;
         }
 
-        MapTransferUtility.Instance.lastMoveToWorldBossTime = float.MinValue;
-        MapTransferUtility.Instance.lastMoveToWorldBossNpcID = 0;
-
-
-        if (vNetData.socketType == GameNetSystem.SocketType.Main)
+        if (package.socketType == ServerType.Main)
         {
             if (beforePlayerDataInitializeEvent != null)
             {
                 beforePlayerDataInitializeEvent();
             }
-        }
 
-        DEBUG_STEP = 1;
-        try
-        {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
+            try
             {
                 RedpointCenter.Instance.ResetAllRedpointState();
             }
-        }
-        catch (Exception ex)
-        {
-            Debug.LogError(ex);
-        }
-
-        PlayerDatas.Instance.InitPlayerData(vNetData);
-        PlayerDatas.Instance.RequestWorldTick();
-
-        if (vNetData.socketType == GameNetSystem.SocketType.Main)
-        {
-            SDKUtility.Instance.RoleLogin(vNetData.PlayerID.ToString(),
-                                          vNetData.PlayerName,
-                                          vNetData.LV.ToString(),
-                                          vNetData.VIPLv.ToString());
-        }
-
-        var _mapConfig = Config.Instance.Get<MapConfig>(vNetData.MapID);
-
-        DTCA127_tagMCStartChangeMap.LineID = 0;
-        int _realMapDataID = vNetData.MapID;
-
-        if (_mapConfig.MapFBType != 0)
-        {
-            DungeonModel _model = ModelCenter.Instance.GetModel<DungeonModel>();
-            _realMapDataID = _model.GetDataMapIdByMapId(vNetData.MapID);
-
-            if (vNetData.MapID != 52020 && vNetData.MapID != 52010)
+            catch (Exception ex)
             {
-                DTCA127_tagMCStartChangeMap.LineID = (int)vNetData.ExAttr3;
+                Debug.LogError(ex);
             }
         }
 
-        var _mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(_realMapDataID, DTCA127_tagMCStartChangeMap.LineID);
+        PlayerDatas.Instance.InitPlayerData(package);
+        PlayerDatas.Instance.RequestWorldTick();
 
-        if (_mapResConfig == null)
+        if (package.socketType == ServerType.Main)
         {
-            DTCA127_tagMCStartChangeMap.LineID = 0;
-            _mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(_realMapDataID, DTCA127_tagMCStartChangeMap.LineID);
+            if (playerIdBuf != 0 && playerIdBuf != PlayerDatas.Instance.baseData.PlayerID)
+            {
+                if (switchAccountEvent != null)
+                {
+                    switchAccountEvent();
+                }
+            }
+
+            playerIdBuf = PlayerDatas.Instance.baseData.PlayerID;
+            if (afterPlayerDataInitializeEvent != null)
+            {
+                afterPlayerDataInitializeEvent();
+            }
         }
 
-        if (_mapResConfig != null)
+        if (package.socketType == ServerType.Main)
         {
-            GA_Hero.MapOffset.x = _mapResConfig.MapOffset.x;
-            GA_Hero.MapOffset.z = _mapResConfig.MapOffset.y;
+            SDKUtility.Instance.RoleLogin(package.PlayerID.ToString(),
+                                          package.PlayerName,
+                                          package.LV.ToString(),
+                                          package.VIPLv.ToString());
+        }
+
+        var dataMapId = MapUtility.GetDataMapId(package.MapID);
+        var lineId = MapUtility.GetLineId(package.MapID, (int)package.ExAttr3);
+        var mapResourceConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+        if (mapResourceConfig != null)
+        {
+            GA_Hero.MapOffset.x = mapResourceConfig.MapOffset.x;
+            GA_Hero.MapOffset.z = mapResourceConfig.MapOffset.y;
         }
         else
         {
@@ -101,18 +87,11 @@
             GA_Hero.MapOffset.z = 0;
         }
 
-#if UNITY_EDITOR
-        DebugEx.LogFormat("------------ 0102 =>鐜╁ID: {0}, 鑱屼笟: {1}, 鍦板浘: {2}", vNetData.PlayerID, vNetData.Job, vNetData.MapID);
-#endif
-        DEBUG_STEP = 2;
-
-        DungeonStage.CurrentMapType = (MapType)_mapConfig.MapFBType;
+        var mapConfig = Config.Instance.Get<MapConfig>(package.MapID);
+        DungeonStage.CurrentMapType = (MapType)mapConfig.MapFBType;
         if (DungeonStage.CurrentMapType != MapType.OpenCountry)
         {
-            DungeonModel _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
-            int _dgDataID = _dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
-            var dungeonOpen = Config.Instance.Get<DungeonOpenTimeConfig>(_dgDataID);
-
+            var dungeonOpen = Config.Instance.Get<DungeonOpenTimeConfig>(dataMapId);
             if (dungeonOpen != null)
             {
                 if (dungeonOpen.DoFight == 1)
@@ -122,92 +101,19 @@
             }
         }
 
-        switch (vNetData.socketType)
+        if (package.socketType == ServerType.CrossSever)
         {
-            case GameNetSystem.SocketType.Main:
-                StageManager.Instance.isServerPreparing = true;
-                break;
-            case GameNetSystem.SocketType.CrossSever:
-                StageManager.Instance.isCrossServerPreparing = true;
-                if (PlayerDatas.Instance.hero != null)
-                {
-                    PlayerDatas.Instance.hero.ActorInfo.recordServerDie = PlayerDatas.Instance.hero.ActorInfo.serverDie;
-                }
-                break;
-        }
-
-        if (vNetData.socketType == GameNetSystem.SocketType.Main
-            && GameNetSystem.Instance.crossServerData.crossState == GameNetSystem.CrossServerState.Yes)
-        {
-            var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
-            var account = loginModel.accountBuf;
-            var ip = GameNetSystem.Instance.crossServerData.ip;
-            var port = GameNetSystem.Instance.crossServerData.port;
-            CrossServerLogin.Instance.AccountLogin(account, ip, port, loginModel.reconnectBackGround);
-        }
-        else
-        {
-            switch (vNetData.MapID)
+            if (PlayerDatas.Instance.hero != null)
             {
-                case 31250:
-                    StageManager.Instance.Load<GuardDungeonStage>(_mapConfig.MapID, vNetData.socketType);
-                    break;
-                case RuneTowerModel.RUNETOWER_MAPID:
-                    StageManager.Instance.Load<RuneTowerDungeonStage>(_mapConfig.MapID, vNetData.socketType);
-                    break;
-                case JadeDynastyTowerModel.DATA_MAPID:
-                    StageManager.Instance.Load<JadeDynastyTowerDungeonStage>(_mapConfig.MapID, vNetData.socketType);
-                    break;
-                case DemonJarModel.DEMONJAR_SINGLEMAPID:
-                    StageManager.Instance.Load<FakeDemonJarDungeonStage>(_mapConfig.MapID, vNetData.socketType);
-                    break;
-                default:
-                    StageManager.Instance.Load<DungeonStage>(_mapConfig.MapID, vNetData.socketType);
-                    break;
+                PlayerDatas.Instance.hero.ActorInfo.recordServerDie = PlayerDatas.Instance.hero.ActorInfo.serverDie;
             }
         }
 
         DTCA713_tagMCDynamicBarrierState.Clear();
         MainRedDot.Instance.Register();
-
-        DEBUG_STEP = 3;
-
-        if (playerIdBuf != 0 && playerIdBuf != PlayerDatas.Instance.baseData.PlayerID)
-        {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
-            {
-                if (switchAccountEvent != null)
-                {
-                    switchAccountEvent();
-                }
-            }
-        }
-
-        playerIdBuf = PlayerDatas.Instance.baseData.PlayerID;
-
-        if (vNetData.socketType == GameNetSystem.SocketType.Main)
-        {
-            if (afterPlayerDataInitializeEvent != null)
-            {
-                afterPlayerDataInitializeEvent();
-            }
-        }
-
         SettingEffectMgr.Instance.Begin();
+        QuickSetting.Instance.SetQuickSetting(package.Setting);
 
-        DEBUG_STEP = 4;
-        QuickSetting.Instance.SetQuickSetting(vNetData.Setting);
-        NetLinkWin.Hide();
-        WindowCenter.Instance.Close<SelectRoleWin>();
-        WindowCenter.Instance.Close<CreateRoleWin>();
-
-        DEBUG_STEP = 5;
-
-        if (VersionConfig.Get().debugVersion)
-        {
-            GMCommand.Instance.Begin();
-        }
-        DEBUG_STEP = 6;
         // 鍒濆鍖栨憚鍍忔満
         if (!CameraController.Instance)
         {
@@ -224,36 +130,71 @@
             hudRoot.SetCamera(CameraController.Instance.CameraObject);
         }
 
-        DEBUG_STEP = 7;
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-        if (_hero == null)
+        var hero = PlayerDatas.Instance.hero;
+        if (hero == null)
         {
-            _hero = GAMgr.Instance.RequestPlayer<GA_Hero>(PlayerDatas.Instance.PlayerId, E_ActorGroup.User, null);
-            PlayerDatas.Instance.hero = _hero;
+            hero = GAMgr.Instance.RequestPlayer<GA_Hero>(PlayerDatas.Instance.PlayerId, E_ActorGroup.User, null);
+            PlayerDatas.Instance.hero = hero;
         }
         else // 閲嶈繛
         {
             if (PreFightMission.Instance.IsFinished())
             {
-                _hero.StopAll();
-                _hero.InitBornPos(vNetData.PosX, vNetData.PosY);
-                _hero.RequestName();
-                _hero.ActorInfo.serverDie = false;
-                _hero.IdleImmediate();
+                hero.StopAll();
+                hero.InitBornPos(package.PosX, package.PosY);
+                hero.RequestName();
+                hero.ActorInfo.serverDie = false;
+                hero.IdleImmediate();
             }
         }
 
         DropItemManager.ReleaseAll();
-        DEBUG_STEP = 8;
-        _hero.OnPathFindStop -= MapTransferUtility.Instance.OnHeroStopPathFind;
-        _hero.OnPathFindStop += MapTransferUtility.Instance.OnHeroStopPathFind;
         StatusMgr.Instance.ReleaseActor(PlayerDatas.Instance.PlayerId);
         GAMgr.Instance.UnInit();
-        DEBUG_STEP = 9;
-
-        StageLoadTimeOutCatcher.RecordProtocol(vNetPack.socketType, "0102", DateTime.Now);
-
+        hero.OnPathFindStop -= MapTransferUtility.Instance.OnHeroStopPathFind;
+        hero.OnPathFindStop += MapTransferUtility.Instance.OnHeroStopPathFind;
         GA_Hero.s_MapSwitching = true;
+
+        if (DebugUtility.Instance.debugAccount)
+        {
+            GMCommand.Instance.Begin();
+        }
+
+        if (package.socketType == ServerType.Main
+    && GameNetSystem.Instance.crossServerData.crossState == GameNetSystem.CrossServerState.Yes)
+        {
+            StageLoad.Instance.UpdateServerFlag(package.socketType, false);
+            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+            {
+                toMapId = mapConfig.MapID,
+                toLineId = MapUtility.GetLineId(mapConfig.MapID, PlayerDatas.Instance.baseData.dungeonLineId),
+                needEmpty = true,
+                needLoadResource = false,
+                serverType = package.socketType,
+                isClientLoadMap = false
+            });
+
+            var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
+            var account = loginModel.accountBuf;
+            var ip = GameNetSystem.Instance.crossServerData.ip;
+            var port = GameNetSystem.Instance.crossServerData.port;
+            CrossServerLogin.Instance.AccountLogin(account, ip, port, loginModel.reconnectBackGround);
+        }
+        else
+        {
+            StageLoad.Instance.UpdateServerFlag(package.socketType, false);
+            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+            {
+                toMapId = mapConfig.MapID,
+                toLineId = MapUtility.GetLineId(mapConfig.MapID, PlayerDatas.Instance.baseData.dungeonLineId),
+                needEmpty = true,
+                needLoadResource = true,
+                serverType = package.socketType,
+                isClientLoadMap = false
+            });
+        }
+
+
     }
 }
 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0104_tagServerDisconnect.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0104_tagServerDisconnect.cs
index a287dfd..f075e07 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0104_tagServerDisconnect.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0104_tagServerDisconnect.cs
@@ -20,7 +20,7 @@
             ServerForceExitHintWin.reason = vNetData.Reason;
             switch (vNetData.socketType)
             {
-                case GameNetSystem.SocketType.Main:
+                case ServerType.Main:
                     GameNetSystem.Instance.LoginOut();
                     ModelCenter.Instance.GetModel<LoginModel>().busy = false;
                     if (VersionConfig.Get().versionAuthority == VersionAuthority.Release)
@@ -43,7 +43,7 @@
                     WindowCenter.Instance.Open<ServerForceExitHintWin>();
                     NetLinkWin.Hide();
                     break;
-                case GameNetSystem.SocketType.CrossSever:
+                case ServerType.CrossSever:
                 default:
                     break;
             }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0107_tagShowLoginFrm.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0107_tagShowLoginFrm.cs
index bbe5b18..34a7544 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0107_tagShowLoginFrm.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0107_tagShowLoginFrm.cs
@@ -9,17 +9,16 @@
     public override void Done(GameNetPackBasic vNetPack)
     {
         base.Done(vNetPack);
-        var vNetData = vNetPack as H0107_tagShowLoginFrm;
-        if (vNetData == null) return;
+        var package = vNetPack as H0107_tagShowLoginFrm;
 
-        switch (vNetData.socketType)
+        switch (package.socketType)
         {
-            case GameNetSystem.SocketType.Main:
+            case ServerType.Main:
                 GameNetSystem.Instance.netState = GameNetSystem.NetState.CreateOrSelectRole;
-                ModelCenter.Instance.GetModel<LoginModel>().OnGetPlayerLoginInfo(vNetData.Type);
+                ModelCenter.Instance.GetModel<LoginModel>().OnGetPlayerLoginInfo(package.Type);
                 break;
-            case GameNetSystem.SocketType.CrossSever:
-                CrossServerLogin.Instance.OnGetPlayerLoginInfo(vNetData.Type);
+            case ServerType.CrossSever:
+                CrossServerLogin.Instance.OnGetPlayerLoginInfo(package.Type);
                 break;
             default:
                 break;
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs
index 809ab83..038e47c 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs
@@ -10,7 +10,6 @@
 public class DTC0109_tagServerPrepareOK : DtcBasic
 {
 
-
     LoginModel loginModel { get { return ModelCenter.Instance.GetModel<LoginModel>(); } }
 
     public override void Done(GameNetPackBasic vNetPack)
@@ -25,75 +24,10 @@
         }
 
         StageLoadTimeOutCatcher.RecordProtocol(vNetData.socketType, "0109", DateTime.Now);
-
         //修改技能快捷设置发包顺序
         PlayerDatas.Instance.skill.CheckQuickSet();
-
-        switch (vNetData.socketType)
-        {
-            case GameNetSystem.SocketType.Main:
-                if (loginModel.reconnectBackGround
-                 || StageManager.Instance.socketType != GameNetSystem.SocketType.Main
-                 || DTCA127_tagMCStartChangeMap.isChangeLine)
-                {
-                    var mapOk = new C0107_tagCInitMapOK();
-                    mapOk.MapID = PlayerDatas.Instance.baseData.MapID;
-                    mapOk.Type = 0;
-                    GameNetSystem.Instance.SendInfo(mapOk);
-                    DTCA127_tagMCStartChangeMap.isChangeLine = false;
-
-                    StageLoadTimeOutCatcher.RecordProtocol(GameNetSystem.SocketType.Main, "0107", DateTime.Now);
-                }
-                break;
-            case GameNetSystem.SocketType.CrossSever:
-                if (CrossServerLogin.Instance.reconnectBackGround || StageManager.Instance.socketType != GameNetSystem.SocketType.CrossSever)
-                {
-                    var mapOk = new C0107_tagCInitMapOK();
-                    mapOk.MapID = PlayerDatas.Instance.baseData.MapID;
-                    mapOk.Type = 0;
-                    GameNetSystem.Instance.SendToCrossServer(mapOk);
-
-                    StageLoadTimeOutCatcher.RecordProtocol(GameNetSystem.SocketType.CrossSever, "0107", DateTime.Now);
-                }
-                break;
-            default:
-                break;
-        }
-
-
-
-        switch (vNetPack.socketType)
-        {
-            case GameNetSystem.SocketType.Main:
-                StageManager.Instance.isServerPreparing = false;
-                break;
-            case GameNetSystem.SocketType.CrossSever:
-                StageManager.Instance.isCrossServerPreparing = false;
-                break;
-        }
-
-        //        // 查错预留
-        //        if (DTC0102_tagCDBPlayer.DEBUG_0102 && DTC0102_tagCDBPlayer.DEBUG_STEP != 9)
-        //        {
-        //#if !UNITY_EDITOR
-        //            OperationLogCollect.Instance.BugReport("错误", "0102未执行至正确的步骤, 只执行到: " + DTC0102_tagCDBPlayer.DEBUG_STEP);
-        //#else
-        //            Debug.LogFormat("(DTC0102_tagCDBPlayer.DEBUG_STEP != 9) : {0}", DTC0102_tagCDBPlayer.DEBUG_STEP);
-        //#endif
-        //            DTC0102_tagCDBPlayer.DEBUG_0102 = false;
-        //        }
-
-        //        // 查错预留
-        //        if (DTCA127_tagMCStartChangeMap.DEBUG_A127 && DTCA127_tagMCStartChangeMap.DEBUG_STEP != 6)
-        //        {
-        //#if !UNITY_EDITOR
-        //            OperationLogCollect.Instance.BugReport("错误", "A127未执行至正确的步骤, 只执行到: " + DTCA127_tagMCStartChangeMap.DEBUG_STEP);
-        //#else
-        //            Debug.LogFormat("(DTCA127_tagMCStartChangeMap.DEBUG_STEP != 6) : {0}", DTCA127_tagMCStartChangeMap.DEBUG_STEP);
-        //#endif
-
-        //            DTCA127_tagMCStartChangeMap.DEBUG_A127 = false;
-        //        }
+        StageLoad.Instance.UpdateServerFlag(vNetData.socketType, true);
     }
+
 }
 
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0113_tagServerHeart.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0113_tagServerHeart.cs
index fb559ee..6bc73fb 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0113_tagServerHeart.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0113_tagServerHeart.cs
@@ -16,10 +16,10 @@
 
         switch (vNetPack.socketType)
         {
-            case GameNetSystem.SocketType.Main:
+            case ServerType.Main:
                 GameNetSystem.Instance.SendInfo(sendInfo);// 在线回应
                 break;
-            case GameNetSystem.SocketType.CrossSever:
+            case ServerType.CrossSever:
                 GameNetSystem.Instance.SendToCrossServer(sendInfo);// 在线回应
                 break;
             default:
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0115_tagAskClientVersion.cs b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0115_tagAskClientVersion.cs
index 76578ba..358aa20 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0115_tagAskClientVersion.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0115_tagAskClientVersion.cs
@@ -12,10 +12,10 @@
 
         switch (vNetPack.socketType)
         {
-            case GameNetSystem.SocketType.Main:
+            case ServerType.Main:
                 ModelCenter.Instance.GetModel<LoginModel>().CheckClientVersion();
                 break;
-            case GameNetSystem.SocketType.CrossSever:
+            case ServerType.CrossSever:
                 CrossServerLogin.Instance.CheckClientVersion();
                 break;
             default:
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0309_tagPlayerLoginInfo.cs b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0309_tagPlayerLoginInfo.cs
index 3e0f326..6b90f24 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0309_tagPlayerLoginInfo.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0309_tagPlayerLoginInfo.cs
@@ -19,7 +19,7 @@
 
         H0309_tagPlayerLoginInfo vNetData = vNetPack as H0309_tagPlayerLoginInfo;
         PlayerDatas.Instance.loginInfo = vNetData;
-        if (vNetData.socketType== GameNetSystem.SocketType.Main)
+        if (vNetData.socketType== ServerType.Main)
         {
             GameNetSystem.Instance.UpdateCrossServerData(vNetData.IP, vNetData.Port, vNetData.CrossState);
         }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
index a9ffc6c..161994c 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0403_tagPlayerLoginLoadOK.cs
@@ -18,6 +18,7 @@
         StageLoadTimeOutCatcher.RecordProtocol(vNetPack.socketType, "0403", DateTime.Now);
 
         GameNetSystem.Instance.netState = GameNetSystem.NetState.Connected;
+
         finishedLogin = true;
         GA_Hero.s_MapSwitching = false;
 
@@ -30,10 +31,10 @@
 
         switch (vNetData.socketType)
         {
-            case GameNetSystem.SocketType.Main:
+            case ServerType.Main:
                 loginModel.reconnectBackGround = false;
                 break;
-            case GameNetSystem.SocketType.CrossSever:
+            case ServerType.CrossSever:
                 GameNetSystem.Instance.crossServerConnected_Loigc = true;
                 CrossServerLogin.Instance.reconnectBackGround = false;
                 CrossServerLogin.Instance.StopLoginOverTimeProcess();
@@ -46,7 +47,7 @@
         {
             try
             {
-                if (vNetData.socketType == GameNetSystem.SocketType.Main)
+                if (vNetData.socketType == ServerType.Main)
                 {
                     if (playerLoginOkEvent != null)
                     {
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs
index 38b8ae9..f101ab2 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0406_tagNPCAppear.cs
@@ -144,7 +144,7 @@
                     break;
             }
 
-            if (StageManager.Instance.isLoading)
+            if (StageLoad.Instance.isLoading)
             {
                 if (!GAMgr.Instance.reAdjustPosList.Contains(_actor))
                 {
@@ -154,7 +154,7 @@
 
             if (CrossServerUtility.IsCrossServer())
             {
-                if (vNetPack.socketType == GameNetSystem.SocketType.Main)
+                if (vNetPack.socketType == ServerType.Main)
                 {
                     if (_actor != null && !GAMgr.Instance.reAdjustPosList.Contains(_actor))
                     {
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0408_tagPlayerSummonNPCAppear.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0408_tagPlayerSummonNPCAppear.cs
index b8945866..1412315 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0408_tagPlayerSummonNPCAppear.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0408_tagPlayerSummonNPCAppear.cs
@@ -45,7 +45,7 @@
                    vNetData.NPCID, _group, vNetData);
         }
 
-        if (StageManager.Instance.isLoading)
+        if (StageLoad.Instance.isLoading)
         {
             if (_actor != null)
             {
@@ -58,7 +58,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
+            if (vNetData.socketType == ServerType.Main)
             {
                 if (_actor != null)
                 {
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
index 5d74549..00884f5 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -21,22 +21,22 @@
         if (vNetData == null)
         {
             return;
-        }
-
-        if (vNetData.socketType == GameNetSystem.SocketType.CrossSever)
-        {
-            if (vNetData.RefreshType == (int)PlayerDataRefresh.FightPower
-                || vNetData.RefreshType == (int)PlayerDataRefresh.ExpPoint
-                || vNetData.RefreshType == (int)PlayerDataRefresh.LV
-                || vNetData.RefreshType == (int)PlayerDataRefresh.VIPLv)
-            {
-                return;
-            }
+        }
+
+        if (vNetData.socketType == ServerType.CrossSever)
+        {
+            if (vNetData.RefreshType == (int)PlayerDataRefresh.FightPower
+                || vNetData.RefreshType == (int)PlayerDataRefresh.ExpPoint
+                || vNetData.RefreshType == (int)PlayerDataRefresh.LV
+                || vNetData.RefreshType == (int)PlayerDataRefresh.VIPLv)
+            {
+                return;
+            }
         }
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
+            if (vNetData.socketType == ServerType.Main)
             {
                 if (vNetData.RefreshType == (int)PlayerDataRefresh.HP
                  || vNetData.RefreshType == (int)PlayerDataRefresh.MaxHP
@@ -46,7 +46,7 @@
                     return;
                 }
             }
-        }
+        }
 
         if (vNetData.RefreshType == (int)PlayerDataRefresh.OfficialRank)
         {
@@ -64,7 +64,7 @@
                 bool _sync = false;
                 if (CrossServerUtility.IsCrossServer())
                 {
-                    if (vNetData.socketType == GameNetSystem.SocketType.CrossSever)
+                    if (vNetData.socketType == ServerType.CrossSever)
                     {
                         _sync = true;
                     }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0423_tagObjPropertyRefreshView.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0423_tagObjPropertyRefreshView.cs
index 4795ef5..1e0ca5c 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0423_tagObjPropertyRefreshView.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0423_tagObjPropertyRefreshView.cs
@@ -22,7 +22,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
+            if (vNetData.socketType == ServerType.Main)
             {
                 return;
             }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
index 39a0acd..30fcd0c 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
@@ -36,7 +36,7 @@
 
         _player = GAMgr.Instance.RequestPlayer<GA_Player>(vNetData.PlayerID, E_ActorGroup.Player, vNetData);
 
-        if (StageManager.Instance.isLoading)
+        if (StageLoad.Instance.isLoading)
         {
             if (!GAMgr.Instance.reAdjustPosList.Contains(_player))
             {
@@ -46,7 +46,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetPack.socketType == GameNetSystem.SocketType.Main)
+            if (vNetPack.socketType == ServerType.Main)
             {
                 if (_player != null && !GAMgr.Instance.reAdjustPosList.Contains(_player))
                 {
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0435_tagPetAppear.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0435_tagPetAppear.cs
index 391ec91..05561ce 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0435_tagPetAppear.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0435_tagPetAppear.cs
@@ -36,7 +36,7 @@
         _pet = GAMgr.Instance.RequestNPCFight<GA_Pet>(vNetData.PetID, vNetData.NPCID, _group, vNetData);
 
 
-        if (StageManager.Instance.isLoading)
+        if (StageLoad.Instance.isLoading)
         {
             if (!GAMgr.Instance.reAdjustPosList.Contains(_pet))
             {
@@ -46,7 +46,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetPack.socketType == GameNetSystem.SocketType.Main)
+            if (vNetPack.socketType == ServerType.Main)
             {
                 if (_pet != null && !GAMgr.Instance.reAdjustPosList.Contains(_pet))
                 {
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA125_tagMCChangeMapFail.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA125_tagMCChangeMapFail.cs
index 45e7ff9..6cc730a 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA125_tagMCChangeMapFail.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA125_tagMCChangeMapFail.cs
@@ -14,21 +14,19 @@
         base.Done(vNetPack);
         var package = vNetPack as HA125_tagMCChangeMapFail;
 
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-
-        if (_hero == null)
-        {
-            return;
-        }
-        MapTransferUtility.Instance.CheckMap(PlayerDatas.Instance.baseData.MapID, true);
-        MapTransferUtility.Instance.Clear();
-
-        MapTransferUtility.Instance.lastMoveToWorldBossTime = 0;
-        MapTransferUtility.Instance.lastMoveToWorldBossNpcID = 0;
-
         WindowCenter.Instance.Close<LoadingWin>();
 
-        GA_Hero.s_MapSwitching = false;
+        var hero = PlayerDatas.Instance.hero;
+        if (hero != null)
+        {
+            MapTransferUtility.Instance.CheckMap(PlayerDatas.Instance.baseData.MapID, true);
+            MapTransferUtility.Instance.Clear();
+
+            MapTransferUtility.Instance.lastMoveToWorldBossTime = 0;
+            MapTransferUtility.Instance.lastMoveToWorldBossNpcID = 0;
+            GA_Hero.s_MapSwitching = false;
+        }
+
     }
 
 }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA126_tagMCPrepareChangeMap.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA126_tagMCPrepareChangeMap.cs
index 5cb2ca7..53d0e8e 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA126_tagMCPrepareChangeMap.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA126_tagMCPrepareChangeMap.cs
@@ -28,53 +28,32 @@
         Debug.Log(_content);
         RuntimeLogUtility.AddLog_Blue(_content, PlayerDatas.Instance.PlayerId);
 #endif
-        var _mapConfig = Config.Instance.Get<MapConfig>(package.MapID);
-        DTCA127_tagMCStartChangeMap.LineID = 0;
 
-        int _realMapDataID = package.MapID;
-
-        if (_mapConfig.MapFBType != 0)
-        {
-            DungeonModel _model = ModelCenter.Instance.GetModel<DungeonModel>();
-            _realMapDataID = _model.GetDataMapIdByMapId(_realMapDataID);
-
-            if (package.MapID != 52020 && package.MapID != 52010)
-            {
-                DTCA127_tagMCStartChangeMap.LineID = package.FuncLineID;
-            }
-        }
-
-        var _mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(_realMapDataID, DTCA127_tagMCStartChangeMap.LineID);
-
-        if (_mapResConfig == null)
-        {
-            DTCA127_tagMCStartChangeMap.LineID = 0;
-            _mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(_realMapDataID, DTCA127_tagMCStartChangeMap.LineID);
-        }
-
+        var dataMapId = MapUtility.GetDataMapId(package.MapID);
+        var lineId = MapUtility.GetLineId(package.MapID, package.FuncLineID);
+        var mapResourcesConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
         if (!WindowCenter.Instance.IsOpen<LoadingWin>())
         {
-            LoadingWin.targetMapResId = _mapResConfig.ID;
+            LoadingWin.targetMapResId = mapResourcesConfig.ID;
             WindowCenter.Instance.Open<LoadingWin>();
         }
 
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-
-        if (_hero == null)
+        var hero = PlayerDatas.Instance.hero;
+        if (hero != null)
         {
-            return;
+            var mapConfig = Config.Instance.Get<MapConfig>(package.MapID);
+            if (mapConfig.CanRide == 0)
+            {
+                hero.SwitchHorse(0);
+                DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
+            }
+            hero.ClearPathFindTarget();
+            hero.OnPathFindStop -= MapTransferUtility.Instance.OnHeroStopPathFind;
+            hero.StopAll();
+
+            GA_Hero.s_MapSwitching = true;
         }
 
-        if(_mapConfig.CanRide == 0)
-        {
-            _hero.SwitchHorse(0);
-            DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
-        }
-        _hero.ClearPathFindTarget();
-        _hero.OnPathFindStop -= MapTransferUtility.Instance.OnHeroStopPathFind;
-        _hero.StopAll();
-
-        GA_Hero.s_MapSwitching = true;
     }
 
 }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
index c98de6a..95df671 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA1_Sys/DTCA127_tagMCStartChangeMap.cs
@@ -11,117 +11,64 @@
 
 public class DTCA127_tagMCStartChangeMap : DtcBasic
 {
-    public static int DEBUG_STEP = 0;
-    public static bool DEBUG_A127 = false;
-
     public const string RECORDPREMAPID_KEY = "RecordMapId";
-    public static readonly Dictionary<int, int> mapIdDict = new Dictionary<int, int>();
-
-    public static int LineID = 0;
-    public static bool isChangeLine = false;
-
-    public static MapResourcesConfig GetMapResourcesConfig()
-    {
-        int _realMapDataID = PlayerDatas.Instance.baseData.MapID;
-        var _mapConfig = Config.Instance.Get<MapConfig>(_realMapDataID);
-
-        if (_mapConfig.MapFBType != 0)
-        {
-            DungeonModel _model = ModelCenter.Instance.GetModel<DungeonModel>();
-            _realMapDataID = _model.GetDataMapIdByMapId(_realMapDataID);
-        }
-
-        var _key = _realMapDataID * 1000 + LineID;
-        MapResourcesConfig _config = GetMapResourcesConfig(_realMapDataID, LineID);
-        if (_config == null)
-        {
-            _config = GetMapResourcesConfig(_realMapDataID, 0);
-        }
-        return _config;
-    }
 
     public override void Done(GameNetPackBasic vNetPack)
     {
         base.Done(vNetPack);
-        DEBUG_A127 = true;
 
         var package = vNetPack as HA127_tagMCStartChangeMap;
         StageLoadTimeOutCatcher.RecordProtocol(package.socketType, "A127", DateTime.Now);
-
-        DEBUG_STEP = 0;
 
 #if UNITY_EDITOR
         string _content = string.Format("DTCA127_tagMCStartChangeMap => 寮�濮嬪垏鎹㈣嚦鍦板浘: {0}", package.MapID);
         Debug.Log(_content);
         RuntimeLogUtility.AddLog_Blue(_content, PlayerDatas.Instance.PlayerId);
 #endif
-        var _mapConfig = Config.Instance.Get<MapConfig>((int)package.MapID);
 
-        LineID = 0;
-        int _realMapDataID = (int)package.MapID;
-
-        if (_mapConfig.MapFBType != 0)
+        var dataMapId = MapUtility.GetDataMapId((int)package.MapID);
+        var lineId = MapUtility.GetLineId((int)package.MapID, package.FuncLineID);
+        var mapResourceConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+        if (mapResourceConfig != null)
         {
-            DungeonModel _model = ModelCenter.Instance.GetModel<DungeonModel>();
-            _realMapDataID = _model.GetDataMapIdByMapId(_realMapDataID);
-
-            if (package.MapID != 52020 && package.MapID != 52010)
-            {
-                LineID = package.FuncLineID;
-            }
-        }
-
-        var _mapResConfig = GetMapResourcesConfig(_realMapDataID, LineID);
-
-        if (_mapResConfig == null)
-        {
-            LineID = 0;
-            _mapResConfig = GetMapResourcesConfig(_realMapDataID, LineID);
-        }
-
-        if (_mapResConfig != null)
-        {
-            GA_Hero.MapOffset.x = _mapResConfig.MapOffset.x;
-            GA_Hero.MapOffset.z = _mapResConfig.MapOffset.y;
+            GA_Hero.MapOffset.x = mapResourceConfig.MapOffset.x;
+            GA_Hero.MapOffset.z = mapResourceConfig.MapOffset.y;
         }
         else
         {
             GA_Hero.MapOffset.x = 0;
             GA_Hero.MapOffset.z = 0;
         }
-        DEBUG_STEP = 1;
+
         BossShowModel.Instance.reqDungeonLineId = package.FuncLineID;
 
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-
-        if (_hero != null)
+        var hero = PlayerDatas.Instance.hero;
+        if (hero != null)
         {
-            _hero.ShowArrow(false);
-            _hero.SwitchGrayName(false);
+            hero.ShowArrow(false);
+            hero.SwitchGrayName(false);
             if (StatusMgr.Instance.IsExist(PlayerDatas.Instance.PlayerId, StatusMgr.Instance.redNameBuffID))
             {
-                _hero.SwitchRedName(true);
+                hero.SwitchRedName(true);
             }
-            _hero.needSyncGroundHeight = true;
+            hero.needSyncGroundHeight = true;
         }
+
         GAMgr.Instance.UnInit();
         DTCA713_tagMCDynamicBarrierState.Clear();
-
-        DEBUG_STEP = 2;
-
         GameObjectPoolManager.Instance.UnLoadAll();
         DropItemManager.ReleaseAll();
         if (PlayerDatas.Instance.baseData.MapID == package.MapID)
         {
             WindowCenter.Instance.Close<LoadingWin>();
         }
+
         LocalSave.SetInt(RECORDPREMAPID_KEY, PlayerDatas.Instance.baseData.MapID);
 
         BattleEffectPlayRule.Instance.sortPlayerList.Clear();
         SelectionManager.ClearJHSfx();
-        DEBUG_STEP = 3;
 
-        var isMainSocket = vNetPack.socketType == GameNetSystem.SocketType.Main;
+        var isMainSocket = vNetPack.socketType == ServerType.Main;
         PlayerDatas.Instance.RefreshProperty(isMainSocket, PlayerDataRefresh.MapID, package.MapID);
         PlayerDatas.Instance.RefreshProperty(isMainSocket, PlayerDataRefresh.ExAttr3, package.FuncLineID);
 
@@ -131,30 +78,10 @@
             PlayerDatas.Instance.hero.SelectTarget = null;
         }
 
-        DungeonStage.CurrentMapType = (MapType)_mapConfig.MapFBType;
-        if (StageManager.Instance.currentMapResId == _mapResConfig.ID)
-        {
-#if UNITY_EDITOR
-            Debug.LogFormat("DTCA127_tagMCStartChangeMap鍑虹幇鍔犺浇鐩稿悓鍦板浘琛屼负:" + _mapResConfig.ID);
-#endif
+        var mapConfig = Config.Instance.Get<MapConfig>((int)package.MapID);
+        DungeonStage.CurrentMapType = (MapType)mapConfig.MapFBType;
 
-            isChangeLine = true;
-
-            return;
-        }
-
-        switch (vNetPack.socketType)
-        {
-            case GameNetSystem.SocketType.Main:
-                StageManager.Instance.isServerPreparing = true;
-                break;
-            case GameNetSystem.SocketType.CrossSever:
-                StageManager.Instance.isCrossServerPreparing = true;
-                break;
-        }
-
-        DEBUG_STEP = 4;
-        switch (_mapConfig.MapFBType)
+        switch (mapConfig.MapFBType)
         {
             case 0:
                 foreach (var _id in DTCB206_tagMCHelpBattleCallResult.s_CacheObjIdList)
@@ -170,54 +97,17 @@
                 break;
         }
 
-        DEBUG_STEP = 5;
-        switch (package.MapID)
+        StageLoad.Instance.UpdateServerFlag(package.socketType, false);
+        StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
         {
-            case 31250:
-                StageManager.Instance.Load<GuardDungeonStage>(_mapConfig.MapID, package.socketType);
-                break;
-            case RuneTowerModel.RUNETOWER_MAPID:
-                StageManager.Instance.Load<RuneTowerDungeonStage>(_mapConfig.MapID, package.socketType);
-                break;
-            case JadeDynastyTowerModel.DATA_MAPID:
-                StageManager.Instance.Load<JadeDynastyTowerDungeonStage>(_mapConfig.MapID, package.socketType);
-                break;
-            case DemonJarModel.DEMONJAR_SINGLEMAPID:
-                StageManager.Instance.Load<FakeDemonJarDungeonStage>(_mapConfig.MapID, package.socketType);
-                break;
-            default:
-                StageManager.Instance.Load<DungeonStage>(_mapConfig.MapID, package.socketType);
-                break;
-        }
+            toMapId = (int)package.MapID,
+            toLineId = lineId,
+            needEmpty = true,
+            needLoadResource = true,
+            serverType = package.socketType,
+            isClientLoadMap = false
+        });
 
-        DEBUG_STEP = 6;
-    }
-
-    public static MapResourcesConfig GetMapResourcesConfig(int mapID, int lineID)
-    {
-        int _key = mapID * 1000 + lineID;
-        int _mapResourceID = -1;
-        MapResourcesConfig _mapResConfig = null;
-        if (mapIdDict.TryGetValue(_key, out _mapResourceID))
-        {
-            _mapResConfig = Config.Instance.Get<MapResourcesConfig>(_mapResourceID);
-        }
-        else
-        {
-            foreach (var _config in Config.Instance.GetAllValues<MapResourcesConfig>())
-            {
-                if (mapID == _config.DataID
-                 && lineID == _config.LineID)
-                {
-                    _mapResourceID = _config.ID;
-                    _mapResConfig = _config;
-                    mapIdDict[_key] = _mapResourceID;
-                    break;
-                }
-            }
-        }
-
-        return _mapResConfig;
     }
 
 }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA202_tagMCAttackMode.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA202_tagMCAttackMode.cs
index d3e6e7c..a16e45f 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA202_tagMCAttackMode.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA202_tagMCAttackMode.cs
@@ -6,13 +6,13 @@
     {
         C030A_tagCChangeAttackMode _proto = new C030A_tagCChangeAttackMode();
         _proto.Mode = (byte)attackMode;
-        if (CrossServerUtility.IsCrossServerBoss())
-        {
-            GameNetSystem.Instance.SendToCrossServer(_proto);
-        }
-        else
-        {
-            GameNetSystem.Instance.SendInfo(_proto);
+        if (CrossServerUtility.IsCrossServerBoss())
+        {
+            GameNetSystem.Instance.SendToCrossServer(_proto);
+        }
+        else
+        {
+            GameNetSystem.Instance.SendInfo(_proto);
         }
       
     }
@@ -30,7 +30,7 @@
 
         if (CrossServerUtility.IsCrossServer())
         {
-            if (vNetData.socketType == GameNetSystem.SocketType.Main)
+            if (vNetData.socketType == ServerType.Main)
             {
                 return;
             }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA7_Arena/DTCA709_tagObjInfoListRefresh.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Arena/DTCA709_tagObjInfoListRefresh.cs
index fd2ef18..edc5252 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA7_Arena/DTCA709_tagObjInfoListRefresh.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA7_Arena/DTCA709_tagObjInfoListRefresh.cs
@@ -37,7 +37,7 @@
 
                 if (CrossServerUtility.IsCrossServer())
                 {
-                    if (vNetDatas.socketType == GameNetSystem.SocketType.Main)
+                    if (vNetDatas.socketType == ServerType.Main)
                     {
                         if (vNetData.RefreshType == (int)PlayerDataRefresh.HP
                          || vNetData.RefreshType == (int)PlayerDataRefresh.MaxHP
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HC0_CrossRealm/DTCC001_tagGCCrossRealmPKMatchOK.cs b/Core/NetworkPackage/DTCFile/ServerPack/HC0_CrossRealm/DTCC001_tagGCCrossRealmPKMatchOK.cs
index 09c70fc..87ffc0b 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HC0_CrossRealm/DTCC001_tagGCCrossRealmPKMatchOK.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HC0_CrossRealm/DTCC001_tagGCCrossRealmPKMatchOK.cs
@@ -14,7 +14,7 @@
 
         var package = vNetPack as HC001_tagGCCrossRealmPKMatchOK;
 
-        if (package.socketType == GameNetSystem.SocketType.Main)
+        if (package.socketType == ServerType.Main)
         {
             var teamModel = ModelCenter.Instance.GetModel<TeamModel>();
             if (teamModel.isMatching)
@@ -29,4 +29,5 @@
 
     }
 
-}

+}
+
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs b/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
index 5d48b2a..fe9577d 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HC1_CrossRealm/DTCC104_tagMCPrepareEnterCrossServer.cs
@@ -16,7 +16,7 @@
         base.Done(vNetPack);
         var package = vNetPack as HC104_tagMCPrepareEnterCrossServer;
 
-        var config = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig((int)package.DataMapID, 0);
+        var config = TableConfig.MapResourcesConfig.GetConfig((int)package.DataMapID, 0);
         LoadingWin.targetMapResId = config.ID;
         WindowCenter.Instance.Open<LoadingWin>();
     }
diff --git a/Core/NetworkPackage/GameNetPackBasic.cs b/Core/NetworkPackage/GameNetPackBasic.cs
index b9345ec..3be0ccf 100644
--- a/Core/NetworkPackage/GameNetPackBasic.cs
+++ b/Core/NetworkPackage/GameNetPackBasic.cs
@@ -7,7 +7,7 @@
 public class GameNetPackBasic
 {
 
-    public GameNetSystem.SocketType socketType = GameNetSystem.SocketType.Main;
+    public ServerType socketType = ServerType.Main;
 
     /** 鍗忚鍙� */
     protected ushort _cmd = 0;
diff --git a/Core/NetworkPackage/GameNetSystem.cs b/Core/NetworkPackage/GameNetSystem.cs
index 9d48632..05ffcbb 100644
--- a/Core/NetworkPackage/GameNetSystem.cs
+++ b/Core/NetworkPackage/GameNetSystem.cs
@@ -120,7 +120,7 @@
             DebugEx.Log(ex);
         }
 
-        mainSocket = new ClientSocket(SocketType.Main);
+        mainSocket = new ClientSocket(ServerType.Main);
         mainProtocolQueue.Clear();
 
         mainSocket.Connect(ip, port, (bool ok) =>
@@ -147,7 +147,7 @@
             DebugEx.Log(ex);
         }
 
-        crossServerSocket = new ClientSocket(SocketType.CrossSever);
+        crossServerSocket = new ClientSocket(ServerType.CrossSever);
         crossSeverProtocolQueue.Clear();
         this.crossServerSocket.Connect(ip, port, (bool ok) =>
         {
@@ -188,13 +188,13 @@
     {
         if (crossServerSocket != null)
         {
-            protocol.socketType = SocketType.CrossSever;
+            protocol.socketType = ServerType.CrossSever;
             crossServerSocket.SendInfo(protocol);
             DebugPkgCache.Push(protocol);
         }
     }
 
-    public void PushPackage(GameNetPackBasic protocol, SocketType type)
+    public void PushPackage(GameNetPackBasic protocol, ServerType type)
     {
         lock (this)
         {
@@ -207,10 +207,10 @@
             {
                 switch (type)
                 {
-                    case SocketType.Main:
+                    case ServerType.Main:
                         mainProtocolQueue.Enqueue(protocol);
                         break;
-                    case SocketType.CrossSever:
+                    case ServerType.CrossSever:
                         crossSeverProtocolQueue.Enqueue(protocol);
                         break;
                     default:
@@ -338,7 +338,17 @@
             var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
             loginModel.busy = false;
             WindowJumpMgr.Instance.ClearJumpData();
-            StageManager.Instance.LoadLoginStage();
+
+            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+            {
+                toMapId = 1,
+                toLineId = 0,
+                needEmpty = false,
+                needLoadResource = true,
+                serverType = ServerType.Main,
+                isClientLoadMap = true
+            });
+
             NetLinkWin.Hide();
         }
     }
@@ -388,12 +398,6 @@
         DisConnected = 6,
     }
 
-    public enum SocketType
-    {
-        Main = 1,
-        CrossSever = 2,
-    }
-
     public struct CrossServerData
     {
         public string ip;
@@ -415,5 +419,10 @@
         Error = 2,
     }
 
+}
 
+public enum ServerType
+{
+    Main = 1,
+    CrossSever = 2,
 }
diff --git a/Core/NetworkPackage/NetPkgCtl.cs b/Core/NetworkPackage/NetPkgCtl.cs
index 27df0e3..a715e21 100644
--- a/Core/NetworkPackage/NetPkgCtl.cs
+++ b/Core/NetworkPackage/NetPkgCtl.cs
@@ -11,7 +11,7 @@
     private static List<NetPackage> tempPackages = new List<NetPackage>();//鏆傚仠鏃剁紦瀛樼殑灏佸寘鍒楄〃
     public static bool stopRecieve = false;
 
-    public static void RecordPackage(GameNetSystem.SocketType socketType, string bytes, NetPackagetType packType, string packageName, string fields, List<string> fieldDetails)
+    public static void RecordPackage(ServerType socketType, string bytes, NetPackagetType packType, string packageName, string fields, List<string> fieldDetails)
     {
 #if UNITY_EDITOR
         var package = new NetPackage();
@@ -93,7 +93,7 @@
 
 public class NetPackage
 {
-    public GameNetSystem.SocketType socketType;
+    public ServerType socketType;
     public bool show = false;
     public string time;
     public string content;
diff --git a/Core/NetworkPackage/Socket/ClientSocket.cs b/Core/NetworkPackage/Socket/ClientSocket.cs
index c473ad3..8bf796c 100644
--- a/Core/NetworkPackage/Socket/ClientSocket.cs
+++ b/Core/NetworkPackage/Socket/ClientSocket.cs
@@ -20,7 +20,7 @@
 
     public bool connected { get { return m_Socket == null ? false : m_Socket.Connected; } }
 
-    GameNetSystem.SocketType socketType = GameNetSystem.SocketType.Main;
+    ServerType socketType = ServerType.Main;
     DateTime m_LastPackageTime;
     public DateTime lastPackageTime { get { return m_LastPackageTime; } }
 
@@ -30,7 +30,7 @@
     int port;
     Action<bool> onConnected = null;
 
-    public ClientSocket(GameNetSystem.SocketType type)
+    public ClientSocket(ServerType type)
     {
         this.socketType = type;
     }
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index 57aee4d..4141947 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -225,7 +225,7 @@
     {
         if (!force)
         {
-            if (StageManager.Instance.StageType == Stage.E_StageType.Dungeon)
+            if (StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)
             {
                 if (DungeonStage.CurrentMapType != MapType.OpenCountry)
                 {
diff --git a/Fight/Actor/Skill/AttackHandler.cs b/Fight/Actor/Skill/AttackHandler.cs
index ccfb66a..930812f 100644
--- a/Fight/Actor/Skill/AttackHandler.cs
+++ b/Fight/Actor/Skill/AttackHandler.cs
@@ -180,7 +180,7 @@
             else
             {
                 // 澶勭悊灏侀瓟鍧涜嫳闆勪激瀹�
-                FakeDemonJarDungeonStage _dungeon = StageManager.Instance.CurrentStage as FakeDemonJarDungeonStage;
+                FakeDemonJarDungeonStage _dungeon = StageLoad.Instance.currentStage as FakeDemonJarDungeonStage;
                 if (_dungeon != null)
                 {
                     if (attacker.ServerInstID == PlayerDatas.Instance.PlayerId)
diff --git a/Fight/GameActor/GA_Guard.cs b/Fight/GameActor/GA_Guard.cs
index fa68ebf..423391d 100644
--- a/Fight/GameActor/GA_Guard.cs
+++ b/Fight/GameActor/GA_Guard.cs
@@ -92,7 +92,7 @@
         DTC0429_tagObjResetPos.ResetPlayerPosEvent += ResetPlayerPosEvent;
         if (IsHeroControl)
         {
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             DTC0102_tagCDBPlayer.afterPlayerDataInitializeEvent += AfterPlayerDataInitializeEvent;
             DTCA112_tagMCDBPlayer.playerInitEvent += PlayerInitEvent;
         }
@@ -135,7 +135,7 @@
         DTCA112_tagMCDBPlayer.playerInitEvent -= PlayerInitEvent;
         if (IsHeroControl)
         {
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
             ReleasePickUpBehaviour();
         }
         if (m_SFXController != null)
diff --git a/Fight/MapTransferUtility.cs b/Fight/MapTransferUtility.cs
index f69923f..a56fc3c 100644
--- a/Fight/MapTransferUtility.cs
+++ b/Fight/MapTransferUtility.cs
@@ -19,14 +19,11 @@
         Fight,
     }
     private E_MapTransferDoType m_MapTransferType;
-    public E_MapTransferDoType MapTransferDoType
-    {
-        get
-        {
+    public E_MapTransferDoType MapTransferDoType {
+        get {
             return m_MapTransferType;
         }
-        set
-        {
+        set {
             m_MapTransferType = value;
 #if UNITY_EDITOR
             // Debug.LogFormat("璁剧疆鏂瑰紡: {0}", m_MapTransferType);
@@ -125,8 +122,7 @@
     #endregion
 
     #region npc
-    public int NpcID
-    {
+    public int NpcID {
         get; set;
     }
     #endregion
@@ -493,11 +489,6 @@
             _model.RequestMapTransport(_npcLocation.mapId);
             m_SwitchMapFinished = false;
             m_MapID = _npcLocation.mapId;
-            MapResourcesConfig _mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(_npcLocation.mapId, 0);
-            if (_mapResConfig != null)
-            {
-                LoadingWin.targetMapResId = _mapResConfig.ID;
-            }
         }
         // 鎵句笉鍒版垨鑰呮槸鏈湴鍥�
         // 鎵句笉鍒板彲鑳芥槸瀹㈡埛绔璞�,涔熷彲鑳芥槸閰嶇疆涓嶅瓨鍦�
@@ -731,15 +722,6 @@
                 SysNotifyMgr.Instance.ShowTip("PK_Leave");
                 return;
             }
-            MapResourcesConfig _config = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(npcLocation.mapId, 0);
-            if (_config != null)
-            {
-                LoadingWin.targetMapResId = _config.ID;
-            }
-            else
-            {
-                LoadingWin.targetMapResId = 1;
-            }
         }
 
         _hero.Behaviour.StopHandupAI(true);
@@ -799,16 +781,6 @@
                 SysNotifyMgr.Instance.ShowTip("Map_Delivery");
                 return;
             }
-
-            MapResourcesConfig _config = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(mapID, 0);
-            if (_config != null)
-            {
-                LoadingWin.targetMapResId = _config.ID;
-            }
-            else
-            {
-                LoadingWin.targetMapResId = 1;
-            }
         }
 
         _hero.Behaviour.StopHandupAI(true);
@@ -826,7 +798,6 @@
 
         if (!AssetSource.sceneFromEditor)
         {
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(mapId, 0);
             var assetValid = AssetVersionUtility.IsSceneAssetValid(mapId, 0);
             if (!assetValid)
             {
diff --git a/Fight/PreFightMission.cs b/Fight/PreFightMission.cs
index 1527a0e..a74a596 100644
--- a/Fight/PreFightMission.cs
+++ b/Fight/PreFightMission.cs
@@ -7,7 +7,7 @@
 
 [XLua.LuaCallCSharp]
 public class PreFightMission : Singleton<PreFightMission>
-
+
 {
     private Vector3 m_FirstTrransferStartPos = new Vector3(183.84f, 62.44f, 25.56f);
     private Vector3 m_FirstTrransferEndPos = new Vector3(161.33f, 51.545f, 34.84f);
@@ -156,7 +156,7 @@
 
                 if (h0827.MissionState == 1)
                 {
-                    if (StageManager.Instance.isServerPreparing == false)
+                    if (StageLoad.Instance.IsServerPrepareOk(ServerType.Main))
                     {
                         HandlerMission(h0827.MissionID);
                     }
@@ -588,7 +588,8 @@
                         //Step_4_BossKilled();
                         m_StartScaleBoss = false;
 
-                        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+                        var dataMapId = MapUtility.GetDataMapId(PlayerDatas.Instance.baseData.MapID);
+                        var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, PlayerDatas.Instance.baseData.dungeonLineId);
                         SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
                     }
 
diff --git a/Fight/Stage/CreateRoleStage.cs b/Fight/Stage/CreateRoleStage.cs
index e99be57..7179c9e 100644
--- a/Fight/Stage/CreateRoleStage.cs
+++ b/Fight/Stage/CreateRoleStage.cs
@@ -38,6 +38,9 @@
     public override void UnInitialize()
     {
         base.UnInitialize();
+
+        WindowCenter.Instance.Close<CreateRoleWin>();
+
 #if !UNITY_EDITOR
         AssetBundleUtility.Instance.UnloadAssetBundle("mob/createrole", true, true);
 #endif
diff --git a/Fight/Stage/Dungeon/DungeonStage.cs b/Fight/Stage/Dungeon/DungeonStage.cs
index a971180..4bb1d31 100644
--- a/Fight/Stage/Dungeon/DungeonStage.cs
+++ b/Fight/Stage/Dungeon/DungeonStage.cs
@@ -23,7 +23,8 @@
         //AssetPreLoad.Instance.PreLoadNPC(PlayerDatas.Instance.baseData.MapID);
         SelectionManager.Initiailze();
 
-        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+        var dataMapId = MapUtility.GetDataMapId(PlayerDatas.Instance.baseData.MapID);
+        var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, PlayerDatas.Instance.baseData.dungeonLineId);
 
         SoundPlayer.Instance.UnLoadMusic(mapResConfig.Music);
         SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
@@ -80,10 +81,9 @@
 
         CreateMapTransfer();
 
-        StartCoroutine(CreateMapArea());
+        StartCoroutine("CreateMapArea");
 
         var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
         CurrentMapType = (MapType)mapConfig.MapFBType;
         switch (CurrentMapType)
         {
@@ -116,6 +116,7 @@
     {
         base.UnInitialize();
 
+        StopAllCoroutines();
         mapData = null;
 
         if (s_MapAreaDict != null)
diff --git a/Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs b/Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs
index 71e88b7..1f5073d 100644
--- a/Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs
+++ b/Fight/Stage/Dungeon/JadeDynastyTowerDungeonStage.cs
@@ -106,7 +106,7 @@
             }
 
             var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+            var mapResConfig = MapResourcesConfig.GetConfig(JadeDynastyTowerModel.DATA_MAPID, 0);
 
             SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
             WindowCenter.Instance.Open<MapNameHintWin>();
diff --git a/Fight/Stage/Dungeon/RuneTowerDungeonStage.cs b/Fight/Stage/Dungeon/RuneTowerDungeonStage.cs
index 3b5d3f5..6df6aae 100644
--- a/Fight/Stage/Dungeon/RuneTowerDungeonStage.cs
+++ b/Fight/Stage/Dungeon/RuneTowerDungeonStage.cs
@@ -98,7 +98,7 @@
             }
 
             var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+            var mapResConfig = MapResourcesConfig.GetConfig(RuneTowerModel.RUNETOWER_MAPID, 0);
 
             SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
 
diff --git a/Fight/Stage/SelectRoleStage.cs b/Fight/Stage/SelectRoleStage.cs
index a178287..6c5f705 100644
--- a/Fight/Stage/SelectRoleStage.cs
+++ b/Fight/Stage/SelectRoleStage.cs
@@ -29,6 +29,13 @@
         //   AssetPreLoad.Instance.PreLoadJobEffect(PlayerDatas.Instance.loginInfo.Job);
     }
 
+    public override void UnInitialize()
+    {
+        base.UnInitialize();
+
+        WindowCenter.Instance.Close<SelectRoleWin>();
+    }
+
     protected override void OnStageLoadFinish()
     {
         base.OnStageLoadFinish();
diff --git a/Fight/Stage/Stage.cs b/Fight/Stage/Stage.cs
index 97ebe64..462e1ce 100644
--- a/Fight/Stage/Stage.cs
+++ b/Fight/Stage/Stage.cs
@@ -13,7 +13,7 @@
 
     void Awake()
     {
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         Initialize();
     }
 
@@ -29,7 +29,7 @@
 
     void OnDestroy()
     {
-        StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
     }
 
     void FixedUpdate()
diff --git a/Fight/Stage/StageLoad.cs b/Fight/Stage/StageLoad.cs
new file mode 100644
index 0000000..e7bb40c
--- /dev/null
+++ b/Fight/Stage/StageLoad.cs
@@ -0,0 +1,425 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine.SceneManagement;
+using UnityEngine;
+using Snxxz.UI;
+using System;
+using TableConfig;
+using UnityEngine.Events;
+
+public class StageLoad : SingletonMonobehaviour<StageLoad>
+{
+    StageLoadProcessor stageLoadProcessor;
+    public float progress {
+        get {
+            if (stageLoadProcessor != null)
+            {
+                return stageLoadProcessor.progress;
+            }
+            else
+            {
+                return 0f;
+            }
+        }
+    }
+
+    Stage m_CurrentStage;
+    public Stage currentStage {
+        get { return m_CurrentStage; }
+        set { m_CurrentStage = value; }
+    }
+
+    public Stage.E_StageType stageType {
+        get {
+            return (currentStage != null && currentStage is DungeonStage) ? Stage.E_StageType.Dungeon : Stage.E_StageType.MainCity;
+        }
+    }
+
+    public event Action<int> onStartStageLoadingEvent;
+    public UnityAction onStageLoadFinish;
+
+    StageLoadCommand currentCommand;
+    Queue<StageLoadCommand> commands = new Queue<StageLoadCommand>();
+
+    bool server0109Ok_Main = false;
+    bool server0109Ok_CrossServer;
+
+    float loadStartTime = 0f;
+    public bool isLoading { get; private set; }
+
+    public int mapIdRecord { get; private set; }
+    public int lineIdRecord { get; private set; }
+
+    public void PushSceneLoadCommand(StageLoadCommand command)
+    {
+        commands.Enqueue(command);
+    }
+
+    private void ExcuteCommand(StageLoadCommand command)
+    {
+        var tasks = new Queue<StageLoadProcessor.StageLoadTask>();
+        var needLoadResource = true;
+        if (command.needLoadResource)
+        {
+            if (command.fromMapId != command.toMapId)
+            {
+                needLoadResource = true;
+            }
+            else
+            {
+                var config1 = MapResourcesConfig.GetConfig(MapUtility.GetDataMapId(command.fromMapId), command.fromLineId);
+                var config2 = MapResourcesConfig.GetConfig(MapUtility.GetDataMapId(command.toMapId), command.toLineId);
+                if (config1 == null || config2 == null)
+                {
+                    needLoadResource = true;
+                }
+                else
+                {
+                    needLoadResource = config1.MapResources != config2.MapResources;
+                }
+            }
+        }
+        else
+        {
+            needLoadResource = false;
+        }
+
+        var assetValid = AssetVersionUtility.IsSceneAssetValid(command.toMapId, command.toLineId);
+        if (!assetValid)
+        {
+            tasks.Enqueue(new StageLoadProcessor.Wait0109Task(command));
+            if (command.serverType == ServerType.Main)
+            {
+                tasks.Enqueue(new StageLoadProcessor.WaitLoginCompleteTask(command));
+            }
+            tasks.Enqueue(new StageLoadProcessor.WaitSecondsTask(command, 1));
+            tasks.Enqueue(new StageLoadProcessor.ReturnToNoviceVillageTask(command));
+        }
+        else
+        {
+            if (needLoadResource)
+            {
+                tasks.Enqueue(new StageLoadProcessor.PreProcessTask(command));
+                tasks.Enqueue(new StageLoadProcessor.UnLoadAndGCTask(command));
+            }
+
+            if (needLoadResource && command.needEmpty)
+            {
+                tasks.Enqueue(new StageLoadProcessor.LoadEmptyTask(command));
+            }
+
+            if (needLoadResource)
+            {
+                tasks.Enqueue(new StageLoadProcessor.LoadNewSceneTask(command));
+            }
+
+            if (!command.isClientLoadMap)
+            {
+                tasks.Enqueue(new StageLoadProcessor.Wait0109Task(command));
+                if (command.serverType == ServerType.Main)
+                {
+                    tasks.Enqueue(new StageLoadProcessor.WaitLoginCompleteTask(command));
+                }
+            }
+
+            if (needLoadResource)
+            {
+                tasks.Enqueue(new StageLoadProcessor.PostProcessTask(command));
+            }
+        }
+
+        UpdateServerFlag(command.serverType, false);
+
+        var gameObject = new GameObject("StageLoadProcessor");
+        DontDestroyOnLoad(gameObject);
+        stageLoadProcessor = gameObject.AddComponent<StageLoadProcessor>();
+        stageLoadProcessor.Begin(tasks);
+
+        StageLoadTimeOutCatcher.Begin(command.toMapId);
+        loadStartTime = Time.time;
+        isLoading = true;
+    }
+
+    public void ReportComplete(int mapId, int lineId)
+    {
+        mapIdRecord = mapId;
+        lineIdRecord = lineId;
+        isLoading = false;
+        StageLoadTimeOutCatcher.Stop();
+
+        if (stageLoadProcessor != null)
+        {
+            DestroyImmediate(stageLoadProcessor.gameObject);
+            stageLoadProcessor = null;
+        }
+    }
+
+    public void UpdateServerFlag(ServerType serverType, bool ok)
+    {
+        if (ok)
+        {
+            if (currentCommand != null && !currentCommand.serverFlag0109)
+            {
+                currentCommand.serverFlag0109 = true;
+            }
+            else
+            {
+                foreach (var command in commands)
+                {
+                    if (command.serverType == serverType && !command.serverFlag0109)
+                    {
+                        command.serverFlag0109 = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        switch (serverType)
+        {
+            case ServerType.Main:
+                server0109Ok_Main = ok;
+                break;
+            case ServerType.CrossSever:
+                server0109Ok_CrossServer = ok;
+                break;
+            default:
+                break;
+        }
+    }
+
+    public void BroadcastStageLoadStartEvent(int mapId)
+    {
+        if (onStartStageLoadingEvent != null)
+        {
+            onStartStageLoadingEvent(mapId);
+        }
+    }
+
+    public void BroadcastStageLoadEndEvent()
+    {
+        if (onStageLoadFinish != null)
+        {
+            onStageLoadFinish();
+        }
+    }
+
+    void Update()
+    {
+        if (!isLoading && commands.Count > 0)
+        {
+            currentCommand = commands.Dequeue();
+            currentCommand.fromMapId = mapIdRecord;
+            currentCommand.fromLineId = lineIdRecord;
+            ExcuteCommand(currentCommand);
+        }
+
+        if (isLoading)
+        {
+            if (Time.time - loadStartTime > 25f)
+            {
+                if (stageLoadProcessor != null)
+                {
+                    DestroyImmediate(stageLoadProcessor.gameObject);
+                    stageLoadProcessor = null;
+                }
+
+                currentCommand = null;
+                isLoading = false;
+                commands.Clear();
+                StageLoadTimeOutCatcher.ReportLoadingOverTime();
+                GameNetSystem.Instance.Reconnect();
+            }
+        }
+    }
+
+    public class StageLoadCommand
+    {
+        public int fromMapId;
+        public int fromLineId;
+        public int toMapId;
+        public int toLineId;
+
+        public bool needEmpty;
+        public ServerType serverType;
+        public bool isClientLoadMap;
+        public bool needLoadResource;
+
+        public bool serverFlag0109 = false;
+    }
+
+    public bool IsServerPrepareOk(ServerType socketType)
+    {
+        switch (socketType)
+        {
+            case ServerType.Main:
+                return server0109Ok_Main;
+            case ServerType.CrossSever:
+                return server0109Ok_CrossServer;
+            default:
+                return false;
+        }
+    }
+
+    int m_InitHeroStep = -1;
+    public int initHeroStep { get { return m_InitHeroStep; } }
+
+    public void InitHero()
+    {
+        m_InitHeroStep = 0;
+
+        // 鍒濆鍖栨憚鍍忔満
+        if (!CameraController.Instance)
+        {
+            UnityEngine.Object.Instantiate(BuiltInLoader.LoadPrefab("GameCamera"));
+            CameraController.Instance.AcceptInput = false;
+            CameraController.Instance.CameraObject.enabled = false;
+        }
+
+        m_InitHeroStep = 1;
+        var hero = PlayerDatas.Instance.hero;
+        if (hero == null)
+        {
+            hero = GAMgr.Instance.RequestPlayer<GA_Hero>(PlayerDatas.Instance.PlayerId, E_ActorGroup.User, null);
+        }
+
+        m_InitHeroStep = 2;
+        hero.State = E_ActorState.Idle;
+        hero.ActorInfo.ResetHp((int)PlayerDatas.Instance.baseData.HP, -1, (int)PlayerDatas.Instance.extersion.MaxHP);
+        hero.CalculateMoveSpeed((ushort)PlayerDatas.Instance.extersion.SpeedValue);
+        hero.CalculateAtkSpeed(PlayerDatas.Instance.extersion.battleValEx1);
+        hero.InitBornPos(PlayerDatas.Instance.baseData.PosX, PlayerDatas.Instance.baseData.PosY);
+        m_InitHeroStep = 3;
+        CameraController.Instance.SetLookTarget(hero.Root);
+        CameraController.Instance.Apply();
+
+        var packModel = ModelCenter.Instance.GetModel<PlayerPackModel>();
+        var equipModel = packModel.GetSinglePackModel(PackType.rptEquip);
+
+        var itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.retClothes);
+        var fashion = equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionClothes);
+        m_InitHeroStep = 4;
+        if (fashion != null)
+        {
+            hero.SwitchClothes((uint)fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionClothes);
+        }
+        else if (itemModel != null)
+        {
+            hero.SwitchClothes((uint)itemModel.itemInfo.ItemID);
+        }
+        else
+        {
+            hero.SwitchClothes(0);
+        }
+
+        m_InitHeroStep = 5;
+
+        itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.retWeapon);
+        fashion = equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionWeapon);
+
+        if (fashion != null)
+        {
+            hero.SwitchWeapon((uint)fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionWeapon);
+        }
+        else if (itemModel != null)
+        {
+            hero.SwitchWeapon((uint)itemModel.itemInfo.ItemID);
+        }
+        else
+        {
+            hero.SwitchWeapon(0);
+        }
+
+        m_InitHeroStep = 6;
+        itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.retWeapon2);
+        fashion = equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionWeapon2);
+
+        if (fashion != null)
+        {
+            hero.SwitchSecondary((uint)fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionWeapon2);
+        }
+        else if (itemModel != null)
+        {
+            hero.SwitchSecondary((uint)itemModel.itemInfo.ItemID);
+        }
+        else
+        {
+            hero.SwitchSecondary(0);
+        }
+
+        m_InitHeroStep = 7;
+
+        itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.retWing);
+        if (itemModel != null)
+        {
+            hero.SwitchWing((uint)itemModel.itemInfo.ItemID);
+        }
+
+        m_InitHeroStep = 8;
+        var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
+        if (mapConfig.CanRide == 1)
+        {
+            itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.mount);
+            if (itemModel != null)
+            {
+                var mountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>();
+                if (mountModel.HorseRidingBool)
+                {
+                    hero.OnHorse(1);
+                }
+            }
+        }
+
+        m_InitHeroStep = 9;
+
+        itemModel = equipModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
+        if (itemModel != null)
+        {
+            hero.SwitchGuard((uint)itemModel.itemInfo.ItemID);
+        }
+
+        m_InitHeroStep = 10;
+
+        hero.SyncSuitEffect();
+
+        m_InitHeroStep = 11;
+        hero.IdleImmediate();
+
+        hero.SetFairyLeagueHeadUp(PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON);
+        hero.CheckAncientHeadUp();
+
+        m_InitHeroStep = 12;
+        var titleId = 0;
+        if (PlayerDatas.Instance.baseData.MapID != 31160)
+        {
+            var titelModel = ModelCenter.Instance.GetModel<TitleModel>();
+            var title = titelModel.GetTitleEquip();
+            titleId = title != null && titelModel.IsTitleGain(title.id) ? title.id : 0;
+        }
+        hero.SwitchTitle((uint)titleId);
+
+        m_InitHeroStep = 13;
+        // 鍒ゆ柇buff
+        if (StatusMgr.Instance.IsExist(PlayerDatas.Instance.PlayerId, StatusMgr.Instance.redNameBuffID))
+        {
+            hero.SwitchRedName(true);
+        }
+
+        hero.RequestLight();
+
+        m_InitHeroStep = 14;
+        PlayerDatas.Instance.hero = hero;
+
+        var preLoadSkillEffects = GeneralDefine.PreloadSkillEffect[hero.JobSetup.Job - 1];
+        if (preLoadSkillEffects != null && preLoadSkillEffects.Length > 0)
+        {
+            foreach (var _id in preLoadSkillEffects)
+            {
+                InstanceResourcesLoader.PreloadSkillEffect(_id);
+            }
+        }
+
+        m_InitHeroStep = 15;
+    }
+
+}
diff --git a/Lua/Gen/StageManagerWrap.cs.meta b/Fight/Stage/StageLoad.cs.meta
similarity index 75%
copy from Lua/Gen/StageManagerWrap.cs.meta
copy to Fight/Stage/StageLoad.cs.meta
index a713fe7..5e302ec 100644
--- a/Lua/Gen/StageManagerWrap.cs.meta
+++ b/Fight/Stage/StageLoad.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: 1316663bef8bbed4f99dc61ee61da170
-timeCreated: 1548853305
+guid: c641db783d83ae7448214778dc062f31
+timeCreated: 1548408152
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Fight/Stage/StageLoadProcessor.cs b/Fight/Stage/StageLoadProcessor.cs
new file mode 100644
index 0000000..4a2cef9
--- /dev/null
+++ b/Fight/Stage/StageLoadProcessor.cs
@@ -0,0 +1,579 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.SceneManagement;
+using Snxxz.UI;
+using TableConfig;
+using System;
+
+public class StageLoadProcessor : MonoBehaviour
+{
+    float progressBuf = 0.1f;
+    public float progress { get; private set; }
+
+    StageLoadTask currentTask = null;
+    Queue<StageLoadTask> tasks = new Queue<StageLoadTask>();
+
+    public void Begin(Queue<StageLoadTask> tasks)
+    {
+        this.tasks = tasks;
+        var totalWeight = 0f;
+        foreach (var task in tasks)
+        {
+            totalWeight += task.exceptedWeight;
+        }
+
+        foreach (var task in tasks)
+        {
+            task.weight = task.exceptedWeight / totalWeight;
+        }
+    }
+
+    public void Complete(int mapId, int lineId)
+    {
+        StageLoad.Instance.ReportComplete(mapId, lineId);
+    }
+
+    private void Update()
+    {
+        if (currentTask == null)
+        {
+            if (tasks.Count > 0)
+            {
+                currentTask = tasks.Dequeue();
+                currentTask.Begin();
+            }
+        }
+
+        if (currentTask != null)
+        {
+            currentTask.Update();
+            if (!currentTask.done)
+            {
+                progress = Mathf.Clamp01(progressBuf + currentTask.weight * currentTask.progress);
+            }
+            else
+            {
+                progressBuf += currentTask.weight;
+                currentTask.End();
+                if (tasks.Count == 0)
+                {
+                    Complete(currentTask.command.toMapId, currentTask.command.toLineId);
+                }
+
+                currentTask = null;
+            }
+        }
+
+    }
+
+    public abstract class StageLoadTask
+    {
+        public float timer { get; protected set; }
+        public float duration { get; protected set; }
+        public bool done { get; protected set; }
+        public float progress { get; protected set; }
+
+        public float exceptedWeight { get; protected set; }
+        public float weight { get; set; }
+
+        public readonly StageLoad.StageLoadCommand command;
+
+        public StageLoadTask(StageLoad.StageLoadCommand command)
+        {
+            this.command = command;
+        }
+
+        public abstract void Begin();
+        public abstract void Update();
+        public abstract void End();
+    }
+
+    public class PreProcessTask : StageLoadTask
+    {
+        public PreProcessTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.1f;
+        }
+
+        public override void Begin()
+        {
+            SystemSetting.Instance.LetFPSUnLimit();
+            Application.backgroundLoadingPriority = ThreadPriority.High;
+            StageLoad.Instance.BroadcastStageLoadStartEvent(command.fromMapId);
+            try
+            {
+                //涓轰粈涔堝湪杩欎釜鍦版柟瑕佽皟鐢ㄤ袱娆″叧闂叾浠栫獥鍙g殑鎺ュ彛鍛紝杩欎釜姘村氨娣变簡銆�
+                //鍥犱负鏈変簺鐣岄潰琚叧闂殑鏃跺�欙紝浼氬幓鎵撳紑涓荤晫闈紝鎵�浠ワ紝杩樺緱鍐嶅叧闂竴娆″叧闂叾浠栫獥鍙g殑鐣岄潰锛岄槻姝富鐣岄潰琚剰澶栧紑鍚��
+                WindowCenter.Instance.asyncLoad.StopAllTasks();
+                switch (command.toMapId)
+                {
+                    case 2:
+                    case 3:
+                        WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Login);
+                        WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
+                        if (!WindowCenter.Instance.IsOpen<LaunchBackGroundWin>())
+                        {
+                            WindowCenter.Instance.Open<LaunchBackGroundWin>(true);
+                        }
+
+                        WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
+                        break;
+                    case 1:
+                        WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Launch);
+                        WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
+                        if (!WindowCenter.Instance.IsOpen<LaunchBackGroundWin>())
+                        {
+                            WindowCenter.Instance.Open<LaunchBackGroundWin>(true);
+                        }
+
+                        WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
+                        break;
+                    default:
+                        WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.SelectRole);
+                        WindowCenter.Instance.CloseOthers<LoadingWin>();
+                        if (!WindowCenter.Instance.IsOpen<LoadingWin>())
+                        {
+                            var dataMapId = MapUtility.GetDataMapId(command.toMapId);
+                            var lineId = MapUtility.GetLineId(command.toMapId, command.toLineId);
+                            var config = MapResourcesConfig.GetConfig(dataMapId, lineId);
+                            LoadingWin.targetMapResId = config.ID;
+                            WindowCenter.Instance.Open<LoadingWin>(true);
+                        }
+
+                        WindowCenter.Instance.CloseOthers<LoadingWin>();
+                        break;
+                }
+            }
+            catch (System.Exception ex)
+            {
+                ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step3", ex);
+            }
+
+            done = true;
+        }
+
+        public override void End()
+        {
+        }
+
+        public override void Update()
+        {
+        }
+    }
+
+    public class LoadEmptyTask : StageLoadTask
+    {
+        public LoadEmptyTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.2f;
+        }
+
+        public override void Begin()
+        {
+            duration = 0.2f;
+            SceneManager.LoadScene("Empty");
+        }
+
+        public override void End()
+        {
+
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (timer > duration)
+            {
+                done = true;
+                progress = timer / duration;
+            }
+        }
+
+    }
+
+    public class UnLoadAndGCTask : StageLoadTask
+    {
+        AsyncOperation unloadUnUsedOperation;
+
+        public UnLoadAndGCTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.2f;
+        }
+
+        public override void Begin()
+        {
+            if (StageLoad.Instance.currentStage != null)
+            {
+                StageLoad.Instance.currentStage.UnInitialize();
+            }
+
+            unloadUnUsedOperation = Resources.UnloadUnusedAssets();
+        }
+
+        public override void End()
+        {
+            if (!AssetSource.sceneFromEditor)
+            {
+                AssetBundleUtility.Instance.UnloadAssetBundle("maps/map000_xsdt", true, false);
+                var lastMapId = command.fromMapId;
+                var lastLineId = command.fromLineId;
+                var assetBundleName = GetAssetBundleNameByMapId(lastMapId, lastLineId);
+                if (!string.IsNullOrEmpty(assetBundleName))
+                {
+                    AssetBundleUtility.Instance.UnloadAssetBundle(assetBundleName, true, false);
+                }
+            }
+
+            GC.Collect();
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (unloadUnUsedOperation != null)
+            {
+                done = unloadUnUsedOperation.isDone;
+                progress = unloadUnUsedOperation.progress;
+            }
+            else
+            {
+                done = true;
+                progress = 1f;
+            }
+        }
+
+    }
+
+    public class LoadNewSceneTask : StageLoadTask
+    {
+        AsyncOperation operation;
+
+        public LoadNewSceneTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.4f;
+        }
+
+        public override void Begin()
+        {
+            var mapId = command.toMapId;
+            var lineId = command.toLineId;
+            if (!AssetSource.sceneFromEditor)
+            {
+                var assetBundleName = GetAssetBundleNameByMapId(mapId, lineId);
+                AssetBundleUtility.Instance.Sync_LoadAll(assetBundleName);
+            }
+
+            switch (command.toMapId)
+            {
+                case 1:
+                    operation = SceneManager.LoadSceneAsync("Level_Login");
+                    break;
+                case 2:
+                case 3:
+                    operation = SceneManager.LoadSceneAsync("CreateRole_001");
+                    break;
+                default:
+                    var dataMapId = MapUtility.GetDataMapId(mapId);
+                    var config = MapResourcesConfig.GetConfig(dataMapId, lineId);
+                    operation = SceneManager.LoadSceneAsync(config.MapResources);
+                    break;
+            }
+
+        }
+
+        public override void End()
+        {
+            var mapId = command.toMapId;
+            var lineId = command.toLineId;
+
+            var levelName = string.Empty;
+            switch (mapId)
+            {
+                case 1:
+                    levelName = "__Stage_Level_Login_";
+                    break;
+                case 2:
+                case 3:
+                    levelName = "__Stage_CreateRole_001_";
+                    break;
+                default:
+                    try
+                    {
+                        StageLoad.Instance.InitHero();
+                    }
+                    catch (Exception ex)
+                    {
+                        ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 InitHero 鎵ц鍒�: " + StageLoad.Instance.initHeroStep, ex);
+                    }
+
+                    var dataMapId = MapUtility.GetDataMapId(mapId);
+                    var config = MapResourcesConfig.GetConfig(dataMapId, lineId);
+                    levelName = string.Format("__Stage_{0}_", config.MapResources);
+                    break;
+            }
+
+            var stageGameObject = new GameObject(levelName);
+            Stage stage;
+            switch (mapId)
+            {
+                case 1:
+                    stage = stageGameObject.AddComponent<LoginStage>();
+                    break;
+                case 2:
+                    stage = stageGameObject.AddComponent<CreateRoleStage>();
+                    break;
+                case 3:
+                    stage = stageGameObject.AddComponent<SelectRoleStage>();
+                    break;
+                case 31250:
+                    stage = stageGameObject.AddComponent<GuardDungeonStage>();
+                    break;
+                case RuneTowerModel.RUNETOWER_MAPID:
+                    stage = stageGameObject.AddComponent<RuneTowerDungeonStage>();
+                    break;
+                case JadeDynastyTowerModel.DATA_MAPID:
+                    stage = stageGameObject.AddComponent<JadeDynastyTowerDungeonStage>();
+                    break;
+                case DemonJarModel.DEMONJAR_SINGLEMAPID:
+                    stage = stageGameObject.AddComponent<FakeDemonJarDungeonStage>();
+                    break;
+                default:
+                    stage = stageGameObject.AddComponent<DungeonStage>();
+                    break;
+            }
+
+            stage.mapId = mapId;
+            StageLoad.Instance.currentStage = stage;
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (operation != null)
+            {
+                done = operation.isDone;
+                progress = operation.progress;
+            }
+            else
+            {
+                done = true;
+                progress = 1f;
+            }
+        }
+    }
+
+    public class Wait0109Task : StageLoadTask
+    {
+        public Wait0109Task(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.1f;
+        }
+
+        public override void Begin()
+        {
+            duration = 1f;
+        }
+
+        public override void End()
+        {
+            var mapOk = new C0107_tagCInitMapOK();
+            mapOk.MapID = (ushort)command.toMapId;
+            mapOk.Type = 0;
+            StageLoadTimeOutCatcher.RecordProtocol(command.serverType, "0107", DateTime.Now);
+
+            switch (command.serverType)
+            {
+                case ServerType.Main:
+                    GameNetSystem.Instance.SendInfo(mapOk);
+                    break;
+                case ServerType.CrossSever:
+                    GameNetSystem.Instance.SendToCrossServer(mapOk);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (!command.serverFlag0109)
+            {
+                done = false;
+                progress = timer / duration;
+            }
+            else
+            {
+                done = true;
+                progress = 1f;
+            }
+        }
+    }
+
+    public class WaitLoginCompleteTask : StageLoadTask
+    {
+        public WaitLoginCompleteTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.2f;
+        }
+
+        public override void Begin()
+        {
+            duration = 2f;
+        }
+
+        public override void End()
+        {
+
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (DTC0403_tagPlayerLoginLoadOK.neverLoginOk)
+            {
+                done = false;
+                progress = timer / duration;
+            }
+            else
+            {
+                done = true;
+                progress = 1f;
+            }
+        }
+    }
+
+    public class PostProcessTask : StageLoadTask
+    {
+        public PostProcessTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+            exceptedWeight = 0.1f;
+        }
+
+        public override void Begin()
+        {
+            StageLoad.Instance.BroadcastStageLoadEndEvent();
+            WindowCenter.Instance.Close<LoadingWin>();
+            SystemSetting.Instance.SetGameFps(SystemSetting.Instance.GetGameFps());
+
+            foreach (var actor in GAMgr.Instance.reAdjustPosList)
+            {
+                actor.AdjustPos((ushort)actor.ActorInfo.serverBornPos.x, (ushort)actor.ActorInfo.serverBornPos.y);
+            }
+
+            GAMgr.Instance.reAdjustPosList.Clear();
+            done = true;
+        }
+
+        public override void End()
+        {
+            Application.backgroundLoadingPriority = ThreadPriority.BelowNormal;
+            DebugEx.LogFormat("StageLoad => Load Scene : {0} Finished.", command.toMapId);
+        }
+
+        public override void Update()
+        {
+        }
+
+    }
+
+    public class WaitSecondsTask : StageLoadTask
+    {
+        public WaitSecondsTask(StageLoad.StageLoadCommand command, float seconds) : base(command)
+        {
+            duration = seconds;
+        }
+
+        public override void Begin()
+        {
+        }
+
+        public override void End()
+        {
+        }
+
+        public override void Update()
+        {
+            timer += Time.deltaTime;
+            if (timer > duration)
+            {
+                done = true;
+            }
+            else
+            {
+                done = false;
+                progress = timer / duration;
+            }
+        }
+    }
+
+    public class ReturnToNoviceVillageTask : StageLoadTask
+    {
+        public ReturnToNoviceVillageTask(StageLoad.StageLoadCommand command) : base(command)
+        {
+        }
+
+        public override void Begin()
+        {
+            if (CrossServerUtility.IsCrossServer())
+            {
+                var sendInfo = new CC003_tagCGForceQuitCrossState();
+                GameNetSystem.Instance.SendInfo(sendInfo);
+            }
+            else
+            {
+                var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
+                if (mapConfig.MapFBType == (int)MapType.OpenCountry)
+                {
+                    var sjzMapConfig = Config.Instance.Get<MapConfig>(10010);
+                    var position = new Vector3(sjzMapConfig.BornPoints[0].x, 0, sjzMapConfig.BornPoints[0].y);
+                    MapTransferUtility.Send_WorldTransfer(10010, position, MapTransferType.WorldTransport, 255, 0);
+                }
+                else
+                {
+                    ModelCenter.Instance.GetModel<DungeonModel>().ExitCurrentDungeon();
+                }
+            }
+
+            done = true;
+        }
+
+        public override void End()
+        {
+        }
+
+        public override void Update()
+        {
+        }
+
+    }
+
+
+    private static string GetAssetBundleNameByMapId(int mapId, int lineId)
+    {
+        switch (mapId)
+        {
+            case 0:
+                return string.Empty;
+            case 1:
+                return "maps/level_login";
+            case 2:
+            case 3:
+                return "maps/createrole_001";
+            default:
+                var dataMapId = MapUtility.GetDataMapId(mapId);
+                var config = MapResourcesConfig.GetConfig(dataMapId, lineId);
+                if (config != null)
+                {
+                    return StringUtility.Contact("maps/", config.MapResources);
+                }
+                else
+                {
+                    return string.Empty;
+                }
+        }
+    }
+
+}
diff --git a/Lua/Gen/StageManagerWrap.cs.meta b/Fight/Stage/StageLoadProcessor.cs.meta
similarity index 75%
copy from Lua/Gen/StageManagerWrap.cs.meta
copy to Fight/Stage/StageLoadProcessor.cs.meta
index a713fe7..7993780 100644
--- a/Lua/Gen/StageManagerWrap.cs.meta
+++ b/Fight/Stage/StageLoadProcessor.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: 1316663bef8bbed4f99dc61ee61da170
-timeCreated: 1548853305
+guid: 3130d36ee2ece704cad55a9585d2c528
+timeCreated: 1548835160
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Fight/Stage/StageManager.cs b/Fight/Stage/StageManager.cs
deleted file mode 100644
index b0a6f9f..0000000
--- a/Fight/Stage/StageManager.cs
+++ /dev/null
@@ -1,678 +0,0 @@
-锘縰sing UnityEngine;
-using System.Collections;
-using UnityEngine.Events;
-using UnityEngine.SceneManagement;
-using System;
-using Snxxz.UI;
-using TableConfig;
-
-[XLua.LuaCallCSharp]
-public class StageManager : Singleton<StageManager>
-{
-    private Stage m_CurrentStage;
-
-    private Stage.E_StageType m_StageType;
-
-    public UnityAction onStageLoadFinish;
-    public event Action<int> onStartStageLoadingEvent;
-    public event Action<float> loadingProgressEvent;
-
-    bool m_IsServerPreparing = false;
-    public bool isServerPreparing
-    {
-        get { return m_IsServerPreparing; }
-        set { m_IsServerPreparing = value; }
-    }
-
-    bool m_IsCrossServerPreparing = false;
-    public bool isCrossServerPreparing
-    {
-        get { return m_IsCrossServerPreparing; }
-        set { m_IsCrossServerPreparing = value; }
-    }
-
-    public Stage.E_StageType StageType
-    {
-        get
-        {
-            return m_StageType;
-        }
-    }
-
-    public Stage CurrentStage
-    {
-        get
-        {
-            return m_CurrentStage;
-        }
-    }
-
-    int m_CurrentMapId;
-    public int currentMapId
-    {
-        get { return m_CurrentMapId; }
-        private set { m_CurrentMapId = value; }
-    }
-
-    int m_CurrentMapResID;
-    public int currentMapResId
-    {
-        get
-        {
-            return m_CurrentMapResID;
-        }
-        private set { m_CurrentMapResID = value; }
-    }
-
-    string m_StageAssetName;
-    public string stageAssetName { get { return m_StageAssetName; } }
-
-
-    float m_LoadingProgress = 0f;
-    float loadingProgress
-    {
-        get { return m_LoadingProgress; }
-        set
-        {
-            m_LoadingProgress = value;
-            if (loadingProgressEvent != null)
-            {
-                loadingProgressEvent(Mathf.Clamp01(m_LoadingProgress));
-            }
-        }
-    }
-
-    public bool isLoading { get; private set; }
-
-    StageLoadTimeOutCatcher loadTimeOutCatcher;
-
-    public StageManager()
-    {
-        DebugEx.LogFormat("鍒濆鍖朣tageManager");
-    }
-
-    public bool isClientChangeMap { get; private set; }
-    public GameNetSystem.SocketType socketType { get; private set; }
-
-    public void Load<T>(int stageId, GameNetSystem.SocketType socketType, bool isClientChangeMap = false) where T : Stage
-    {
-        this.isClientChangeMap = isClientChangeMap;
-        this.socketType = socketType;
-        loadTimeOutCatcher = StageLoadTimeOutCatcher.Begin(stageId);
-
-        // 璇诲彇閰嶇疆鐨勬柟寮忓垱寤哄満鏅�
-        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
-
-        if (AssetSource.sceneFromEditor || AssetVersionUtility.unPriorAssetDownLoadDone)
-        {
-            SnxxzGame.Instance.StartCoroutine(LoadCoroutine<T>(stageId, mapResConfig.ID, mapResConfig.MapResources, true));
-        }
-        else
-        {
-            var assetValid = AssetVersionUtility.IsSceneAssetValid(PlayerDatas.Instance.baseData.MapID, DTCA127_tagMCStartChangeMap.LineID);
-            if (assetValid)
-            {
-                SnxxzGame.Instance.StartCoroutine(LoadCoroutine<T>(stageId, mapResConfig.ID, mapResConfig.MapResources, true));
-            }
-            else
-            {
-                SnxxzGame.Instance.StartCoroutine(BackToNoviceVillageWhileMapResourceLacked(mapResConfig.ID));
-            }
-        }
-    }
-
-    public void LoadCreateRoleStage()
-    {
-        SnxxzGame.Instance.StartCoroutine(LoadCoroutine<CreateRoleStage>(2, 0, "CreateRole_001", false));
-    }
-
-    public void LoadSelectRoleStage()
-    {
-        SnxxzGame.Instance.StartCoroutine(LoadCoroutine<SelectRoleStage>(2, 0, "CreateRole_001", false));
-    }
-
-    public void LoadLoginStage()
-    {
-        if (PlayerDatas.Instance.hero != null)
-        {
-            GAMgr.Instance.ServerDie(PlayerDatas.Instance.hero.ServerInstID);
-            GAMgr.Instance.Release(PlayerDatas.Instance.hero);
-            PlayerDatas.Instance.hero = null;
-        }
-        SnxxzGame.Instance.StartCoroutine(LoadCoroutine<LoginStage>(1, 0, "Level_Login", false));
-    }
-
-    IEnumerator LoadCoroutine<T>(int _stageId, int mapResConfigID, string _resources, bool _needEmpty) where T : Stage
-    {
-        if (currentMapResId != 0 && currentMapResId == mapResConfigID)
-        {
-#if UNITY_EDITOR
-            Debug.LogFormat("StageManager鍑虹幇鍔犺浇鐩稿悓鍦板浘琛屼负:" + mapResConfigID);
-#endif
-
-            if (loadTimeOutCatcher != null)
-            {
-                loadTimeOutCatcher.Stop();
-                loadTimeOutCatcher = null;
-            }
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step1", StringUtility.Contact("StageManager鍑虹幇鍔犺浇鐩稿悓鍦板浘琛屼负:", mapResConfigID));
-            yield break;
-        }
-
-        isLoading = true;
-        Application.backgroundLoadingPriority = ThreadPriority.High;
-        try
-        {
-            if (onStartStageLoadingEvent != null)
-            {
-                onStartStageLoadingEvent(currentMapId);
-            }
-        }
-        catch (Exception ex)
-        {
-            Debug.LogError("鍦烘櫙鍔犺浇寮�濮嬩簨浠跺彂鐢熷紓甯革細" + ex);
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step2", ex);
-        }
-
-        var progressBuf = loadingProgress = 0f;
-        var timer = 0f;
-        var duration = 1f;
-
-        var lastCurrentMapResId = currentMapResId;
-        var lastMapId = currentMapId;
-        currentMapResId = mapResConfigID;
-        currentMapId = _stageId;
-        m_StageAssetName = _resources;
-
-        SystemSetting.Instance.LetFPSUnLimit();
-
-        try
-        {
-            WindowCenter.Instance.asyncLoad.StopAllTasks();
-            //涓轰粈涔堝湪杩欎釜鍦版柟瑕佽皟鐢ㄤ袱娆″叧闂叾浠栫獥鍙g殑鎺ュ彛鍛紝杩欎釜姘村氨娣变簡銆�
-            //鍥犱负鏈変簺鐣岄潰琚叧闂殑鏃跺�欙紝浼氬幓鎵撳紑涓荤晫闈紝鎵�浠ワ紝杩樺緱鍐嶅叧闂竴娆″叧闂叾浠栫獥鍙g殑鐣岄潰锛岄槻姝富鐣岄潰琚剰澶栧紑鍚��
-            switch (_stageId)
-            {
-                case 2:
-                    WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Login);
-                    WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
-                    if (!WindowCenter.Instance.IsOpen<LaunchBackGroundWin>())
-                    {
-                        WindowCenter.Instance.Open<LaunchBackGroundWin>(true);
-                    }
-
-                    WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
-                    break;
-                case 1:
-                    WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.Launch);
-                    WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
-                    if (!WindowCenter.Instance.IsOpen<LaunchBackGroundWin>())
-                    {
-                        WindowCenter.Instance.Open<LaunchBackGroundWin>(true);
-                    }
-
-                    WindowCenter.Instance.CloseOthers<LaunchBackGroundWin>();
-                    break;
-                default:
-                    WindowCenter.Instance.DestoryWinsByStage(WindowCenter.WindowStage.SelectRole);
-                    WindowCenter.Instance.CloseOthers<LoadingWin>();
-                    if (!WindowCenter.Instance.IsOpen<LoadingWin>())
-                    {
-                        LoadingWin.targetMapResId = currentMapResId;
-                        WindowCenter.Instance.Open<LoadingWin>(true);
-                    }
-
-                    WindowCenter.Instance.CloseOthers<LoadingWin>();
-                    break;
-            }
-        }
-        catch (System.Exception ex)
-        {
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step3", ex);
-        }
-
-        loadingProgress += 0.05f;
-        // 瀛樺湪褰撳墠鍦烘櫙鍒欒繘琛屽嵏杞�
-        if (CurrentStage != null)
-        {
-            CurrentStage.UnInitialize();
-        }
-        ////////////////////////////////////////////////////////////////////////////////////////////
-        // 鍔犺浇涓�涓┖鐨勫満鏅�,鐢ㄤ互鍗歌浇鎺変箣鍓嶅満鏅殑瀵硅薄,鍐嶅姞杞芥柊鐨勫満鏅�,闃叉2涓満鏅殑瀵硅薄鍐呭瓨鍗犵敤杩囧
-        // 鍚屾鍔犺浇鐨勬柟娉�
-
-        if (_needEmpty)
-        {
-            SceneManager.LoadScene("Empty");
-        }
-
-        var unloadUnUsedOperation = Resources.UnloadUnusedAssets();
-        while (!unloadUnUsedOperation.isDone)
-        {
-            yield return null;
-        }
-
-        loadingProgress += 0.05f;
-        GC.Collect();
-        loadingProgress += 0.1f;
-
-        try
-        {
-            if (!AssetSource.sceneFromEditor)
-            {
-                AssetBundleUtility.Instance.UnloadAssetBundle("maps/map000_xsdt", true, false);
-                AssetBundleUtility.Instance.UnloadAssetBundle(GetAssetBundleNameByStageId(lastMapId, lastCurrentMapResId), true, false);
-                AssetBundleUtility.Instance.Sync_LoadAll(GetAssetBundleNameByStageId(currentMapId, currentMapResId));
-            }
-        }
-        catch (System.Exception ex)
-        {
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step4", ex);
-        }
-
-        var sceneLoadOperation = SceneManager.LoadSceneAsync(_resources);
-        progressBuf = loadingProgress;
-        timer = 0f;
-        duration = 1f;
-        while (!sceneLoadOperation.isDone)
-        {
-            timer += Time.deltaTime;
-            loadingProgress = Mathf.Clamp(progressBuf + timer / duration * 0.6f, progressBuf, progressBuf + 0.6f);
-            yield return null;
-        }
-
-        // if (_stageId == 10010)
-        // {
-        //     while (!PreFightMission.Instance.IsHandleMissionState)
-        //     {
-        //         yield return null;
-        //     }
-
-        //     try
-        //     {
-        //         // 濡傛灉鐢ㄦ埛灏氭湭瀹屾垚鍓嶆湡鎴樻枟閮ㄥ垎
-        //         if (!PreFightMission.Instance.IsFinished())
-        //         {
-        //             if (!AssetSource.sceneFromEditor)
-        //             {
-        //                 AssetBundleUtility.Instance.Sync_LoadAll("maps/map000_xsdt");
-        //             }
-        //             SceneManager.LoadScene("Map000_Xsdt", LoadSceneMode.Additive);
-        //         }
-        //     }
-        //     catch (System.Exception ex)
-        //     {
-        //         ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step5", ex);
-        //     }
-        // }
-
-        // yield return null;
-        loadingProgress = loadingProgress + 0.1f;
-
-        // 鍦烘櫙鍔犺浇瀹屽氨鍙互纭畾鐜╁浣嶇疆浜�, 涓嶉渶瑕佺瓑寰呭叿浣撳満鏅殑閫昏緫鍒濆鍖�
-        if (_stageId > 2)
-        {
-            try
-            {
-                InitHero();
-            }
-            catch (System.Exception ex)
-            {
-                ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step6 鎵ц鍒�: " + m_InitHeroStep, ex);
-#if UNITY_EDITOR
-                Debug.Log(ex.StackTrace);
-#endif
-            }
-        }
-
-        try
-        {
-            GameObject _gameObject = new GameObject(string.Format("__Stage_{0}_", _resources));
-            m_CurrentStage = _gameObject.AddComponent<T>();
-            m_StageType = m_CurrentStage is DungeonStage ? Stage.E_StageType.Dungeon : Stage.E_StageType.MainCity;
-            m_CurrentStage.mapId = _stageId;
-        }
-        catch (System.Exception ex)
-        {
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step7", ex);
-        }
-
-        yield return null;
-
-        loadingProgress += 0.1f;
-
-        // 鐢变簬0401鍖呭彧鏄�氱煡鏈嶅姟绔紑濮嬪姞杞藉湴鍥�, 骞朵笉琛ㄧず宸茬粡鍔犺浇瀹屾瘯
-        // 瀹㈡埛绔敱0401寮�濮嬪姞杞藉湴鍥�, 鍙兘瀛樺湪瀹㈡埛绔姞杞藉畬姣曚絾鏄湇鍔$杩樻病鍑嗗濂界殑鎯呭喌
-        // 鎵�浠ラ拡瀵瑰壇鏈湴鍥鹃渶瑕佸湪杩欓噷绛夊緟鏈嶅姟绔�0109鍥炲寘鎵嶈兘鍙戦�佹鍖�
-        if (!isClientChangeMap)
-        {
-            progressBuf = loadingProgress;
-            timer = 0f;
-            duration = 1f;
-
-            while (WaitForServer(this.socketType))
-            {
-                timer += Time.deltaTime;
-                loadingProgress = Mathf.Clamp(progressBuf + timer / duration * 0.2f, progressBuf, progressBuf + 0.2f);
-                yield return null;
-            }
-        }
-
-        if (m_StageType == Stage.E_StageType.Dungeon)
-        {
-            if (!isClientChangeMap)
-            {
-                StageLoadTimeOutCatcher.RecordProtocol(this.socketType, "0107", DateTime.Now);
-
-                var mapOk = new C0107_tagCInitMapOK();
-                mapOk.MapID = PlayerDatas.Instance.baseData.MapID;
-                mapOk.Type = 0;
-                switch (this.socketType)
-                {
-                    case GameNetSystem.SocketType.Main:
-                        GameNetSystem.Instance.SendInfo(mapOk);
-                        break;
-                    case GameNetSystem.SocketType.CrossSever:
-                        GameNetSystem.Instance.SendToCrossServer(mapOk);
-                        break;
-                }
-            }
-        }
-        else
-        {
-            Debug.LogFormat("涓嶅彂鍖�0107锛氬綋鍓峉tage:{0}", CurrentStage);
-        }
-
-        isLoading = false;
-
-        switch (this.socketType)
-        {
-            case GameNetSystem.SocketType.Main:
-                isServerPreparing = false;
-                break;
-            case GameNetSystem.SocketType.CrossSever:
-                isCrossServerPreparing = false;
-                break;
-        }
-
-        //濡傛灉鏄櫥褰曪紝閭d箞瑕佺瓑寰呯櫥褰曡繃绋嬪叏閮ㄥ畬鎴�
-        while (m_StageType == Stage.E_StageType.Dungeon && DTC0403_tagPlayerLoginLoadOK.neverLoginOk)
-        {
-            yield return null;
-        }
-
-        loadingProgress = 1f;
-
-        try
-        {
-            if (onStageLoadFinish != null)
-            {
-                onStageLoadFinish();
-            }
-        }
-        catch (Exception ex)
-        {
-            Debug.LogError("鍦烘櫙鍔犺浇瀹屾垚浜嬩欢鍙戠敓寮傚父锛�" + ex);
-            ExceptionCatcher.ReportException("鍦烘櫙鍔犺浇 Step8", ex);
-        }
-
-        if (loadTimeOutCatcher != null)
-        {
-            loadTimeOutCatcher.Stop();
-        }
-        loadTimeOutCatcher = null;
-
-        Application.backgroundLoadingPriority = ThreadPriority.BelowNormal;
-
-        DebugEx.LogFormat("StageManager => Load Scene : {0} Finished.", _resources);
-        WindowCenter.Instance.Close<LoadingWin>();
-        SystemSetting.Instance.SetGameFps(SystemSetting.Instance.GetGameFps());
-
-        foreach (var _actor in GAMgr.Instance.reAdjustPosList)
-        {
-            _actor.AdjustPos((ushort)_actor.ActorInfo.serverBornPos.x, (ushort)_actor.ActorInfo.serverBornPos.y);
-        }
-        GAMgr.Instance.reAdjustPosList.Clear();
-    }
-
-    IEnumerator BackToNoviceVillageWhileMapResourceLacked(int _mapResId)
-    {
-        currentMapResId = _mapResId;
-        LoadingWin.targetMapResId = 1;
-        WindowCenter.Instance.Open<LoadingWin>(true);
-
-        while (WaitForServer(this.socketType))
-        {
-            yield return null;
-        }
-
-        var mapOk = new C0107_tagCInitMapOK();
-        mapOk.MapID = PlayerDatas.Instance.baseData.MapID;
-        mapOk.Type = 0;
-        GameNetSystem.Instance.SendInfo(mapOk);
-
-        //濡傛灉鏄櫥褰曪紝閭d箞瑕佺瓑寰呯櫥褰曡繃绋嬪叏閮ㄥ畬鎴�
-        while (m_StageType == Stage.E_StageType.Dungeon && DTC0403_tagPlayerLoginLoadOK.neverLoginOk)
-        {
-            yield return null;
-        }
-
-        yield return WaitingForSecondConst.WaitMS1000;
-
-        if (CrossServerUtility.IsCrossServer())
-        {
-            var sendInfo = new CC003_tagCGForceQuitCrossState();
-            GameNetSystem.Instance.SendInfo(sendInfo);
-        }
-        else
-        {
-            var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-            if (mapConfig.MapFBType == (int)MapType.OpenCountry)
-            {
-                var sjzMapConfig = Config.Instance.Get<MapConfig>(10010);
-                var position = new Vector3(sjzMapConfig.BornPoints[0].x, 0, sjzMapConfig.BornPoints[0].y);
-                MapTransferUtility.Send_WorldTransfer(10010, position, MapTransferType.WorldTransport, 255, 0);
-            }
-            else
-            {
-                ModelCenter.Instance.GetModel<DungeonModel>().ExitCurrentDungeon();
-            }
-        }
-
-        if (loadTimeOutCatcher != null)
-        {
-            loadTimeOutCatcher.Stop();
-        }
-        loadTimeOutCatcher = null;
-    }
-
-    private bool WaitForServer(GameNetSystem.SocketType socketType)
-    {
-        switch (socketType)
-        {
-            case GameNetSystem.SocketType.Main:
-                return isServerPreparing;
-            case GameNetSystem.SocketType.CrossSever:
-                return isCrossServerPreparing;
-            default:
-                return false;
-        }
-    }
-
-    private int m_InitHeroStep = 0;
-
-    private void InitHero()
-    {
-        m_InitHeroStep = 0;
-        // 鍒濆鍖栨憚鍍忔満
-        if (!CameraController.Instance)
-        {
-            UnityEngine.Object.Instantiate(BuiltInLoader.LoadPrefab("GameCamera"));
-            CameraController.Instance.AcceptInput = false;
-            CameraController.Instance.CameraObject.enabled = false;
-        }
-        m_InitHeroStep = 1;
-        GA_Hero _hero = PlayerDatas.Instance.hero;
-        if (_hero == null)
-        {
-            _hero = GAMgr.Instance.RequestPlayer<GA_Hero>(PlayerDatas.Instance.PlayerId, E_ActorGroup.User, null);
-        }
-        m_InitHeroStep = 2;
-        _hero.State = E_ActorState.Idle;
-        _hero.ActorInfo.ResetHp((int)PlayerDatas.Instance.baseData.HP, -1, (int)PlayerDatas.Instance.extersion.MaxHP);
-        _hero.CalculateMoveSpeed((ushort)PlayerDatas.Instance.extersion.SpeedValue);
-        _hero.CalculateAtkSpeed(PlayerDatas.Instance.extersion.battleValEx1);
-        _hero.InitBornPos(PlayerDatas.Instance.baseData.PosX, PlayerDatas.Instance.baseData.PosY);
-        m_InitHeroStep = 3;
-        CameraController.Instance.SetLookTarget(_hero.Root);
-        CameraController.Instance.Apply();
-
-        PlayerPackModel _packModel = ModelCenter.Instance.GetModel<PlayerPackModel>();
-        SinglePackModel _equipModel = _packModel.GetSinglePackModel(PackType.rptEquip);
-
-        ItemModel _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retClothes);
-        ItemModel _fashion = _equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionClothes);
-        m_InitHeroStep = 4;
-        if (_fashion != null)
-        {
-            _hero.SwitchClothes((uint)_fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionClothes);
-        }
-        else if (_itemModel != null)
-        {
-            _hero.SwitchClothes((uint)_itemModel.itemInfo.ItemID);
-        }
-        else
-        {
-            _hero.SwitchClothes(0);
-        }
-        m_InitHeroStep = 5;
-        _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retWeapon);
-        _fashion = _equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionWeapon);
-
-        if (_fashion != null)
-        {
-            _hero.SwitchWeapon((uint)_fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionWeapon);
-        }
-        else if (_itemModel != null)
-        {
-            _hero.SwitchWeapon((uint)_itemModel.itemInfo.ItemID);
-        }
-        else
-        {
-            _hero.SwitchWeapon(0);
-        }
-
-        m_InitHeroStep = 6;
-        _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retWeapon2);
-        _fashion = _equipModel.GetItemModelByIndex((int)RoleEquipType.retFashionWeapon2);
-
-        if (_fashion != null)
-        {
-            _hero.SwitchSecondary((uint)_fashion.itemInfo.ItemID, (int)RoleEquipType.retFashionWeapon2);
-        }
-        else if (_itemModel != null)
-        {
-            _hero.SwitchSecondary((uint)_itemModel.itemInfo.ItemID);
-        }
-        else
-        {
-            _hero.SwitchSecondary(0);
-        }
-        m_InitHeroStep = 7;
-
-        _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retWing);
-
-        if (_itemModel != null)
-        {
-            _hero.SwitchWing((uint)_itemModel.itemInfo.ItemID);
-        }
-
-        m_InitHeroStep = 8;
-        var _mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-        if (_mapConfig.CanRide == 1)
-        {
-            _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.mount);
-
-            if (_itemModel != null)
-            {
-                PlayerMountDatas _mountModel = ModelCenter.Instance.GetModel<PlayerMountDatas>();
-                if (_mountModel.HorseRidingBool)
-                {
-                    _hero.OnHorse(1);
-                }
-            }
-        }
-        m_InitHeroStep = 9;
-
-        _itemModel = _equipModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
-
-        if (_itemModel != null)
-        {
-            _hero.SwitchGuard((uint)_itemModel.itemInfo.ItemID);
-        }
-
-        m_InitHeroStep = 10;
-
-        _hero.SyncSuitEffect();
-
-        m_InitHeroStep = 11;
-        _hero.IdleImmediate();
-
-        _hero.SetFairyLeagueHeadUp(PlayerDatas.Instance.baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON);
-        _hero.CheckAncientHeadUp();
-
-        m_InitHeroStep = 12;
-        var titleId = 0;
-        if (PlayerDatas.Instance.baseData.MapID != 31160)
-        {
-            var titelModel = ModelCenter.Instance.GetModel<TitleModel>();
-            var title = titelModel.GetTitleEquip();
-            titleId = title != null && titelModel.IsTitleGain(title.id) ? title.id : 0;
-        }
-        _hero.SwitchTitle((uint)titleId);
-
-        m_InitHeroStep = 13;
-        // 鍒ゆ柇buff
-        if (StatusMgr.Instance.IsExist(PlayerDatas.Instance.PlayerId, StatusMgr.Instance.redNameBuffID))
-        {
-            _hero.SwitchRedName(true);
-        }
-
-        _hero.RequestLight();
-
-        m_InitHeroStep = 14;
-        PlayerDatas.Instance.hero = _hero;
-
-        var _preloadEffectList = GeneralDefine.PreloadSkillEffect[_hero.JobSetup.Job - 1];
-        if (_preloadEffectList != null && _preloadEffectList.Length > 0)
-        {
-            foreach (var _id in _preloadEffectList)
-            {
-                InstanceResourcesLoader.PreloadSkillEffect(_id);
-            }
-        }
-        m_InitHeroStep = 15;
-    }
-
-    private string GetAssetBundleNameByStageId(int stageID, int mapResID)
-    {
-        switch (stageID)
-        {
-            case 0:
-                return string.Empty;
-            case 1:
-                return "maps/level_login";
-            case 2:
-                return "maps/createrole_001";
-            default:
-                var mapResConfig = Config.Instance.Get<MapResourcesConfig>(mapResID);
-                if (mapResConfig != null)
-                {
-                    return StringUtility.Contact("maps/", mapResConfig.MapResources);
-                }
-                return string.Empty;
-        }
-
-    }
-
-}
diff --git a/Fight/Stage/StageManager.cs.meta b/Fight/Stage/StageManager.cs.meta
deleted file mode 100644
index fb603bf..0000000
--- a/Fight/Stage/StageManager.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: b4d0510b92998de449b16e0ae5ee5e70
-timeCreated: 1468166531
-licenseType: Free
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Lua/Gen/DelegatesGensBridge.cs b/Lua/Gen/DelegatesGensBridge.cs
index eb1d9fa..b95d5ea 100644
--- a/Lua/Gen/DelegatesGensBridge.cs
+++ b/Lua/Gen/DelegatesGensBridge.cs
@@ -4488,7 +4488,29 @@
 #endif
 		}
         
-		public System.Collections.Generic.Dictionary<int, System.Collections.Generic.Dictionary<int, Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData>> __Gen_Delegate_Imp194(object p0)
+		public Snxxz.UI.JadeDynastyGemModel __Gen_Delegate_Imp194(object p0)
+		{
+#if THREAD_SAFE || HOTFIX_ENABLE
+            lock (luaEnv.luaEnvLock)
+            {
+#endif
+                RealStatePtr L = luaEnv.rawL;
+                int errFunc = LuaAPI.pcall_prepare(L, errorFuncRef, luaReference);
+                ObjectTranslator translator = luaEnv.translator;
+                translator.PushAny(L, p0);
+                
+                PCall(L, 1, 1, errFunc);
+                
+                
+                Snxxz.UI.JadeDynastyGemModel __gen_ret = (Snxxz.UI.JadeDynastyGemModel)translator.GetObject(L, errFunc + 1, typeof(Snxxz.UI.JadeDynastyGemModel));
+                LuaAPI.lua_settop(L, errFunc - 1);
+                return  __gen_ret;
+#if THREAD_SAFE || HOTFIX_ENABLE
+            }
+#endif
+		}
+        
+		public System.Collections.Generic.Dictionary<int, System.Collections.Generic.Dictionary<int, Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData>> __Gen_Delegate_Imp195(object p0)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4510,7 +4532,7 @@
 #endif
 		}
         
-		public System.Collections.Generic.Dictionary<int, System.Collections.Generic.Dictionary<int, Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData>> __Gen_Delegate_Imp195(object p0)
+		public System.Collections.Generic.Dictionary<int, System.Collections.Generic.Dictionary<int, Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData>> __Gen_Delegate_Imp196(object p0)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4532,7 +4554,7 @@
 #endif
 		}
         
-		public void __Gen_Delegate_Imp196(object p0, object p1, object p2)
+		public void __Gen_Delegate_Imp197(object p0, object p1, object p2)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4556,7 +4578,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp197(object p0, int p1, int p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p3)
+		public bool __Gen_Delegate_Imp198(object p0, int p1, int p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p3)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4581,7 +4603,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp198(object p0, int p1, int p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p3)
+		public bool __Gen_Delegate_Imp199(object p0, int p1, int p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p3)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4606,7 +4628,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp199(object p0, int p1, int p2, out int p3)
+		public bool __Gen_Delegate_Imp200(object p0, int p1, int p2, out int p3)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4631,7 +4653,7 @@
 #endif
 		}
         
-		public System.Collections.Generic.List<int> __Gen_Delegate_Imp200(object p0, int p1)
+		public System.Collections.Generic.List<int> __Gen_Delegate_Imp201(object p0, int p1)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4654,7 +4676,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp201(object p0, out System.Collections.Generic.List<int> p1, out System.Collections.Generic.List<int> p2)
+		public bool __Gen_Delegate_Imp202(object p0, out System.Collections.Generic.List<int> p1, out System.Collections.Generic.List<int> p2)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4678,7 +4700,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp202(object p0, int p1, PackType p2, out int p3, out int p4, int p5)
+		public bool __Gen_Delegate_Imp203(object p0, int p1, PackType p2, out int p3, out int p4, int p5)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4705,7 +4727,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp203(object p0, int p1, out int p2, out int p3)
+		public bool __Gen_Delegate_Imp204(object p0, int p1, out int p2, out int p3)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4730,7 +4752,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp204(object p0, int p1, PackType p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p3, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p4, int p5)
+		public bool __Gen_Delegate_Imp205(object p0, int p1, PackType p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p3, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastySuitAttrData p4, int p5)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4757,7 +4779,7 @@
 #endif
 		}
         
-		public bool __Gen_Delegate_Imp205(object p0, int p1, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p3)
+		public bool __Gen_Delegate_Imp206(object p0, int p1, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p2, out Snxxz.UI.JadeDynastyEquipModel.JadeDynastyStoneSuitAttrData p3)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4782,7 +4804,7 @@
 #endif
 		}
         
-		public Snxxz.UI.GemModel __Gen_Delegate_Imp206(object p0)
+		public Snxxz.UI.GemModel __Gen_Delegate_Imp207(object p0)
 		{
 #if THREAD_SAFE || HOTFIX_ENABLE
             lock (luaEnv.luaEnvLock)
@@ -4797,28 +4819,6 @@
                 
                 
                 Snxxz.UI.GemModel __gen_ret = (Snxxz.UI.GemModel)translator.GetObject(L, errFunc + 1, typeof(Snxxz.UI.GemModel));
-                LuaAPI.lua_settop(L, errFunc - 1);
-                return  __gen_ret;
-#if THREAD_SAFE || HOTFIX_ENABLE
-            }
-#endif
-		}
-        
-		public Snxxz.UI.JadeDynastyGemModel __Gen_Delegate_Imp207(object p0)
-		{
-#if THREAD_SAFE || HOTFIX_ENABLE
-            lock (luaEnv.luaEnvLock)
-            {
-#endif
-                RealStatePtr L = luaEnv.rawL;
-                int errFunc = LuaAPI.pcall_prepare(L, errorFuncRef, luaReference);
-                ObjectTranslator translator = luaEnv.translator;
-                translator.PushAny(L, p0);
-                
-                PCall(L, 1, 1, errFunc);
-                
-                
-                Snxxz.UI.JadeDynastyGemModel __gen_ret = (Snxxz.UI.JadeDynastyGemModel)translator.GetObject(L, errFunc + 1, typeof(Snxxz.UI.JadeDynastyGemModel));
                 LuaAPI.lua_settop(L, errFunc - 1);
                 return  __gen_ret;
 #if THREAD_SAFE || HOTFIX_ENABLE
diff --git a/Lua/Gen/DelegatesGensBridge.cs.meta b/Lua/Gen/DelegatesGensBridge.cs.meta
index 6527890..8cfdbd7 100644
--- a/Lua/Gen/DelegatesGensBridge.cs.meta
+++ b/Lua/Gen/DelegatesGensBridge.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: a0b56727fd4fea343b550221deb3c6ae
-timeCreated: 1548853313
+timeCreated: 1548941105
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/GameNetSystemWrap.cs b/Lua/Gen/GameNetSystemWrap.cs
index a7699d7..f969537 100644
--- a/Lua/Gen/GameNetSystemWrap.cs
+++ b/Lua/Gen/GameNetSystemWrap.cs
@@ -266,7 +266,7 @@
                 
                 {
                     GameNetPackBasic _protocol = (GameNetPackBasic)translator.GetObject(L, 2, typeof(GameNetPackBasic));
-                    GameNetSystem.SocketType _type;translator.Get(L, 3, out _type);
+                    ServerType _type;translator.Get(L, 3, out _type);
                     
                     gen_to_be_invoked.PushPackage( _protocol, _type );
                     
diff --git a/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs b/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs
index 2ae96e8..1b1558c 100644
--- a/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs
+++ b/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs
@@ -21,7 +21,7 @@
         {
 			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
 			System.Type type = typeof(Snxxz.UI.FestivalRedpackModel);
-			Utils.BeginObjectRegister(type, L, translator, 0, 21, 19, 8);
+			Utils.BeginObjectRegister(type, L, translator, 0, 23, 20, 8);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Init", _m_Init);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "OnBeforePlayerDataInitialize", _m_OnBeforePlayerDataInitialize);
@@ -38,6 +38,8 @@
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "OnReceivePackage", _m_OnReceivePackage);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "ExistSelfTaskRedpack", _m_ExistSelfTaskRedpack);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "JudgePlayRedpackVoice", _m_JudgePlayRedpackVoice);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "ExistRewardableRedpack", _m_ExistRewardableRedpack);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "SetDayRemind", _m_SetDayRemind);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "onStateUpate", _e_onStateUpate);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "redpackGrabRefresh", _e_redpackGrabRefresh);
@@ -65,6 +67,7 @@
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "systemRedpoint", _g_get_systemRedpoint);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "taskRedpoint", _g_get_taskRedpoint);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "receiveRedpoint", _g_get_receiveRedpoint);
+            Utils.RegisterFunc(L, Utils.GETTER_IDX, "dailyRemindRedpoint", _g_get_dailyRemindRedpoint);
             
 			Utils.RegisterFunc(L, Utils.SETTER_IDX, "systemOverdueCount", _s_set_systemOverdueCount);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "selectType", _s_set_selectType);
@@ -559,6 +562,61 @@
             
         }
         
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_ExistRewardableRedpack(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.FestivalRedpackModel gen_to_be_invoked = (Snxxz.UI.FestivalRedpackModel)translator.FastGetCSObj(L, 1);
+            
+            
+                
+                {
+                    
+                        bool gen_ret = gen_to_be_invoked.ExistRewardableRedpack(  );
+                        LuaAPI.lua_pushboolean(L, gen_ret);
+                    
+                    
+                    
+                    return 1;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_SetDayRemind(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.FestivalRedpackModel gen_to_be_invoked = (Snxxz.UI.FestivalRedpackModel)translator.FastGetCSObj(L, 1);
+            
+            
+                
+                {
+                    
+                    gen_to_be_invoked.SetDayRemind(  );
+                    
+                    
+                    
+                    return 0;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+        }
+        
         
         
         
@@ -828,6 +886,20 @@
             return 1;
         }
         
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _g_get_dailyRemindRedpoint(RealStatePtr L)
+        {
+		    try {
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+			
+                Snxxz.UI.FestivalRedpackModel gen_to_be_invoked = (Snxxz.UI.FestivalRedpackModel)translator.FastGetCSObj(L, 1);
+                translator.Push(L, gen_to_be_invoked.dailyRemindRedpoint);
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            return 1;
+        }
+        
         
         
         [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
diff --git a/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs.meta b/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs.meta
index e29f915..02f0372 100644
--- a/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs.meta
+++ b/Lua/Gen/SnxxzUIFestivalRedpackModelWrap.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: da6d3363c2b5f9942a1af9c701612ac6
-timeCreated: 1548853784
+timeCreated: 1548941109
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/SnxxzUIGemModelWrap.cs b/Lua/Gen/SnxxzUIGemModelWrap.cs
index 3f1f50d..693215c 100644
--- a/Lua/Gen/SnxxzUIGemModelWrap.cs
+++ b/Lua/Gen/SnxxzUIGemModelWrap.cs
@@ -21,7 +21,7 @@
         {
 			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
 			System.Type type = typeof(Snxxz.UI.GemModel);
-			Utils.BeginObjectRegister(type, L, translator, 0, 22, 14, 8);
+			Utils.BeginObjectRegister(type, L, translator, 0, 22, 15, 9);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Init", _m_Init);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "OnBeforePlayerDataInitialize", _m_OnBeforePlayerDataInitialize);
@@ -58,6 +58,7 @@
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "levelUpType", _g_get_levelUpType);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "equipGemTypeDict", _g_get_equipGemTypeDict);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "gemGetWays", _g_get_gemGetWays);
+            Utils.RegisterFunc(L, Utils.GETTER_IDX, "gemHighestLevelDict", _g_get_gemHighestLevelDict);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "redpointList", _g_get_redpointList);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "gemHoleReds", _g_get_gemHoleReds);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "gemComposeReds", _g_get_gemComposeReds);
@@ -67,6 +68,7 @@
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "levelUpType", _s_set_levelUpType);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "equipGemTypeDict", _s_set_equipGemTypeDict);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "gemGetWays", _s_set_gemGetWays);
+            Utils.RegisterFunc(L, Utils.SETTER_IDX, "gemHighestLevelDict", _s_set_gemHighestLevelDict);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "redpointList", _s_set_redpointList);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "gemHoleReds", _s_set_gemHoleReds);
             Utils.RegisterFunc(L, Utils.SETTER_IDX, "gemComposeReds", _s_set_gemComposeReds);
@@ -925,6 +927,20 @@
         }
         
         [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _g_get_gemHighestLevelDict(RealStatePtr L)
+        {
+		    try {
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+			
+                Snxxz.UI.GemModel gen_to_be_invoked = (Snxxz.UI.GemModel)translator.FastGetCSObj(L, 1);
+                translator.Push(L, gen_to_be_invoked.gemHighestLevelDict);
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            return 1;
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
         static int _g_get_redpointList(RealStatePtr L)
         {
 		    try {
@@ -1044,6 +1060,21 @@
         }
         
         [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _s_set_gemHighestLevelDict(RealStatePtr L)
+        {
+		    try {
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+			
+                Snxxz.UI.GemModel gen_to_be_invoked = (Snxxz.UI.GemModel)translator.FastGetCSObj(L, 1);
+                gen_to_be_invoked.gemHighestLevelDict = (System.Collections.Generic.Dictionary<int, int>)translator.GetObject(L, 2, typeof(System.Collections.Generic.Dictionary<int, int>));
+            
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            return 0;
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
         static int _s_set_redpointList(RealStatePtr L)
         {
 		    try {
diff --git a/Lua/Gen/SnxxzUIGemModelWrap.cs.meta b/Lua/Gen/SnxxzUIGemModelWrap.cs.meta
index dac77b2..e38a33f 100644
--- a/Lua/Gen/SnxxzUIGemModelWrap.cs.meta
+++ b/Lua/Gen/SnxxzUIGemModelWrap.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: e1af0ed99f284084398c25bca779fa01
-timeCreated: 1548853317
+timeCreated: 1548941109
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs b/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs
index 2a9fe48..dbd6d4e 100644
--- a/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs
+++ b/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs
@@ -21,7 +21,7 @@
         {
 			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
 			System.Type type = typeof(Snxxz.UI.JadeDynastyEquipModel);
-			Utils.BeginObjectRegister(type, L, translator, 0, 38, 18, 1);
+			Utils.BeginObjectRegister(type, L, translator, 0, 42, 18, 1);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Init", _m_Init);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "OnBeforePlayerDataInitialize", _m_OnBeforePlayerDataInitialize);
@@ -42,6 +42,10 @@
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsLocalSaveActiveSuit", _m_IsLocalSaveActiveSuit);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsLocalSaveActiveStoneSuit", _m_IsLocalSaveActiveStoneSuit);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsLocalSaveUnLock", _m_IsLocalSaveUnLock);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsPlaySuitPlayerEffect", _m_IsPlaySuitPlayerEffect);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "StopPlaySuitEffect", _m_StopPlaySuitEffect);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "IsPlayStoneSuitEffect", _m_IsPlayStoneSuitEffect);
+			Utils.RegisterFunc(L, Utils.METHOD_IDX, "StopPlayStoneSuitEffect", _m_StopPlayStoneSuitEffect);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetEquipPaths", _m_TryGetEquipPaths);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "TryGetJadeDynastyEquipIndex", _m_TryGetJadeDynastyEquipIndex);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "GetJadeDynastyEquipPlace", _m_GetJadeDynastyEquipPlace);
@@ -657,6 +661,148 @@
         }
         
         [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_IsPlaySuitPlayerEffect(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.JadeDynastyEquipModel gen_to_be_invoked = (Snxxz.UI.JadeDynastyEquipModel)translator.FastGetCSObj(L, 1);
+            
+            
+                
+                {
+                    
+                        bool gen_ret = gen_to_be_invoked.IsPlaySuitPlayerEffect(  );
+                        LuaAPI.lua_pushboolean(L, gen_ret);
+                    
+                    
+                    
+                    return 1;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_StopPlaySuitEffect(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.JadeDynastyEquipModel gen_to_be_invoked = (Snxxz.UI.JadeDynastyEquipModel)translator.FastGetCSObj(L, 1);
+            
+            
+			    int gen_param_count = LuaAPI.lua_gettop(L);
+            
+                if(gen_param_count == 3&& translator.Assignable<UIEffect>(L, 2)&& LuaTypes.LUA_TBOOLEAN == LuaAPI.lua_type(L, 3)) 
+                {
+                    UIEffect _effect = (UIEffect)translator.GetObject(L, 2, typeof(UIEffect));
+                    bool _isSave = LuaAPI.lua_toboolean(L, 3);
+                    
+                    gen_to_be_invoked.StopPlaySuitEffect( _effect, _isSave );
+                    
+                    
+                    
+                    return 0;
+                }
+                if(gen_param_count == 2&& translator.Assignable<UIEffect>(L, 2)) 
+                {
+                    UIEffect _effect = (UIEffect)translator.GetObject(L, 2, typeof(UIEffect));
+                    
+                    gen_to_be_invoked.StopPlaySuitEffect( _effect );
+                    
+                    
+                    
+                    return 0;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+            return LuaAPI.luaL_error(L, "invalid arguments to Snxxz.UI.JadeDynastyEquipModel.StopPlaySuitEffect!");
+            
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_IsPlayStoneSuitEffect(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.JadeDynastyEquipModel gen_to_be_invoked = (Snxxz.UI.JadeDynastyEquipModel)translator.FastGetCSObj(L, 1);
+            
+            
+                
+                {
+                    
+                        bool gen_ret = gen_to_be_invoked.IsPlayStoneSuitEffect(  );
+                        LuaAPI.lua_pushboolean(L, gen_ret);
+                    
+                    
+                    
+                    return 1;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _m_StopPlayStoneSuitEffect(RealStatePtr L)
+        {
+		    try {
+            
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+            
+            
+                Snxxz.UI.JadeDynastyEquipModel gen_to_be_invoked = (Snxxz.UI.JadeDynastyEquipModel)translator.FastGetCSObj(L, 1);
+            
+            
+			    int gen_param_count = LuaAPI.lua_gettop(L);
+            
+                if(gen_param_count == 3&& translator.Assignable<UIEffect>(L, 2)&& LuaTypes.LUA_TBOOLEAN == LuaAPI.lua_type(L, 3)) 
+                {
+                    UIEffect _effect = (UIEffect)translator.GetObject(L, 2, typeof(UIEffect));
+                    bool _isSave = LuaAPI.lua_toboolean(L, 3);
+                    
+                    gen_to_be_invoked.StopPlayStoneSuitEffect( _effect, _isSave );
+                    
+                    
+                    
+                    return 0;
+                }
+                if(gen_param_count == 2&& translator.Assignable<UIEffect>(L, 2)) 
+                {
+                    UIEffect _effect = (UIEffect)translator.GetObject(L, 2, typeof(UIEffect));
+                    
+                    gen_to_be_invoked.StopPlayStoneSuitEffect( _effect );
+                    
+                    
+                    
+                    return 0;
+                }
+                
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            
+            return LuaAPI.luaL_error(L, "invalid arguments to Snxxz.UI.JadeDynastyEquipModel.StopPlayStoneSuitEffect!");
+            
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
         static int _m_TryGetEquipPaths(RealStatePtr L)
         {
 		    try {
diff --git a/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs.meta b/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs.meta
index 726e154..32462b2 100644
--- a/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs.meta
+++ b/Lua/Gen/SnxxzUIJadeDynastyEquipModelWrap.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 9055d8e221cb52d46aa071f5311cd678
-timeCreated: 1548853312
+timeCreated: 1548941104
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/SnxxzUIMagicianModelWrap.cs b/Lua/Gen/SnxxzUIMagicianModelWrap.cs
index e93b5f4..9bcd588 100644
--- a/Lua/Gen/SnxxzUIMagicianModelWrap.cs
+++ b/Lua/Gen/SnxxzUIMagicianModelWrap.cs
@@ -21,7 +21,7 @@
         {
 			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
 			System.Type type = typeof(Snxxz.UI.MagicianModel);
-			Utils.BeginObjectRegister(type, L, translator, 0, 39, 13, 7);
+			Utils.BeginObjectRegister(type, L, translator, 0, 39, 14, 7);
 			
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "Init", _m_Init);
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "UnInit", _m_UnInit);
@@ -65,6 +65,7 @@
 			Utils.RegisterFunc(L, Utils.METHOD_IDX, "godWeaponUpdate", _e_godWeaponUpdate);
 			
 			Utils.RegisterFunc(L, Utils.GETTER_IDX, "godWeaponTypes", _g_get_godWeaponTypes);
+            Utils.RegisterFunc(L, Utils.GETTER_IDX, "godWeaponBoxDict", _g_get_godWeaponBoxDict);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "godWeaponEffectTypes", _g_get_godWeaponEffectTypes);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "godWeaponIcons", _g_get_godWeaponIcons);
             Utils.RegisterFunc(L, Utils.GETTER_IDX, "selectType", _g_get_selectType);
@@ -1273,6 +1274,20 @@
         }
         
         [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int _g_get_godWeaponBoxDict(RealStatePtr L)
+        {
+		    try {
+                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
+			
+                Snxxz.UI.MagicianModel gen_to_be_invoked = (Snxxz.UI.MagicianModel)translator.FastGetCSObj(L, 1);
+                translator.Push(L, gen_to_be_invoked.godWeaponBoxDict);
+            } catch(System.Exception gen_e) {
+                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
+            }
+            return 1;
+        }
+        
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
         static int _g_get_godWeaponEffectTypes(RealStatePtr L)
         {
 		    try {
diff --git a/Lua/Gen/SnxxzUIMagicianModelWrap.cs.meta b/Lua/Gen/SnxxzUIMagicianModelWrap.cs.meta
index 5b849bc..27d69f8 100644
--- a/Lua/Gen/SnxxzUIMagicianModelWrap.cs.meta
+++ b/Lua/Gen/SnxxzUIMagicianModelWrap.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 537bb89ce2b047a4699d1cea51db63bb
-timeCreated: 1548853309
+timeCreated: 1548941100
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/StageManagerWrap.cs b/Lua/Gen/StageManagerWrap.cs
deleted file mode 100644
index 14d5dbd..0000000
--- a/Lua/Gen/StageManagerWrap.cs
+++ /dev/null
@@ -1,451 +0,0 @@
-锘�#if USE_UNI_LUA
-using LuaAPI = UniLua.Lua;
-using RealStatePtr = UniLua.ILuaState;
-using LuaCSFunction = UniLua.CSharpFunctionDelegate;
-#else
-using LuaAPI = XLua.LuaDLL.Lua;
-using RealStatePtr = System.IntPtr;
-using LuaCSFunction = XLua.LuaDLL.lua_CSFunction;
-#endif
-
-using XLua;
-using System.Collections.Generic;
-
-
-namespace XLua.CSObjectWrap
-{
-    using Utils = XLua.Utils;
-    public class StageManagerWrap 
-    {
-        public static void __Register(RealStatePtr L)
-        {
-			ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			System.Type type = typeof(StageManager);
-			Utils.BeginObjectRegister(type, L, translator, 0, 5, 11, 3);
-			
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "LoadCreateRoleStage", _m_LoadCreateRoleStage);
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "LoadSelectRoleStage", _m_LoadSelectRoleStage);
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "LoadLoginStage", _m_LoadLoginStage);
-			
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "onStartStageLoadingEvent", _e_onStartStageLoadingEvent);
-			Utils.RegisterFunc(L, Utils.METHOD_IDX, "loadingProgressEvent", _e_loadingProgressEvent);
-			
-			Utils.RegisterFunc(L, Utils.GETTER_IDX, "isServerPreparing", _g_get_isServerPreparing);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "isCrossServerPreparing", _g_get_isCrossServerPreparing);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "StageType", _g_get_StageType);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "CurrentStage", _g_get_CurrentStage);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "currentMapId", _g_get_currentMapId);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "currentMapResId", _g_get_currentMapResId);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "stageAssetName", _g_get_stageAssetName);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "isLoading", _g_get_isLoading);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "isClientChangeMap", _g_get_isClientChangeMap);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "socketType", _g_get_socketType);
-            Utils.RegisterFunc(L, Utils.GETTER_IDX, "onStageLoadFinish", _g_get_onStageLoadFinish);
-            
-			Utils.RegisterFunc(L, Utils.SETTER_IDX, "isServerPreparing", _s_set_isServerPreparing);
-            Utils.RegisterFunc(L, Utils.SETTER_IDX, "isCrossServerPreparing", _s_set_isCrossServerPreparing);
-            Utils.RegisterFunc(L, Utils.SETTER_IDX, "onStageLoadFinish", _s_set_onStageLoadFinish);
-            
-			
-			Utils.EndObjectRegister(type, L, translator, null, null,
-			    null, null, null);
-
-		    Utils.BeginClassRegister(type, L, __CreateInstance, 1, 0, 0);
-			
-			
-            
-			
-			
-			
-			Utils.EndClassRegister(type, L, translator);
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int __CreateInstance(RealStatePtr L)
-        {
-            
-			try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-				if(LuaAPI.lua_gettop(L) == 1)
-				{
-					
-					StageManager gen_ret = new StageManager();
-					translator.Push(L, gen_ret);
-                    
-					return 1;
-				}
-				
-			}
-			catch(System.Exception gen_e) {
-				return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-			}
-            return LuaAPI.luaL_error(L, "invalid arguments to StageManager constructor!");
-            
-        }
-        
-		
-        
-		
-        
-        
-        
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _m_LoadCreateRoleStage(RealStatePtr L)
-        {
-		    try {
-            
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-            
-            
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-            
-            
-                
-                {
-                    
-                    gen_to_be_invoked.LoadCreateRoleStage(  );
-                    
-                    
-                    
-                    return 0;
-                }
-                
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _m_LoadSelectRoleStage(RealStatePtr L)
-        {
-		    try {
-            
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-            
-            
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-            
-            
-                
-                {
-                    
-                    gen_to_be_invoked.LoadSelectRoleStage(  );
-                    
-                    
-                    
-                    return 0;
-                }
-                
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _m_LoadLoginStage(RealStatePtr L)
-        {
-		    try {
-            
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-            
-            
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-            
-            
-                
-                {
-                    
-                    gen_to_be_invoked.LoadLoginStage(  );
-                    
-                    
-                    
-                    return 0;
-                }
-                
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            
-        }
-        
-        
-        
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_isServerPreparing(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.lua_pushboolean(L, gen_to_be_invoked.isServerPreparing);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_isCrossServerPreparing(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.lua_pushboolean(L, gen_to_be_invoked.isCrossServerPreparing);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_StageType(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                translator.Push(L, gen_to_be_invoked.StageType);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_CurrentStage(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                translator.Push(L, gen_to_be_invoked.CurrentStage);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_currentMapId(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.currentMapId);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_currentMapResId(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.currentMapResId);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_stageAssetName(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.lua_pushstring(L, gen_to_be_invoked.stageAssetName);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_isLoading(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.lua_pushboolean(L, gen_to_be_invoked.isLoading);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_isClientChangeMap(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                LuaAPI.lua_pushboolean(L, gen_to_be_invoked.isClientChangeMap);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_socketType(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                translator.Push(L, gen_to_be_invoked.socketType);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _g_get_onStageLoadFinish(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                translator.Push(L, gen_to_be_invoked.onStageLoadFinish);
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 1;
-        }
-        
-        
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _s_set_isServerPreparing(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                gen_to_be_invoked.isServerPreparing = LuaAPI.lua_toboolean(L, 2);
-            
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 0;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _s_set_isCrossServerPreparing(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                gen_to_be_invoked.isCrossServerPreparing = LuaAPI.lua_toboolean(L, 2);
-            
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 0;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _s_set_onStageLoadFinish(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			
-                StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                gen_to_be_invoked.onStageLoadFinish = translator.GetDelegate<UnityEngine.Events.UnityAction>(L, 2);
-            
-            } catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-            return 0;
-        }
-        
-		
-		
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _e_onStartStageLoadingEvent(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			    int gen_param_count = LuaAPI.lua_gettop(L);
-			StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                System.Action<int> gen_delegate = translator.GetDelegate<System.Action<int>>(L, 3);
-                if (gen_delegate == null) {
-                    return LuaAPI.luaL_error(L, "#3 need System.Action<int>!");
-                }
-				
-				if (gen_param_count == 3)
-				{
-					
-					if (LuaAPI.xlua_is_eq_str(L, 2, "+")) {
-						gen_to_be_invoked.onStartStageLoadingEvent += gen_delegate;
-						return 0;
-					} 
-					
-					
-					if (LuaAPI.xlua_is_eq_str(L, 2, "-")) {
-						gen_to_be_invoked.onStartStageLoadingEvent -= gen_delegate;
-						return 0;
-					} 
-					
-				}
-			} catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-			LuaAPI.luaL_error(L, "invalid arguments to StageManager.onStartStageLoadingEvent!");
-            return 0;
-        }
-        
-        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
-        static int _e_loadingProgressEvent(RealStatePtr L)
-        {
-		    try {
-                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
-			    int gen_param_count = LuaAPI.lua_gettop(L);
-			StageManager gen_to_be_invoked = (StageManager)translator.FastGetCSObj(L, 1);
-                System.Action<float> gen_delegate = translator.GetDelegate<System.Action<float>>(L, 3);
-                if (gen_delegate == null) {
-                    return LuaAPI.luaL_error(L, "#3 need System.Action<float>!");
-                }
-				
-				if (gen_param_count == 3)
-				{
-					
-					if (LuaAPI.xlua_is_eq_str(L, 2, "+")) {
-						gen_to_be_invoked.loadingProgressEvent += gen_delegate;
-						return 0;
-					} 
-					
-					
-					if (LuaAPI.xlua_is_eq_str(L, 2, "-")) {
-						gen_to_be_invoked.loadingProgressEvent -= gen_delegate;
-						return 0;
-					} 
-					
-				}
-			} catch(System.Exception gen_e) {
-                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
-            }
-			LuaAPI.luaL_error(L, "invalid arguments to StageManager.loadingProgressEvent!");
-            return 0;
-        }
-        
-		
-		
-    }
-}
diff --git a/Lua/Gen/XLuaGenAutoRegister.cs b/Lua/Gen/XLuaGenAutoRegister.cs
index e07d14e..a5cd442 100644
--- a/Lua/Gen/XLuaGenAutoRegister.cs
+++ b/Lua/Gen/XLuaGenAutoRegister.cs
@@ -127,9 +127,6 @@
             translator.DelayWrapLoader(typeof(StoryHintModel), StoryHintModelWrap.__Register);
         
         
-            translator.DelayWrapLoader(typeof(StageManager), StageManagerWrap.__Register);
-        
-        
             translator.DelayWrapLoader(typeof(LuaBehaviour), LuaBehaviourWrap.__Register);
         
         
@@ -174,13 +171,13 @@
         
             translator.DelayWrapLoader(typeof(UnityEngine.Time), UnityEngineTimeWrap.__Register);
         
+        
+            translator.DelayWrapLoader(typeof(UnityEngine.GameObject), UnityEngineGameObjectWrap.__Register);
+        
         }
         
         static void wrapInit1(LuaEnv luaenv, ObjectTranslator translator)
         {
-        
-            translator.DelayWrapLoader(typeof(UnityEngine.GameObject), UnityEngineGameObjectWrap.__Register);
-        
         
             translator.DelayWrapLoader(typeof(UnityEngine.Component), UnityEngineComponentWrap.__Register);
         
@@ -331,13 +328,13 @@
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.DogzModel), SnxxzUIDogzModelWrap.__Register);
         
+        
+            translator.DelayWrapLoader(typeof(Snxxz.UI.DogzPackModel), SnxxzUIDogzPackModelWrap.__Register);
+        
         }
         
         static void wrapInit2(LuaEnv luaenv, ObjectTranslator translator)
         {
-        
-            translator.DelayWrapLoader(typeof(Snxxz.UI.DogzPackModel), SnxxzUIDogzPackModelWrap.__Register);
-        
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.DogzDungeonModel), SnxxzUIDogzDungeonModelWrap.__Register);
         
@@ -488,13 +485,13 @@
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.PackSendQuestMgr), SnxxzUIPackSendQuestMgrWrap.__Register);
         
+        
+            translator.DelayWrapLoader(typeof(Snxxz.UI.PlayerPackModel), SnxxzUIPlayerPackModelWrap.__Register);
+        
         }
         
         static void wrapInit3(LuaEnv luaenv, ObjectTranslator translator)
         {
-        
-            translator.DelayWrapLoader(typeof(Snxxz.UI.PlayerPackModel), SnxxzUIPlayerPackModelWrap.__Register);
-        
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.TreasureEffectModel), SnxxzUITreasureEffectModelWrap.__Register);
         
@@ -645,13 +642,13 @@
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.RedpointCenter), SnxxzUIRedpointCenterWrap.__Register);
         
+        
+            translator.DelayWrapLoader(typeof(Snxxz.UI.MagicianModel), SnxxzUIMagicianModelWrap.__Register);
+        
         }
         
         static void wrapInit4(LuaEnv luaenv, ObjectTranslator translator)
         {
-        
-            translator.DelayWrapLoader(typeof(Snxxz.UI.MagicianModel), SnxxzUIMagicianModelWrap.__Register);
-        
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.RoleModel), SnxxzUIRoleModelWrap.__Register);
         
@@ -802,13 +799,13 @@
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.ConsumeRebateModel), SnxxzUIConsumeRebateModelWrap.__Register);
         
+        
+            translator.DelayWrapLoader(typeof(Snxxz.UI.LevelGiftModel), SnxxzUILevelGiftModelWrap.__Register);
+        
         }
         
         static void wrapInit5(LuaEnv luaenv, ObjectTranslator translator)
         {
-        
-            translator.DelayWrapLoader(typeof(Snxxz.UI.LevelGiftModel), SnxxzUILevelGiftModelWrap.__Register);
-        
         
             translator.DelayWrapLoader(typeof(Snxxz.UI.MultipleExpModel), SnxxzUIMultipleExpModelWrap.__Register);
         
diff --git a/Lua/Gen/XLuaGenAutoRegister.cs.meta b/Lua/Gen/XLuaGenAutoRegister.cs.meta
index 4fa46f1..cb4a775 100644
--- a/Lua/Gen/XLuaGenAutoRegister.cs.meta
+++ b/Lua/Gen/XLuaGenAutoRegister.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 11479d6613f53454b9f092ed34c058f8
-timeCreated: 1548853305
+timeCreated: 1548941096
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Lua/Gen/link.xml b/Lua/Gen/link.xml
index d80ed38..1128c82 100644
--- a/Lua/Gen/link.xml
+++ b/Lua/Gen/link.xml
@@ -46,7 +46,6 @@
 		<type fullname="GuideMessageModel" preserve="all"/>
 		<type fullname="NewGuideModel" preserve="all"/>
 		<type fullname="StoryHintModel" preserve="all"/>
-		<type fullname="StageManager" preserve="all"/>
 		<type fullname="LuaBehaviour" preserve="all"/>
 		<type fullname="ConfigUtil" preserve="all"/>
 		<type fullname="LuaGameNetPackBase" preserve="all"/>
diff --git a/Lua/Gen/link.xml.meta b/Lua/Gen/link.xml.meta
index 6960f28..53c826e 100644
--- a/Lua/Gen/link.xml.meta
+++ b/Lua/Gen/link.xml.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 9bc9d85830abbcc4eaa98fa571c8663b
-timeCreated: 1548853319
+timeCreated: 1548941111
 licenseType: Pro
 TextScriptImporter:
   userData: 
diff --git a/System/Activity/ActivityModel.cs b/System/Activity/ActivityModel.cs
index d2e7c29..5c0e727 100644
--- a/System/Activity/ActivityModel.cs
+++ b/System/Activity/ActivityModel.cs
@@ -34,7 +34,7 @@
             fairyLeagueModel.OnRefreshFairyLeagueEvent += CheckActivity;
             fairyLeagueModel.onFairyLeagueBattleEvent += CheckActivity;
             PlayerDatas.Instance.fairyData.OnRefreshFairyBoss += CheckActivity;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent;
 
             var _funcCfg = Config.Instance.Get<FuncConfigConfig>("SpecialActivitys");
@@ -125,7 +125,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (StageManager.Instance.CurrentStage is DungeonStage)
+            if (StageLoad.Instance.currentStage is DungeonStage)
             {
                 var _mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
                 if (_mapConfig.MapFBType == 0)
@@ -159,7 +159,7 @@
 
         private void CheckActivity()
         {
-            if (!mainStage || !(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!mainStage || !(StageLoad.Instance.currentStage is DungeonStage))
             {
                 return;
             }
diff --git a/System/AssetVersion/AssetVersionUtility.cs b/System/AssetVersion/AssetVersionUtility.cs
index 2aab530..87586ac 100644
--- a/System/AssetVersion/AssetVersionUtility.cs
+++ b/System/AssetVersion/AssetVersionUtility.cs
@@ -183,25 +183,19 @@
 
     public static bool IsSceneAssetValid(int mapId, int lineId)
     {
-        var dataMapId = 0;
-        var mapConfig = Config.Instance.Get<MapConfig>(mapId);
-        if (mapConfig == null)
-        {
-            return false;
+        if (AssetSource.sceneFromEditor || mapId < 100)
+        {
+            return true;
         }
 
-        if (mapConfig.MapFBType != 0)
-        {
-            var model = ModelCenter.Instance.GetModel<DungeonModel>();
-            dataMapId = model.GetDataMapIdByMapId(mapId);
-        }
-        else
-        {
-            lineId = 0;
-            dataMapId = mapId;
+        var dataMapId = MapUtility.GetDataMapId(mapId);
+        lineId = MapUtility.GetLineId(mapId, lineId);
+        var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+        if (mapResConfig == null)
+        {
+            return false;
         }
 
-        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(dataMapId, lineId);
         if (!IsAssetValid(StringUtility.Contact("maps/", mapResConfig.MapResources.ToLower())))
         {
             return false;
diff --git a/System/BossShow/BossShowModel.cs b/System/BossShow/BossShowModel.cs
index 582f812..7b0182d 100644
--- a/System/BossShow/BossShowModel.cs
+++ b/System/BossShow/BossShowModel.cs
@@ -15,7 +15,7 @@
             BossShowing = false;
             showTargetList = new List<ShowActor>();
             TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         }
 
         GameObject bossShowCam;
@@ -66,7 +66,7 @@
                     }
                     SetMisstionShow(actorShowModel.BindMissionID);
                 }
-                if (BossShowing && StageManager.Instance.CurrentStage is DungeonStage)
+                if (BossShowing && StageLoad.Instance.currentStage is DungeonStage)
                 {
                     return;
                 }
diff --git a/System/Chat/ChatCenter.cs b/System/Chat/ChatCenter.cs
index 5393b3d..261051c 100644
--- a/System/Chat/ChatCenter.cs
+++ b/System/Chat/ChatCenter.cs
@@ -24,7 +24,7 @@
             TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent;
             VoiceHttpRequest.Instance.samplesDecodecComplete += SamplesDecodecComplete;
             WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             PlayerRealmData.OnPlayerCollectEnd += OnPlayerCollectEnd;
             //SnxxzGame.Instance.AddApplicationOutAction(OnApplicationQuit);
 
@@ -192,7 +192,7 @@
 
         private void OnStageLoadFinish()
         {
-            bool isDungeon = StageManager.Instance.CurrentStage is DungeonStage;
+            bool isDungeon = StageLoad.Instance.currentStage is DungeonStage;
             if (!isDungeon)
             {
                 ClearAllVoice();
@@ -652,7 +652,7 @@
         private void AutoPlayVoice()
         {
             if (voicePlaying || WindowCenter.Instance.IsOpen<LoadingWin>()
-                || !(StageManager.Instance.CurrentStage is DungeonStage))
+                || !(StageLoad.Instance.currentStage is DungeonStage))
             {
                 return;
             }
@@ -765,7 +765,7 @@
         private void CheckChatFloatOpen()
         {
             if (WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !WindowCenter.Instance.IsOpen<LoadingWin>()
-                && StageManager.Instance.CurrentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureBaseWin>())
+                && StageLoad.Instance.currentStage is DungeonStage && !WindowCenter.Instance.IsOpen<TreasureBaseWin>())
             {
                 if (!WindowCenter.Instance.IsOpen<ChatFloatWin>())
                 {
@@ -812,7 +812,7 @@
             }
             if (!WindowCenter.Instance.IsOpen<MainInterfaceWin>()
                 || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin()
-                || StageManager.Instance.isLoading
+                || StageLoad.Instance.isLoading
                 || NewBieCenter.Instance.inGuiding)
             {
                 return;
diff --git a/System/Chat/ChatCtrl.cs b/System/Chat/ChatCtrl.cs
index 1fc0719..eea6945 100644
--- a/System/Chat/ChatCtrl.cs
+++ b/System/Chat/ChatCtrl.cs
@@ -184,7 +184,7 @@
         BugleItem = int.Parse(_funcCfg.Numerical1);
 
         DTC0102_tagCDBPlayer.switchAccountEvent += SwitchAccountEvent;
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += PlayerLoginOkEvent;
 
         InitChatRedpoints();
@@ -209,7 +209,7 @@
 
     private void OnStageLoadFinish()
     {
-        bool isDungeon = StageManager.Instance.CurrentStage is DungeonStage;
+        bool isDungeon = StageLoad.Instance.currentStage is DungeonStage;
         if (!isDungeon)
         {
             ClearAllChatInfo();
diff --git a/System/Chat/VoiceHttpRequest.cs b/System/Chat/VoiceHttpRequest.cs
index 757319e..89e796d 100644
--- a/System/Chat/VoiceHttpRequest.cs
+++ b/System/Chat/VoiceHttpRequest.cs
@@ -1,33 +1,33 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
+using System.Collections;
+using System.Collections.Generic;
 using System.Text;
-using UnityEngine;
-
+using UnityEngine;
+
 [XLua.LuaCallCSharp]
 public class VoiceHttpRequest : SingletonMonobehaviour<VoiceHttpRequest>
-
-{
+
+{
     const string uploadUrl = "http://{0}.voice.2460web.com:53001/voice/upload";
-    const string downloadUrl = "http://{0}.voice.2460web.com:53001/voice/download";
-
-
-    public Queue<VoiceHttp> speechs = new Queue<VoiceHttp>();
-    public Queue<VoiceDecodec> decodecSamples = new Queue<VoiceDecodec>();
-
-    public event Action<VoiceDecodec> samplesDecodecComplete;
-
-    private bool onceSuccessRemind = false;
-
+    const string downloadUrl = "http://{0}.voice.2460web.com:53001/voice/download";
+
+
+    public Queue<VoiceHttp> speechs = new Queue<VoiceHttp>();
+    public Queue<VoiceDecodec> decodecSamples = new Queue<VoiceDecodec>();
+
+    public event Action<VoiceDecodec> samplesDecodecComplete;
+
+    private bool onceSuccessRemind = false;
+
     private void Awake()
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
     }
 
     private void OnStageLoadFinish()
     {
-        if (StageManager.Instance.CurrentStage is LoginStage)
+        if (StageLoad.Instance.currentStage is LoginStage)
         {
             speechs.Clear();
         }
@@ -47,8 +47,8 @@
             playerId = _playerId
         });
         onceSuccessRemind = false;
-    }
-
+    }
+
     private void LateUpdate()
     {
         if (speechs.Count > 0)
@@ -75,8 +75,8 @@
         {
             samplesDecodecComplete(decodecSamples.Dequeue());
         }
-    }
-
+    }
+
     public void Enqueue(float[] _samples, long _tick, int _playerId)
     {
         decodecSamples.Enqueue(new VoiceDecodec()
@@ -85,19 +85,19 @@
             samples = _samples,
             playerId = _playerId,
         });
-    }
-
+    }
+
     public struct VoiceHttp
     {
         public byte[] encode;
         public long tick;
         public int playerId;
-    }
-
+    }
+
     public struct VoiceDecodec
     {
         public long tick;
         public int playerId;
         public float[] samples;
-    }
-}
+    }
+}
diff --git a/System/CrossServerBoss/CrossServerBossModel.cs b/System/CrossServerBoss/CrossServerBossModel.cs
index a2ccf56..c473409 100644
--- a/System/CrossServerBoss/CrossServerBossModel.cs
+++ b/System/CrossServerBoss/CrossServerBossModel.cs
@@ -95,9 +95,14 @@
                 return;
             }
 
+            if (!AssetVersionUtility.IsUnpriorAssetDownLoadOk())
+            {
+                InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole);
+                return;
+            }
+
             var sendInfo = new CC105_tagCMEnterCrossServer();
             sendInfo.DataMapID = DATA_MAPID;
-
             GameNetSystem.Instance.SendInfo(sendInfo);
         }
 
diff --git a/System/CrossServerOneVsOne/CrossServerOneVsOneArenaWin.cs b/System/CrossServerOneVsOne/CrossServerOneVsOneArenaWin.cs
index e7157fb..f7d0676 100644
--- a/System/CrossServerOneVsOne/CrossServerOneVsOneArenaWin.cs
+++ b/System/CrossServerOneVsOne/CrossServerOneVsOneArenaWin.cs
@@ -249,6 +249,15 @@
 
         private void ClickMatch(int type)
         {
+            if (type == 1)
+            {
+                if (!AssetVersionUtility.IsUnpriorAssetDownLoadOk())
+                {
+                    InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole);
+                    return;
+                }
+            }
+
             if (crossServerModel.isClickCoolTime) return;
 
             DebugEx.Log("ClickMatch......");
diff --git a/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs b/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
index be67466..9b47b7e 100644
--- a/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
+++ b/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
@@ -49,7 +49,7 @@
         public void OnBeforePlayerDataInitialize()
         {
             loadSecond = 0;
-            StageManager.Instance.onStageLoadFinish -= OnLoadMapFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnLoadMapFinish;
             storeModel.RefreshBuyShopLimitEvent -= UpdateBuyShop;
             TimeUtility.OnServerOpenDayRefresh -= UpdateServerOpenDay;
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= UpdatePlayerData;
@@ -78,7 +78,7 @@
 
         public void OnPlayerLoginOk()
         {
-            StageManager.Instance.onStageLoadFinish += OnLoadMapFinish;
+            StageLoad.Instance.onStageLoadFinish += OnLoadMapFinish;
             storeModel.RefreshBuyShopLimitEvent += UpdateBuyShop;
             TimeUtility.OnServerOpenDayRefresh += UpdateServerOpenDay;
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent += UpdatePlayerData;
diff --git a/System/Dungeon/DungeonFightWin.cs b/System/Dungeon/DungeonFightWin.cs
index d75540f..c79525e 100644
--- a/System/Dungeon/DungeonFightWin.cs
+++ b/System/Dungeon/DungeonFightWin.cs
@@ -340,7 +340,7 @@
                             {
                                 if (PlayerDatas.Instance.baseData.FightPoint >= config.Fightpower)
                                 {
-                                    var runeTowerStage = StageManager.Instance.CurrentStage as RuneTowerDungeonStage;
+                                    var runeTowerStage = StageLoad.Instance.currentStage as RuneTowerDungeonStage;
                                     runeTowerStage.PerformChallengeNextLevel();
                                     model.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
                                     model.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
@@ -355,7 +355,7 @@
                                         {
                                             if (ok)
                                             {
-                                                var runeTowerStage = StageManager.Instance.CurrentStage as RuneTowerDungeonStage;
+                                                var runeTowerStage = StageLoad.Instance.currentStage as RuneTowerDungeonStage;
                                                 runeTowerStage.PerformChallengeNextLevel();
                                                 model.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
                                                 model.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
diff --git a/System/Dungeon/DungeonModel.cs b/System/Dungeon/DungeonModel.cs
index d25be2a..5139692 100644
--- a/System/Dungeon/DungeonModel.cs
+++ b/System/Dungeon/DungeonModel.cs
@@ -125,12 +125,12 @@
         public override void Init()
         {
             ParseConfig();
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         }
 
         public override void UnInit()
         {
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         }
 
         public void OnBeforePlayerDataInitialize()
diff --git a/System/Dungeon/DungeonRuneTowerVictoryWin.cs b/System/Dungeon/DungeonRuneTowerVictoryWin.cs
index ad6d011..66b430a 100644
--- a/System/Dungeon/DungeonRuneTowerVictoryWin.cs
+++ b/System/Dungeon/DungeonRuneTowerVictoryWin.cs
@@ -1,7 +1,7 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
+锘縰sing System.Collections;
+using System.Collections.Generic;
 using TableConfig;
-using UnityEngine;
+using UnityEngine;
 using UnityEngine.UI;
 
 namespace Snxxz.UI
@@ -29,10 +29,10 @@
 
         protected override void DrawExitTimer(int seconds)
         {
-            if (m_RuneTowerNext.gameObject.activeInHierarchy)
+            if (m_RuneTowerNext.gameObject.activeInHierarchy)
             {
                 m_ExitTimer.text = Language.Get("DemonDungeonExit");
-                m_NextTimer.text = Language.Get("RuneDungeonVictory_Btn_Next_1", Mathf.Clamp(seconds, 0, int.MaxValue));
+                m_NextTimer.text = Language.Get("RuneDungeonVictory_Btn_Next_1", Mathf.Clamp(seconds, 0, int.MaxValue));
             }
             else
             {
@@ -74,7 +74,7 @@
             var config = Config.Instance.Get<RuneTowerFloorConfig>(runeTowerModel.currentFloor);
             if (PlayerDatas.Instance.baseData.FightPoint >= config.Fightpower)
             {
-                var runeTowerStage = StageManager.Instance.CurrentStage as RuneTowerDungeonStage;
+                var runeTowerStage = StageLoad.Instance.currentStage as RuneTowerDungeonStage;
                 runeTowerStage.PerformChallengeNextLevel();
                 dungeonModel.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
                 dungeonModel.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
@@ -87,13 +87,13 @@
                     Language.Get("RuneTower25", config.Fightpower),
                     (bool ok) =>
                     {
-                        if (ok)
+                        if (ok)
                         {
-                            var runeTowerStage = StageManager.Instance.CurrentStage as RuneTowerDungeonStage;
+                            var runeTowerStage = StageLoad.Instance.currentStage as RuneTowerDungeonStage;
                             runeTowerStage.PerformChallengeNextLevel();
                             dungeonModel.UpdateCoolDown(DungeonCoolDownType.LeaveMap, 0);
                             dungeonModel.UpdateCoolDown(DungeonCoolDownType.TowerTake, 0);
-                            CloseClick();
+                            CloseClick();
                         }
                         else
                         {
@@ -136,5 +136,5 @@
         }
 
     }
-}
-
+}
+
diff --git a/System/FairyAu/FairyBossModel.cs b/System/FairyAu/FairyBossModel.cs
index 25be404..132048e 100644
--- a/System/FairyAu/FairyBossModel.cs
+++ b/System/FairyAu/FairyBossModel.cs
@@ -12,16 +12,16 @@
         {
             ParseConfig();
             TimeMgr.Instance.OnHourEvent += UpdateRedPoint;
-            StageManager.Instance.onStageLoadFinish+= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish+= OnStageLoadFinish;
             PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
             PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyInfo;
-        }
-
+        }
+
         public override void UnInit()
         {
             TimeMgr.Instance.OnHourEvent -= UpdateRedPoint;
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
-            PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
             PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyInfo;
         }
 
@@ -71,9 +71,9 @@
             leagueTableName = cfg.Numerical2;
 
             var configs = Config.Instance.GetAllValues<FamilyConfig>();
-            for (int i = 0; i < configs.Count; i++)
-            {
-                fairyBossWeekCntDict.Add(configs[i].familyLV, configs[i].bossFBCnt);
+            for (int i = 0; i < configs.Count; i++)
+            {
+                fairyBossWeekCntDict.Add(configs[i].familyLV, configs[i].bossFBCnt);
             }
 
             GetDungeonContinueTime();
@@ -98,30 +98,30 @@
             }
         }
 
-        public int GetFairyBossWeekCount()
-        {
-            var lv = 1;
-            var fairyData = PlayerDatas.Instance.fairyData;
-            if (!fairyData.HasFairy)
-            {
-                return 0;
-            }
-            lv = fairyData.fairy.FamilyLV;
-            if (fairyBossWeekCntDict.ContainsKey(lv))
-            {
-                return fairyBossWeekCntDict[lv];
-            }
-            return 0;
+        public int GetFairyBossWeekCount()
+        {
+            var lv = 1;
+            var fairyData = PlayerDatas.Instance.fairyData;
+            if (!fairyData.HasFairy)
+            {
+                return 0;
+            }
+            lv = fairyData.fairy.FamilyLV;
+            if (fairyBossWeekCntDict.ContainsKey(lv))
+            {
+                return fairyBossWeekCntDict[lv];
+            }
+            return 0;
         }
 
-        public bool TryGetWeekCnt(int _fairyLv, out int cnt)
-        {
-            return fairyBossWeekCntDict.TryGetValue(_fairyLv, out cnt);
+        public bool TryGetWeekCnt(int _fairyLv, out int cnt)
+        {
+            return fairyBossWeekCntDict.TryGetValue(_fairyLv, out cnt);
         }
 
-        private void OnRefreshFairyInfo()
-        {
-            UpdateRedPoint();
+        private void OnRefreshFairyInfo()
+        {
+            UpdateRedPoint();
         }
 
         public void UpdateRedPoint()
@@ -186,23 +186,23 @@
             fairyBossPrepareTime = int.Parse(_stepTime.Split(',')[0]);
         }
 
-        public void HandInFairyFood()
-        {
-            var singlepack = packModel.GetSinglePackModel(PackType.rptItem);
-            var count = 0;
-            if (singlepack != null)
-            {
-                count = singlepack.GetItemCountByID(fairyBossFood);
-            }
-            if (count > 0)
-            {
-                CA605_tagCMFamilyDonate pak = new CA605_tagCMFamilyDonate();
-                GameNetSystem.Instance.SendInfo(pak);
-            }
-            else
-            {
-                SysNotifyMgr.Instance.ShowTip("FairyFoodHandError");
-            }
+        public void HandInFairyFood()
+        {
+            var singlepack = packModel.GetSinglePackModel(PackType.rptItem);
+            var count = 0;
+            if (singlepack != null)
+            {
+                count = singlepack.GetItemCountByID(fairyBossFood);
+            }
+            if (count > 0)
+            {
+                CA605_tagCMFamilyDonate pak = new CA605_tagCMFamilyDonate();
+                GameNetSystem.Instance.SendInfo(pak);
+            }
+            else
+            {
+                SysNotifyMgr.Instance.ShowTip("FairyFoodHandError");
+            }
         }
     }
 }
diff --git a/System/FairyAu/FairyFeastTransmitShow.cs b/System/FairyAu/FairyFeastTransmitShow.cs
index d58d366..51c8013 100644
--- a/System/FairyAu/FairyFeastTransmitShow.cs
+++ b/System/FairyAu/FairyFeastTransmitShow.cs
@@ -118,8 +118,8 @@
                 m_ShowCamera.gameObject.SetActive(true);
                 CameraController.Instance.CameraObject.gameObject.SetActive(false);
 
-                StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
-                StageManager.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
+                StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
+                StageLoad.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
             }
             catch (Exception e)
             {
@@ -297,7 +297,7 @@
             OpenUI();
             WindowCenter.Instance.CloseImmediately<FairyFeastTransmitShowWin>();
             CameraController.Instance.CameraObject.gameObject.SetActive(true);
-            StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
+            StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
             transform.localPosition = new Vector3(0, 4000, 5000);
             if (m_ShowCamera != null)
             {
diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index c765164..070111f 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -1,8 +1,8 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
+using System.Collections;
+using System.Collections.Generic;
 using TableConfig;
-using UnityEngine;
+using UnityEngine;
 namespace Snxxz.UI
 {
     [XLua.LuaCallCSharp]
@@ -107,7 +107,7 @@
         public override void Init()
         {
             ParseConfig();
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             DailyQuestActionTimer.Instance.RefreshDailyQuestState += RefreshDailyQuestState;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             GA_Hero.OnEnterOrExitArea += OnEnterOrExitArea;
@@ -143,7 +143,7 @@
 
         public override void UnInit()
         {
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
             DailyQuestActionTimer.Instance.RefreshDailyQuestState -= RefreshDailyQuestState;
             GA_Hero.OnEnterOrExitArea -= OnEnterOrExitArea;
             GAMgr.Instance.OnFightNpcRequest -= OnFightNpcUpdate;
@@ -254,7 +254,7 @@
         private void OnStageLoadFinish()
         {
             cacheGotoBossId = 0;
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 grabBossHintOpen = false;
                 notified = false;
@@ -1063,5 +1063,5 @@
             }
         }
     }
-}
-
+}
+
diff --git a/System/FairyAu/FairyLeagueMap.cs b/System/FairyAu/FairyLeagueMap.cs
index c13a674..3bad5a6 100644
--- a/System/FairyAu/FairyLeagueMap.cs
+++ b/System/FairyAu/FairyLeagueMap.cs
@@ -67,9 +67,11 @@
                 }
             }
 
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
-
             mapId = _mapId;
+            var dataMapId = MapUtility.GetDataMapId();
+            var lineId = MapUtility.GetLineId();
+            var mapResConfig = MapResourcesConfig.GetConfig(dataMapId,lineId);
+
             var tagChinMap = Config.Instance.Get<MapConfig>(mapId);
             var mapWidth = mapResConfig.MapScale.x;
             var mapHeight = mapResConfig.MapScale.y;
diff --git a/System/FairyAu/FairyLeagueModel.cs b/System/FairyAu/FairyLeagueModel.cs
index e7dc338..6bb8e73 100644
--- a/System/FairyAu/FairyLeagueModel.cs
+++ b/System/FairyAu/FairyLeagueModel.cs
@@ -121,7 +121,7 @@
             TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
             DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo += OnGetUniversalGameInfo;
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             TimeMgr.Instance.OnMinuteEvent += MinuteEvent;
             TimeMgr.Instance.OnDayEvent += DayEvent;
@@ -171,7 +171,7 @@
 
         private void MinuteEvent()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage) || !serverInited)
+            if (!(StageLoad.Instance.currentStage is DungeonStage) || !serverInited)
             {
                 return;
             }
@@ -208,7 +208,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (StageManager.Instance.CurrentStage is DungeonStage &&
+            if (StageLoad.Instance.currentStage is DungeonStage &&
                 PlayerDatas.Instance.baseData.MapID == FAIRY_LEAGUE_DUNGEON)
             {
                 UpdateRedpoint();
diff --git a/System/FairyAu/FairyModel.cs b/System/FairyAu/FairyModel.cs
index c69a5f0..7ef99ce 100644
--- a/System/FairyAu/FairyModel.cs
+++ b/System/FairyAu/FairyModel.cs
@@ -19,7 +19,7 @@
             TimeMgr.Instance.OnSyntonyEvent += OnSyntonyEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             dungeonModel.dungeonCoolDownEvent += OnBeginTimeEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
         }
 
@@ -742,7 +742,7 @@
         {
             get
             {
-                if (StageManager.Instance.CurrentStage is DungeonStage)
+                if (StageLoad.Instance.currentStage is DungeonStage)
                 {
                     var mapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
                     if (mapId == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON)
@@ -787,7 +787,7 @@
                 fairyLeagueDugeonCoolDown = false;
             }
 
-            bool isDungeon = StageManager.Instance.CurrentStage is DungeonStage;
+            bool isDungeon = StageLoad.Instance.currentStage is DungeonStage;
             if (!isDungeon)
             {
                 PlayerDatas.Instance.fairyData.ClearFairyData();
diff --git a/System/Guard/GuardModel.cs b/System/Guard/GuardModel.cs
index c571be7..1f2b72f 100644
--- a/System/Guard/GuardModel.cs
+++ b/System/Guard/GuardModel.cs
@@ -22,7 +22,7 @@
         public override void Init()
         {
             ParseConfig();
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             pack.RefreshItemCountAct += RefreshItemCountAct;
             KnapsackTimeCDMgr.Instance.RefreshItemOverdueAct += RefreshItemOverdueTimeAct;
         }
diff --git a/System/HeavenBattle/HeavenBattleModel.cs b/System/HeavenBattle/HeavenBattleModel.cs
index 7747258..132e218 100644
--- a/System/HeavenBattle/HeavenBattleModel.cs
+++ b/System/HeavenBattle/HeavenBattleModel.cs
@@ -138,7 +138,7 @@
         GameRecInfoDict.Clear();
         AchieveModel.achievementAwardableEvent -= RefreshAchieveState;
         AchieveModel.achievementCompletedEvent -= RefreshAchieveState;
-        StageManager.Instance.onStageLoadFinish -= OnLoadMapFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnLoadMapFinish;
     }
 
     public void OnAfterPlayerDataInitialize()
@@ -151,7 +151,7 @@
     {
         AchieveModel.achievementProgressUpdateEvent += RefreshAchieveState;
         AchieveModel.achievementCompletedEvent += RefreshAchieveState;
-        StageManager.Instance.onStageLoadFinish += OnLoadMapFinish;
+        StageLoad.Instance.onStageLoadFinish += OnLoadMapFinish;
         AchieveRedPointCtrl();
     }
     public override void UnInit()
diff --git a/System/KnapSack/Logic/PlayerPackModels.cs b/System/KnapSack/Logic/PlayerPackModels.cs
index ee1b5fd..aa45dc9 100644
--- a/System/KnapSack/Logic/PlayerPackModels.cs
+++ b/System/KnapSack/Logic/PlayerPackModels.cs
@@ -60,7 +60,7 @@
                     makeDruglist.Add(fruitlist[i]);
                 }
             }
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
 
             SetDevourEquipPlace();
 
diff --git a/System/Loading/LoadingWin.cs b/System/Loading/LoadingWin.cs
index edb0cac..5e6679d 100644
--- a/System/Loading/LoadingWin.cs
+++ b/System/Loading/LoadingWin.cs
@@ -41,6 +41,8 @@
         float refProgress = 0f;
         float expectDuration = 5f;
 
+        float overTimer = 0f;
+
         LoadingType loadingType = LoadingType.Normal;
 
         #region Built-in
@@ -54,6 +56,8 @@
 
         protected override void OnPreOpen()
         {
+            overTimer = 0f;
+            refProgress = 0f;
             var useDefautBackGround = false;
             if (!AssetSource.uiFromEditor)
             {
@@ -195,8 +199,7 @@
                 else
                 {
                     m_ContainerProgress.gameObject.SetActive(true);
-                    m_ProgressSlider.value = refProgress = 0f;
-                    StageManager.Instance.loadingProgressEvent += UpdateLoadingProgress;
+                    m_ProgressSlider.ResetValue(0f);
                 }
             }
 
@@ -208,8 +211,6 @@
 
         protected override void OnPreClose()
         {
-            StageManager.Instance.loadingProgressEvent -= UpdateLoadingProgress;
-
             if (!AssetSource.uiFromEditor)
             {
                 AssetBundleUtility.Instance.UnloadAssetBundle("ui/sprite/loading", true, false);
@@ -222,21 +223,31 @@
         }
         #endregion
 
-
         protected override void LateUpdate()
         {
             base.LateUpdate();
-
             if (loadingType == LoadingType.Normal)
             {
-                refProgress = Mathf.Clamp01(refProgress + Time.deltaTime / expectDuration);
+                if (StageLoad.Instance.progress + 0.1f > refProgress)
+                {
+                    refProgress = Mathf.Clamp01(StageLoad.Instance.progress + 0.1f);
+                }
+
                 m_ProgressSlider.value = refProgress;
             }
-        }
 
-        void UpdateLoadingProgress(float _progress)
-        {
-            m_ProgressSlider.value = refProgress = Mathf.Max(_progress, refProgress);
+            overTimer += Time.deltaTime;
+            if (overTimer > 15f)
+            {
+                overTimer -= 5f;
+
+                var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
+                if (!loginModel.busy && !CrossServerLogin.Instance.busy && !StageLoad.Instance.isLoading)
+                {
+                    WindowCenter.Instance.Close<LoadingWin>();
+                }
+            }
+
         }
 
         private List<int> GetShowFunctions(int _level)
diff --git a/System/Login/DisconnectHintWin.cs b/System/Login/DisconnectHintWin.cs
index 2429a1a..09d4c57 100644
--- a/System/Login/DisconnectHintWin.cs
+++ b/System/Login/DisconnectHintWin.cs
@@ -31,7 +31,7 @@
 
         protected override void OnPreOpen()
         {
-            if (StageManager.Instance.CurrentStage is LoginStage)
+            if (StageLoad.Instance.currentStage is LoginStage)
             {
                 m_Content.text = Language.Get("Disconnected_2");
             }
@@ -65,7 +65,7 @@
                     break;
                 case NetworkReachability.ReachableViaCarrierDataNetwork:
                 case NetworkReachability.ReachableViaLocalAreaNetwork:
-                    if (StageManager.Instance.CurrentStage is LoginStage)
+                    if (StageLoad.Instance.currentStage is LoginStage)
                     {
                         var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
                         loginModel.busy = false;
@@ -83,7 +83,7 @@
 
         private void Cancel()
         {
-            if (!(StageManager.Instance.CurrentStage is LoginStage))
+            if (!(StageLoad.Instance.currentStage is LoginStage))
             {
                 GameNetSystem.Instance.LoginOut();
             }
diff --git a/System/Login/LoginModel.cs b/System/Login/LoginModel.cs
index 612b862..53da4fb 100644
--- a/System/Login/LoginModel.cs
+++ b/System/Login/LoginModel.cs
@@ -104,7 +104,7 @@
             sdkLogined = false;
             sdkLoginResult = default(SDKUtility.FP_LoginOk);
 
-            if (StageManager.Instance.CurrentStage is LoginStage)
+            if (StageLoad.Instance.currentStage is LoginStage)
             {
                 SDKUtility.Instance.FreePlatformLogin();
             }
@@ -176,7 +176,15 @@
             {
                 AccountLogin(sdkLoginResult.account, _ip, _port, _gamePort);
             }
-            else
            {
                if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yl
                || (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yj
                 && SDKUtility.Yj_AppID.Equals("hwgame")))
                {
                    SDKUtility.Instance.FreePlatformLogin();
                }
            }
+            else
+            {
+                if (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yl
+                || (SDKUtility.Instance.ChannelPlatform == SDKUtility.E_ChannelPlatform.Yj
+                 && SDKUtility.Yj_AppID.Equals("hwgame")))
+                {
+                    SDKUtility.Instance.FreePlatformLogin();
+                }
+            }
         }
 
         public void ReAccountLogin()
@@ -372,7 +380,15 @@
                 case 1:
                     NetLinkWin.Hide();
                     EnterWorld(1);
-                    StageManager.Instance.LoadCreateRoleStage();
+                    StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+                    {
+                        toMapId = 2,
+                        toLineId = 0,
+                        needEmpty = false,
+                        needLoadResource=true,
+                        serverType = ServerType.Main,
+                        isClientLoadMap = true
+                    });
                     break;
                 case 2:
                     if (!onCreateRole)
@@ -384,7 +400,15 @@
                         else
                         {
                             NetLinkWin.Hide();
-                            StageManager.Instance.LoadSelectRoleStage();
+                            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
+                            {
+                                toMapId = 3,
+                                toLineId = 0,
+                                needEmpty = false,
+                                needLoadResource = true,
+                                serverType = ServerType.Main,
+                                isClientLoadMap = true
+                            });
                         }
                     }
                     break;
diff --git a/System/Login/ServerListCenter.cs b/System/Login/ServerListCenter.cs
index 77d2f29..5d54a05 100644
--- a/System/Login/ServerListCenter.cs
+++ b/System/Login/ServerListCenter.cs
@@ -8,7 +8,7 @@
 
 [XLua.LuaCallCSharp]
 public class ServerListCenter : Singleton<ServerListCenter>
-
+
 {
     public static readonly string[] JUMP_URL = new string[] { "http://pub.game.2460web.com:11000/server_list/?"
         ,"http://111.230.234.252:11000/server_list/?"};
@@ -260,7 +260,7 @@
         }
         else
         {
-            if (StageManager.Instance.CurrentStage == null || StageManager.Instance.CurrentStage is LoginStage)
+            if (StageLoad.Instance.currentStage == null || StageLoad.Instance.currentStage is LoginStage)
             {
                 Clock.Create(DateTime.Now + new TimeSpan(TimeSpan.TicksPerSecond), () =>
                 {
diff --git a/System/LoginAd/LoginAdModel.cs b/System/LoginAd/LoginAdModel.cs
index 3bda686..0e61466 100644
--- a/System/LoginAd/LoginAdModel.cs
+++ b/System/LoginAd/LoginAdModel.cs
@@ -1,8 +1,8 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
+using System.Collections;
+using System.Collections.Generic;
 using TableConfig;
-using UnityEngine;
+using UnityEngine;
 namespace Snxxz.UI
 {
     [XLua.LuaCallCSharp]
@@ -25,7 +25,7 @@
 
         public void OnBeforePlayerDataInitialize()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 login = true;
             }
@@ -177,5 +177,5 @@
             FirstRecharge,
         }
     }
-}
-
+}
+
diff --git a/System/MainInterfacePanel/CoinTaskTipModel.cs b/System/MainInterfacePanel/CoinTaskTipModel.cs
index 9747d78..94b8d02 100644
--- a/System/MainInterfacePanel/CoinTaskTipModel.cs
+++ b/System/MainInterfacePanel/CoinTaskTipModel.cs
@@ -44,8 +44,8 @@
 
         PlayerTaskDatas.FairyTaskEvent -= FairyTaskEvent;
         PlayerTaskDatas.FairyTaskEvent += FairyTaskEvent;
-        StageManager.Instance.onStageLoadFinish -= onStageLoadFinish;
-        StageManager.Instance.onStageLoadFinish += onStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= onStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
     }
 
    
diff --git a/System/MainInterfacePanel/FeatureNoticeModel.cs b/System/MainInterfacePanel/FeatureNoticeModel.cs
index d2ae9a3..0f99f73 100644
--- a/System/MainInterfacePanel/FeatureNoticeModel.cs
+++ b/System/MainInterfacePanel/FeatureNoticeModel.cs
@@ -1,7 +1,7 @@
-锘�//--------------------------------------------------------
-//    [Author]:           绗簩涓栫晫
-//    [  Date ]:           Wednesday, September 12, 2018
-//--------------------------------------------------------
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Wednesday, September 12, 2018
+//--------------------------------------------------------
 using UnityEngine;
 using System.Collections;
 using UnityEngine.UI;
@@ -11,7 +11,7 @@
 using Snxxz.UI;
 
 //鍔熻兘棰勫憡绾㈢偣
-[XLua.LuaCallCSharp]
+[XLua.LuaCallCSharp]
 	public class FeatureNoticeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
 {
     public List<FunctionForecastConfig> FunctionList = new List<FunctionForecastConfig>();
@@ -38,14 +38,14 @@
         Isbool = true;
         FunctionForecastIndex = 0;
         DicOpenFuncState.Clear();
-        StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting;
     }
 
     public void OnPlayerLoginOk()
     {
         Isbool = true;
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting;
         GlobalTimeEvent.Instance.secondEvent -= secondEvent;
         GlobalTimeEvent.Instance.secondEvent += secondEvent;
@@ -75,7 +75,7 @@
     }
     private void OnStageLoadFinish()
     {
-        if (!(StageManager.Instance.CurrentStage is DungeonStage))
+        if (!(StageLoad.Instance.currentStage is DungeonStage))
         {
             OpenFuncId = 0;
             RedPointChange = false;
@@ -180,7 +180,7 @@
         var IsOpenMaininterface = WindowCenter.Instance.IsOpen<MainInterfaceWin>();
         var IsOpenOffLineOnHook = WindowCenter.Instance.IsOpen<OffLineOnHookWin>();
         var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
-        var IsLoading = StageManager.Instance.isLoading;
+        var IsLoading = StageLoad.Instance.isLoading;
         if (NewBieCenter.Instance.inGuiding || treasureModel.newGotShowing || inDungeon || !IsOpenMaininterface
             || treasureModel.treasureStageUpShow || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() ||
             IsOpenOffLineOnHook || IsLoading)
@@ -299,8 +299,8 @@
         getReward.DataExStr = string.Empty;
         GameNetSystem.Instance.SendInfo(getReward);
     }
-}
-
-
-
-
+}
+
+
+
+
diff --git a/System/MainInterfacePanel/PKModel.cs b/System/MainInterfacePanel/PKModel.cs
index 36640f4..8a2c4b1 100644
--- a/System/MainInterfacePanel/PKModel.cs
+++ b/System/MainInterfacePanel/PKModel.cs
@@ -34,12 +34,12 @@
 
         public void OnAfterPlayerDataInitialize()
         {
-            //StageManager.Instance.onStageLoadFinish += onStageLoadFinish;
+            //StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
         }
 
         public void OnBeforePlayerDataInitialize()
         {
-           // StageManager.Instance.onStageLoadFinish -= onStageLoadFinish;
+           // StageLoad.Instance.onStageLoadFinish -= onStageLoadFinish;
         }
 
         private void onStageLoadFinish()
diff --git a/System/MainInterfacePanel/PlayerTaskDatas.cs b/System/MainInterfacePanel/PlayerTaskDatas.cs
index 24df838..a8d40ec 100644
--- a/System/MainInterfacePanel/PlayerTaskDatas.cs
+++ b/System/MainInterfacePanel/PlayerTaskDatas.cs
@@ -138,7 +138,7 @@
 
     public override void Init()
     {
-        StageManager.Instance.onStageLoadFinish += onStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
         NPCInteractProcessor.s_NpcInteractEvent += NpcInterac;
         FaBaoNPCIdList.Clear();
         string strFabao = Config.Instance.Get<FuncConfigConfig>("FaBaoNPCID").Numerical1;
@@ -157,7 +157,7 @@
 
     public override void UnInit()
     {
-        StageManager.Instance.onStageLoadFinish -= onStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= onStageLoadFinish;
         NPCInteractProcessor.s_NpcInteractEvent -= NpcInterac;
     }
 
diff --git a/System/MainInterfacePanel/TipPanel.cs b/System/MainInterfacePanel/TipPanel.cs
index 70a13e4..9ccc81f 100644
--- a/System/MainInterfacePanel/TipPanel.cs
+++ b/System/MainInterfacePanel/TipPanel.cs
@@ -14,7 +14,7 @@
 
     [XLua.LuaCallCSharp]
 public class TipPanel : Singleton<TipPanel>
-
+
     {
         PlayerMainDate m_MainModel;
         PlayerMainDate mainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel<PlayerMainDate>()); } }
@@ -31,7 +31,7 @@
         {
             WindowCenter.Instance.windowAfterOpenEvent += windowBeforeOpen;
             NewBieCenter.Instance.guideCompletedEvent += guideCompleted;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             TreasureNewGotWin.CloseTreasureNewGotWinEvent += CloseTreasureNewGotWinEvent;
         }
 
@@ -62,7 +62,7 @@
         {
             yield return null;
             if (WindowCenter.Instance.IsOpen<MainInterfaceWin>() && !NewBieCenter.Instance.inGuiding
-                && !WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !StageManager.Instance.isLoading
+                && !WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !StageLoad.Instance.isLoading
                 && !treasureModel.newGotShowing)
             {
                 IsOPenTip();
@@ -73,8 +73,8 @@
         {
             yield return WaitingForSecondConst.WaitMS500;
             if (WindowCenter.Instance.IsOpen<MainInterfaceWin>() && !NewBieCenter.Instance.inGuiding
-                && !WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !StageManager.Instance.isLoading
-                && StageManager.Instance.CurrentStage is DungeonStage && !treasureModel.newGotShowing)
+                && !WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() && !StageLoad.Instance.isLoading
+                && StageLoad.Instance.currentStage is DungeonStage && !treasureModel.newGotShowing)
             {
                 IsOPenTip();
             }
diff --git a/System/Message/BattleHint.cs b/System/Message/BattleHint.cs
index 04609b0..8d52b4f 100644
--- a/System/Message/BattleHint.cs
+++ b/System/Message/BattleHint.cs
@@ -1,12 +1,12 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
 namespace Snxxz.UI
 {
     [XLua.LuaCallCSharp]
 public class BattleHint : Singleton<BattleHint>
-
+
     {
         DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
 
@@ -66,8 +66,8 @@
 
         private void OnSystemNotifyEvent(string msg)
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage)
-                || StageManager.Instance.isLoading)
+            if (!(StageLoad.Instance.currentStage is DungeonStage)
+                || StageLoad.Instance.isLoading)
             {
                 return;
             }
@@ -102,8 +102,8 @@
         public void ReceiveEvenKill(string message, ArrayList list)
         {
             if (PlayerDatas.Instance.baseData.MapID != 31160
-                || !(StageManager.Instance.CurrentStage is DungeonStage)
-                || StageManager.Instance.isLoading
+                || !(StageLoad.Instance.currentStage is DungeonStage)
+                || StageLoad.Instance.isLoading
                 || WindowCenter.Instance.IsOpen<TreasureBaseWin>()
                 || WindowCenter.Instance.IsOpen<TreasureSelectWin>())
             {
@@ -162,5 +162,5 @@
             evenKills.Clear();
         }
     }
-}
-
+}
+
diff --git a/System/Message/GMNotify.cs b/System/Message/GMNotify.cs
index f6bacc0..227153f 100644
--- a/System/Message/GMNotify.cs
+++ b/System/Message/GMNotify.cs
@@ -1,7 +1,7 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
 namespace Snxxz.UI
 {
    [XLua.LuaCallCSharp]
@@ -97,7 +97,7 @@
 
         private bool CheckSend()
         {
-            if(!(StageManager.Instance.CurrentStage is DungeonStage))
+            if(!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 return false;
             }
@@ -117,5 +117,5 @@
             public string message = string.Empty;
         }
     }
-}
-
+}
+
diff --git a/System/Message/SysNotifyMgr.cs b/System/Message/SysNotifyMgr.cs
index 66fec4d..2a569c0 100644
--- a/System/Message/SysNotifyMgr.cs
+++ b/System/Message/SysNotifyMgr.cs
@@ -9,7 +9,7 @@
 
 [XLua.LuaCallCSharp]
 public class SysNotifyMgr : SingletonMonobehaviour<SysNotifyMgr>
-
+
 {
     /// <summary>
     /// 鏈嶅姟绔笅鍙戠殑鏁版嵁
@@ -31,7 +31,7 @@
     private void Awake()
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent;
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         StartCoroutine(Co_Instance());
     }
 
@@ -55,7 +55,7 @@
     {
         base.OnDestroy();
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitializeEvent;
-        StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
     }
 
     private void OnStageLoadFinish()
diff --git a/System/NewBieGuidance/NewBieCenter.cs b/System/NewBieGuidance/NewBieCenter.cs
index 0fda3d7..1214d2d 100644
--- a/System/NewBieGuidance/NewBieCenter.cs
+++ b/System/NewBieGuidance/NewBieCenter.cs
@@ -13,7 +13,7 @@
 {
 
     [XLua.LuaCallCSharp]
-public class NewBieCenter : Singleton<NewBieCenter>
+    public class NewBieCenter : Singleton<NewBieCenter>
 
     {
 
@@ -469,6 +469,11 @@
         private void Postprocessing(int guideId)
         {
             var guideConfig = Config.Instance.Get<GuideConfig>(guideId);
+            if (guideConfig == null)
+            {
+                return;
+            }
+
             var functionOpenConfig = Config.Instance.Get<FuncOpenLVConfig>(guideConfig.Condition);
             if (functionOpenConfig != null && functionOpenConfig.ContinueTask == 1)
             {
diff --git a/System/OpenServerActivity/RedEnvelopeModel.cs b/System/OpenServerActivity/RedEnvelopeModel.cs
index 70a5c05..cb44c08 100644
--- a/System/OpenServerActivity/RedEnvelopeModel.cs
+++ b/System/OpenServerActivity/RedEnvelopeModel.cs
@@ -334,7 +334,7 @@
             {
                 return;
             }
-            if (!(StageManager.Instance.CurrentStage is DungeonStage)
+            if (!(StageLoad.Instance.currentStage is DungeonStage)
                 || WindowCenter.Instance.IsOpen<LoadingWin>())
             {
                 return;
@@ -353,7 +353,7 @@
                 return;
             }
             festivalRedpackModel.JudgePlayRedpackVoice(type);
-            if (!(StageManager.Instance.CurrentStage is DungeonStage)
+            if (!(StageLoad.Instance.currentStage is DungeonStage)
                 || WindowCenter.Instance.IsOpen<LoadingWin>())
             {
                 return;
@@ -379,7 +379,7 @@
             {
                 return;
             }
-            if (!(StageManager.Instance.CurrentStage is DungeonStage)
+            if (!(StageLoad.Instance.currentStage is DungeonStage)
                 || WindowCenter.Instance.IsOpen<LoadingWin>())
             {
                 return;
diff --git a/System/Realm/RealmBossShow.cs b/System/Realm/RealmBossShow.cs
index eb038a1..24330e4 100644
--- a/System/Realm/RealmBossShow.cs
+++ b/System/Realm/RealmBossShow.cs
@@ -107,8 +107,8 @@
             CameraController.Instance.CameraObject.gameObject.SetActive(false);
             WindowCenter.Instance.uiRoot.uicamera.enabled = false;
 
-            StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
-            StageManager.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
+            StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
+            StageLoad.Instance.onStartStageLoadingEvent += OnStartStageLoadingEvent;
         }
 
         void LoadHero()
@@ -173,7 +173,7 @@
         public void Stop()
         {
             IsOpen = false;
-            StageManager.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
+            StageLoad.Instance.onStartStageLoadingEvent -= OnStartStageLoadingEvent;
             CameraController.Instance.CameraObject.gameObject.SetActive(true);
             WindowCenter.Instance.uiRoot.uicamera.enabled = true;
             WindowCenter.Instance.CloseImmediately<RealmBossShowWin>();
diff --git a/System/Rune/RuneModel.cs b/System/Rune/RuneModel.cs
index ba92f06..ff0827e 100644
--- a/System/Rune/RuneModel.cs
+++ b/System/Rune/RuneModel.cs
@@ -32,7 +32,7 @@
 
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             GlobalTimeEvent.Instance.secondEvent += PerSecond;
         }
 
@@ -70,7 +70,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 specialItemColorMark = false;
             }
diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index 083e955..16d48d6 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -77,7 +77,7 @@
         IsMustBuyDay = false;
         isLogin = true;
         ClearJumpModel();
-        StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
         WindowCenter.Instance.windowAfterCloseEvent -= windowAfterOpen;
         WindowCenter.Instance.windowAfterCloseEvent -= windowAfterClose;
@@ -112,7 +112,7 @@
         RefreshTCBPlayerDataEvent += RefreshPlayerData;
         TimeMgr.Instance.OnHourEvent += RefreshServerHour;
         GlobalTimeEvent.Instance.secondEvent += UpdateSecond;
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         WindowCenter.Instance.windowAfterOpenEvent += windowAfterOpen;
         WindowCenter.Instance.windowAfterCloseEvent += windowAfterClose;
         NewBieCenter.Instance.guideBeginEvent += GuidBegin;
diff --git a/System/SystemSetting/SettingEffectMgr.cs b/System/SystemSetting/SettingEffectMgr.cs
index 19028ed..d0c5b9f 100644
--- a/System/SystemSetting/SettingEffectMgr.cs
+++ b/System/SystemSetting/SettingEffectMgr.cs
@@ -89,7 +89,7 @@
     float autoDecomposeCoolTimer = 0;
     private void LateUpdate()
     {
-        if (!(StageManager.Instance.CurrentStage is DungeonStage))
+        if (!(StageLoad.Instance.currentStage is DungeonStage))
         {
             return;
         }
diff --git a/System/Team/TeamFailEnterDungeonHandle.cs b/System/Team/TeamFailEnterDungeonHandle.cs
index dfbe581..fb1d030 100644
--- a/System/Team/TeamFailEnterDungeonHandle.cs
+++ b/System/Team/TeamFailEnterDungeonHandle.cs
@@ -10,7 +10,7 @@
         Dictionary<int, Action> tasks = new Dictionary<int, Action>();
         public TeamFailEnterDungeonHandle()
         {
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         }
 
         private void OnStageLoadFinish()
@@ -63,7 +63,7 @@
             {
                 return;
             }
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 return;
             }
@@ -73,7 +73,7 @@
             {
                 return;
             }
-            if (StageManager.Instance.isLoading)
+            if (StageLoad.Instance.isLoading)
             {
                 if (!tasks.ContainsKey(31080))
                 {
diff --git a/System/Team/TeamModel.cs b/System/Team/TeamModel.cs
index 7bd49fa..91b1666 100644
--- a/System/Team/TeamModel.cs
+++ b/System/Team/TeamModel.cs
@@ -771,7 +771,7 @@
 
         public void OnTeamClear(H0905_tagTeamClear _serverInfo)
         {
-            if (_serverInfo.socketType == GameNetSystem.SocketType.CrossSever)
+            if (_serverInfo.socketType == ServerType.CrossSever)
             {
                 return;
             }
@@ -795,7 +795,7 @@
 
         public void OnTeammateLeave(H0906_tagPlayerLeaveTeamMsg _leaveTeam)
         {
-            if (_leaveTeam.socketType == GameNetSystem.SocketType.CrossSever)
+            if (_leaveTeam.socketType == ServerType.CrossSever)
             {
                 return;
             }
diff --git a/System/Tip/ServerTipDetails.cs b/System/Tip/ServerTipDetails.cs
index 2c24c30..d1ea4f5 100644
--- a/System/Tip/ServerTipDetails.cs
+++ b/System/Tip/ServerTipDetails.cs
@@ -34,8 +34,8 @@
 
         public static void OnStageLoadFinish()
         {
-            if (StageManager.Instance.CurrentStage is LoginStage
-                || StageManager.Instance.CurrentStage is SelectRoleStage)
+            if (StageLoad.Instance.currentStage is LoginStage
+                || StageLoad.Instance.currentStage is SelectRoleStage)
             {
                 m_Marquees.Clear();
                 return;
@@ -57,7 +57,7 @@
 
         static bool CheckOpenMarquee()
         {
-            return (StageManager.Instance.CurrentStage is DungeonStage) && !StageManager.Instance.isLoading;
+            return (StageLoad.Instance.currentStage is DungeonStage) && !StageLoad.Instance.isLoading;
         }
 
         public static SystemHintData RequireMarquee()
diff --git a/System/Treasure/TreasureModel.cs b/System/Treasure/TreasureModel.cs
index 94a991b..d7b3867 100644
--- a/System/Treasure/TreasureModel.cs
+++ b/System/Treasure/TreasureModel.cs
@@ -225,7 +225,7 @@
             WindowCenter.Instance.windowAfterOpenEvent += OnWindowOpen;
             WindowCenter.Instance.windowAfterCloseEvent += OnWindowClose;
             NewBieCenter.Instance.guideCompletedEvent += GuideComplete;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             GlobalTimeEvent.Instance.secondEvent += PerSecond;
         }
 
@@ -242,7 +242,7 @@
             packageModel.RefreshItemCountAct -= OnPackageItemChange;
             WindowCenter.Instance.windowAfterOpenEvent -= OnWindowOpen;
             WindowCenter.Instance.windowAfterCloseEvent -= OnWindowClose;
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
             GlobalTimeEvent.Instance.secondEvent -= PerSecond;
         }
 
@@ -320,7 +320,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.currentStage is DungeonStage))
             {
                 exitRecord = 0;
             }
@@ -1104,7 +1104,7 @@
 
         private void OpenTreasureNewGot()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage) || !serverInited)
+            if (!(StageLoad.Instance.currentStage is DungeonStage) || !serverInited)
             {
                 return;
             }
diff --git a/System/Vip/FirstTimeRechargeModel.cs b/System/Vip/FirstTimeRechargeModel.cs
index f82ec22..51980f5 100644
--- a/System/Vip/FirstTimeRechargeModel.cs
+++ b/System/Vip/FirstTimeRechargeModel.cs
@@ -84,8 +84,8 @@
             WindowCenter.Instance.windowBeforeCloseEvent += windowBeforeClose;
             WindowCenter.Instance.windowBeforeOpenEvent -= windowBeforeOpenEvent;
             WindowCenter.Instance.windowBeforeOpenEvent += windowBeforeOpenEvent;
-            StageManager.Instance.onStageLoadFinish -= onStageLoadFinish;
-            StageManager.Instance.onStageLoadFinish += onStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= onStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += onStageLoadFinish;
             ItemOverdueModel.FirstGoldWPOver -= FirstGoldWPOver;
             ItemOverdueModel.FirstGoldWPOver += FirstGoldWPOver;
             FirstGoldWPOver();
diff --git a/System/Vip/VipModel.cs b/System/Vip/VipModel.cs
index d6d4037..9e2090a 100644
--- a/System/Vip/VipModel.cs
+++ b/System/Vip/VipModel.cs
@@ -53,7 +53,7 @@
             TreasureNewGotWin.CloseTreasureNewGotWinEvent += CloseTreasureNewGotWinEvent;
             NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent;
             packModel.RefreshItemCountAct += RefreshItemCountAct;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
         }
 
         public override void UnInit()
@@ -67,7 +67,7 @@
             TreasureNewGotWin.CloseTreasureNewGotWinEvent -= CloseTreasureNewGotWinEvent;
             NewBieCenter.Instance.guideCompletedEvent -= GuideCompletedEvent;
             packModel.RefreshItemCountAct -= RefreshItemCountAct;
-            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         }
 
         public void OnBeforePlayerDataInitialize()
@@ -132,7 +132,7 @@
             yield return WaitingForSecondConst.WaitMS1000;
             waitingJump = false;
             if (!NewBieCenter.Instance.inGuiding && !WindowCenter.Instance.IsOpen<LoadingWin>()
-                && StageManager.Instance.CurrentStage is DungeonStage && !deadModel.playerIsDie)
+                && StageLoad.Instance.stageType== Stage.E_StageType.Dungeon && !deadModel.playerIsDie)
             {
                 if (!WindowCenter.Instance.IsOpen<VipRechargeWin>())
                 {
@@ -579,7 +579,7 @@
             {
                 return;
             }
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 return;
             }
@@ -892,7 +892,7 @@
 
         private void OnStageLoadFinish()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 popExperienceWindow = false;
             }
diff --git a/System/Welfare/MultipleExpModel.cs b/System/Welfare/MultipleExpModel.cs
index 2072f35..a4bece6 100644
--- a/System/Welfare/MultipleExpModel.cs
+++ b/System/Welfare/MultipleExpModel.cs
@@ -15,13 +15,13 @@
             OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
             OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
             WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
-            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+            StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
             OpenServerActivityCenter.Instance.Register(5, this);
         }
 
         private void OnStageLoadFinish()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 showTip = true;
                 todayRemind = false;
@@ -30,7 +30,7 @@
 
         private void WindowAfterOpenEvent(Window _win)
         {
-            if (_win is MainInterfaceWin && StageManager.Instance.CurrentStage is DungeonStage && showTip)
+            if (_win is MainInterfaceWin && StageLoad.Instance.stageType == Stage.E_StageType.Dungeon && showTip)
             {
                 OperationBase operationBase;
                 if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operationBase)
diff --git a/System/Welfare/MultipleRealmPointModel.cs b/System/Welfare/MultipleRealmPointModel.cs
index 7da031e..eb70055 100644
--- a/System/Welfare/MultipleRealmPointModel.cs
+++ b/System/Welfare/MultipleRealmPointModel.cs
@@ -16,7 +16,7 @@
         public override void Init()
         {
             OpenServerActivityCenter.Instance.Register(8, this);
-            //StageManager.Instance.onStageLoadFinish += CheckReconnect;
+            //StageLoad.Instance.onStageLoadFinish += CheckReconnect;
         }
 
         public void OnBeforePlayerDataInitialize()
@@ -41,7 +41,7 @@
 
         public override void UnInit()
         {
-            StageManager.Instance.onStageLoadFinish -= CheckReconnect;
+            StageLoad.Instance.onStageLoadFinish -= CheckReconnect;
         }
 
         public bool IsOpen
@@ -83,7 +83,7 @@
 
         private void CheckReconnect()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 CheckShowRed();
             }
diff --git a/System/Welfare/OperationTimeHepler.cs b/System/Welfare/OperationTimeHepler.cs
index a512cf9..8bf6828 100644
--- a/System/Welfare/OperationTimeHepler.cs
+++ b/System/Welfare/OperationTimeHepler.cs
@@ -32,7 +32,7 @@
 
         private void SecondEvent()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 return;
             }
@@ -101,7 +101,7 @@
 
         private void HourEvent()
         {
-            if (!(StageManager.Instance.CurrentStage is DungeonStage))
+            if (!(StageLoad.Instance.stageType == Stage.E_StageType.Dungeon))
             {
                 return;
             }
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index 28c70b0..80144fd 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -12,7 +12,7 @@
         ParseWindowSearchConfig();
         IsJumpState = false;
         funcOpenBagItem = Config.Instance.Get<FuncConfigConfig>("OpenBagItem");
-        StageManager.Instance.onStartStageLoadingEvent += ClearCurRecord;
+        StageLoad.Instance.onStartStageLoadingEvent += ClearCurRecord;
         GlobalTimeEvent.Instance.secondEvent += SecondRefresh;
     }
     private Window preWin = null;
diff --git a/System/WorldMap/BossAreaMarkWin.cs b/System/WorldMap/BossAreaMarkWin.cs
index 2618cab..b256ea7 100644
--- a/System/WorldMap/BossAreaMarkWin.cs
+++ b/System/WorldMap/BossAreaMarkWin.cs
@@ -34,7 +34,10 @@
 
     private static void OnSelectedBoss(uint _instanceId, int _npcId, bool _show)
     {
-        var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+        var dataMapId = MapUtility.GetDataMapId();
+        var lineId = MapUtility.GetLineId();
+        var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+
         if (mapResConfig == null || mapResConfig.ShowBOSSTime <= 0)//濡傛灉杩欎釜鍊间负0锛屼笉鏄剧ずboss鍑虹幇
         {
             return;
diff --git a/System/WorldMap/LocalMapFindPath.cs b/System/WorldMap/LocalMapFindPath.cs
index c5f6ae4..40d38aa 100644
--- a/System/WorldMap/LocalMapFindPath.cs
+++ b/System/WorldMap/LocalMapFindPath.cs
@@ -49,16 +49,8 @@
                 m_HeroHead.gameObject.SetActive(false);
             }
 
-            MapResourcesConfig mapResConfig = null;
-            if (mapId == PlayerDatas.Instance.baseData.MapID)
-            {
-                mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
-            }
-            else
-            {
-                mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig(mapId, 0);
-            }
-
+            var dataMapId = MapUtility.GetDataMapId(mapId);
+            var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, 0);
             var mapWidth = mapResConfig.MapScale.x;
             var mapHeight = mapResConfig.MapScale.y;
 
diff --git a/System/WorldMap/MapFrameWin.cs b/System/WorldMap/MapFrameWin.cs
index cea7eb3..e8d9753 100644
--- a/System/WorldMap/MapFrameWin.cs
+++ b/System/WorldMap/MapFrameWin.cs
@@ -67,8 +67,10 @@
         protected override void OnActived()
         {
             base.OnActived();
-            var mapConfig = Config.Instance.Get<MapConfig>(PlayerDatas.Instance.baseData.MapID);
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+            var dataMapId = MapUtility.GetDataMapId();
+            var lineId = MapUtility.GetLineId();
+            var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+
             if (string.IsNullOrEmpty(mapResConfig.BigMap))
             {
                 SelectWorldMap();
@@ -83,7 +85,9 @@
 
         private void SelectLocalMap()
         {
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+            var dataMapId = MapUtility.GetDataMapId();
+            var lineId = MapUtility.GetLineId();
+            var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
             if (mapResConfig == null || string.IsNullOrEmpty(mapResConfig.BigMap))
             {
                 SysNotifyMgr.Instance.ShowTip("MapInfo1");
diff --git a/System/WorldMap/MapModel.cs b/System/WorldMap/MapModel.cs
index f5cabac..6238ebc 100644
--- a/System/WorldMap/MapModel.cs
+++ b/System/WorldMap/MapModel.cs
@@ -297,7 +297,9 @@
 
         public bool CanOpenLocalMapWin(int mapId)
         {
-            var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+            var dataMapId = MapUtility.GetDataMapId(mapId);
+            var lineId = MapUtility.GetLineId();
+            var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
             var config = Config.Instance.Get<MapConfig>(mapId);
             if (string.IsNullOrEmpty(mapResConfig.BigMap)
                 || mapId == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON)
diff --git a/System/WorldMap/MapNameHintWin.cs b/System/WorldMap/MapNameHintWin.cs
index fe3d7ff..3fdf9d5 100644
--- a/System/WorldMap/MapNameHintWin.cs
+++ b/System/WorldMap/MapNameHintWin.cs
@@ -46,7 +46,9 @@
                     m_MapName.text = StringUtility.Contact(towerConfig.TowerName, floorConfig.FloorName);
                     break;
                 default:
-                    var mapResConfig = DTCA127_tagMCStartChangeMap.GetMapResourcesConfig();
+                    var dataMapId = MapUtility.GetDataMapId();
+                    var lineId = MapUtility.GetLineId();
+                    var mapResConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
                     m_MapName.text = mapResConfig.Name;
                     break;
             }
diff --git a/System/WorldMap/MapUtility.cs b/System/WorldMap/MapUtility.cs
new file mode 100644
index 0000000..452847d
--- /dev/null
+++ b/System/WorldMap/MapUtility.cs
@@ -0,0 +1,88 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TableConfig;
+using Snxxz.UI;
+
+public class MapUtility
+{
+
+    public static int GetDataMapId(int mapId)
+    {
+        var config = Config.Instance.Get<MapConfig>(mapId);
+        if (config == null)
+        {
+            DebugEx.LogErrorFormat("閿欒鐨勫湴鍥緄d锛歿0}", mapId);
+            return 0;
+        }
+
+        var dataMapId = 0;
+        if (config.MapFBType == (int)MapType.OpenCountry)
+        {
+            dataMapId = mapId;
+        }
+        else
+        {
+            var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
+            dataMapId = dungeonModel.GetDataMapIdByMapId(mapId);
+        }
+
+        return dataMapId;
+    }
+
+    public static int GetDataMapId()
+    {
+        return GetDataMapId(PlayerDatas.Instance.baseData.MapID);
+    }
+
+    public static int GetLineId(int mapId, int lineId)
+    {
+        var config = Config.Instance.Get<MapConfig>(mapId);
+        if (config == null)
+        {
+            DebugEx.LogErrorFormat("閿欒鐨勫湴鍥緄d锛歿0}", mapId);
+            return 0;
+        }
+
+        if (mapId == 52010 || mapId == 52020 || config.MapFBType == (int)MapType.OpenCountry)
+        {
+            return 0;
+        }
+        else
+        {
+            return lineId;
+        }
+    }
+
+    public static int GetLineId()
+    {
+        return GetLineId(PlayerDatas.Instance.baseData.MapID, PlayerDatas.Instance.baseData.dungeonLineId);
+    }
+
+    public static int GetMapResourceId(int mapId, int lineId)
+    {
+        var resourceId = 1;
+        var dataMapId = GetDataMapId(mapId);
+        var config = MapResourcesConfig.GetConfig(dataMapId, lineId);
+
+        if (config != null)
+        {
+            resourceId = config.ID;
+        }
+
+        return resourceId;
+    }
+
+    public static bool IsDungeon(int mapId)
+    {
+        var config = Config.Instance.Get<MapConfig>(mapId);
+        if (config == null)
+        {
+            DebugEx.LogErrorFormat("閿欒鐨勫湴鍥緄d锛歿0}", mapId);
+            return false;
+        }
+
+        return config.MapFBType != (int)MapType.OpenCountry;
+    }
+
+}
diff --git a/Lua/Gen/StageManagerWrap.cs.meta b/System/WorldMap/MapUtility.cs.meta
similarity index 75%
copy from Lua/Gen/StageManagerWrap.cs.meta
copy to System/WorldMap/MapUtility.cs.meta
index a713fe7..4a7f5c7 100644
--- a/Lua/Gen/StageManagerWrap.cs.meta
+++ b/System/WorldMap/MapUtility.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: 1316663bef8bbed4f99dc61ee61da170
-timeCreated: 1548853305
+guid: 1cb580a24ce047d49a9dd13b3c2f14c0
+timeCreated: 1548677973
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/System/WorldMap/WorldMapSkip.cs b/System/WorldMap/WorldMapSkip.cs
index d715e6e..9b59a55 100644
--- a/System/WorldMap/WorldMapSkip.cs
+++ b/System/WorldMap/WorldMapSkip.cs
@@ -13,12 +13,12 @@
 
     private void Awake()
     {
-        StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
     }
 
     protected override void OnDestroy()
     {
-        StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
+        StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
         base.OnDestroy();
     }
 
diff --git a/UI/Common/UIRoot.cs b/UI/Common/UIRoot.cs
index eb48852..614e2a3 100644
--- a/UI/Common/UIRoot.cs
+++ b/UI/Common/UIRoot.cs
@@ -68,7 +68,7 @@
                 }
             }
 
-            if (StageManager.Instance.CurrentStage != null)
+            if (StageLoad.Instance.currentStage != null)
             {
                 if (SDKUtility.Instance.ChannelPlatform != SDKUtility.E_ChannelPlatform.Yj
                  && SDKUtility.Instance.ChannelPlatform != SDKUtility.E_ChannelPlatform.Js)
diff --git a/Utility/ActorShadowCaster.cs b/Utility/ActorShadowCaster.cs
index 0ee0249..091b3e7 100644
--- a/Utility/ActorShadowCaster.cs
+++ b/Utility/ActorShadowCaster.cs
@@ -1,16 +1,16 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-using DynamicShadowProjector;
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using DynamicShadowProjector;
 using Snxxz.UI;
 using TableConfig;
 
 public class ActorShadowCaster : MonoBehaviour
-{
-    [SerializeField] Projector m_Projector;
-    [SerializeField] DrawTargetObject m_DrawTargetObject;
-    [SerializeField] Transform m_Target;
-
+{
+    [SerializeField] Projector m_Projector;
+    [SerializeField] DrawTargetObject m_DrawTargetObject;
+    [SerializeField] Transform m_Target;
+
     public static ActorShadowCaster Cast(Transform _followTarget, Transform _castTarget)
     {
         var shadow = ActorShadowCasterPool.Require();
@@ -22,8 +22,8 @@
         }
 
         return shadow;
-    }
-
+    }
+
     public void Follow(Transform _target)
     {
         m_Target = _target;
@@ -33,29 +33,35 @@
         BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted;
         BossShowModel.Instance.bossShowPreparedEvent += OnBeginBossShow;
         BossShowModel.Instance.bossShowCompletedEvent += OnBossShowCompleted;
-    }
-
+    }
+
     public void Cast(Transform _target)
     {
         m_DrawTargetObject.target = _target;
         m_DrawTargetObject.followTarget = false;
         m_DrawTargetObject.SetCommandBufferDirty();
 
-        var config = Config.Instance.Get<SceneShadowConfig>(StageManager.Instance.stageAssetName);
-        if (config != null)
+        if (PlayerDatas.Instance.baseData.MapID>100)
         {
-            m_Projector.transform.localEulerAngles = config.Rotation;
-            m_Projector.material.SetFloat("_Alpha", config.Intensity);
+            var dataMapId = MapUtility.GetDataMapId();
+            var lineId = MapUtility.GetLineId();
+            var mapResourcesConfig = MapResourcesConfig.GetConfig(dataMapId, lineId);
+            var config = Config.Instance.Get<SceneShadowConfig>(mapResourcesConfig.MapResources);
+            if (config != null)
+            {
+                m_Projector.transform.localEulerAngles = config.Rotation;
+                m_Projector.material.SetFloat("_Alpha", config.Intensity);
+            }
         }
-    }
-
+    }
+
     public void Stop()
     {
         BossShowModel.Instance.bossShowPreparedEvent -= OnBeginBossShow;
         BossShowModel.Instance.bossShowCompletedEvent -= OnBossShowCompleted;
         ActorShadowCasterPool.Reycle(this);
-    }
-
+    }
+
     private void LateUpdate()
     {
         if (m_Target == null)
@@ -64,24 +70,24 @@
         }
 
         this.transform.position = m_Target.position;
-    }
-
+    }
+
     private void OnBeginBossShow()
     {
         if (m_Projector != null)
         {
             m_Projector.enabled = false;
         }
-    }
-
+    }
+
     private void OnBossShowCompleted()
     {
         if (m_Projector != null)
         {
             m_Projector.enabled = true;
         }
-    }
-
+    }
+
     public static class ActorShadowCasterPool
     {
         static GameObjectPoolManager.GameObjectPool pool;
@@ -112,7 +118,7 @@
             }
         }
 
-    }
-
-
-}
+    }
+
+
+}
diff --git a/Utility/StageLoadTimeOutCatcher.cs b/Utility/StageLoadTimeOutCatcher.cs
index 95c3eaa..73ca8ea 100644
--- a/Utility/StageLoadTimeOutCatcher.cs
+++ b/Utility/StageLoadTimeOutCatcher.cs
@@ -5,9 +5,6 @@
 
 public class StageLoadTimeOutCatcher : MonoBehaviour
 {
-
-    const int timeOut = 20;//绉�
-
     public static ProtocolRecorder got0102Time;
     public static ProtocolRecorder gotA126Time;
     public static ProtocolRecorder gotA127Time;
@@ -15,39 +12,47 @@
     public static ProtocolRecorder got0403Time;
     public static ProtocolRecorder send0107Time;
 
-    public static StageLoadTimeOutCatcher Begin(int stageId)
-    {
-        var go = new GameObject("StageLoadTimeOutCatcher");
-        var catcher = go.AddMissingComponent<StageLoadTimeOutCatcher>();
-        catcher.stageId = stageId;
-
-        DontDestroyOnLoad(go);
-        return catcher;
-    }
+    static StageLoadTimeOutCatcher timeOutCatcher;
 
     public int stageId = 0;
-    DateTime startTime;
+    public DateTime startTime;
 
     private void Awake()
     {
         startTime = DateTime.Now;
     }
 
-    public void Stop()
+    public static void Begin(int stageId)
     {
-        if (this.gameObject != null)
+        if (timeOutCatcher != null)
         {
-            Destroy(this.gameObject);
+            DestroyImmediate(timeOutCatcher.gameObject);
+            timeOutCatcher = null;
+        }
+
+        var go = new GameObject("StageLoadTimeOutCatcher");
+        var catcher = go.AddMissingComponent<StageLoadTimeOutCatcher>();
+        catcher.stageId = stageId;
+        timeOutCatcher = catcher;
+        DontDestroyOnLoad(go);
+    }
+
+    public static void Stop()
+    {
+        if (timeOutCatcher != null)
+        {
+            DestroyImmediate(timeOutCatcher.gameObject);
+            timeOutCatcher = null;
         }
     }
 
-    void Update()
+    public static void ReportLoadingOverTime()
     {
-        if (DateTime.Now > startTime + new TimeSpan(timeOut * TimeSpan.TicksPerSecond))
+        if (timeOutCatcher != null)
         {
-            var title = StringUtility.Contact(stageId, "鍦板浘鍔犺浇瓒呮椂");
+            var title = StringUtility.Contact(timeOutCatcher.stageId, "鍦板浘鍔犺浇瓒呮椂");
             var description = StringUtility.Contact(
-                                        "寮�濮嬫椂闂�:", startTime.ToString("HH:mm:ss"), "$$",
+                                        "寮�濮嬫椂闂�:", timeOutCatcher.startTime.ToString("HH:mm:ss"), "$$",
                                         "瓒呮椂鏃堕棿:", DateTime.Now.ToString("HH:mm:ss"), "$$",
                                         got0102Time.ToString(), "$$",
                                         gotA126Time.ToString(), "$$",
@@ -57,11 +62,12 @@
                                         got0403Time.ToString());
 
             ExceptionCatcher.ReportException(title, description);
-            Stop();
+            DestroyImmediate(timeOutCatcher.gameObject);
+            timeOutCatcher = null;
         }
     }
 
-    public static void RecordProtocol(GameNetSystem.SocketType socketType, string number, DateTime time)
+    public static void RecordProtocol(ServerType socketType, string number, DateTime time)
     {
         var recorder = new ProtocolRecorder(number, time, socketType);
         switch (number)
@@ -93,9 +99,9 @@
     {
         public string number;
         public DateTime time;
-        public GameNetSystem.SocketType socketType;
+        public ServerType socketType;
 
-        public ProtocolRecorder(string number, DateTime time, GameNetSystem.SocketType socketType)
+        public ProtocolRecorder(string number, DateTime time, ServerType socketType)
         {
             this.number = number;
             this.time = time;
diff --git a/Utility/TimeUtility.cs b/Utility/TimeUtility.cs
index 36fc6f6..a3283e4 100644
--- a/Utility/TimeUtility.cs
+++ b/Utility/TimeUtility.cs
@@ -134,7 +134,7 @@
     public static event Action OnCreateRoleTimeRefresh;
     public static void OnRefreshCreateRoleTime(HA124_tagMCPlayerInfo _package)
     {
-        if (_package.socketType==GameNetSystem.SocketType.CrossSever)
+        if (_package.socketType==ServerType.CrossSever)
         {
             return;
         }
@@ -151,7 +151,7 @@
     public static event Action OnServerTimeRefresh;
     public static void OnRefreshServerTime(HA004_tagServerDateTime vNetData)
     {
-        if (vNetData.socketType == GameNetSystem.SocketType.CrossSever)
+        if (vNetData.socketType == ServerType.CrossSever)
         {
             return;
         }
@@ -173,7 +173,7 @@
     public static event Action OnServerOpenDayRefresh;
     public static void OnRefreshServerOpenDay(HA005_tagOpenServerDay package)
     {
-        if (package.socketType == GameNetSystem.SocketType.CrossSever)
+        if (package.socketType == ServerType.CrossSever)
         {
             return;
         }

--
Gitblit v1.8.0