少年修仙传客户端代码仓库
client_Wu Xijin
2019-05-05 c2d7ce8311d9d6590c6153cbf72703451f718dd7
3335 新的一级界面框架。
30个文件已修改
12个文件已添加
1504 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/HAD_SaleActivity.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAE_Truck.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAF_Merge.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HB0_Event.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAD_SaleActivity.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAE_Truck.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HAF_Merge.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HB0_Event.meta 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Alchemy/AlchemyBaseWin.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Auction/AuctionHouseWin.cs 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Compose/New/ComposeWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CrossServerOneVsOne/CrossServerWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dogz/DogzWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Equip/EquipFrameWin.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/UnionPanel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairylandCeremony/FairylandCeremonyWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/FindPreciousFrameWin.cs 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/LootPreciousFrameWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FriendSystem/New/SocialWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HappyXB/HappyXBWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/TowerWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/KnapSackWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/NewBieGuidance/NewBieCenter.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/NewYearFairylandCeremony/NewYearFairylandCeremonyWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/OpenServerActivityWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RoleInfomationWin.cs 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RoleInfomationWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Role/RolePanel.cs 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rune/RunePanel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/SkillWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Tip/PromoteDetailsWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Treasure/TreasureBaseWin.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Vip/VipRechargeWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Welfare/WelfareWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/OneLevelWin.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/OneLevelWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/Window.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/WindowCenter.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowJump/WindowJumpMgr.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/FunctionButton.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/FunctionButtonGroup.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/WindowConfig.cs 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/HAD_SaleActivity.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 3e05761d690b75440a6be79207d0fb01
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAE_Truck.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 1d70ccd06161e0443b7a802ad94292f8
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HAF_Merge.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 71e878ac60c49ad4f964dd2dbc725739
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/DTCFile/ServerPack/HB0_Event.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: eed34091b0568664b9fb42f0634496c1
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAD_SaleActivity.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 32ceb8b7faf99f84a8b73ce53c5e3e4d
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAE_Truck.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 77f69c2b862d1704299a32d0d8eeb71e
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HAF_Merge.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: fa14960fa44b0d1439bab471a764e34f
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
Core/NetworkPackage/ServerPack/HB0_Event.meta
New file
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: d914565b65f8e8145988734c4d915834
folderAsset: yes
timeCreated: 1547643019
licenseType: Pro
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:
System/Alchemy/AlchemyBaseWin.cs
@@ -28,17 +28,17 @@
        protected override void AddListeners()
        {
            m_AlchemyNormal.AddListener(ShowAlchemyNormal);
            m_AlchemyFairy.AddListener(ShowAlchemyFairy);
            m_AlchemyDrug.AddListener(ShowAlchemyDrug);
            m_Left.AddListener(()=>
            m_AlchemyNormal.AddListener(ShowAlchemyNormal);
            m_AlchemyFairy.AddListener(ShowAlchemyFairy);
            m_AlchemyDrug.AddListener(ShowAlchemyDrug);
            m_Left.AddListener(()=>
            {
                m_FuncGroup.TriggerLast();
            });
            m_Right.AddListener(()=>
            });
            m_Right.AddListener(()=>
            {
                m_FuncGroup.TriggerNext();
            });
            });
            m_Close.AddListener(CloseClick);
        }
@@ -58,10 +58,10 @@
        protected override void OnPreClose()
        {
            CloseSubWindows();
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            CloseSubWindows();
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
@@ -93,10 +93,10 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("AlchemyBaseWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
            var children = WindowConfig.GetChildWindows("AlchemyBaseWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
            }
        }
System/Auction/AuctionHouseWin.cs
@@ -1,112 +1,112 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, February 27, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
    public class AuctionHouseWin : Window
    {
        #region Built-in
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, February 27, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
    public class AuctionHouseWin : Window
    {
        #region Built-in
        [SerializeField] FunctionButtonGroup m_FuncBtnGroup;
        [SerializeField] Button m_CloseBtn;
        [SerializeField] Button m_LeftBtn;
        [SerializeField] Button m_RightBtn;
        [SerializeField] FunctionButton m_FullServiceAuctionWin;//全服拍卖
        [SerializeField] FunctionButton m_FamilyAuctionWin;//仙盟拍卖
        [SerializeField] FunctionButton m_MyAuction;//我的拍卖
        [SerializeField] FunctionButton m_MyFocus;//我的关注
        [SerializeField] Button m_AttentionButton;//我的关注商品
        [SerializeField] Button m_TransactionRecordButton;//成交记录
        [SerializeField] Text m_MoneyText;
        protected override void BindController()
        [SerializeField] FunctionButton m_FullServiceAuctionWin;//全服拍卖
        [SerializeField] FunctionButton m_FamilyAuctionWin;//仙盟拍卖
        [SerializeField] FunctionButton m_MyAuction;//我的拍卖
        [SerializeField] FunctionButton m_MyFocus;//我的关注
        [SerializeField] Button m_AttentionButton;//我的关注商品
        [SerializeField] Button m_TransactionRecordButton;//成交记录
        [SerializeField] Text m_MoneyText;
        protected override void BindController()
        {
            AuctionInquiry.Instance.SendQueryAttentionAuctionItem();//查询拍卖行的关注物品
        }
        protected override void AddListeners()
            AuctionInquiry.Instance.SendQueryAttentionAuctionItem();//查询拍卖行的关注物品
        }
        protected override void AddListeners()
        {
            m_CloseBtn.AddListener(OnClickClose);
            m_LeftBtn.AddListener(OnClickLeftBtn);
            m_RightBtn.AddListener(OnClickRight);
            m_FullServiceAuctionWin.AddListener(OnClickFullServiceAuction);
            m_RightBtn.AddListener(OnClickRight);
            m_FullServiceAuctionWin.AddListener(OnClickFullServiceAuction);
            m_FamilyAuctionWin.AddListener(OnClickFamilyAuction);
            m_MyAuction.AddListener(OnClickMyAuction);
            m_MyFocus.AddListener(OnClickMyFocus);
            m_MyFocus.AddListener(OnClickMyFocus);
         
            m_AttentionButton.AddListener(OnClickAttentionButton);
            m_TransactionRecordButton.AddListener(OnClickTransactionRecordButton);
            m_AttentionButton.AddListener(OnClickAttentionButton);
            m_TransactionRecordButton.AddListener(OnClickTransactionRecordButton);
        }
        AuctionModel model { get { return ModelCenter.Instance.GetModel<AuctionModel>(); } }
        protected override void OnPreOpen()
        {
            m_MoneyText.text = UIHelper.GetMoneyCnt(1).ToString();
            model.SetDayRemind();
        AuctionModel model { get { return ModelCenter.Instance.GetModel<AuctionModel>(); } }
        protected override void OnPreOpen()
        {
            m_MoneyText.text = UIHelper.GetMoneyCnt(1).ToString();
            model.SetDayRemind();
        }
        protected override void OnActived()
        {
            //OnClickFullServiceAuction();
            m_FuncBtnGroup.TriggerByOrder(functionOrder);
        }
        protected override void OnAfterOpen()
        }
        protected override void OnAfterOpen()
        {
            PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;
        }
        protected override void OnPreClose()
            PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;
        }
        protected override void OnPreClose()
        {
            CloseChild();
            if (!WindowCenter.Instance.IsOpen<MainInterfaceWin>())
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        protected override void OnAfterClose()
            }
        }
        protected override void OnAfterClose()
        {
            PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;
            PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;
        }
        #endregion
        #endregion
        private void Updatefighting(PlayerDataType info)
        {
            if (info == PlayerDataType.Gold)
            {
                m_MoneyText.text = UIHelper.GetMoneyCnt(1).ToString();
            }
        }
        }
        private void OnClickClose()
        {
            CloseImmediately();
        }
        }
        private void OnClickLeftBtn()
        {
            m_FuncBtnGroup.TriggerLast();
        }
        }
        private void OnClickRight()
        {
            m_FuncBtnGroup.TriggerNext();
        }
        }
        private void OnClickFullServiceAuction()
        {
            CloseChild();
            WindowCenter.Instance.Open<FullServiceAuctionWin>(true);
            functionOrder = m_FullServiceAuctionWin.order;
        }
        }
        private void OnClickFamilyAuction()
        {
            CloseChild();
@@ -139,16 +139,16 @@
      
        private void CloseChild()
        {
            var children = WindowConfig.Get().FindChildWindows("AuctionHouseWin");
            var children = WindowConfig.GetChildWindows("AuctionHouseWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
            }           
        }
    }
}
        }
    }
}
System/Compose/New/ComposeWin.cs
@@ -244,7 +244,7 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("ComposeWin");
            var children = WindowConfig.GetChildWindows("ComposeWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/CrossServerOneVsOne/CrossServerWin.cs
@@ -98,7 +98,7 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("CrossServerWin");
            var children = WindowConfig.GetChildWindows("CrossServerWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Dogz/DogzWin.cs
@@ -124,7 +124,7 @@
        void CloseChild()
        {
            var children = WindowConfig.Get().FindChildWindows("DogzWin");
            var children = WindowConfig.GetChildWindows("DogzWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Equip/EquipFrameWin.cs
@@ -73,7 +73,7 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("EquipFrameWin");
            var children = WindowConfig.GetChildWindows("EquipFrameWin");
            foreach (var item in children)
            {
                WindowCenter.Instance.Close(item);
@@ -89,8 +89,8 @@
        private void OpenStrengthenWin()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<EquipStrengthWin>();
            CloseSubWindows();
            WindowCenter.Instance.Open<EquipStrengthWin>();
            functionOrder = m_Strengthen.order;
        }
System/FairyAu/UnionPanel.cs
@@ -134,7 +134,7 @@
        void CloseChildWin()
        {
            funcPanel.SetActive(false);
            var children = WindowConfig.Get().FindChildWindows("UnionPanel");
            var children = WindowConfig.GetChildWindows("UnionPanel");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/FairylandCeremony/FairylandCeremonyWin.cs
@@ -112,7 +112,7 @@
        private void CloseChildWin()
        {
            var children = WindowConfig.Get().FindChildWindows("FairylandCeremonyWin");
            var children = WindowConfig.GetChildWindows("FairylandCeremonyWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/FindPrecious/FindPreciousFrameWin.cs
@@ -12,37 +12,20 @@
namespace Snxxz.UI
{
    public class FindPreciousFrameWin : Window
    public class FindPreciousFrameWin : OneLevelWin
    {
        [SerializeField] FunctionButtonGroup m_FunctionGroup;
        [SerializeField] FunctionButton m_DemonJar;
        [SerializeField] FunctionButton m_WorldBoss;
        [SerializeField] FunctionButton m_BossHome;
        [SerializeField] FunctionButton m_PersonalBoss;
        [SerializeField] FunctionButton m_ElderGodArea;
        [SerializeField] FunctionButton m_DropRecord;
        [SerializeField] Button m_Left;
        [SerializeField] Button m_Right;
        [SerializeField] Button m_Close;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_DemonJar.AddListener(ShowDemonJar);
            m_WorldBoss.AddListener(ShowWorldBoss);
            m_BossHome.AddListener(ShowBossHome);
            m_PersonalBoss.AddListener(ShowPersonalBoss);
            m_ElderGodArea.AddListener(ShowElderGodArea);
            m_DropRecord.AddListener(ShowDropRecord);
            m_Left.AddListener(ShowLastFunction);
            m_Right.AddListener(ShowNextFunction);
            m_Close.AddListener(CloseClick);
            base.AddListeners();
            SetFunctionListener(0, ShowDemonJar);
            SetFunctionListener(1, ShowWorldBoss);
            SetFunctionListener(2, ShowBossHome);
            SetFunctionListener(3, ShowPersonalBoss);
            SetFunctionListener(4, ShowElderGodArea);
            SetFunctionListener(5, ShowDropRecord);
        }
        protected override void OnPreOpen()
@@ -61,20 +44,11 @@
        protected override void OnAfterClose()
        {
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        protected override void OnActived()
        {
            base.OnActived();
            m_Left.gameObject.SetActive(m_FunctionGroup.unLockedCount > 1);
            m_Right.gameObject.SetActive(m_FunctionGroup.unLockedCount > 1);
            m_FunctionGroup.TriggerByOrder(functionOrder);
            m_FunctionGroup.GotoOrder(functionOrder);
        }
        #endregion
@@ -82,61 +56,42 @@
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<DemonJarWin>();
            functionOrder = m_DemonJar.order;
            functionOrder = 0;
        }
        private void ShowWorldBoss()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<WorldBossWin>();
            functionOrder = m_WorldBoss.order;
            functionOrder = 1;
        }
        private void ShowBossHome()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<BossHomeWin>();
            functionOrder = m_BossHome.order;
            functionOrder = 2;
        }
        private void ShowPersonalBoss()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<PersonalBossWin>();
            functionOrder = m_PersonalBoss.order;
            functionOrder = 3;
        }
        private void ShowElderGodArea()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<ElderGodAreaWin>();
            functionOrder = m_ElderGodArea.order;
            functionOrder = 4;
        }
        private void ShowDropRecord()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<PreciousDropRecordWin>();
            functionOrder = m_DropRecord.order;
        }
        private void CloseSubWindows()
        {
            var subWindows = WindowConfig.Get().FindChildWindows("FindPreciousFrameWin");
            foreach ( var window in subWindows )
            {
                WindowCenter.Instance.Close(window);
            }
        }
        private void ShowLastFunction()
        {
            m_FunctionGroup.TriggerLast();
        }
        private void ShowNextFunction()
        {
            m_FunctionGroup.TriggerNext();
            functionOrder = 5;
        }
    }
System/FindPrecious/LootPreciousFrameWin.cs
@@ -118,7 +118,7 @@
        {
            m_NormalBottom.gameObject.SetActive(false);
            var children = WindowConfig.Get().FindChildWindows("LootPreciousFrameWin");
            var children = WindowConfig.GetChildWindows("LootPreciousFrameWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/FriendSystem/New/SocialWin.cs
@@ -89,7 +89,7 @@
        void CloseChild()
        {
            friendTipsObj.SetActive(false);
            var children = WindowConfig.Get().FindChildWindows("SocialWin");
            var children = WindowConfig.GetChildWindows("SocialWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/HappyXB/HappyXBWin.cs
@@ -133,7 +133,7 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("HappyXBWin");
            var children = WindowConfig.GetChildWindows("HappyXBWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/JadeDynastyTower/TowerWin.cs
@@ -83,7 +83,7 @@
        private void CloseSubWindows()
        {
            var windows = WindowConfig.Get().FindChildWindows("TowerWin");
            var windows = WindowConfig.GetChildWindows("TowerWin");
            foreach (var item in windows)
            {
                WindowCenter.Instance.Close(item);
System/KnapSack/New/KnapSackWin.cs
@@ -177,7 +177,7 @@
        private void CloseSubWindows()
        {
            var children = WindowConfig.Get().FindChildWindows("KnapSackWin");
            var children = WindowConfig.GetChildWindows("KnapSackWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/NewBieGuidance/NewBieCenter.cs
@@ -179,7 +179,7 @@
                ignoreWindows.Add(triggerWindows[currentGuide].name);
                var parent = string.Empty;
                if (WindowConfig.Get().FindParentWindow(triggerWindows[currentGuide].name, out parent))
                if (WindowConfig.FindParentWindow(triggerWindows[currentGuide].name, out parent))
                {
                    ignoreWindows.Add(parent);
                }
System/NewYearFairylandCeremony/NewYearFairylandCeremonyWin.cs
@@ -112,7 +112,7 @@
        private void CloseChildWin()
        {
            var children = WindowConfig.Get().FindChildWindows(this.GetType().Name);
            var children = WindowConfig.GetChildWindows(this.GetType().Name);
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/OpenServerActivity/OpenServerActivityWin.cs
@@ -618,7 +618,7 @@
        private void CloseOtherWin()
        {
            var children = WindowConfig.Get().FindChildWindows("OpenServerActivityWin");
            var children = WindowConfig.GetChildWindows("OpenServerActivityWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Role/RoleInfomationWin.cs
New file
@@ -0,0 +1,353 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Sunday, May 05, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RoleInfomationWin : Window
    {
        [SerializeField] Text m_PropertyAtk;
        [SerializeField] Text m_PropertyHp;
        [SerializeField] Text m_PropertyHit;
        [SerializeField] Text m_PropertyDef;
        [SerializeField] Text m_PropertyDodge;
        [SerializeField] Text m_PropertyLuck;
        [SerializeField] Text m_PropertyAtkSpeed;
        [SerializeField] Text m_PropertyMoveSpeed;
        [SerializeField] Text m_PropertyRealHurt;
        [SerializeField] Text m_PropertyRealDef;
        [SerializeField] Text m_PropertyExtraHurt;
        [SerializeField] Text m_PropertyReduceHurt;
        [SerializeField] Text m_PropertyCritOdd;
        [SerializeField] Text m_PropertyCritHurt;
        [SerializeField] Text m_PropertyCritHurtOdd;
        [SerializeField] Text m_PropertyCritHitHurt;
        [SerializeField] Text m_PlayerExp;
        [SerializeField] Text m_PlayerLv;
        [SerializeField] Text m_PlayerName;
        [SerializeField] Text m_PlayerFightPower;
        [SerializeField] RawImage m_PlayerShowModel;
        [SerializeField] RectTransform m_ContainerExp;
        [SerializeField] Slider m_ExpSlider;
        [SerializeField] Text m_WorldExp;
        [SerializeField] Button m_PlayerPropertyBtn;
        [SerializeField] Button m_TitleBtn;
        [SerializeField] Button m_RenameBtn;
        [SerializeField] Image m_RoleTitleIcon;
        [SerializeField] Image m_RoleRealmIcon;
        [SerializeField] Button m_Btn_Elixir;
        TitleModel m_TitleModel;
        TitleModel titleModel
        {
            get
            {
                return m_TitleModel ?? (m_TitleModel = ModelCenter.Instance.GetModel<TitleModel>());
            }
        }
        PackModel packModel
        {
            get { return ModelCenter.Instance.GetModel<PackModel>(); }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_PlayerPropertyBtn.onClick.AddListener(OnAttrExplainClick);
            m_TitleBtn.onClick.AddListener(OnDesignationClick);
            m_RenameBtn.onClick.AddListener(OnRenameClick);
            m_Btn_Elixir.onClick.AddListener(OnElixirClick);
        }
        protected override void OnPreOpen()
        {
            PlayerDatas.Instance.playerDataUpdateEvent += OnUpdateLvExp;
            PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerInfo;
            titleModel.OnRefreshGainTitle += OnRefreshTitle;
            PlayerDatas.Instance.worldLevelUpdateEvent += OnRefreshWorldLv;
            PlayerDatas.Instance.playerDataUpdateEvent += RefreshPlayerInfoEvent;
            packModel.refreshItemCountEvent += RefreshItemCountAct;
            m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString();
            OnUpdateBasicAttr();
            OnUpdateSpecialAttr();
            OnUpdateLvExp();
            DisplayModel();
            OnRefreshRealm();
            OnRefreshWorldLv();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            UI3DModelExhibition.Instance.StopShow();
            PlayerDatas.Instance.playerDataUpdateEvent -= OnUpdateLvExp;
            PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerInfo;
            titleModel.OnRefreshGainTitle -= OnRefreshTitle;
            PlayerDatas.Instance.worldLevelUpdateEvent -= OnRefreshWorldLv;
            packModel.refreshItemCountEvent -= RefreshItemCountAct;
            PlayerDatas.Instance.playerDataUpdateEvent -= RefreshPlayerInfoEvent;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        void DisplayModel()
        {
            UI3DModelExhibition.Instance.ShowPlayer(m_PlayerShowModel, PlayerDatas.Instance.baseData.Job);
        }
        private void OnRefreshTitle()
        {
            TitleData titleData = titleModel.GetTitleEquip();
            if (titleData != null && titleModel.IsTitleGain(titleData.id))
            {
                m_RoleTitleIcon.gameObject.SetActive(true);
                DienstgradConfig cfg = DienstgradConfig.Get(titleData.id);
                if (cfg != null)
                {
                    m_RoleTitleIcon.SetSprite(cfg.Image);
                }
            }
            else
            {
                m_RoleTitleIcon.gameObject.SetActive(false);
            }
        }
        private void OnRefreshRealm()
        {
            int realmlv = PlayerDatas.Instance.baseData.realmLevel;
            RealmConfig presentCfg = RealmConfig.Get(realmlv);
            if (presentCfg != null && presentCfg.Lv > 0)
            {
                m_RoleRealmIcon.SetSprite(presentCfg.Img);
                m_RoleRealmIcon.gameObject.SetActive(true);
            }
            else
            {
                m_RoleRealmIcon.gameObject.SetActive(false);
            }
        }
        private void OnRefreshPlayerInfo(PlayerDataType refreshType)
        {
            switch (refreshType)
            {
                case PlayerDataType.FightPower:
                    m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString();
                    break;
                case PlayerDataType.MAXATK:
                case PlayerDataType.MINATK:
                case PlayerDataType.MaxHP:
                case PlayerDataType.HIT:
                case PlayerDataType.DEF:
                case PlayerDataType.Miss:
                case PlayerDataType.LuckValue:
                    {
                        OnUpdateBasicAttr();
                    }
                    break;
                case PlayerDataType.RealmLevel:
                    {
                        OnRefreshRealm();
                    }
                    break;
                case PlayerDataType.LV:
                case PlayerDataType.TotalExp:
                case PlayerDataType.ExpPoint:
                    {
                        OnUpdateLvExp();
                        OnRefreshWorldLv();
                    }
                    break;
            }
        }
        private void RefreshPlayerInfoEvent()
        {
            OnUpdateSpecialAttr();
        }
        void OnUpdateBasicAttr()
        {
            m_PropertyAtk.text = StringUtility.Contact(ReplaceLargeNum((ulong)PlayerDatas.Instance.extersion.MINATK), "-", ReplaceLargeNum((ulong)PlayerDatas.Instance.extersion.MAXATK));
            m_PropertyHp.text = GetAttrStr(PropertyType.HP);
            m_PropertyHit.text = GetAttrStr(PropertyType.HIT);
            m_PropertyDef.text = GetAttrStr(PropertyType.DEF);
            m_PropertyDodge.text = GetAttrStr(PropertyType.MISS);
            m_PropertyLuck.text = GetAttrStr(PropertyType.Luck);
        }
        void OnUpdateSpecialAttr()
        {
            m_PropertyAtkSpeed.text = GetAttrStr(PropertyType.ATKSPEED);
            m_PropertyMoveSpeed.text = GetAttrStr(PropertyType.MoveSpeed);
            m_PropertyRealHurt.text = GetAttrStr(PropertyType.RealHurt);
            m_PropertyRealDef.text = GetAttrStr(PropertyType.RealResis);
            m_PropertyExtraHurt.text = GetAttrStr(PropertyType.PVPAddHurt);
            m_PropertyReduceHurt.text = GetAttrStr(PropertyType.PVPReduceHurt);
            m_PropertyCritOdd.text = GetAttrStr(PropertyType.CritChance);
            m_PropertyCritHurt.text = GetAttrStr(PropertyType.CritHurt);
            m_PropertyCritHurtOdd.text = GetAttrStr(PropertyType.HeartHit);
            m_PropertyCritHitHurt.text = GetAttrStr(PropertyType.HeartHurt);
        }
        private void RefreshItemCountAct(PackType packType, int index, int arg3)
        {
            if (packType == PackType.Equip)
            {
                DisplayModel();
            }
        }
        private void OnRefreshWorldLv()
        {
            int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.WorldLv).LimitLV;
            if (PlayerDatas.Instance.baseData.LV >= limit)
            {
                m_WorldExp.gameObject.SetActive(true);
                m_WorldExp.text = Language.Get("WordExpText", PlayerDatas.Instance.worldLv, Mathf.FloorToInt(UIHelper.ReplacePercentage((int)PlayerDatas.Instance.worldExpRate, 2)) + "%");
            }
            else
            {
                m_WorldExp.gameObject.SetActive(false);
            }
        }
        void OnUpdateLvExp()
        {
            int lv = PlayerDatas.Instance.baseData.LV;
            if (PlayerLVConfig.Get(lv + 1) == null)
            {
                m_ExpSlider.maxValue = 1;
                m_ExpSlider.minValue = 0;
                m_ExpSlider.value = 1;
                m_PlayerExp.text = Language.Get("L1055");
            }
            else
            {
                m_ExpSlider.minValue = 0;
                m_ExpSlider.maxValue = PlayerLVConfig.GetExpByPlayerLv(lv);
                m_ExpSlider.value = (ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000;
                m_PlayerExp.text = string.Format("{0}/{1}", UIHelper.ReplaceLargeNum((ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000), UIHelper.ReplaceLargeNum((ulong)PlayerLVConfig.GetExpByPlayerLv(lv)));
            }
            m_PlayerLv.text = Language.Get("Z1024", lv);
            m_PlayerName.text = PlayerDatas.Instance.baseData.PlayerName;
            OnRefreshTitle();
        }
        private string GetAttrStr(PropertyType type)
        {
            PlayerPropertyConfig cfg = PlayerPropertyConfig.Get((int)type);
            float value = UIHelper.GetPropertyValue(type);
            return StringUtility.Contact(UIHelper.ReplaceLargeNum(UIHelper.ReplacePercentage(value, cfg.ISPercentage)), cfg.ISPercentage == 1 ? "%" : string.Empty);
        }
        private void OnDesignationClick()
        {
            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Title))
            {
                WindowCenter.Instance.Open<RoleTitle>();
            }
            else
            {
                FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.Title);
            }
        }
        private void OnRenameClick()
        {
            WindowCenter.Instance.Open<RoleRenameWin>();
        }
        private void OnElixirClick()
        {
            //WindowCenter.Instance.Open<RoleElixirTipWin>();
        }
        private void OnAttrExplainClick()
        {
            WindowCenter.Instance.Open<RoleAttrWin>();
        }
        public StringBuilder m_StringBuilder = new StringBuilder();
        public string ReplaceLargeNum(float num)
        {
            m_StringBuilder.Length = 0;
            float hm = (float)Math.Round(num / 100000000, 2);
            if (hm >= 1)
            {
                int _value = (int)hm;
                var _length = 3 - _value.ToString().Length;
                _length = Mathf.Max(0, _length);
                if (_length > 0)
                {
                    hm = (float)Math.Round(num / 100000000, _length);
                }
                decimal _checkValue = ((decimal)hm * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(hm.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
                m_StringBuilder.Append(Language.Get("L1070"));
                return m_StringBuilder.ToString();
            }
            float tt = (float)Math.Round(num / 10000, 2);
            if (tt >= 1)
            {
                int _value = (int)tt;
                var _length = 3 - _value.ToString().Length;
                if (_length > 0)
                {
                    tt = (float)Math.Round(num / 10000, _length);
                }
                _length = Mathf.Max(0, _length);
                decimal _checkValue = ((decimal)tt * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(tt.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
                m_StringBuilder.Append(Language.Get("L1071"));
                return m_StringBuilder.ToString();
            }
            if (m_StringBuilder.Length == 0)
            {
                num = (float)Math.Round(num, 2);
                int _value = (int)num;
                var _length = 3 - _value.ToString().Length;
                if (_length > 0)
                {
                    num = (float)Math.Round(num, _length);
                }
                _length = Mathf.Max(0, _length);
                decimal _checkValue = ((decimal)num * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(num.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
            }
            return m_StringBuilder.ToString();
        }
    }
}
System/Role/RoleInfomationWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 86efcc44625e33d4fbecddccfd2a3efc
timeCreated: 1557021286
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/Role/RolePanel.cs
@@ -10,426 +10,61 @@
namespace Snxxz.UI
{
    public class RolePanel : Window
    public class RolePanel : OneLevelWin
    {
        [SerializeField] FunctionButtonGroup buttonGroup;
        [SerializeField] FunctionButton functionButtonRole;
        [SerializeField] FunctionButton functionButtonMagician;
        [SerializeField] FunctionButton m_ReikiRoot;
        [SerializeField] FunctionButton m_GatherSoul;
        [SerializeField] FunctionButton m_FashionDress;
        [SerializeField] RectTransform m_RoleInfoRt;
        [SerializeField] Text m_PropertyAtk;
        [SerializeField] Text m_PropertyHp;
        [SerializeField] Text m_PropertyHit;
        [SerializeField] Text m_PropertyDef;
        [SerializeField] Text m_PropertyDodge;
        [SerializeField] Text m_PropertyLuck;
        [SerializeField] Text m_PropertyAtkSpeed;
        [SerializeField] Text m_PropertyMoveSpeed;
        [SerializeField] Text m_PropertyRealHurt;
        [SerializeField] Text m_PropertyRealDef;
        [SerializeField] Text m_PropertyExtraHurt;
        [SerializeField] Text m_PropertyReduceHurt;
        [SerializeField] Text m_PropertyCritOdd;
        [SerializeField] Text m_PropertyCritHurt;
        [SerializeField] Text m_PropertyCritHurtOdd;
        [SerializeField] Text m_PropertyCritHitHurt;
        [SerializeField] Text m_PlayerExp;
        [SerializeField] Text m_PlayerLv;
        [SerializeField] Text m_PlayerName;
        [SerializeField] Text m_PlayerFightPower;
        [SerializeField] RawImage m_PlayerShowModel;
        [SerializeField] RectTransform m_ContainerExp;
        [SerializeField] Slider m_ExpSlider;
        [SerializeField] Text m_WorldExp;
        [SerializeField] Button m_PlayerPropertyBtn;
        [SerializeField] Button m_TitleBtn;
        [SerializeField] Button m_RenameBtn;
        [SerializeField] Image m_RoleTitleIcon;
        [SerializeField] Image m_RoleRealmIcon;
        [SerializeField] Button m_LeftBtn;
        [SerializeField] Button m_RightBtn;
        [SerializeField] Button m_CloseBtn;
        [SerializeField] Button m_Btn_Elixir;
        RoleModel m_Model;
        RoleModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RoleModel>());
            }
        }
        TitleModel m_TitleModel;
        TitleModel titleModel
        {
            get
            {
                return m_TitleModel ?? (m_TitleModel = ModelCenter.Instance.GetModel<TitleModel>());
            }
        }
        PackModel packModel
        {
            get { return ModelCenter.Instance.GetModel<PackModel>(); }
        }
        private void OnRefreshTitle()
        {
            TitleData titleData = titleModel.GetTitleEquip();
            if (titleData != null && titleModel.IsTitleGain(titleData.id))
            {
                m_RoleTitleIcon.gameObject.SetActive(true);
                DienstgradConfig cfg = DienstgradConfig.Get(titleData.id);
                if (cfg != null)
                {
                    m_RoleTitleIcon.SetSprite(cfg.Image);
                }
            }
            else
            {
                m_RoleTitleIcon.gameObject.SetActive(false);
            }
        }
        private void OnRefreshRealm()
        {
            int realmlv = PlayerDatas.Instance.baseData.realmLevel;
            RealmConfig presentCfg = RealmConfig.Get(realmlv);
            if (presentCfg != null && presentCfg.Lv > 0)
            {
                m_RoleRealmIcon.SetSprite(presentCfg.Img);
                m_RoleRealmIcon.gameObject.SetActive(true);
            }
            else
            {
                m_RoleRealmIcon.gameObject.SetActive(false);
            }
        }
        private void OnRenameClick()
        {
            //SysNotifyMgr.Instance.ShowTip("JadeInvestmentLimit1");
            WindowCenter.Instance.Open<RoleRenameWin>();
        }
        private void OnElixirClick()
        {
            //WindowCenter.Instance.Open<RoleElixirTipWin>();
        }
        private void OnDesignationClick()
        {
            if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Title))
            {
                WindowCenter.Instance.Open<RoleTitle>();
            }
            else
            {
                FuncOpen.Instance.ProcessorFuncErrorTip((int)FuncOpenEnum.Title);
            }
        }
        private void OnAttrExplainClick()
        {
            WindowCenter.Instance.Open<RoleAttrWin>();
        }
        private void OnRefreshPlayerInfo(PlayerDataType refreshType)
        {
            switch (refreshType)
            {
                case PlayerDataType.FightPower:
                    m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString();
                    break;
                case PlayerDataType.MAXATK:
                case PlayerDataType.MINATK:
                case PlayerDataType.MaxHP:
                case PlayerDataType.HIT:
                case PlayerDataType.DEF:
                case PlayerDataType.Miss:
                case PlayerDataType.LuckValue:
                    {
                        OnUpdateBasicAttr();
                    }
                    break;
                case PlayerDataType.RealmLevel:
                    {
                        OnRefreshRealm();
                    }
                    break;
                case PlayerDataType.LV:
                case PlayerDataType.TotalExp:
                case PlayerDataType.ExpPoint:
                    {
                        OnUpdateLvExp();
                        OnRefreshWorldLv();
                    }
                    break;
            }
        }
        private void RefreshPlayerInfoEvent()
        {
            OnUpdateSpecialAttr();
        }
        void InitRole()
        {
            OnUpdateBasicAttr();
            OnUpdateSpecialAttr();
            OnUpdateLvExp();
            m_PlayerFightPower.text = PlayerDatas.Instance.baseData.FightPoint.ToString();
            DisplayModel();
            OnRefreshRealm();
            OnRefreshWorldLv();
        }
        void DisplayModel()
        {
            UI3DModelExhibition.Instance.ShowPlayer(m_PlayerShowModel, PlayerDatas.Instance.baseData.Job);
        }
        void OnUpdateLvExp()
        {
            int lv = PlayerDatas.Instance.baseData.LV;
            if (PlayerLVConfig.Get(lv + 1) == null)
            {
                m_ExpSlider.maxValue = 1;
                m_ExpSlider.minValue = 0;
                m_ExpSlider.value = 1;
                m_PlayerExp.text = Language.Get("L1055");
            }
            else
            {
                m_ExpSlider.minValue = 0;
                m_ExpSlider.maxValue = PlayerLVConfig.GetExpByPlayerLv(lv);
                m_ExpSlider.value = (ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000;
                m_PlayerExp.text = string.Format("{0}/{1}", UIHelper.ReplaceLargeNum((ulong)PlayerDatas.Instance.baseData.TotalExp + (ulong)PlayerDatas.Instance.baseData.ExpPoint * 100000000), UIHelper.ReplaceLargeNum((ulong)PlayerLVConfig.GetExpByPlayerLv(lv)));
            }
            m_PlayerLv.text = Language.Get("Z1024", lv);
            m_PlayerName.text = PlayerDatas.Instance.baseData.PlayerName;
            OnRefreshTitle();
        }
        void OnUpdateBasicAttr()
        {
            m_PropertyAtk.text = StringUtility.Contact(ReplaceLargeNum((ulong)PlayerDatas.Instance.extersion.MINATK), "-", ReplaceLargeNum((ulong)PlayerDatas.Instance.extersion.MAXATK));
            m_PropertyHp.text = GetAttrStr(PropertyType.HP);
            m_PropertyHit.text = GetAttrStr(PropertyType.HIT);
            m_PropertyDef.text = GetAttrStr(PropertyType.DEF);
            m_PropertyDodge.text = GetAttrStr(PropertyType.MISS);
            m_PropertyLuck.text = GetAttrStr(PropertyType.Luck);
        }
        void OnUpdateSpecialAttr()
        {
            m_PropertyAtkSpeed.text = GetAttrStr(PropertyType.ATKSPEED);
            m_PropertyMoveSpeed.text = GetAttrStr(PropertyType.MoveSpeed);
            m_PropertyRealHurt.text = GetAttrStr(PropertyType.RealHurt);
            m_PropertyRealDef.text = GetAttrStr(PropertyType.RealResis);
            m_PropertyExtraHurt.text = GetAttrStr(PropertyType.PVPAddHurt);
            m_PropertyReduceHurt.text = GetAttrStr(PropertyType.PVPReduceHurt);
            m_PropertyCritOdd.text = GetAttrStr(PropertyType.CritChance);
            m_PropertyCritHurt.text = GetAttrStr(PropertyType.CritHurt);
            m_PropertyCritHurtOdd.text = GetAttrStr(PropertyType.HeartHit);
            m_PropertyCritHitHurt.text = GetAttrStr(PropertyType.HeartHurt);
        }
        private string GetAttrStr(PropertyType type)
        {
            PlayerPropertyConfig cfg = PlayerPropertyConfig.Get((int)type);
            float value = UIHelper.GetPropertyValue(type);
            return StringUtility.Contact(UIHelper.ReplaceLargeNum(UIHelper.ReplacePercentage(value, cfg.ISPercentage)), cfg.ISPercentage == 1 ? "%" : string.Empty);
        }
        void OnDisableRole()
        {
            UI3DModelExhibition.Instance.StopShow();
        }
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            functionButtonRole.onClick.AddListener(OnFuncRole);
            functionButtonMagician.onClick.AddListener(OnFuncMagician);
            m_GatherSoul.onClick.AddListener(GatherSoul);
            m_ReikiRoot.onClick.AddListener(ReikiRoot);
            m_FashionDress.onClick.AddListener(OpenFashionDress);
            m_PlayerPropertyBtn.onClick.AddListener(OnAttrExplainClick);
            m_TitleBtn.onClick.AddListener(OnDesignationClick);
            m_RenameBtn.onClick.AddListener(OnRenameClick);
            m_Btn_Elixir.onClick.AddListener(OnElixirClick);
            m_LeftBtn.onClick.AddListener(buttonGroup.TriggerLast);
            m_RightBtn.onClick.AddListener(buttonGroup.TriggerNext);
            m_CloseBtn.onClick.AddListener(CloseClick);
        }
        private void ReikiRoot()
        {
            CloseChild();
            WindowCenter.Instance.Open<ReikiRootWin>();
            functionOrder = m_ReikiRoot.order;
        }
        private void GatherSoul()
        {
            CloseChild();
            WindowCenter.Instance.Open<GatherSoulWin>();
            functionOrder = m_GatherSoul.order;
        }
        private void OpenFashionDress()
        {
            CloseChild();
            WindowCenter.Instance.Open<FashionDressWin>();
            functionOrder = m_FashionDress.order;
        }
        private void OnFuncMagician()
        {
            CloseChild();
            WindowCenter.Instance.Open<MagicianWin>();
            functionOrder = functionButtonMagician.order;
        }
        private void OnFuncRole()
        {
            CloseChild();
            m_RoleInfoRt.gameObject.SetActive(true);
            InitRole();
            functionOrder = 0;
        }
        protected override void OnPreOpen()
        {
            PlayerDatas.Instance.playerDataUpdateEvent += OnUpdateLvExp;
            PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerInfo;
            titleModel.OnRefreshGainTitle += OnRefreshTitle;
            PlayerDatas.Instance.worldLevelUpdateEvent += OnRefreshWorldLv;
            PlayerDatas.Instance.playerDataUpdateEvent += RefreshPlayerInfoEvent;
            packModel.refreshItemCountEvent += RefreshItemCountAct;
            base.AddListeners();
            SetFunctionListener(0, OnFuncRole);
            SetFunctionListener(1, ReikiRoot);
            SetFunctionListener(2, OpenFashionDress);
            SetFunctionListener(3, OnFuncMagician);
            SetFunctionListener(4, GatherSoul);
        }
        protected override void OnActived()
        {
            base.OnActived();
            buttonGroup.TriggerByOrder(functionOrder);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
            PlayerDatas.Instance.playerDataUpdateEvent -= OnUpdateLvExp;
            PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerInfo;
            titleModel.OnRefreshGainTitle -= OnRefreshTitle;
            PlayerDatas.Instance.worldLevelUpdateEvent -= OnRefreshWorldLv;
            packModel.refreshItemCountEvent -= RefreshItemCountAct;
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
            PlayerDatas.Instance.playerDataUpdateEvent -= RefreshPlayerInfoEvent;
            CloseChild();
            CloseSubWindows();
        }
        private void RefreshItemCountAct(PackType packType, int index, int arg3)
        private void ReikiRoot()
        {
            if (packType == PackType.Equip)
            {
                DisplayModel();
            }
            CloseSubWindows();
            WindowCenter.Instance.Open<ReikiRootWin>();
            functionOrder = 1;
        }
        private void OnRefreshWorldLv()
        private void GatherSoul()
        {
            int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.WorldLv).LimitLV;
            if (PlayerDatas.Instance.baseData.LV >= limit)
            {
                m_WorldExp.gameObject.SetActive(true);
                m_WorldExp.text = Language.Get("WordExpText", PlayerDatas.Instance.worldLv, Mathf.FloorToInt(UIHelper.ReplacePercentage((int)PlayerDatas.Instance.worldExpRate, 2)) + "%");
            }
            else
            {
                m_WorldExp.gameObject.SetActive(false);
            }
            CloseSubWindows();
            WindowCenter.Instance.Open<GatherSoulWin>();
            functionOrder = 4;
        }
        private void CloseChild()
        private void OpenFashionDress()
        {
            if (m_RoleInfoRt.gameObject.activeSelf)
            {
                OnDisableRole();
                m_RoleInfoRt.gameObject.SetActive(false);
            }
            var children = WindowConfig.Get().FindChildWindows("RolePanel");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
            }
            CloseSubWindows();
            WindowCenter.Instance.Open<FashionDressWin>();
            functionOrder = 2;
        }
        public StringBuilder m_StringBuilder = new StringBuilder();
        public string ReplaceLargeNum(float num)
        private void OnFuncMagician()
        {
            m_StringBuilder.Length = 0;
            float hm = (float)Math.Round(num / 100000000, 2);
            if (hm >= 1)
            {
                int _value = (int)hm;
                var _length = 3 - _value.ToString().Length;
                _length = Mathf.Max(0, _length);
                if (_length > 0)
                {
                    hm = (float)Math.Round(num / 100000000, _length);
                }
                decimal _checkValue = ((decimal)hm * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(hm.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
                m_StringBuilder.Append(Language.Get("L1070"));
                return m_StringBuilder.ToString();
            }
            float tt = (float)Math.Round(num / 10000, 2);
            if (tt >= 1)
            {
                int _value = (int)tt;
                var _length = 3 - _value.ToString().Length;
                if (_length > 0)
                {
                    tt = (float)Math.Round(num / 10000, _length);
                }
                _length = Mathf.Max(0, _length);
                decimal _checkValue = ((decimal)tt * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(tt.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
                m_StringBuilder.Append(Language.Get("L1071"));
                return m_StringBuilder.ToString();
            }
            if (m_StringBuilder.Length == 0)
            {
                num = (float)Math.Round(num, 2);
                int _value = (int)num;
                var _length = 3 - _value.ToString().Length;
                if (_length > 0)
                {
                    num = (float)Math.Round(num, _length);
                }
                _length = Mathf.Max(0, _length);
                decimal _checkValue = ((decimal)num * 1000 - _value * 1000) / 1000;
                var _decimal = Mathf.Max(0, _checkValue.ToString().Length - 2);
                m_StringBuilder.Append(num.ToString(StringUtility.Contact("f", _decimal > _length ? _length : _decimal)));
            }
            return m_StringBuilder.ToString();
            CloseSubWindows();
            WindowCenter.Instance.Open<MagicianWin>();
            functionOrder = 3;
        }
        private void OnFuncRole()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<RoleInfomationWin>();
            functionOrder = 0;
        }
    }
}
System/Rune/RunePanel.cs
@@ -86,7 +86,7 @@
        private void CloseChild()
        {
            var children = WindowConfig.Get().FindChildWindows("RunePanel");
            var children = WindowConfig.GetChildWindows("RunePanel");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Skill/SkillWin.cs
@@ -113,7 +113,7 @@
        void CloseChild()
        {
            var children = WindowConfig.Get().FindChildWindows("SkillWin");
            var children = WindowConfig.GetChildWindows("SkillWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Tip/PromoteDetailsWin.cs
@@ -78,7 +78,7 @@
                    WindowCenter.Instance.Open<RealmEquipWin>();
                    break;
                case RolePromoteModel.PromoteDetailType.AddPoint:
                    WindowCenter.Instance.Open<RolePanel>(false, 2);
                    WindowCenter.Instance.Open<RolePanel>(false, 1);
                    break;
                case RolePromoteModel.PromoteDetailType.EquipStrength:
                    //WindowCenter.Instance.Open<EquipReinforceWin>();
@@ -93,7 +93,7 @@
                    WindowCenter.Instance.Open<RunePanel>();
                    break;
                case RolePromoteModel.PromoteDetailType.GodWeapon:
                    WindowCenter.Instance.Open<RolePanel>(false, 1);
                    WindowCenter.Instance.Open<RolePanel>(false, 3);
                    break;
                case RolePromoteModel.PromoteDetailType.TreasurePotential:
                    break;
System/Treasure/TreasureBaseWin.cs
@@ -244,7 +244,7 @@
        private void Back()
        {
            var childrens = WindowConfig.Get().FindChildWindows("TreasureBaseWin");
            var childrens = WindowConfig.GetChildWindows("TreasureBaseWin");
            bool existAnyChildWindow = false;
            foreach (var window in childrens)
            {
@@ -327,7 +327,7 @@
        private void CloseSubWindows()
        {
            var childrens = WindowConfig.Get().FindChildWindows("TreasureBaseWin");
            var childrens = WindowConfig.GetChildWindows("TreasureBaseWin");
            foreach (var window in childrens)
            {
                WindowCenter.Instance.Close(window);
System/Vip/VipRechargeWin.cs
@@ -117,7 +117,7 @@
        private void CloseChildWin()
        {
            var children = WindowConfig.Get().FindChildWindows("VipRechargeWin");
            var children = WindowConfig.GetChildWindows("VipRechargeWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/Welfare/WelfareWin.cs
@@ -118,7 +118,7 @@
        #endregion
        private void CloseChildWin()
        {
            var children = WindowConfig.Get().FindChildWindows("WelfareWin");
            var children = WindowConfig.GetChildWindows("WelfareWin");
            foreach (var window in children)
            {
                WindowCenter.Instance.Close(window);
System/WindowBase/OneLevelWin.cs
New file
@@ -0,0 +1,104 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Sunday, April 28, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
namespace Snxxz.UI
{
    public class OneLevelWin : Window
    {
        Image m_TitleIcon;
        FunctionButtonGroup m_Group;
        Button m_Left;
        Button m_Right;
        Button m_Close;
        RectTransform m_SubWindowContainer;
        public RectTransform subWindowContainer { get { return m_SubWindowContainer; } }
        #region Built-in
        protected override void BindController()
        {
            m_TitleIcon = this.GetComponent<Image>("Pivot/Container_BackGround/Img_Title");
            m_Group = this.GetComponent<FunctionButtonGroup>("Pivot/Container_Functions");
            m_Left = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Left");
            m_Right = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Right");
            m_Close = this.GetComponent<Button>("Pivot/Container_Buttons/Btn_Close");
            m_SubWindowContainer = this.GetComponent<RectTransform>("Pivot/Container_SubWindow");
            var name = this.GetType().Name;
            var children = WindowConfig.GetChildWindows(name);
            foreach (var child in children)
            {
                var info = WindowConfig.GetWindowFunctionInfo(name, child);
                m_Group.AddFunction("FunctionButton_Pattern_1", info.order, info.functionId, Language.Get(info.titleKey), info.redPointId);
            }
            m_TitleIcon.SetSprite(WindowConfig.GetTitleIconKey(name));
            m_TitleIcon.SetNativeSize();
        }
        protected override void AddListeners()
        {
            m_Close.SetListener(() => { WindowCenter.Instance.Close(this.GetType().Name); });
            m_Left.SetListener(() => { m_Group.TriggerLast(); });
            m_Right.SetListener(() => { m_Group.TriggerNext(); });
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            m_Group.TriggerByOrder(functionOrder);
            m_Left.gameObject.SetActive(m_Group.unLockedCount > 1);
            m_Right.gameObject.SetActive(m_Group.unLockedCount > 1);
        }
        #endregion
        protected virtual void CloseSubWindows()
        {
            var subWindows = WindowConfig.GetChildWindows(this.GetType().Name);
            foreach (var window in subWindows)
            {
                WindowCenter.Instance.Close(window);
            }
        }
        protected void SetFunctionListener(int order, UnityAction callBack)
        {
            m_Group.SetFunctionListener(order, callBack);
        }
    }
}
System/WindowBase/OneLevelWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5463ece122afcd648bffd43c15a2db3a
timeCreated: 1556421570
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/WindowBase/Window.cs
@@ -46,6 +46,8 @@
            {
                if (!initialized)
                {
                    AddWindowPattern();
                    if (windowInfo.clickEmptyToClose && emptyCloseButton == null)
                    {
                        AddEmptyCloseResponser();
@@ -72,15 +74,24 @@
            {
                windowTimer = 0f;
                var parentName = string.Empty;
                if (WindowConfig.Get().FindParentWindow(this.gameObject.name, out parentName))
                if (WindowConfig.FindParentWindow(this.gameObject.name, out parentName))
                {
                    var parentWindow = WindowCenter.Instance.Get(parentName);
                    if (parentWindow != null)
                    if (parentWindow is OneLevelWin)
                    {
                        parent = (parentWindow as OneLevelWin).subWindowContainer;
                    }
                    else
                    {
                        parent = parentWindow.transform as RectTransform;
                    }
                    if (parent != null)
                    {
                        rectTransform.MatchWhith(parent);
                    }
                }
                OnPreOpen();
                WindowCenter.Instance.NotifyBeforeOpen(this);
            }
@@ -450,11 +461,11 @@
            try
            {
                var isChildWindow = WindowConfig.Get().IsChildWindow(this.gameObject.name);
                var isChildWindow = WindowConfig.IsChildWindow(this.gameObject.name);
                if (isChildWindow)
                {
                    var parentName = string.Empty;
                    WindowConfig.Get().FindParentWindow(this.gameObject.name, out parentName);
                    WindowConfig.FindParentWindow(this.gameObject.name, out parentName);
                    var parentWindow = WindowCenter.Instance.Get(parentName);
                    if (parentWindow != null && parentWindow.executedActiveWindow)
                    {
@@ -466,7 +477,7 @@
                {
                    OnActived();
                    executedActiveWindow = true;
                    var childWindows = WindowConfig.Get().FindChildWindows(this.gameObject.name);
                    var childWindows = WindowConfig.GetChildWindows(this.gameObject.name);
                    var isParentWindow = childWindows != null;
                    if (isParentWindow)
                    {
@@ -495,6 +506,16 @@
            }
        }
        private void AddWindowPattern()
        {
            var pattern = WindowConfig.GetWindowPattern(this.GetType().Name);
            if (!string.IsNullOrEmpty(pattern))
            {
                var instance = UIUtility.CreateWidget(pattern, "Pivot");
                instance.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
            }
        }
        private void AddEmptyCloseResponser()
        {
            var emptyClose = UIUtility.CreateWidget("InvisibleButton", "EmptyClose");
System/WindowBase/WindowCenter.cs
@@ -164,7 +164,7 @@
        public void Close(string name)
        {
            if (WindowConfig.Get().IsChildWindow(name))
            if (WindowConfig.IsChildWindow(name))
            {
                CloseImmediately(name);
            }
@@ -241,7 +241,7 @@
                        break;
                }
                isIgnore = isIgnore || WindowConfig.Get().IsChildWindow(name);
                isIgnore = isIgnore || WindowConfig.IsChildWindow(name);
                if (!isIgnore)
                {
                    if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
@@ -265,7 +265,7 @@
                    continue;
                }
                var isIgnore = WindowConfig.Get().IsChildWindow(name);
                var isIgnore = WindowConfig.IsChildWindow(name);
                if (isIgnore)
                {
                    continue;
@@ -314,7 +314,7 @@
                        break;
                }
                isIgnore = isIgnore || WindowConfig.Get().IsChildWindow(name);
                isIgnore = isIgnore || WindowConfig.IsChildWindow(name);
                if (!isIgnore)
                {
                    if (window.windowState == Window.WindowState.Opened || window.windowState == Window.WindowState.Opening)
System/WindowJump/WindowJumpMgr.cs
@@ -257,7 +257,7 @@
                SetJumpLogic<RealmWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.RolePoint:
                SetJumpLogic<RolePanel>(2);
                SetJumpLogic<RolePanel>(1);
                break;
            case JumpUIType.MainTask:
                TaskModel taskDatas = ModelCenter.Instance.GetModel<TaskModel>();
@@ -424,7 +424,7 @@
                SetJumpLogic<KnapSackWin>(_tagWinSearchModel.TABID);
                break;
            case JumpUIType.RebornOpenAddPoint:
                SetJumpLogic<RolePanel>(2);
                SetJumpLogic<RolePanel>(1);
                break;
            case JumpUIType.RebornOpenHourse:
                SetJumpLogic<PetWin>(_tagWinSearchModel.TABID);
UI/Common/FunctionButton.cs
@@ -60,6 +60,12 @@
            set { this.m_Title = value; }
        }
        [SerializeField] RedpointBehaviour m_Redpoint;
        public RedpointBehaviour redpoint {
            get { return m_Redpoint; }
            set { m_Redpoint = value; }
        }
        [SerializeField] Shadow m_Shadow;
        public Shadow shadow {
            get { return this.m_Shadow; }
@@ -159,7 +165,7 @@
        {
            if (state == TitleBtnState.Locked)
            {
                if(OnPointClickLockFunc != null)
                if (OnPointClickLockFunc != null)
                {
                    OnPointClickLockFunc(this.gameObject.name);
                }
UI/Common/FunctionButtonGroup.cs
@@ -6,6 +6,7 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.Events;
namespace Snxxz.UI
{
@@ -13,6 +14,7 @@
    public class FunctionButtonGroup : MonoBehaviour
    {
        [SerializeField] ScrollRect m_ScrollRect;
        [SerializeField] RectTransform m_Container;
        public int unLockedCount {
            get {
@@ -41,6 +43,11 @@
                orders.Add(button.order);
                orders.Sort(OrderCompare);
            }
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontal = functionButtons.Count > 5;
            }
        }
        public void UnRegister(FunctionButton button)
@@ -56,6 +63,10 @@
                orders.Sort(OrderCompare);
            }
            if (m_ScrollRect != null)
            {
                m_ScrollRect.horizontal = functionButtons.Count > 5;
            }
        }
        public void NotifyToggleOn(FunctionButton button)
@@ -172,6 +183,36 @@
        {
            return a < b ? -1 : 1;
        }
        public FunctionButton AddFunction(string pattern, int order, int functionId, string title, int redpointId)
        {
            if (m_Container == null)
            {
                return null;
            }
            var instance = UIUtility.CreateWidget(pattern, string.Concat("Function_", order));
            instance.transform.SetParentEx(this.m_Container, Vector3.zero, Quaternion.identity, Vector3.one);
            var functionButton = instance.GetComponent<FunctionButton>();
            functionButton.functionId = functionId;
            functionButton.order = order;
            functionButton.title.text = title;
            functionButton.group = this;
            functionButton.redpoint.redpointId = redpointId;
            functionButtons[order] = functionButton;
            return functionButton;
        }
        public void SetFunctionListener(int order, UnityAction callBack)
        {
            if (functionButtons.ContainsKey(order))
            {
                functionButtons[order].SetListener(callBack);
            }
        }
    }
}
UI/Common/WindowConfig.cs
@@ -6,25 +6,23 @@
[CreateAssetMenu(menuName = "Config/WindowConfig")]
public class WindowConfig : ScriptableObject
{
    public WindowTable[] windows;
    [NonSerialized] public Dictionary<string, List<string>> parentChildrenTable = new Dictionary<string, List<string>>();
    [NonSerialized] public List<string> childWindows = new List<string>();
    static WindowConfig config;
    public static WindowConfig Get()
    static WindowConfig Get()
    {
        if (config == null)
        {
            config = BuiltInLoader.LoadScriptableObject<WindowConfig>("WindowConfig");
            for (int i = 0; i < config.windows.Length; i++)
            foreach (var table in config.windows)
            {
                var table = config.windows[i];
                var children = config.parentChildrenTable[table.parent] = new List<string>();
                for (int j = 0; j < table.orderTables.Length; j++)
                foreach (var info in table.orderTables)
                {
                    children.Add(table.orderTables[j].window);
                    children.Add(info.window);
                }
                config.childWindows.AddRange(children);
@@ -39,53 +37,29 @@
        config = null;
    }
    public bool FindChildWindow(string _parent, int _order, out string _child)
    public static bool FindParentWindow(string child, out string parent)
    {
        for (int i = 0; i < windows.Length; i++)
        foreach (var table in Get().windows)
        {
            var table = windows[i];
            if (table.parent == _parent)
            foreach (var orderTable in table.orderTables)
            {
                for (int j = 0; j < table.orderTables.Length; j++)
                if (orderTable.window == child)
                {
                    if (table.orderTables[j].order == _order)
                    {
                        _child = table.orderTables[j].window;
                        return true;
                    }
                }
            }
        }
        _child = string.Empty;
        return false;
    }
    public bool FindParentWindow(string _child, out string _parent)
    {
        for (int i = 0; i < windows.Length; i++)
        {
            var table = windows[i];
            for (int j = 0; j < table.orderTables.Length; j++)
            {
                var orderTable = table.orderTables[j];
                if (orderTable.window == _child)
                {
                    _parent = table.parent;
                    parent = table.parent;
                    return true;
                }
            }
        }
        _parent = string.Empty;
        parent = string.Empty;
        return false;
    }
    public List<string> FindChildWindows(string _parent)
    public static List<string> GetChildWindows(string parent)
    {
        if (parentChildrenTable.ContainsKey(_parent))
        if (Get().parentChildrenTable.ContainsKey(parent))
        {
            return parentChildrenTable[_parent];
            return Get().parentChildrenTable[parent];
        }
        else
        {
@@ -93,15 +67,89 @@
        }
    }
    public bool IsChildWindow(string _name)
    public static bool IsParentWindow(string name)
    {
        return childWindows.Contains(_name);
        foreach (var window in Get().windows)
        {
            if (window.parent == name)
            {
                return true;
            }
        }
        return false;
    }
    public static bool IsChildWindow(string name)
    {
        return Get().childWindows.Contains(name);
    }
    public static WindowLevel GetWindowLevel(string name)
    {
        foreach (var window in Get().windows)
        {
            if (window.parent == name)
            {
                return window.level;
            }
        }
        return WindowLevel.None;
    }
    public static string GetWindowPattern(string name)
    {
        foreach (var window in Get().windows)
        {
            if (window.parent == name)
            {
                return window.pattern;
            }
        }
        return string.Empty;
    }
    public static OrderTable GetWindowFunctionInfo(string parent, string child)
    {
        foreach (var table in Get().windows)
        {
            if (table.parent == parent)
            {
                foreach (var info in table.orderTables)
                {
                    if (info.window == child)
                    {
                        return info;
                    }
                }
            }
        }
        return default(OrderTable);
    }
    public static string GetTitleIconKey(string name)
    {
        foreach (var window in Get().windows)
        {
            if (window.parent == name)
            {
                return window.titleIconKey;
            }
        }
        return string.Empty;
    }
    [Serializable]
    public struct WindowTable
    {
        public string parent;
        public string titleIconKey;
        public WindowLevel level;
        public string pattern;
        public OrderTable[] orderTables;
    }
@@ -109,7 +157,18 @@
    public struct OrderTable
    {
        public int order;
        public int functionId;
        public int redPointId;
        public string titleKey;
        public string window;
    }
    public enum WindowLevel
    {
        None,
        OneLevel,
        SecondLevel,
        ThirdLevel,
    }
}