少年修仙传客户端代码仓库
hch
2023-10-26 6d8a531f43688f5bd0eacb6ec6de50ef4080b344
9963 子 【BT0.1】【主干】境界塔 / 【BT0.1】【主干】境界塔

# Conflicts:
# Core/GameEngine/DataToCtl/PackageRegedit.cs
8个文件已修改
16个文件已添加
869 ■■■■■ 已修改文件
Core/GameEngine/Model/Config/RealmTowerConfig.cs 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RealmTowerConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonFightWin.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/RewardPreviewGroup.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmModel.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerFloorCell.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerFloorCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerHintWin.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerHintWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerVictoryWin.cs 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerVictoryWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerWin.cs 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmWin.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/UIHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/RealmTowerConfig.cs
New file
@@ -0,0 +1,209 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           2023年10月26日
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
using LitJson;
public partial class RealmTowerConfig
{
    public readonly int FloorID;
    public readonly int NeedRealmLV;
    public readonly int BossID;
    public readonly int[][] RewardItemList;
    public RealmTowerConfig()
    {
    }
    public RealmTowerConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out FloorID);
            int.TryParse(tables[1],out NeedRealmLV);
            int.TryParse(tables[2],out BossID);
            RewardItemList = JsonMapper.ToObject<int[][]>(tables[3]);
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, RealmTowerConfig> configs = new Dictionary<string, RealmTowerConfig>();
    public static RealmTowerConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("RealmTowerConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        RealmTowerConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new RealmTowerConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static RealmTowerConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<RealmTowerConfig> GetValues()
    {
        var values = new List<RealmTowerConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        for (int i = 0; i < keys.Count; i++)
        {
            values.Add(Get(keys[i]));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/RealmTower.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/RealmTower.txt");
        }
        configs.Clear();
        var tempConfig = new RealmTowerConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new RealmTowerConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new RealmTowerConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/RealmTowerConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9b5af2f3ff821c84080b5efab685ea74
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs
New file
@@ -0,0 +1,44 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class RealmTowerConfig : IConfigPostProcess
{
    public static Dictionary<int, List<int>> realmTowerDict = new Dictionary<int, List<int>>(); //大境界对应的塔层
    public void OnConfigParseCompleted()
    {
        int realm = Math.Max(1, RealmConfig.Get(NeedRealmLV).LvLarge);
        if (!realmTowerDict.ContainsKey(realm))
        {
            realmTowerDict.Add(realm, new List<int>());
        }
        realmTowerDict[realm].Add(FloorID);
    }
    //获取当前塔所在境界的所有塔层
    public static List<int> GetFloorsByFloorID(int floorID)
    {
        int largeRealm = Math.Max(1, RealmConfig.Get(Get(floorID).NeedRealmLV).LvLarge);
        if (realmTowerDict.ContainsKey(largeRealm))
        {
            return realmTowerDict[largeRealm];
        }
        return null;
    }
    //塔层转化,一个新的大境界显示从1层开始
    public static int GetFloorIDByFloorID(int floorID)
    {
        int largeRealm = Math.Max(1, RealmConfig.Get(Get(floorID).NeedRealmLV).LvLarge);
        if (realmTowerDict.ContainsKey(largeRealm))
        {
            return realmTowerDict[largeRealm].IndexOf(floorID) + 1;
        }
        return 0;
    }
}
Core/GameEngine/Model/TelPartialConfig/RealmTowerConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 00359c00408181b4bb3147df6effa0cb
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs
New file
@@ -0,0 +1,13 @@
using UnityEngine;
using System.Collections;
using Snxxz.UI;
// B2 17 境界塔信息 #tagMCRealmTowerInfo
public class DTCB217_tagMCRealmTowerInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HB217_tagMCRealmTowerInfo vNetData = vNetPack as HB217_tagMCRealmTowerInfo;
        ModelCenter.Instance.GetModel<RealmModel>().UpdateRealmTowerInfo(vNetData);
    }
}
Core/NetworkPackage/DTCFile/ServerPack/HB2_ActionMap/DTCB217_tagMCRealmTowerInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0476680daf70e1941b0505f17493e075
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs
New file
@@ -0,0 +1,17 @@
using UnityEngine;
using System.Collections;
// B2 17 境界塔信息 #tagMCRealmTowerInfo
public class HB217_tagMCRealmTowerInfo : GameNetPackBasic {
    public uint Floor;    // 已通关层
    public HB217_tagMCRealmTowerInfo () {
        _cmd = (ushort)0xB217;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out Floor, vBytes, NetDataType.DWORD);
    }
}
Core/NetworkPackage/ServerPack/HB2_ActionMap/HB217_tagMCRealmTowerInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 927062e6c63a6984492223933bd765fd
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Fight/Stage/Dungeon/DungeonStage.cs
@@ -299,6 +299,10 @@
                WindowCenter.Instance.Close<DungeonEndCoolDownWin>();
                WindowCenter.Instance.Open<DungeonCollectItemSuccWin>();
                break;
            case RealmModel.Tower_MapId:
                WindowCenter.Instance.Open<RealmTowerHintWin>();
                ModelCenter.Instance.GetModel<RealmModel>().RequestRefreshMonster();
                break;
            default:
                WindowCenter.Instance.Open<DungeonStageTimeWin>();
                break;
System/Dungeon/DungeonFightWin.cs
@@ -57,6 +57,8 @@
        HazyGrassModel hazyGrassModel { get { return ModelCenter.Instance.GetModel<HazyGrassModel>(); } }
        HazyDemonKingModel hazyDemonKingModel { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        #region Built-in
        protected override void BindController()
        {
@@ -465,6 +467,9 @@
                case SkyTowerModel.DATA_MAPID:
                    ProcessSkyTowerExitCoolDownEnd();
                    break;
                case RealmModel.Tower_MapId:
                    ProcessRealmTowerExitCoolDownEnd();
                    break;
                case HazyDemonKingModel.CROSSSERVERDATAMAP:
                case HazyGrassModel.REIKI_DATAMAP:
                case HazyGrassModel.FAIRY_DATAMAP:
@@ -641,6 +646,25 @@
            }
        }
        private void ProcessRealmTowerExitCoolDownEnd()
        {
            WindowCenter.Instance.Close<RealmTowerVictoryWin>();
            if (model.dungeonResult.isPass == 0)
            {
                model.ExitCurrentDungeon();
                return;
            }
            var config = SkyTowerConfig.Get(skyTowerModel.currentFloor);
            if (realmModel.currentFloor != realmModel.selectFloorID || RealmTowerConfig.Get(realmModel.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel)
            {
                model.ExitCurrentDungeon();
                return;
            }
            realmModel.RequestRefreshMonster();
            WindowCenter.Instance.Open<RealmTowerHintWin>();
        }
    }
}
System/Dungeon/DungeonModel.cs
@@ -989,6 +989,12 @@
                        WindowCenter.Instance.Open<FairyBossDungeonWin>();
                    }
                    break;
                case RealmModel.Tower_MapId:
                    if (!WindowCenter.Instance.IsOpen<RealmTowerHintWin>())
                    {
                        WindowCenter.Instance.Open<RealmTowerHintWin>();
                    }
                    break;
                default:
                    if (GetDungeonHintId(mapId, lineId) != 0)
                    {
@@ -1288,6 +1294,10 @@
                        case ClientGuardDungeon.DATAMAPID:
                            WindowCenter.Instance.Open<DungeonGuardVictoryWin>();
                            break;
                        case RealmModel.Tower_MapId:
                            WindowCenter.Instance.Open<RealmTowerVictoryWin>();
                            WindowCenter.Instance.Close<RealmTowerHintWin>();
                            break;
                        default:
                            WindowCenter.Instance.Open<DungeonVictoryWin>();
                            break;
System/FindPrecious/RewardPreviewGroup.cs
@@ -64,6 +64,23 @@
            Display(items);
        }
        public void Display(int[][] rewards)
        {
            if (rewards == null)
            {
                return;
            }
            var items = new List<Item>();
            foreach (var reward in rewards)
            {
                items.Add(new Item(reward[0], reward[1]));
            }
            Display(items);
        }
        public void LuaDisplay(int[] itemIds, int[] itemCounts)
        {
            if (itemIds == null || itemCounts == null)
System/Realm/RealmModel.cs
@@ -1,9 +1,6 @@
using LitJson;
using Snxxz.UI;
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Snxxz.UI
@@ -84,7 +81,19 @@
        UIEffect realmEffect;
        int realmEffectCount = 0;
        public event Action OnTowerPassEvent;
        public int passedFloor;
        //可挑战层
        public int currentFloor {
            get {
                return passedFloor + 1;
            }
        }
        public int selectFloorID;    //新的大境界未解锁,或者最后一层时,显示可选的最高层
        public const int REALM_DUNGEON_ID = 31110;
        public const int Tower_MapId = 31310;
        public readonly Redpoint levelUpRedpoint = new Redpoint(114, 11401);
        public readonly Redpoint challengeRedpoint = new Redpoint(114, 11402);
@@ -138,6 +147,7 @@
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        ActivitiesPushModel pushModel { get { return ModelCenter.Instance.GetModel<ActivitiesPushModel>(); } }
        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public override void Init()
        {
@@ -983,6 +993,78 @@
            selectXXZL = index;
        }
        #endregion
        #region 境界塔
        public void RequestChallenge()
        {
            var error = GetErrorOfChallenge();
            if (error == 0)
            {
                dungeonModel.RequestChallangeDungeon(Tower_MapId, 0);
            }
            else
            {
                switch (error)
                {
                    case 1:
                        SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmTowerConfig.Get(selectFloorID).NeedRealmLV);
                        break;
                    default:
                        break;
                }
            }
        }
        private int GetErrorOfChallenge()
        {
            if (RealmTowerConfig.Get(selectFloorID).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel)
            {
                return 1;
            }
            if (selectFloorID <= passedFloor)
            {
                //已通关
                return 2;
            }
            return 0;
        }
        public void UpdateRealmTowerInfo(HB217_tagMCRealmTowerInfo netPack)
        {
            passedFloor = (int)netPack.Floor;
            //显示不超过当前的大境界塔层
            var config = RealmTowerConfig.Get(currentFloor);
            if (config != null)
            {
                int largeRealm = Math.Max(1, RealmConfig.Get(RealmTowerConfig.Get(currentFloor).NeedRealmLV).LvLarge);
                int largeRealmNow = Math.Max(1, RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel).LvLarge);
                if (largeRealm > largeRealmNow)
                {
                    selectFloorID = passedFloor;
                }
                else
                {
                    selectFloorID = currentFloor;
                }
            }
            else
            {
                selectFloorID = passedFloor;
            }
            OnTowerPassEvent?.Invoke();
        }
        public void RequestRefreshMonster()
        {
            var sendInfo = new CA508_tagCMDoFBAction();
            sendInfo.ActionType = 0;
            sendInfo.ActionInfo = (uint)currentFloor;
            GameNetSystem.Instance.SendInfo(sendInfo);
        }
        #endregion
    }
    public struct RealmLevelUpEquipCondition
System/Realm/RealmTowerFloorCell.cs
New file
@@ -0,0 +1,35 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, November 09, 2017
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RealmTowerFloorCell : CellView
    {
        [SerializeField] Image m_Challenge;
        [SerializeField] Image m_Passed;
        [SerializeField] TextEx m_FloorName;
        [SerializeField] Transform m_SelectImg;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        public void Display(int _floorId)
        {
            m_FloorName.text = Language.Get("Z1814", RealmTowerConfig.GetFloorIDByFloorID(_floorId));
            m_FloorName.color = realmModel.currentFloor == _floorId ? UIHelper.GetUIColor(TextColType.NavyYellow) : UIHelper.s_LightYellow;
            m_Challenge.SetActive(realmModel.currentFloor == _floorId);
            m_Passed.SetActive(realmModel.currentFloor > _floorId);
            m_SelectImg.SetActive(realmModel.selectFloorID == _floorId);
        }
    }
}
System/Realm/RealmTowerFloorCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a55f12666bf2a434cbd7461ddf8373d3
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Realm/RealmTowerHintWin.cs
New file
@@ -0,0 +1,65 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Monday, January 21, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RealmTowerHintWin : Window
    {
        [SerializeField] Text m_TowerName;
        [SerializeField] Text m_Floor;
        [SerializeField] RewardPreviewGroup m_Rewards;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
            Display();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void Display()
        {
            var config = RealmTowerConfig.Get(realmModel.currentFloor);
            m_Floor.text = Language.Get("Z1814", RealmTowerConfig.GetFloorIDByFloorID(realmModel.currentFloor));
            m_Rewards.Display(config.RewardItemList);
            m_TowerName.text = Language.Get("RealmTower4", RealmConfig.Get(RealmConfig.Get(RealmTowerConfig.Get(realmModel.selectFloorID).NeedRealmLV).LvLarge).Name);
        }
    }
}
System/Realm/RealmTowerHintWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dcf33a9374124cb4f840b1ff19f1fc3b
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Realm/RealmTowerVictoryWin.cs
New file
@@ -0,0 +1,98 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Tuesday, January 22, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RealmTowerVictoryWin : DungeonVictoryWin
    {
        [SerializeField] Button m_NextLevel;
        [SerializeField] Text m_NextLevelTimer;
        RealmModel model { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_NextLevel.SetListener(ChallengeNext);
            m_Exit.SetListener(ExitDungeon);
        }
        protected override void OnPreOpen()
        {
            m_ContainerPoivt.SetActive(false);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        protected override void Display()
        {
            base.RequireDungeonExit();
            m_ContainerPoivt.SetActive(true);
            base.DrawPassTime();
            base.DrawGetExp();
            base.DrawItemRewards();
            base.DrawPassGrade();
            if (model.currentFloor != model.selectFloorID || RealmTowerConfig.Get(model.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel)
            {
                m_NextLevel.SetActive(false);
            }
            else
            {
                m_NextLevel.SetActive(true);
            }
        }
        protected override void DrawExitTimer(int seconds)
        {
            if (model.currentFloor != model.selectFloorID || RealmTowerConfig.Get(model.currentFloor).NeedRealmLV > PlayerDatas.Instance.baseData.realmLevel)
            {
                m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp(seconds, 0, int.MaxValue));
            }
            else
            {
                m_NextLevelTimer.text = Language.Get("SkyTowerNextLevel", Mathf.Clamp(seconds, 0, int.MaxValue));
                m_ExitTimer.text = Language.Get("DemonDungeonExit");
            }
        }
        private void ChallengeNext()
        {
            model.RequestRefreshMonster();
            CloseClick();
            WindowCenter.Instance.Open<RealmTowerHintWin>();
        }
    }
}
System/Realm/RealmTowerVictoryWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fbc1a91515c29f24da5e8170cd43b651
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Realm/RealmTowerWin.cs
New file
@@ -0,0 +1,148 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, January 18, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RealmTowerWin : Window
    {
        [SerializeField] ScrollerController m_TowerBehaviour;
        [SerializeField] List<ItemCell> items;
        [SerializeField] TextEx m_LevelLimit;
        [SerializeField] Button m_Challenge;
        [SerializeField] TextEx m_TopNow;
        [SerializeField] TextEx m_TowerName;
        [SerializeField] Button m_Close;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_Challenge.SetListener(Challenge);
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            m_TowerBehaviour.OnRefreshCell += RefreshCell;
            realmModel.OnTowerPassEvent += OnTowerPassEvent;
            Display();
            OnCreateScroller();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            m_TowerBehaviour.OnRefreshCell -= RefreshCell;
            realmModel.OnTowerPassEvent -= OnTowerPassEvent;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
        }
        #endregion
        void Display()
        {
            var config = RealmTowerConfig.Get(realmModel.selectFloorID);
            var awards = config.RewardItemList;
            for (int i = 0; i < items.Count; i++)
            {
                if (i < awards.Length)
                {
                    items[i].SetActive(true);
                    int itemID = awards[i][0];
                    items[i].Init(new ItemCellModel(itemID, false, (ulong)awards[i][1]));
                    items[i].button.AddListener(() => {
                        ItemTipUtility.Show(itemID);
                    });
                }
                else
                {
                    items[i].SetActive(false);
                }
            }
            m_LevelLimit.text = UIHelper.GetRealmName(config.NeedRealmLV, false, true);
            m_Challenge.SetActive(realmModel.currentFloor == realmModel.selectFloorID);
            m_TopNow.SetActive(realmModel.currentFloor != realmModel.selectFloorID);
            m_TowerName.text = Language.Get("RealmTower4", RealmConfig.Get(RealmConfig.Get(RealmTowerConfig.Get(realmModel.selectFloorID).NeedRealmLV).LvLarge).Name);
        }
        void OnCreateScroller()
        {
            var floors = RealmTowerConfig.GetFloorsByFloorID(realmModel.selectFloorID);
            if (floors == null) return;
            m_TowerBehaviour.Refresh();
            for (int i = floors.Count - 1; i >= 0; i--)
            {
                if (i == floors.Count - 1)
                {
                    m_TowerBehaviour.AddCell(ScrollerDataType.Header, floors[i]);
                }
                else
                {
                    m_TowerBehaviour.AddCell(ScrollerDataType.Normal, floors[i]);
                }
            }
            m_TowerBehaviour.AddCell(ScrollerDataType.Tail, 0);
            m_TowerBehaviour.Restart();
            m_TowerBehaviour.JumpIndex(floors.Count - floors.IndexOf(realmModel.currentFloor) - 2);
        }
        void Challenge()
        {
            realmModel.RequestChallenge();
        }
        void RefreshCell(ScrollerDataType type, CellView cell)
        {
            if (type == ScrollerDataType.Header || type == ScrollerDataType.Normal)
            {
                var floorCell = cell as RealmTowerFloorCell;
                floorCell.Display(cell.index);
            }
        }
        void OnTowerPassEvent()
        {
            Display();
            m_TowerBehaviour.m_Scorller.RefreshActiveCellViews();
        }
    }
}
System/Realm/RealmTowerWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4dad758548660ec449c4c0bd31d6220c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Realm/RealmWin.cs
@@ -49,6 +49,7 @@
        [SerializeField] Button leftBtn;
        [SerializeField] Button rightBtn;
        [SerializeField] UIEffect xxzlOverEffect;
        [SerializeField] Button towerBtn;
        int cacheRealmLevel = 0;
        ulong cacheFightPower = 0;
@@ -131,6 +132,10 @@
                model.selectXXZL++;
                juanImgs[model.selectXXZL].onClick.Invoke();
            });
            towerBtn.AddListener(() => {
                WindowJumpMgr.Instance.WindowJumpToEx("RealmTowerWin");
            });
        }
        protected override void OnPreOpen()
Utility/ConfigInitiator.cs
@@ -328,6 +328,7 @@
        normalTasks.Add(new ConfigInitTask("RealmXXZL", () => { RealmXXZLConfig.Init(); }, () => { return RealmXXZLConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("HorseStarUp", () => { HorseStarUpConfig.Init(); }, () => { return HorseStarUpConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("TitleStarUp", () => { TitleStarUpConfig.Init(); }, () => { return TitleStarUpConfig.inited; }));
        normalTasks.Add(new ConfigInitTask("RealmTower", () => { RealmTowerConfig.Init(); }, () => { return RealmTowerConfig.inited; }));
    }
Utility/UIHelper.cs
@@ -720,6 +720,7 @@
        return GetRealmColorByLv(realmLv, config.Name, bright);
    }
    //strFormat附加 境界名以外的文字
    //needName 指境界0是否需要名称
    public static string GetRealmNameEx(int realmLv, string strFormat, bool bright = false, bool needName = false)
    {