少年修仙传客户端代码仓库
client_linchunjie
2019-03-15 4259c2767ef9feb084b538cd6ebc271fd2f5745b
3335 排行榜代码修改
1 文件已复制
1个文件已删除
1 文件已重命名
2个文件已添加
21个文件已修改
1418 ■■■■ 已修改文件
Core/GameEngine/Model/Player/PlayerDatas.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/Rank/PlayerRankData.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H10_Billboard/DTC1001_tagBillboard.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/PlayerDatasWrap.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUIFairylandCeremonyModelWrap.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUIImpactRankModelWrap.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUINewYearFairylandCeremonyModelWrap.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/SnxxzUIRankModelWrap.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairylandCeremony/CeremonyOutOfPrintWin.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairylandCeremony/FairylandCeremonyModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyTower/JadeDynastyTowerWin.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/NewYearFairylandCeremony/NewYearCeremonyOutOfPrintWin.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/NewYearFairylandCeremony/NewYearFairylandCeremonyModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactBillRankCell.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactBillRankWin.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactRankModel.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/OpenServerActivity/ImpactRankWin.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankHeadCell.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankModel.cs 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankPanel.cs 562 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankSubTypeCell.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankSubTypeCell.cs.meta 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankTypeCell.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Rank/RankTypeCell.cs.meta 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SystemSetting/ActivitiesPushModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -22,9 +22,6 @@
    PlayerSkillDatas m_Skill = new PlayerSkillDatas();
    public PlayerSkillDatas skill { get { return m_Skill; } }
    PlayerRankData m_Rank = new PlayerRankData();
    public PlayerRankData rank { get { return m_Rank; } }
    StrengthenModel strengthengmodel { get { return ModelCenter.Instance.GetModel<StrengthenModel>(); } }
    PlayerMethodData method { get { return  ModelCenter.Instance.GetModel<PlayerMethodData>(); } }
    StoreModel StoreModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } }
Core/GameEngine/Model/Player/Rank/PlayerRankData.cs
File was deleted
Core/NetworkPackage/DTCFile/ServerPack/H10_Billboard/DTC1001_tagBillboard.cs
@@ -1,22 +1,22 @@
using UnityEngine;
using System.Collections;
//10 01 排行榜信息#tagBillboard// 对性能影响比较大, 需要限制tick
public class DTC1001_tagBillboard : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        H1001_tagBillboard vNetData = vNetPack as H1001_tagBillboard;
        if (vNetData != null) {
            PlayerDatas.Instance.rank.OnUpdateRank(vNetData);
        }
    }
}
using UnityEngine;
using System.Collections;
using Snxxz.UI;
//10 01 排行榜信息#tagBillboard// 对性能影响比较大, 需要限制tick
public class DTC1001_tagBillboard : DtcBasic
{
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        H1001_tagBillboard vNetData = vNetPack as H1001_tagBillboard;
        ModelCenter.Instance.GetModel<RankModel>().ReceivePackage(vNetData);
    }
}
Lua/Gen/PlayerDatasWrap.cs
@@ -49,7 +49,6 @@
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "baseData", _g_get_baseData);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "extersion", _g_get_extersion);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "skill", _g_get_skill);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "rank", _g_get_rank);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "totalExpRate", _g_get_totalExpRate);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "worldLv", _g_get_worldLv);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "worldExpRate", _g_get_worldExpRate);
@@ -585,20 +584,6 @@
            
                PlayerDatas gen_to_be_invoked = (PlayerDatas)translator.FastGetCSObj(L, 1);
                translator.Push(L, gen_to_be_invoked.skill);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            return 1;
        }
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _g_get_rank(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
                PlayerDatas gen_to_be_invoked = (PlayerDatas)translator.FastGetCSObj(L, 1);
                translator.Push(L, gen_to_be_invoked.rank);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
Lua/Gen/SnxxzUIFairylandCeremonyModelWrap.cs
@@ -439,7 +439,7 @@
            
                
                {
                    PlayerRankData.RankType _type;translator.Get(L, 2, out _type);
                    RankType _type;translator.Get(L, 2, out _type);
                    
                    gen_to_be_invoked.SendGetRankInfo( _type );
                    
Lua/Gen/SnxxzUIImpactRankModelWrap.cs
@@ -662,7 +662,7 @@
                {
                    int __type = LuaAPI.xlua_tointeger(L, 2);
                    
                        PlayerRankData.RankType gen_ret = gen_to_be_invoked.GetRankType( __type );
                        RankType gen_ret = gen_to_be_invoked.GetRankType( __type );
                        translator.Push(L, gen_ret);
                    
                    
@@ -1203,7 +1203,7 @@
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
            
                Snxxz.UI.ImpactRankModel gen_to_be_invoked = (Snxxz.UI.ImpactRankModel)translator.FastGetCSObj(L, 1);
                PlayerRankData.RankType gen_value;translator.Get(L, 2, out gen_value);
                RankType gen_value;translator.Get(L, 2, out gen_value);
                gen_to_be_invoked.presentBillRankType = gen_value;
            
            } catch(System.Exception gen_e) {
Lua/Gen/SnxxzUINewYearFairylandCeremonyModelWrap.cs
@@ -439,7 +439,7 @@
            
                
                {
                    PlayerRankData.RankType _type;translator.Get(L, 2, out _type);
                    RankType _type;translator.Get(L, 2, out _type);
                    
                    gen_to_be_invoked.SendGetRankInfo( _type );
                    
Lua/Gen/SnxxzUIRankModelWrap.cs
@@ -29,11 +29,8 @@
            Utils.RegisterFunc(L, Utils.METHOD_IDX, "SendBegRank", _m_SendBegRank);
            
            
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "rankType", _g_get_rankType);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "rankList", _g_get_rankList);
            Utils.RegisterFunc(L, Utils.GETTER_IDX, "jumpRankType", _g_get_jumpRankType);
            
            Utils.RegisterFunc(L, Utils.SETTER_IDX, "rankType", _s_set_rankType);
            Utils.RegisterFunc(L, Utils.SETTER_IDX, "jumpRankType", _s_set_jumpRankType);
            
            
@@ -174,7 +171,7 @@
            
                
                {
                    PlayerRankData.RankType _rankType;translator.Get(L, 2, out _rankType);
                    RankType _rankType;translator.Get(L, 2, out _rankType);
                    
                    gen_to_be_invoked.SendBegRank( _rankType );
                    
@@ -187,37 +184,6 @@
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            
        }
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _g_get_rankType(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
                Snxxz.UI.RankModel gen_to_be_invoked = (Snxxz.UI.RankModel)translator.FastGetCSObj(L, 1);
                LuaAPI.xlua_pushinteger(L, gen_to_be_invoked.rankType);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            return 1;
        }
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _g_get_rankList(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
                Snxxz.UI.RankModel gen_to_be_invoked = (Snxxz.UI.RankModel)translator.FastGetCSObj(L, 1);
                translator.Push(L, gen_to_be_invoked.rankList);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            return 1;
        }
        
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
@@ -234,22 +200,6 @@
            return 1;
        }
        
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _s_set_rankType(RealStatePtr L)
        {
            try {
                ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
                Snxxz.UI.RankModel gen_to_be_invoked = (Snxxz.UI.RankModel)translator.FastGetCSObj(L, 1);
                gen_to_be_invoked.rankType = LuaAPI.xlua_tointeger(L, 2);
            } catch(System.Exception gen_e) {
                return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
            }
            return 0;
        }
        
        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
        static int _s_set_jumpRankType(RealStatePtr L)
System/FairylandCeremony/CeremonyOutOfPrintWin.cs
@@ -20,6 +20,7 @@
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        FairylandCeremonyModel ceremonyModel { get { return ModelCenter.Instance.GetModel<FairylandCeremonyModel>(); } }
        KingFairyModel kingFairyModel { get { return ModelCenter.Instance.GetModel<KingFairyModel>(); } }
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        protected override void BindController()
        {
@@ -33,7 +34,7 @@
        protected override void OnPreOpen()
        {
            GlobalTimeEvent.Instance.secondEvent += RefreshSecond;
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList;
            rankModel.onRankRefresh += OnRefreshRankList;
            Init();
        }
@@ -45,7 +46,7 @@
        protected override void OnPreClose()
        {
            GlobalTimeEvent.Instance.secondEvent -= RefreshSecond;
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRankList;
            rankModel.onRankRefresh -= OnRefreshRankList;
        }
        protected override void OnAfterClose()
@@ -55,7 +56,7 @@
        private void Init()
        {
            ceremonyModel.SendGetRankInfo(PlayerRankData.RankType.Def_BT_FCCostGold);
            ceremonyModel.SendGetRankInfo(RankType.Def_BT_FCCostGold);
            SetRankAward(firstItemlist,ceremonyModel.GetRankAwardByLv(1));
            SetRankAward(secondItemlist, ceremonyModel.GetRankAwardByLv(2));
            SetRankAward(thirdItemlist, ceremonyModel.GetRankAwardByLv(3));
@@ -66,14 +67,15 @@
        private void OnRefreshRankList(int type)
        {
            if (type != (int)PlayerRankData.RankType.Def_BT_FCCostGold) return;
            if (type != (int)RankType.Def_BT_FCCostGold) return;
            RefreshRankInfo();
        }
        private void RefreshRankInfo()
        {
            List<PlayerRankData.RankData> list = PlayerDatas.Instance.rank.GetRankList((int)PlayerRankData.RankType.Def_BT_FCCostGold);
            List<RankData> list = null;
            rankModel.TryGetRanks((int)RankType.Def_BT_FCCostGold, out list);
            firstNameText.text = Language.Get("CeremoneyOutOfPrint");
            secondNameText.text = Language.Get("CeremoneyOutOfPrint");
            thirdNameText.text = Language.Get("CeremoneyOutOfPrint");
@@ -82,20 +84,20 @@
            {
                if (list.Count > 0)
                {
                    firstNameText.text = list[0].Name1;
                    SetRankEffect(0,(int)list[0].ID);
                    firstNameText.text = list[0].name1;
                    SetRankEffect(0,(int)list[0].id);
                }
                if (list.Count > 1)
                {
                    secondNameText.text = list[1].Name1;
                    SetRankEffect(1, (int)list[1].ID);
                    secondNameText.text = list[1].name1;
                    SetRankEffect(1, (int)list[1].id);
                }
                if (list.Count > 2)
                {
                    thirdNameText.text = list[2].Name1;
                    SetRankEffect(2, (int)list[2].ID);
                    thirdNameText.text = list[2].name1;
                    SetRankEffect(2, (int)list[2].id);
                }
            }
        }
System/FairylandCeremony/FairylandCeremonyModel.cs
@@ -273,7 +273,7 @@
            GameNetSystem.Instance.SendInfo(getReward);
        }
        public void SendGetRankInfo(PlayerRankData.RankType type)
        public void SendGetRankInfo(RankType type)
        {
            C1001_tagCWatchBillboard rankPack = new C1001_tagCWatchBillboard();
            rankPack.Type = (byte)type;
System/JadeDynastyTower/JadeDynastyTowerWin.cs
@@ -26,6 +26,7 @@
        JadeDynastyTowerModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyTowerModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        ChallengeButtonShowState challengeButtonShowState = ChallengeButtonShowState.Normal;
        float timer = 0f;
@@ -42,17 +43,17 @@
        protected override void OnPreOpen()
        {
            model.ConfirmRedpoint02();
            ModelCenter.Instance.GetModel<RankModel>().SendBegRank(PlayerRankData.RankType.JadeDynastyTower);
            ModelCenter.Instance.GetModel<RankModel>().SendBegRank(RankType.JadeDynastyTower);
        }
        protected override void OnAfterOpen()
        {
            PlayerDatas.Instance.rank.OnRefreshRank += DisplayRankInfo;
            rankModel.onRankRefresh += DisplayRankInfo;
        }
        protected override void OnPreClose()
        {
            PlayerDatas.Instance.rank.OnRefreshRank -= DisplayRankInfo;
            rankModel.onRankRefresh -= DisplayRankInfo;
        }
        protected override void OnAfterClose()
@@ -127,7 +128,8 @@
        private void DisplayRankInfo(int type)
        {
            var rankInfos = new JadeDynastyTowerRankBehaviour.RankInfo[3];
            var rankDatas = PlayerDatas.Instance.rank.GetRankList(23);
            List<RankData> rankDatas = null;
            rankModel.TryGetRanks(23, out rankDatas);
            if (rankDatas != null)
            {
                for (var i = 0; i < Mathf.Min(3, rankDatas.Count); i++)
@@ -135,15 +137,22 @@
                    var data = rankDatas[i];
                    rankInfos[i] = new JadeDynastyTowerRankBehaviour.RankInfo()
                    {
                        name = data.Name1,
                        name = data.name1,
                        floor = (int)data.cmpValue,
                        time = (int)data.cmpValue2
                    };
                }
            }
            var myRank = PlayerDatas.Instance.rank.GetSelfRank(23);
            m_RankBehaviour.Display(rankInfos, myRank);
            var myRank = 0;
            if (rankModel.TryGetMyRank(23, out myRank))
            {
                m_RankBehaviour.Display(rankInfos, myRank);
            }
            else
            {
                m_RankBehaviour.Display(rankInfos, -1);
            }
        }
        private void Challenge()
System/NewYearFairylandCeremony/NewYearCeremonyOutOfPrintWin.cs
@@ -20,6 +20,7 @@
        ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } }
        NewYearFairylandCeremonyModel ceremonyModel { get { return ModelCenter.Instance.GetModel<NewYearFairylandCeremonyModel>(); } }
        KingFairyModel kingFairyModel { get { return ModelCenter.Instance.GetModel<KingFairyModel>(); } }
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        protected override void BindController()
        {
@@ -33,7 +34,7 @@
        protected override void OnPreOpen()
        {
            GlobalTimeEvent.Instance.secondEvent += RefreshSecond;
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList;
            rankModel.onRankRefresh += OnRefreshRankList;
            Init();
        }
@@ -45,7 +46,7 @@
        protected override void OnPreClose()
        {
            GlobalTimeEvent.Instance.secondEvent -= RefreshSecond;
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRankList;
            rankModel.onRankRefresh -= OnRefreshRankList;
        }
        protected override void OnAfterClose()
@@ -55,7 +56,7 @@
        private void Init()
        {
            ceremonyModel.SendGetRankInfo(PlayerRankData.RankType.Def_BT_NewFCCostGold);
            ceremonyModel.SendGetRankInfo(RankType.Def_BT_NewFCCostGold);
            SetRankAward(firstItemlist,ceremonyModel.GetRankAwardByLv(1));
            SetRankAward(secondItemlist, ceremonyModel.GetRankAwardByLv(2));
            SetRankAward(thirdItemlist, ceremonyModel.GetRankAwardByLv(3));
@@ -66,14 +67,15 @@
        private void OnRefreshRankList(int type)
        {
            if (type != (int)PlayerRankData.RankType.Def_BT_NewFCCostGold) return;
            if (type != (int)RankType.Def_BT_NewFCCostGold) return;
            RefreshRankInfo();
        }
        private void RefreshRankInfo()
        {
            List<PlayerRankData.RankData> list = PlayerDatas.Instance.rank.GetRankList((int)PlayerRankData.RankType.Def_BT_NewFCCostGold);
            List<RankData> list = null;
            rankModel.TryGetRanks((int)RankType.Def_BT_NewFCCostGold, out list);
            firstNameText.text = Language.Get("CeremoneyOutOfPrint");
            secondNameText.text = Language.Get("CeremoneyOutOfPrint");
            thirdNameText.text = Language.Get("CeremoneyOutOfPrint");
@@ -82,20 +84,20 @@
            {
                if (list.Count > 0)
                {
                    firstNameText.text = list[0].Name1;
                    SetRankEffect(0,(int)list[0].ID);
                    firstNameText.text = list[0].name1;
                    SetRankEffect(0,(int)list[0].id);
                }
                if (list.Count > 1)
                {
                    secondNameText.text = list[1].Name1;
                    SetRankEffect(1, (int)list[1].ID);
                    secondNameText.text = list[1].name1;
                    SetRankEffect(1, (int)list[1].id);
                }
                if (list.Count > 2)
                {
                    thirdNameText.text = list[2].Name1;
                    SetRankEffect(2, (int)list[2].ID);
                    thirdNameText.text = list[2].name1;
                    SetRankEffect(2, (int)list[2].id);
                }
            }
        }
System/NewYearFairylandCeremony/NewYearFairylandCeremonyModel.cs
@@ -154,7 +154,7 @@
            GameNetSystem.Instance.SendInfo(getReward);
        }
        public void SendGetRankInfo(PlayerRankData.RankType type)
        public void SendGetRankInfo(RankType type)
        {
            C1001_tagCWatchBillboard rankPack = new C1001_tagCWatchBillboard();
            rankPack.Type = (byte)type;
System/OpenServerActivity/ImpactBillRankCell.cs
@@ -34,6 +34,8 @@
            }
        }
        ImpactRankModel model { get { return ModelCenter.Instance.GetModel<ImpactRankModel>(); } }
        public override void Refresh(CellView cell)
        {
            int index = cell.index;
@@ -49,19 +51,23 @@
                m_RankTxt.text = (index + 1).ToString();
            }
            PlayerRankData.RankData data = null;
            if (rankModel.rankList != null && index < rankModel.rankList.Count)
            {
                data = rankModel.rankList[index];
            RankData data = null;
            List<RankData> rankDatas = null;
            if (rankModel.TryGetRanks((int)model.presentBillRankType, out rankDatas))
            {
                if (index < rankDatas.Count)
                {
                    data = rankDatas[index];
                }
            }
            m_Compare.gameObject.SetActive(true);
            m_CompareImg.gameObject.SetActive(false);
            if (data != null)
            {
                m_NameTxt.text = data.Name1;
                switch ((PlayerRankData.RankType)data.type)
                m_NameTxt.text = data.name1;
                switch ((RankType)data.type)
                {
                    case PlayerRankData.RankType.OpenServerRealm:
                    case RankType.OpenServerRealm:
                        m_Compare.gameObject.SetActive(data.cmpValue == 0);
                        m_CompareImg.gameObject.SetActive(data.cmpValue > 0);
                        var _realmCfg = RealmConfig.Get((int)data.cmpValue);
@@ -71,7 +77,7 @@
                            m_CompareImg.SetNativeSize();
                        }
                        break;
                    case PlayerRankData.RankType.OpenServerRecharge:
                    case RankType.OpenServerRecharge:
                        m_Compare.text = (data.cmpValue / 100).ToString();
                        break;
                    default:
@@ -81,12 +87,12 @@
                m_RankBtn.onClick.RemoveAllListeners();
                m_RankBtn.onClick.AddListener(() =>
                {
                    if (data.ID == PlayerDatas.Instance.baseData.PlayerID)
                    if (data.id == PlayerDatas.Instance.baseData.PlayerID)
                    {
                        SysNotifyMgr.Instance.ShowTip("SeePlayer_Cannot");
                        return;
                    }
                    particularModel.ViewRoleEquip((int)data.ID);
                    particularModel.ViewRoleEquip((int)data.id);
                });
            }
            else
System/OpenServerActivity/ImpactBillRankWin.cs
@@ -9,7 +9,8 @@
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI {
namespace Snxxz.UI
{
    public class ImpactBillRankWin : Window
    {
@@ -27,6 +28,8 @@
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<ImpactRankModel>());
            }
        }
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        #region Built-in
        protected override void BindController()
        {
@@ -39,7 +42,7 @@
        protected override void OnPreOpen()
        {
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRank;
            rankModel.onRankRefresh += OnRefreshRank;
            OnRefreshRank((int)model.presentBillRankType);
            RefreshRankType();
        }
@@ -50,7 +53,7 @@
        protected override void OnPreClose()
        {
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRank;
            rankModel.onRankRefresh -= OnRefreshRank;
        }
        protected override void OnAfterClose()
@@ -91,7 +94,11 @@
                m_RankCtrl.m_Scorller.RefreshActiveCellViews();
                m_RankCtrl.JumpIndex(0);
            }
            int rank = PlayerDatas.Instance.rank.GetSelfRank(type);
            var rank = 0;
            if (!rankModel.TryGetMyRank(type, out rank))
            {
                rank = -1;
            }
            if (rank == -1)
            {
                m_SelfRank.text = Language.Get("L1045");
System/OpenServerActivity/ImpactRankModel.cs
@@ -10,10 +10,13 @@
    [XLua.LuaCallCSharp]
    public class ImpactRankModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
    {
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        public override void Init()
        {
            ParseConfig();
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRank;
            rankModel.onRankRefresh += OnRefreshRank;
            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
            OpenServerActivityCenter.Instance.Register(0, this);
@@ -21,7 +24,7 @@
        public override void UnInit()
        {
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRank;
            rankModel.onRankRefresh -= OnRefreshRank;
            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
        }
@@ -72,8 +75,8 @@
        private void OnRefreshRank(int type)
        {
            if (type >= (int)PlayerRankData.RankType.OpenServerStrengthen
                && type <= (int)PlayerRankData.RankType.OpenServerPet)
            if (type >= (int)RankType.OpenServerStrengthen
                && type <= (int)RankType.OpenServerPet)
            {
                foreach (var _type in m_Redpoints.Keys)
                {
@@ -320,7 +323,11 @@
            {
                return false;
            }
            var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)GetRankType(_type));
            var _rank = 0;
            if (!rankModel.TryGetMyRank((int)GetRankType(_type), out _rank))
            {
                _rank = -1;
            }
            if (_rank == -1)
            {
                return false;
@@ -355,32 +362,32 @@
            return impactRankTypeOpenDict.ContainsKey(_type);
        }
        public PlayerRankData.RankType GetRankType(int _type)
        public RankType GetRankType(int _type)
        {
            switch (_type)
            {
                case 2:
                    return PlayerRankData.RankType.OpenServerMount;
                    return RankType.OpenServerMount;
                case 1:
                    return PlayerRankData.RankType.OpenServerStrengthen;
                    return RankType.OpenServerStrengthen;
                case 3:
                    return PlayerRankData.RankType.OpenServerGem;
                    return RankType.OpenServerGem;
                case 4:
                    return PlayerRankData.RankType.OpenServerLv;
                    return RankType.OpenServerLv;
                case 5:
                    return PlayerRankData.RankType.OpenServerRealm;
                    return RankType.OpenServerRealm;
                case 6:
                    return PlayerRankData.RankType.OpenServerFightPower;
                    return RankType.OpenServerFightPower;
                case 7:
                    return PlayerRankData.RankType.OpenServerRune;
                    return RankType.OpenServerRune;
                case 8:
                    return PlayerRankData.RankType.OpenServerGodWeapon;
                    return RankType.OpenServerGodWeapon;
                case 9:
                    return PlayerRankData.RankType.OpenServerRecharge;
                    return RankType.OpenServerRecharge;
                case 10:
                    return PlayerRankData.RankType.OpenServerPet;
                    return RankType.OpenServerPet;
            }
            return PlayerRankData.RankType.OpenServerMount;
            return RankType.OpenServerMount;
        }
        public struct OSCbillBoardCondition
@@ -437,8 +444,8 @@
            }
        }
        private PlayerRankData.RankType m_PresentBillRankType = PlayerRankData.RankType.OpenServerMount;
        public PlayerRankData.RankType presentBillRankType
        private RankType m_PresentBillRankType = RankType.OpenServerMount;
        public RankType presentBillRankType
        {
            get { return m_PresentBillRankType; }
            set
@@ -563,7 +570,11 @@
                    var _cfg = GetRankAwardConfig(_type, i);
                    var _start = _cfg.RankA;
                    var _end = _cfg.RankB;
                    var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)GetRankType(_type));
                    var _rank = 0;
                    if (!rankModel.TryGetMyRank((int)GetRankType(_type), out _rank))
                    {
                        _rank = -1;
                    }
                    if (_rank != -1 && _rank >= _start
                        && _rank <= _end && !_playerData.billAwardGet)
                    {
@@ -615,7 +626,11 @@
                    var _cfg = GetRankAwardConfig(_type, i);
                    var _start = _cfg.RankA;
                    var _end = _cfg.RankB;
                    var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)GetRankType(_type));
                    var _rank = 0;
                    if (!rankModel.TryGetMyRank((int)GetRankType(_type), out _rank))
                    {
                        _rank = -1;
                    }
                    if (_rank != -1 && _rank >= _start
                        && _rank <= _end && !_playerData.billAwardGet)
                    {
System/OpenServerActivity/ImpactRankWin.cs
@@ -58,7 +58,7 @@
        {
            TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
            model.OnSelectRankTypeEvent += OnSelectRankTypeEvent;
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList;
            rankModel.onRankRefresh += OnRefreshRankList;
            model.OnAwardGetEvent += OnAwardGetEvent;
            m_ActivityCloseList.Clear();
            m_ActivityCloseTimeDict.Clear();
@@ -79,7 +79,7 @@
        {
            TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
            model.OnSelectRankTypeEvent -= OnSelectRankTypeEvent;
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRankList;
            rankModel.onRankRefresh -= OnRefreshRankList;
            model.OnAwardGetEvent -= OnAwardGetEvent;
        }
@@ -117,7 +117,6 @@
        {
            if (type == (int)model.presentBillRankType)
            {
                rankModel.rankType = type;
                UpdateRanks();
            }
        }
@@ -225,7 +224,11 @@
            }
            else
            {
                var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)model.GetRankType(model.presentSelectType));
                var _rank = 0;
                if(!rankModel.TryGetMyRank((int)model.GetRankType(model.presentSelectType),out _rank))
                {
                    _rank = -1;
                }
                if (_rank == -1)
                {
                    m_RankTxt.text = Language.Get("FamilyMatchUnBeOnList");
@@ -240,7 +243,7 @@
            var _hasData = model.TryGetOpenServerPlayerData(model.presentSelectType, out _playerData);
            switch (model.GetRankType(model.presentSelectType))
            {
                case PlayerRankData.RankType.OpenServerRealm:
                case RankType.OpenServerRealm:
                    m_TargetImg.gameObject.SetActive(_hasData && _playerData.value >= 0);
                    m_TotalTargetValue.gameObject.SetActive(!_hasData);
                    if (_hasData && _playerData.value >= 0)
@@ -352,7 +355,11 @@
                    {
                        var _start = _billRankCfg.RankA;
                        var _end = _billRankCfg.RankB;
                        var _rank = PlayerDatas.Instance.rank.GetSelfRank((int)model.GetRankType(model.presentSelectType));
                        var _rank = 0;
                        if (!rankModel.TryGetMyRank((int)model.GetRankType(model.presentSelectType), out _rank))
                        {
                            _rank = -1;
                        }
                        if (_rank == -1 || _rank < _start || _rank > _end)
                        {
                            _cell.unCompleteImg.gameObject.SetActive(!model.InImpactRank(model.presentSelectType));
@@ -460,7 +467,6 @@
                SysNotifyMgr.Instance.ShowTip("FunctionNotOpen", Language.Get(StringUtility.Contact("ImpactRankType_", model.presentSelectType)));
                return;
            }
            ModelCenter.Instance.GetModel<RankModel>().rankType = (int)model.presentBillRankType;
            WindowCenter.Instance.Open<ImpactBillRankWin>();
        }
System/Rank/RankHeadCell.cs
@@ -8,14 +8,6 @@
{
    public class RankHeadCell : ScrollerUI
    {
        private RankModel m_Model;
        private RankModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RankModel>());
            }
        }
        [SerializeField] Button rankBtn;
        [SerializeField] Image rankBg;
        [SerializeField] Image rankImgBg;
@@ -28,46 +20,36 @@
        [SerializeField] RectTransform m_ContainerNameMiddle;
        [SerializeField] RectTransform m_ContainerNameRight;
        RankModel model { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        public override void Refresh(CellView cell)
        {
            int index = cell.index;
            rankImgBg.gameObject.SetActive(index < 3);
            rankNumText.gameObject.SetActive(index >= 3);
            rankNumText.text = (index + 1).ToString();
            if (index < 3)
            {
                rankImgBg.gameObject.SetActive(true);
                if (index == 0)
                {
                    rankImgBg.SetSprite("Rank_First");
                }
                else if (index == 1)
                {
                    rankImgBg.SetSprite("Rank_Second");
                }
                else if (index == 2)
                {
                    rankImgBg.SetSprite("Rank_Third");
                }
                rankNumText.gameObject.SetActive(false);
            }
            else
            {
                rankImgBg.gameObject.SetActive(false);
                rankNumText.text = (index + 1).ToString();
                rankNumText.gameObject.SetActive(true);
                rankImgBg.SetSprite(index == 0 ? "Rank_First" : index == 1 ? "Rank_Second" : "Rank_Third");
            }
            PlayerRankData.RankData data = null;
            if (model.rankList != null && index < model.rankList.Count)
            RankData data = null;
            List<RankData> rankDatas = null;
            model.TryGetRanks(model.selectRankType, out rankDatas);
            if (rankDatas != null && index < rankDatas.Count)
            {
                data = model.rankList[index];
                data = rankDatas[index];
            }
            realmImg.gameObject.SetActive(false);
            m_CompareImg.gameObject.SetActive(false);
            textName.rectTransform.SetParent(model.rankType != (int)PlayerRankData.RankType.Realm ? m_ContainerNameRight : m_ContainerNameMiddle);
            textName.rectTransform.SetParent(model.selectRankType != (int)RankType.Realm ? m_ContainerNameRight : m_ContainerNameMiddle);
            textName.rectTransform.localPosition = Vector3.zero;
            rankWhat.gameObject.SetActive(true);
            if (data != null)
            {
                textName.text = data.Name1;
                textName.text = data.name1;
                string jobStr = data.subType.ToString();
                int occupa = 1;
                int.TryParse(jobStr[jobStr.Length - 1].ToString(), out occupa);
@@ -75,9 +57,9 @@
                int.TryParse(jobStr.Substring(0, jobStr.Length - 1), out classLv);
                jobText.text = OccupationNameConfig.GetOccupationName(occupa, classLv);
                int realmLv = 0;
                switch ((PlayerRankData.RankType)data.type)
                switch ((RankType)data.type)
                {
                    case PlayerRankData.RankType.RuneTower:
                    case RankType.RuneTower:
                        var _runeTowerFloorCfg = RuneTowerFloorConfig.Get((int)data.cmpValue);
                        if (_runeTowerFloorCfg == null)
                        {
@@ -100,17 +82,17 @@
                        }
                        realmLv = (int)data.value1;
                        break;
                    case PlayerRankData.RankType.OfflineExp:
                    case RankType.OfflineExp:
                        ulong _expRate = (ulong)data.cmpValue * 100000000 + data.cmpValue2;
                        rankWhat.text = UIHelper.ReplaceLargeNum(_expRate);
                        realmLv = (int)data.value1;
                        break;
                    case PlayerRankData.RankType.Realm:
                    case RankType.Realm:
                        rankWhat.gameObject.SetActive(false);
                        //rankWhat.text = data.cmpValue2.ToString();
                        realmLv = (int)data.cmpValue;
                        break;
                    case PlayerRankData.RankType.JadeDynastyTower:
                    case RankType.JadeDynastyTower:
                        realmLv = (int)data.value1;
                        jobText.text = data.cmpValue +Language.Get("JadeDynastyBossDungeon_Floor") ;
                        rankWhat.text =(10000-data.cmpValue2) +Language.Get("RealmWin_Bewrite_35") ;
@@ -123,15 +105,15 @@
                RealmConfig presentCfg = RealmConfig.Get(realmLv);
                if (presentCfg != null)
                {
                    realmImg.gameObject.SetActive(data.type != (int)PlayerRankData.RankType.Realm);
                    m_CompareImg.gameObject.SetActive(data.type == (int)PlayerRankData.RankType.Realm);
                    realmImg.gameObject.SetActive(data.type != (int)RankType.Realm);
                    m_CompareImg.gameObject.SetActive(data.type == (int)RankType.Realm);
                    realmImg.SetSprite(presentCfg.Img);
                    realmImg.SetNativeSize();
                    m_CompareImg.SetSprite(presentCfg.Img);
                    m_CompareImg.SetNativeSize();
                }
                bool isSelf = data.ID == PlayerDatas.Instance.PlayerId;
                bool isSelf = data.id == PlayerDatas.Instance.PlayerId;
                textName.color = UIHelper.GetUIColor(isSelf ? TextColType.DarkGreen : TextColType.NavyBrown);
                jobText.color = UIHelper.GetUIColor(isSelf ? TextColType.DarkGreen : TextColType.NavyBrown);
                rankWhat.color = UIHelper.GetUIColor(isSelf ? TextColType.DarkGreen : TextColType.NavyBrown);
System/Rank/RankModel.cs
@@ -5,43 +5,236 @@
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    public class RankModel : Model, IPlayerLoginOk
    {
        private int m_RankType = 0;
        public int rankType
        {
            get { return m_RankType; }
    public class RankModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
    {
        Dictionary<int, List<RankData>> m_RankDatas = new Dictionary<int, List<RankData>>();
        public Dictionary<int, List<int>> displaySubRanks = new Dictionary<int, List<int>>();
        public Dictionary<int, bool> subRankSpreads = new Dictionary<int, bool>();
        public List<int> displayRanks = new List<int>();
        int m_SelectRankId = 0;
        public int selectRankId
        {
            get { return m_SelectRankId; }
            set
            {
                m_RankType = value;
                rankList = PlayerDatas.Instance.rank.GetRankList(value);
            }
        }
            {
                if (m_SelectRankId != value)
                {
                    m_SelectRankId = value;
                    if (selectRankIdRefresh != null)
                    {
                        selectRankIdRefresh();
                    }
                }
            }
        }
        int m_SelectSubRankId = 0;
        public int selectSubRankId
        {
            get { return m_SelectSubRankId; }
            set
            {
                if (m_SelectSubRankId != value)
                {
                    m_SelectSubRankId = value;
                    if (selectSubRankIdRefresh != null)
                    {
                        selectSubRankIdRefresh();
                    }
                }
            }
        }
        public int selectRankType
        {
            get
            {
                if (displaySubRanks.ContainsKey(selectRankId))
                {
                    var config = RankListConfig.Get(selectSubRankId);
                    return config == null ? 0 : config.type;
                }
                else
                {
                    var config = RankListConfig.Get(selectRankId);
                    return config == null ? 0 : config.type;
                }
            }
        }
        public List<PlayerRankData.RankData> rankList { get; private set; }
        public int displayRankCount { get; private set; }
        public int jumpRankType { get; set; }
        readonly ObjectPool<RankData> m_RankDataPool = new ObjectPool<RankData>(OnGetRankData, OnReleaseRankData);
        public int jumpRankType { get; set; }
        public event Action selectRankIdRefresh;
        public event Action selectSubRankIdRefresh;
        public event Action<int> onRankRefresh;
        public override void Init()
        {
            jumpRankType = -1;
            ParseConfig();
        }
        public void OnBeforePlayerDataInitialize()
        {
            foreach (var rankDatas in m_RankDatas.Values)
            {
                foreach (var item in rankDatas)
                {
                    m_RankDataPool.Add(item);
                }
            }
            m_RankDatas.Clear();
        }
        public void OnPlayerLoginOk()
        {
            SendBegRank(PlayerRankData.RankType.JadeDynastyTower);
            SendBegRank(RankType.JadeDynastyTower);
        }
        public override void UnInit()
        {
        }
        public void SendBegRank(PlayerRankData.RankType rankType)
        void ParseConfig()
        {
            {
                var config = FuncConfigConfig.Get("RankListCnt");
                displayRankCount = int.Parse(config.Numerical1);
            }
            {
                var configs = RankListConfig.GetValues();
                foreach (var config in configs)
                {
                    if (config.ID >= 100)
                    {
                        var rankId = config.ID / 100;
                        List<int> subRanks = null;
                        if (!displaySubRanks.TryGetValue(rankId, out subRanks))
                        {
                            subRanks = new List<int>();
                            displaySubRanks.Add(rankId, subRanks);
                        }
                        subRanks.Add(config.ID);
                    }
                    else
                    {
                        displayRanks.Add(config.ID);
                    }
                }
            }
        }
        public bool TryGetRanks(int type, out List<RankData> ranks)
        {
            return m_RankDatas.TryGetValue(type, out ranks);
        }
        public bool TryGetMyRank(int type, out int rank)
        {
            rank = 0;
            var playerId = PlayerDatas.Instance.baseData.PlayerID;
            List<RankData> rankDatas = null;
            if (TryGetRanks(type, out rankDatas))
            {
                for (int i = 0; i < rankDatas.Count; i++)
                {
                    if (rankDatas[i].id == playerId)
                    {
                        rank = i + 1;
                        return true;
                    }
                }
            }
            return false;
        }
        public void SendBegRank(RankType rankType)
        {
            C1001_tagCWatchBillboard rankPack = new C1001_tagCWatchBillboard();
            rankPack.Type = (byte)rankType;
            GameNetSystem.Instance.SendInfo(rankPack);
        }
        }
        public void ReceivePackage(H1001_tagBillboard package)
        {
            List<RankData> rankDatas = null;
            if (!m_RankDatas.TryGetValue(package.Type, out rankDatas))
            {
                rankDatas = new List<RankData>();
                m_RankDatas.Add(package.Type, rankDatas);
            }
            for (int i = 0; i < package.BillboardCount; i++)
            {
                if (i < rankDatas.Count)
                {
                    rankDatas[i].type = package.Type;
                    ReSetRankData(rankDatas[i], package.Billboard[i]);
                }
                else
                {
                    var rankData = m_RankDataPool.inactivedCount > 0 ?
                        m_RankDataPool.Get() : new RankData();
                    ReSetRankData(rankData, package.Billboard[i]);
                    rankDatas.Add(rankData);
                }
            }
            var start = package.BillboardCount;
            var end = rankDatas.Count;
            for (int i = end - 1; i >= start; i--)
            {
                RankData data = rankDatas[i];
                rankDatas.RemoveAt(i);
                m_RankDataPool.Add(data);
            }
            if (onRankRefresh != null)
            {
                onRankRefresh(package.Type);
            }
        }
        void ReSetRankData(RankData data, H1001_tagBillboard.tagBillboardList serverData)
        {
            data.id = serverData.ID;
            data.name1 = serverData.Name1;
            data.name2 = serverData.Name2;
            data.subType = serverData.Type2;
            data.value1 = serverData.Value1;
            data.value2 = serverData.Value2;
            data.cmpValue = serverData.CmpValue;
            data.cmpValue2 = serverData.CmpValue2;
            data.cmpValue3 = serverData.CmpValue3;
        }
        static void OnGetRankData(RankData data)
        {
        }
        static void OnReleaseRankData(RankData data)
        {
        }
    }
    public class RankData
    {
        public int type;
        public int subType;
        public uint id;
        public string name1;
        public string name2;
        public uint value1;
        public uint value2;
        public uint cmpValue;
        public uint cmpValue2;
        public uint cmpValue3;
    }
}
System/Rank/RankPanel.cs
@@ -10,290 +10,18 @@
{
    public class RankPanel : Window
    {
        [SerializeField] FunctionButton titleRank;
        [SerializeField] Text m_RankTip;
        [SerializeField] ScrollerController rankTypeCtrl;
        private List<RankListConfig> m_RankTypeCfgList;
        private List<RankListConfig> m_SubRankCfgList = new List<RankListConfig>();
        private Dictionary<int, bool> m_SubRankSpread = new Dictionary<int, bool>();
        private int sltRankType = 0;
        private int sltSubRank = 0;
        private int sltRankServerType = -1;
        [SerializeField] FunctionButton m_RankFunc;
        [SerializeField] Text m_RankRemind;
        [SerializeField] ScrollerController m_RankTypeController;
        [SerializeField] Text[] m_RankTitles;
        [SerializeField] Text m_MyRank;
        [SerializeField] ScrollerController m_RankListController;
        [SerializeField] Button m_Close;
        [SerializeField] List<Text> textAttrList;
        RankModel model { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel<RoleParticularModel>(); } }
        [SerializeField] Text textSelfRank;
        [SerializeField] ScrollerController rankListCtrl;
        List<PlayerRankData.RankData> rankList = null;
        FuncConfigConfig funcRankCnt;
        [SerializeField] Button closeBtn;
        private RankModel m_Model;
        private RankModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RankModel>());
            }
        }
        private RoleParticularModel m_RoleParticularModel;
        private RoleParticularModel particularModel
        {
            get
            {
                return m_RoleParticularModel ?? (m_RoleParticularModel = ModelCenter.Instance.GetModel<RoleParticularModel>());
            }
        }
        private void OnCloseClick()
        {
            CloseClick();
        }
        void OnRefreshRankType()
        {
            if (m_RankTypeCfgList == null)
            {
                m_RankTypeCfgList = RankListConfig.GetAllRankType().Values.ToList();
                for (int i = 0; i < m_RankTypeCfgList.Count; i++)
                {
                    m_SubRankSpread.Add(m_RankTypeCfgList[i].ID, false);
                }
            }
            rankTypeCtrl.Refresh();
            m_SubRankCfgList.Clear();
            for (int i = 0; i < m_RankTypeCfgList.Count; i++)
            {
                RankListConfig rank = m_RankTypeCfgList[i];
                List<RankListConfig> list = RankListConfig.GetAllSubRank(rank.ID);
                rankTypeCtrl.AddCell(ScrollerDataType.Header, i, OnRankTypeClick);
                if (list != null && sltRankType == rank.ID && m_SubRankSpread[rank.ID])
                {
                    for (int j = 0; j < list.Count; j++)
                    {
                        rankTypeCtrl.AddCell(ScrollerDataType.Normal, list[j].ID);
                    }
                    m_SubRankCfgList.AddRange(list);
                }
            }
            rankTypeCtrl.Restart();
        }
        private void OnRankTypeClick(CellView cell)
        {
            OnRankTypeClick(m_RankTypeCfgList[cell.index].ID);
        }
        private void OnRankTypeClick(int type)
        {
            if (type == sltRankType && RankListConfig.GetAllSubRank(type) == null)
            {
                return;
            }
            if (RankListConfig.GetAllSubRank(type) != null)
            {
                bool _same = sltRankType == type;
                if (!_same && m_SubRankSpread.ContainsKey(sltRankType))
                {
                    m_SubRankSpread[sltRankType] = !m_SubRankSpread[sltRankType];
                }
                sltRankType = type;
                m_SubRankSpread[type] = !m_SubRankSpread[type];
                OnRefreshRankType();
                if (!_same) OnSubRankClick(RankListConfig.GetAllSubRank(type)[0]);
            }
            else
            {
                ClearSubRankSpread();
                sltRankType = type;
                OnRefreshRankType();
                var config = RankListConfig.GetRankType(sltRankType);
                SetRankAttr(config.RankAtt);
                sltRankServerType = RankListConfig.GetRankType(sltRankType).type;
                SendBegRank(RankListConfig.GetRankType(sltRankType));
                sltSubRank = 0;
            }
            m_RankTip.text = UIHelper.ReplaceNewLine(Language.Get(StringUtility.Contact("RankTip_", sltRankType)));
        }
        private void ClearSubRankSpread()
        {
            for (int i = 0; i < m_RankTypeCfgList.Count; i++)
            {
                m_SubRankSpread[m_RankTypeCfgList[i].ID] = false;
            }
        }
        private void OnRefreshRankTypeCell(ScrollerDataType type, CellView cell)
        {
            switch (type)
            {
                case ScrollerDataType.Header:
                    {
                        RankListConfig cfg = m_RankTypeCfgList[cell.index];
                        if (cfg != null)
                        {
                            Text text = cell.transform.Find("Txt").GetComponent<Text>();
                            text.text = cfg.ListName;
                            Image img = cell.GetComponent<Image>();
                            if (cfg.ID == sltRankType)
                            {
                                img.SetSprite("ListBtn_Select");
                            }
                            else
                            {
                                img.SetSprite("ListBtn_UnSelect");
                            }
                            if (RankListConfig.GetAllSubRank(cfg.ID) == null)
                            {
                                img = cell.transform.Find("Arrow").GetComponent<Image>();
                                img.gameObject.SetActive(false);
                            }
                            else
                            {
                                if (m_SubRankSpread[cfg.ID])
                                {
                                    img.SetSprite("ListBtn_UnSelect");
                                }
                                img = cell.transform.Find("Arrow").GetComponent<Image>();
                                img.gameObject.SetActive(true);
                                img.transform.localEulerAngles = m_SubRankSpread[cfg.ID] ? new Vector3(0, 0, -90) : Vector3.zero;
                                img.SetSprite(m_SubRankSpread[cfg.ID] ? "Arrow_a" : "ArrowLight_a");
                            }
                        }
                    }
                    break;
                case ScrollerDataType.Normal:
                    {
                        RankListConfig cfg = RankListConfig.GetSubRank(cell.index);
                        if (cfg != null)
                        {
                            Text text = cell.transform.Find("Button/Text").GetComponent<Text>();
                            text.text = cfg.ListName;
                            Button btn = cell.transform.Find("Button").GetComponent<Button>();
                            btn.onClick.RemoveAllListeners();
                            btn.onClick.AddListener(() =>
                            {
                                OnSubRankClick(cfg);
                            });
                            Image img = btn.GetComponent<Image>();
                            if (cfg.ID == sltSubRank)
                            {
                                img.SetSprite("ChildListBtn_Select");
                            }
                            else
                            {
                                img.SetSprite("ChildListBtn_UnSelect");
                            }
                        }
                    }
                    break;
            }
        }
        private void OnSubRankClick(RankListConfig cfg)
        {
            if (sltSubRank == cfg.ID) return;
            sltRankServerType = cfg.type;
            sltSubRank = cfg.ID;
            SetRankAttr(cfg.RankAtt);
            rankTypeCtrl.m_Scorller.RefreshActiveCellViews();
            SendBegRank(cfg);
        }
        private void SendBegRank(RankListConfig cfg)
        {
            OnRefreshRankList(cfg.type);
            if (PlayerDatas.Instance.rank.GetRankList((int)cfg.type) != null)
            {
                if (!CoroutineMgr.Instance.CanBegRank(cfg.type))
                {
                    return;
                }
            }
            if (CoroutineMgr.Instance.CanBegRank(cfg.type))
            {
                CoroutineMgr.Instance.StartBegRank(cfg.type);
            }
            C1001_tagCWatchBillboard rankPack = new C1001_tagCWatchBillboard();
            rankPack.Type = (byte)cfg.type;
            GameNetSystem.Instance.SendInfo(rankPack);
        }
        private void SetRankAttr(string[] strs)
        {
            for (int i = 0; i < textAttrList.Count; i++)
            {
                if (strs != null && i < strs.Length)
                {
                    textAttrList[i].gameObject.SetActive(true);
                    textAttrList[i].text = strs[i];
                }
                else
                {
                    textAttrList[i].gameObject.SetActive(false);
                }
            }
        }
        private void OnRefreshRankList(int type)
        {
            if (type != sltRankServerType) return;
            model.rankType = type;
            rankList = PlayerDatas.Instance.rank.GetRankList(type);
            if (rankListCtrl.GetNumberOfCells(rankListCtrl.m_Scorller) < 1)
            {
                rankListCtrl.Refresh();
                for (int i = 0; i < int.Parse(funcRankCnt.Numerical1); i++)
                {
                    if (i % 2 == 0)
                    {
                        rankListCtrl.AddCell(ScrollerDataType.Normal, i, OnRankListClick);
                    }
                    else
                    {
                        rankListCtrl.AddCell(ScrollerDataType.Header, i, OnRankListClick);
                    }
                }
                rankListCtrl.Restart();
            }
            else
            {
                rankListCtrl.m_Scorller.RefreshActiveCellViews();
                rankListCtrl.JumpIndex(0);
            }
            int rank = PlayerDatas.Instance.rank.GetSelfRank(type);
            if (rank == -1)
            {
                textSelfRank.text = Language.Get("L1045");
            }
            else
            {
                textSelfRank.text = Language.Get("L1092", rank);
            }
        }
        private void OnRankListClick(CellView cell)
        {
            int index = cell.index;
            if (model.rankList == null)
            {
                return;
            }
            if (index < model.rankList.Count)
            {
                if (model.rankList[index].ID == PlayerDatas.Instance.baseData.PlayerID)
                {
                    SysNotifyMgr.Instance.ShowTip("SeePlayer_Cannot");
                    return;
                }
                particularModel.ViewRoleEquip((int)model.rankList[index].ID);
            }
        }
        Dictionary<int, DateTime> requestRankTime = new Dictionary<int, DateTime>();
        protected override void BindController()
        {
@@ -302,48 +30,36 @@
        protected override void AddListeners()
        {
            rankTypeCtrl.OnRefreshCell += OnRefreshRankTypeCell;
            rankTypeCtrl.lockType = EnhanceLockType.KeepVertical;
            closeBtn.onClick.AddListener(OnCloseClick);
            m_RankTypeController.OnRefreshCell += OnRefreshRankTypeCell;
            m_RankTypeController.lockType = EnhanceLockType.KeepVertical;
            m_Close.onClick.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            PlayerDatas.Instance.rank.OnRefreshRank += OnRefreshRankList;
            model.onRankRefresh += OnRankRefresh;
            model.selectRankIdRefresh += SelectRankIdRefresh;
            model.selectSubRankIdRefresh += SelectSubRankIdRefresh;
            if (funcRankCnt == null)
            requestRankTime.Clear();
            for (int i = 0; i < model.displayRanks.Count; i++)
            {
                funcRankCnt = FuncConfigConfig.Get("RankListCnt");
                model.subRankSpreads[model.displayRanks[i]] = false;
            }
            sltRankType = 0;
            sltSubRank = 0;
            SetDefaultSelect();
            var clickRankType = 1;
            Display();
            var index = -1;
            if (model.jumpRankType != -1)
            {
                var list = RankListConfig.GetAllRankType().Keys.ToList();
                index = list.IndexOf(model.jumpRankType);
            }
            if (index != -1)
            {
                clickRankType = model.jumpRankType;
                model.jumpRankType = -1;
            }
            index = index == -1 ? 0 : index;
            OnRefreshRankType();
            rankTypeCtrl.JumpIndex(index);
            OnRankTypeClick(clickRankType);
            var index = model.displayRanks.IndexOf(model.selectRankId);
            m_RankTypeController.JumpIndex(index);
        }
        protected override void OnActived()
        {
            base.OnActived();
            titleRank.state = TitleBtnState.Click;
            m_RankFunc.state = TitleBtnState.Click;
        }
        protected override void OnAfterOpen()
@@ -353,17 +69,241 @@
        protected override void OnPreClose()
        {
            ClearSubRankSpread();
            model.onRankRefresh -= OnRankRefresh;
            model.selectRankIdRefresh -= SelectRankIdRefresh;
            model.selectSubRankIdRefresh -= SelectSubRankIdRefresh;
        }
        protected override void OnAfterClose()
        {
            PlayerDatas.Instance.rank.OnRefreshRank -= OnRefreshRankList;
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        void SetDefaultSelect()
        {
            if (model.jumpRankType != -1)
            {
                var rankId = model.jumpRankType;
                if (model.jumpRankType > 100)
                {
                    rankId = model.jumpRankType / 100;
                }
                if (model.displayRanks.Contains(rankId))
                {
                    model.selectRankId = rankId;
                    if (model.displaySubRanks.ContainsKey(rankId))
                    {
                        model.selectSubRankId = model.jumpRankType;
                    }
                }
            }
            else
            {
                model.selectRankId = 1;
            }
            model.jumpRankType = -1;
        }
        void Display()
        {
            DisplayRankTypes();
            DisplayRankTitles();
            DisplayRemind();
            DisplayRanks();
        }
        void DisplayRankTypes()
        {
            m_RankTypeController.Refresh();
            for (int i = 0; i < model.displayRanks.Count; i++)
            {
                var rankId = model.displayRanks[i];
                m_RankTypeController.AddCell(ScrollerDataType.Header, rankId, OnSelectRankId);
                if (model.displaySubRanks.ContainsKey(rankId)
                    && model.selectRankId == rankId && model.subRankSpreads[rankId])
                {
                    var subRanks = model.displaySubRanks[rankId];
                    for (int j = 0; j < subRanks.Count; j++)
                    {
                        m_RankTypeController.AddCell(ScrollerDataType.Normal, subRanks[j], OnSelectSubRankId);
                    }
                }
            }
            m_RankTypeController.Restart();
        }
        void DisplayRankTitles()
        {
            var rankId = model.selectRankId;
            if (model.displaySubRanks.ContainsKey(model.selectRankId))
            {
                rankId = model.selectSubRankId;
            }
            var config = RankListConfig.Get(rankId);
            for (int i = 0; i < m_RankTitles.Length; i++)
            {
                if (config.RankAtt != null && i < config.RankAtt.Length)
                {
                    m_RankTitles[i].gameObject.SetActive(true);
                    m_RankTitles[i].text = config.RankAtt[i];
                }
                else
                {
                    m_RankTitles[i].gameObject.SetActive(false);
                }
            }
        }
        void DisplayRemind()
        {
            m_RankRemind.text = UIHelper.ReplaceNewLine(Language.Get(StringUtility.Contact("RankTip_", model.selectRankId)));
        }
        void DisplayRanks()
        {
            if (m_RankListController.GetNumberOfCells(m_RankListController.m_Scorller) < 1)
            {
                m_RankListController.Refresh();
                for (int i = 0; i < model.displayRankCount; i++)
                {
                    m_RankListController.AddCell(i % 2 == 0 ? ScrollerDataType.Normal : ScrollerDataType.Header, i, OnSelectRank);
                }
                m_RankListController.Restart();
            }
            else
            {
                m_RankListController.m_Scorller.RefreshActiveCellViews();
                m_RankListController.JumpIndex(0);
            }
            int rank = 0;
            if (model.TryGetMyRank(model.selectRankType, out rank))
            {
                m_MyRank.text = Language.Get("L1092", rank);
            }
            else
            {
                m_MyRank.text = Language.Get("L1045");
            }
        }
        private void OnRankRefresh(int type)
        {
            if (type == model.selectRankType)
            {
                DisplayRanks();
            }
        }
        private void OnSelectRankId(CellView cell)
        {
            var rankId = cell.index;
            if (model.selectRankId == rankId)
            {
                if (model.displaySubRanks.ContainsKey(rankId))
                {
                    model.subRankSpreads[rankId] = !model.subRankSpreads[rankId];
                    DisplayRankTypes();
                }
            }
            else
            {
                model.selectRankId = rankId;
            }
        }
        void OnSelectSubRankId(CellView cell)
        {
            model.selectSubRankId = cell.index;
            m_RankTypeController.m_Scorller.RefreshActiveCellViews();
        }
        private void OnRefreshRankTypeCell(ScrollerDataType type, CellView cell)
        {
            switch (type)
            {
                case ScrollerDataType.Header:
                    {
                        var rankTypeCell = cell as RankTypeCell;
                        rankTypeCell.Display(cell.index);
                    }
                    break;
                case ScrollerDataType.Normal:
                    {
                        var rankSubTypeCell = cell as RankSubTypeCell;
                        rankSubTypeCell.Display(cell.index);
                    }
                    break;
            }
        }
        private void RequestRanks(int type)
        {
            if (requestRankTime.ContainsKey(type))
            {
                if ((DateTime.Now - requestRankTime[type]).TotalSeconds < 1f)
                {
                    return;
                }
            }
            var pak = new C1001_tagCWatchBillboard();
            pak.Type = (byte)type;
            GameNetSystem.Instance.SendInfo(pak);
            requestRankTime[type] = DateTime.Now;
        }
        private void SelectSubRankIdRefresh()
        {
            m_RankTypeController.m_Scorller.RefreshActiveCellViews();
            RequestRanks(model.selectRankType);
            DisplayRanks();
            DisplayRankTitles();
        }
        private void SelectRankIdRefresh()
        {
            foreach (var rankId in model.displayRanks)
            {
                model.subRankSpreads[rankId] = false;
            }
            if (model.displaySubRanks.ContainsKey(model.selectRankId))
            {
                var subRanks = model.displaySubRanks[model.selectRankId];
                model.selectSubRankId = subRanks[0];
                model.subRankSpreads[model.selectRankId] = true;
                DisplayRemind();
            }
            else
            {
                RequestRanks(model.selectRankType);
                DisplayRanks();
                DisplayRankTitles();
                DisplayRemind();
            }
            DisplayRankTypes();
        }
        private void OnSelectRank(CellView cell)
        {
            List<RankData> rankDatas = null;
            if (model.TryGetRanks(model.selectRankType, out rankDatas))
            {
                int index = cell.index;
                if (index < rankDatas.Count)
                {
                    if (rankDatas[index].id == PlayerDatas.Instance.baseData.PlayerID)
                    {
                        SysNotifyMgr.Instance.ShowTip("SeePlayer_Cannot");
                        return;
                    }
                    roleParticularModel.ViewRoleEquip((int)rankDatas[index].id);
                }
            }
        }
    }
}
System/Rank/RankSubTypeCell.cs
New file
@@ -0,0 +1,23 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RankSubTypeCell : CellView
    {
        [SerializeField] Text m_RankType;
        [SerializeField] Image m_Bottom;
        RankModel model { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        public void Display(int subRankId)
        {
            var config = RankListConfig.Get(subRankId);
            m_RankType.text = config.ListName;
            m_Bottom.SetSprite(subRankId == model.selectSubRankId ? "ChildListBtn_Select" : "ChildListBtn_UnSelect");
        }
    }
}
System/Rank/RankSubTypeCell.cs.meta
File was renamed from Core/GameEngine/Model/Player/Rank/PlayerRankData.cs.meta
@@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: aebaa8b5f6b13d540a3669d76915f5ff
timeCreated: 1503386620
licenseType: Free
guid: 9bbada0efe8c2da478109a7980a012f8
timeCreated: 1552641950
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
System/Rank/RankTypeCell.cs
New file
@@ -0,0 +1,34 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class RankTypeCell : CellView
    {
        [SerializeField] Text m_RankType;
        [SerializeField] Image m_Bottom;
        [SerializeField] Image m_Arrow;
        RankModel model { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        public void Display(int rankId)
        {
            var config = RankListConfig.Get(rankId);
            m_RankType.text = config.ListName;
            m_Bottom.SetSprite(rankId == model.selectRankId ? "ListBtn_Select" : "ListBtn_UnSelect");
            m_Arrow.gameObject.SetActive(model.displaySubRanks.ContainsKey(rankId));
            if (model.subRankSpreads[rankId])
            {
                m_Bottom.SetSprite("ListBtn_UnSelect");
            }
            m_Arrow.transform.localEulerAngles = model.subRankSpreads[rankId] ? new Vector3(0, 0, -90) : Vector3.zero;
            m_Arrow.SetSprite(model.subRankSpreads[rankId] ? "Arrow_a" : "ArrowLight_a");
        }
    }
}
System/Rank/RankTypeCell.cs.meta
copy from Core/GameEngine/Model/Player/Rank/PlayerRankData.cs.meta copy to System/Rank/RankTypeCell.cs.meta
File was copied from Core/GameEngine/Model/Player/Rank/PlayerRankData.cs.meta
@@ -1,7 +1,7 @@
fileFormatVersion: 2
guid: aebaa8b5f6b13d540a3669d76915f5ff
timeCreated: 1503386620
licenseType: Free
guid: 00eb1dda1f1890b42819c44c1728f35a
timeCreated: 1552641183
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
System/SystemSetting/ActivitiesPushModel.cs
@@ -94,7 +94,7 @@
                    int remainSecond = day * 24 * 60 * 60 + remainHour * 60 * 60 + remainMinute * 60;
                    if (remainSecond > 0)
                    {
                        PlayerRankData.RankType rankType = impactRank.GetRankType(rankTypelist[i]);
                        RankType rankType = impactRank.GetRankType(rankTypelist[i]);
                        string rankName = StringUtility.Contact("OSCBillRankTitle_", rankType);
                        SendPushInfo(GetPushJsonData(rankStartId, remainSecond, Language.Get("SetUpPrivate106"), Language.Get("SetUpPrivate107", Language.Get(rankName))));
                    }
@@ -119,7 +119,7 @@
                    int remainSecond = (day - 1) * 24 * 60 * 60 + remainHour * 60 * 60 + remainMinute * 60;
                    if (remainSecond > 0)
                    {
                        PlayerRankData.RankType rankType = impactRank.GetRankType(rankTypelist[i]);
                        RankType rankType = impactRank.GetRankType(rankTypelist[i]);
                        string rankName = StringUtility.Contact("OSCBillRankTitle_", rankType);
                        SendPushInfo(GetPushJsonData(rankEndId, remainSecond, Language.Get("SetUpPrivate106"), Language.Get("SetUpPrivate108", Language.Get(rankName))));
                    }
Utility/EnumHelper.cs
@@ -1696,3 +1696,30 @@
    ExitPrepare,
    ElderGodAreaNearDead,
}
public enum RankType
{
    FightPower = 0,
    Job1FightPower = 1,
    Job2FightPower = 2,
    Job3FightPower = 3,
    Level = 4,
    Mount = 5,
    Pet = 6,
    RuneTower = 7,
    OfflineExp = 8,
    Realm = 9,
    OpenServerStrengthen = 11,
    OpenServerMount = 12,
    OpenServerGem = 13,
    OpenServerLv = 14,
    OpenServerRealm = 15,
    OpenServerFightPower = 16,
    Def_BT_FCCostGold = 17,  //消费排行榜(仙界盛典)
    OpenServerRune = 18,
    OpenServerGodWeapon = 20,
    OpenServerRecharge = 21,
    OpenServerPet = 22,
    JadeDynastyTower = 23,//诛仙塔排行榜
    Def_BT_NewFCCostGold = 24, //消费排行榜(新仙界盛典)  24
}