少年修仙传客户端代码仓库
client_linchunjie
2019-01-18 fc8c78e4a2bcbef5327d1859cd3b7f84dbd651ff
5923 【前端】【1.5.100】诛仙Boss功能
2个文件已删除
5 文件已重命名
8个文件已添加
10个文件已修改
1285 ■■■■ 已修改文件
Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/ConfigManager.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonBuyTimesWin.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonRankBehaviour.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/FindPreciousBossRebornBehaviour.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/FindPreciousModel.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FindPrecious/LootPreciousFrameWin.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss.meta 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossModel.cs 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossModel.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossWin.cs 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyBossWin.cs.meta 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/InGamePushContainer.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/StrangleGodBoss/StrangleGodBossBehaviour.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/StrangleGodBoss/StrangleGodBossModel.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs
New file
@@ -0,0 +1,56 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Friday, January 18, 2019
//--------------------------------------------------------
using UnityEngine;
using System;
namespace TableConfig {
    public partial class JadeDynastyBossConfig : ConfigBase {
        public int NPCID { get ; private set ; }
        public int LineID { get ; private set ; }
        public int Time { get ; private set ; }
        public int RealmLV { get ; private set ; }
        public int ZhuXianScore { get ; private set ; }
        public string dropItems { get ; private set; }
        public string PortraitID { get ; private set; }
        public override string getKey()
        {
            return NPCID.ToString();
        }
        public override void Parse() {
            try
            {
                NPCID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
                LineID=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
                Time=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
                RealmLV=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
                ZhuXianScore=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0;
                dropItems = rawContents[5].Trim();
                PortraitID = rawContents[6].Trim();
            }
            catch (Exception ex)
            {
                DebugEx.Log(ex);
            }
        }
    }
}
Core/GameEngine/Model/Config/JadeDynastyBossConfig.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: bc9f70989c6d3344aad5bd0dbda7bc2b
timeCreated: 1547804881
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Core/GameEngine/Model/ConfigManager.cs
@@ -225,6 +225,7 @@
        AddAsyncTask<FashionDressConfig>();
        AddAsyncTask<WeekPartyPointConfig>();
        AddAsyncTask<SceneReplaceConfig>();
        AddAsyncTask<JadeDynastyBossConfig>();
        while (!AllCompleted())
        {
System/Dungeon/DungeonBuyTimesWin.cs
@@ -188,6 +188,17 @@
                    return false;
                }
            }
            else if (JadeDynastyBossModel.JADEDYNASTY_MAP == model.currentDungeon.mapId)
            {
                var _totalTimes = model.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
                var _enterTimes = model.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
                var jadeDynastyBossModel = ModelCenter.Instance.GetModel<JadeDynastyBossModel>();
                if ((_totalTimes - _enterTimes) >= jadeDynastyBossModel.challengeLimitCount)
                {
                    MessageWin.Inst.ShowFixedTip(Language.Get("DemonJar18"));
                    return false;
                }
            }
            return true;
        }
System/Dungeon/DungeonModel.cs
@@ -840,6 +840,12 @@
                        WindowCenter.Instance.Open<DemonJarDamageRankWin>();
                    }
                    break;
                //case JadeDynastyBossModel.JADEDYNASTY_MAP:
                //    if (!WindowCenter.Instance.IsOpen<JadeDynastyDamageRankWin>())
                //    {
                //        WindowCenter.Instance.Open<JadeDynastyDamageRankWin>();
                //    }
                //    break;
                case TreasureModel.TREASURE_MAPID:
                    break;
                case HeavenBattleModel.HEAVEBATTLE_MAPID:
System/Dungeon/DungeonRankBehaviour.cs
@@ -39,6 +39,7 @@
            switch (currentDugeonId)
            {
                case 31170:
                //case JadeDynastyBossModel.JADEDYNASTY_MAP:
                case DemonJarModel.DEMONJAR_MAPID:
                    {
                        if (model.mission.hurtInfo != null && model.mission.hurtInfo.Length > 0)
System/FindPrecious/FindPreciousBossRebornBehaviour.cs
@@ -130,7 +130,7 @@
                case FindPreciousType.CrossServerBoss:
                    GotoKillCrossServerBoss(bossId);
                    break;
                case FindPreciousType.StrangleGodBoss:
                case FindPreciousType.JadeDynastyBoss:
                    GotoKillStrangleGodBoss(bossId);
                    break;
            }
@@ -345,8 +345,8 @@
            if (mapConfig.MapFBType == (int)MapType.OpenCountry)
            {
                WindowCenter.Instance.Close<MainInterfaceWin>();
                var strangleGodBossModel = ModelCenter.Instance.GetModel<StrangleGodBossModel>();
                strangleGodBossModel.assginSelectBossId = _bossId;
                var jadeDynastyBossModel = ModelCenter.Instance.GetModel<JadeDynastyBossModel>();
                jadeDynastyBossModel.assginSelectBossId = _bossId;
                WindowCenter.Instance.Open<LootPreciousFrameWin>(false, 3);
            }
            else
System/FindPrecious/FindPreciousModel.cs
@@ -56,7 +56,7 @@
        BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
        PersonalBossModel personalBossModel { get { return ModelCenter.Instance.GetModel<PersonalBossModel>(); } }
        DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
        StrangleGodBossModel strangleGodBossModel { get { return ModelCenter.Instance.GetModel<StrangleGodBossModel>(); } }
        JadeDynastyBossModel jadeDynastyBossModel { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } }
        public override void Init()
        {
@@ -432,11 +432,13 @@
            }
            if (_redpointId == DemonJarModel.DEMONJAR_REDPOINTID ||
                _redpointId == DogzDungeonModel.DOGZDUNGEON_REDPOINT)
                _redpointId == DogzDungeonModel.DOGZDUNGEON_REDPOINT ||
                _redpointId == JadeDynastyBossModel.JADEDYNASTY_REDPOINTID)
            {
                var demonJarRedpointCount = demonJarModel.redpoint.count;
                var dogzDungeonRedpointCount = dogzDungeonModel.redpoint.count;
                var totalCount = demonJarRedpointCount + dogzDungeonRedpointCount;
                var jadeDynastyBossRedpointCount = jadeDynastyBossModel.redpoint.count;
                var totalCount = demonJarRedpointCount + dogzDungeonRedpointCount + jadeDynastyBossRedpointCount;
                lootPreciousRedpoint.count = totalCount;
                lootPreciousRedpoint.state = totalCount > 0 ? RedPointState.Quantity : RedPointState.None;
@@ -473,9 +475,9 @@
            {
                return FindPreciousType.CrossServerBoss;
            }
            else if (strangleGodBossModel.IsStrangleGodBoss(_bossId))
            else if (jadeDynastyBossModel.IsJadeDynastyBoss(_bossId))
            {
                return FindPreciousType.StrangleGodBoss;
                return FindPreciousType.JadeDynastyBoss;
            }
            return FindPreciousType.None;
        }
System/FindPrecious/LootPreciousFrameWin.cs
@@ -17,7 +17,7 @@
        [SerializeField] FunctionButton m_DemonJar;
        [SerializeField] FunctionButton m_FairyGrabBoss;
        [SerializeField] FunctionButton m_DogzDungeon;
        [SerializeField] FunctionButton m_StrangleGodBoss;
        [SerializeField] FunctionButton m_JadeDynastyBoss;
        [SerializeField] Button m_Left;
        [SerializeField] Button m_Right;
@@ -33,7 +33,7 @@
            m_DemonJar.AddListener(ShowDemonJar);
            m_DogzDungeon.AddListener(ShowDogzDungeon);
            m_FairyGrabBoss.AddListener(FairyGrabBoss);
            m_StrangleGodBoss.AddListener(StrangleGodBoss);
            m_JadeDynastyBoss.AddListener(JadeDynastyBoss);
            m_Left.AddListener(ShowLastFunction);
            m_Right.AddListener(ShowNextFunction);
            m_Close.AddListener(CloseClick);
@@ -93,11 +93,11 @@
            functionOrder = m_DogzDungeon.order;
        }
        private void StrangleGodBoss()
        private void JadeDynastyBoss()
        {
            CloseSubWindows();
            WindowCenter.Instance.Open<StrangleGodBossWin>();
            functionOrder = m_StrangleGodBoss.order;
            WindowCenter.Instance.Open<JadeDynastyBossWin>();
            functionOrder = m_JadeDynastyBoss.order;
        }
        private void CloseSubWindows()
System/JadeDynastyBoss.meta
System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs
New file
@@ -0,0 +1,162 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    public class JadeDynastyBossBehaviour : FindPreciousBossBriefInfoBehaviour
    {
        [SerializeField] Transform m_ContainerChallengeable;
        [SerializeField] Transform m_ContainerUnChanllgeable;
        [SerializeField] Text m_ChallengeCondition;
        [SerializeField] Transform m_ContainerAttention;
        [SerializeField] Text m_Participant;
        JadeDynastyBossModel model
        {
            get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); }
        }
        public int bossNpcId { get; private set; }
        protected override int selectedBossId
        {
            get { return model.selectBossId; }
            set { model.selectBossId = value; }
        }
        protected override InteractorableState interactorableState
        {
            get
            {
                var selected = selectedBossId == bossId;
                var condition = 0;
                var dieOrLocked = !model.IsBossUnLocked(bossId, out condition) || !findPreciousModel.IsBossAlive(bossId);
                if (!dieOrLocked)
                {
                    return selected ? InteractorableState.NormalSelected : InteractorableState.NormalUnSelected;
                }
                else
                {
                    return selected ? InteractorableState.DieOrLockedSelected : InteractorableState.DieOrLockedUnSelected;
                }
            }
            set
            {
                base.interactorableState = value;
            }
        }
        protected override bool isRebornRightNow
        {
            get
            {
                var condition = 0;
                return model.IsBossUnLocked(bossId, out condition) && base.isRebornRightNow;
            }
        }
        protected override bool isUnLocked
        {
            get
            {
                var condition = 0;
                return model.IsBossUnLocked(bossId, out condition);
            }
        }
        public override void Display(object _data)
        {
            base.Display(_data);
            bossNpcId = (int)_data;
            DisplayBase();
            UpdateBossRebornCoolDown(isUnLocked);
            UpdateBossPortrait(interactorableState);
            UpdateBossNameLevelFont(interactorableState);
            DisplayParticipant();
            DisplayCondition();
            DisplaySubscrib();
            model.participantRefresh -= DisplayParticipant;
            model.participantRefresh += DisplayParticipant;
            model.selectBossRefresh -= SelectBossRefresh;
            model.selectBossRefresh += SelectBossRefresh;
        }
        public override void Dispose()
        {
            base.Dispose();
            model.participantRefresh -= DisplayParticipant;
            model.selectBossRefresh -= SelectBossRefresh;
        }
        protected override void OnSubscribe(int _bossId)
        {
            base.OnSubscribe(_bossId);
            if (bossId != _bossId)
            {
                return;
            }
            DisplaySubscrib();
        }
        protected override void OnBossInfoUpdate(int _bossId)
        {
            base.OnBossInfoUpdate(_bossId);
            var condition = 0;
            var unLocked = model.IsBossUnLocked(bossId, out condition);
            m_Participant.gameObject.SetActive(unLocked && findPreciousModel.IsBossAlive(bossId));
        }
        public void DisplayBase()
        {
            var config = Config.Instance.Get<NPCConfig>(bossNpcId);
            var jadeDynastyBossConfig = Config.Instance.Get<JadeDynastyBossConfig>(bossNpcId);
            DrawBossBaseInfo(jadeDynastyBossConfig.PortraitID, config.charName, config.NPCLV, config.ClientRealm);
        }
        private void DisplaySubscrib()
        {
            m_ContainerAttention.gameObject.SetActive(findPreciousModel.IsBossSubscribed(bossId));
        }
        private void DisplayParticipant()
        {
            m_Participant.gameObject.SetActive(isUnLocked && findPreciousModel.IsBossAlive(bossId));
            m_Participant.text = Language.Get("FindPrecious_8", model.GetParticipantCount(bossId));
        }
        private void DisplayCondition()
        {
            m_ContainerUnChanllgeable.gameObject.SetActive(!isUnLocked);
            m_ContainerChallengeable.gameObject.SetActive(isUnLocked);
            var condition = 0;
            m_ChallengeCondition.text = string.Empty;
            if (!model.IsBossUnLocked(bossId, out condition))
            {
                switch (condition)
                {
                    case 1:
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                }
            }
        }
        private void SelectBossRefresh(int bossId)
        {
            UpdateBossNameLevelFont(interactorableState);
        }
    }
}
System/JadeDynastyBoss/JadeDynastyBossBehaviour.cs.meta
System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs
New file
@@ -0,0 +1,21 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class JadeDynastyBossKillRecord : MonoBehaviour
    {
        [SerializeField] Text m_KillTime;
        [SerializeField] Text m_PlayerName;
        public void Display(DateTime time, string playerName)
        {
            m_KillTime.text = time.ToString("hh:mm:ss");
            m_PlayerName.text = UIHelper.ServerStringTrim(playerName);
        }
    }
}
System/JadeDynastyBoss/JadeDynastyBossKillRecord.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: ee1187f4529637c48840fb84410ef1f7
timeCreated: 1547809917
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/JadeDynastyBoss/JadeDynastyBossModel.cs
New file
@@ -0,0 +1,354 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TableConfig;
using System;
namespace Snxxz.UI
{
    public class JadeDynastyBossModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IAfterPlayerDataInitialize
    {
        List<JadeDynastyBossData> jadeDynastyBosses = new List<JadeDynastyBossData>();
        Dictionary<int, int> jadeDynastyBossParticipantDict = new Dictionary<int, int>();
        Dictionary<int, List<Item>> dropItemDict = new Dictionary<int, List<Item>>();
        public const int JADEDYNASTY_MAP = 52010;
        public const int FUNCTIONID = 0;
        public const int JADEDYNASTY_REDPOINTID = 77003;
        public event Action<int> selectBossRefresh;
        public event Action participantRefresh;
        public int jadeDynastyScore { get; private set; }
        public int challengeLimitCount { get; private set; }
        public int challengeTimes { get; private set; }
        public int assistLimitCount { get; private set; }
        public int assistTimes { get; private set; }
        int m_SelectBossId = 0;
        public int selectBossId
        {
            get { return m_SelectBossId; }
            set
            {
                if (m_SelectBossId != value)
                {
                    m_SelectBossId = value;
                    if (selectBossRefresh != null)
                    {
                        selectBossRefresh(value);
                    }
                }
            }
        }
        public int assginSelectBossId { get; set; }
        public readonly Redpoint redpoint = new Redpoint(FindPreciousModel.LOOTPRECIOUs_REDPOINTID, JADEDYNASTY_REDPOINTID);
        MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
        public override void Init()
        {
            ParseConfig();
            dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordUpdate;
            dungeonModel.updateDungeonBuyCnt += OnDungeonBuyCount;
            FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        }
        public void OnBeforePlayerDataInitialize()
        {
            jadeDynastyScore = 100000000;
            jadeDynastyBossParticipantDict.Clear();
            challengeTimes = 0;
            assistTimes = 0;
            mapModel.mapLinesUpdateEvent -= MapLinesUpdateEvent;
        }
        public void OnAfterPlayerDataInitialize()
        {
            mapModel.mapLinesUpdateEvent += MapLinesUpdateEvent;
        }
        public void OnPlayerLoginOk()
        {
            UpdateRedpoint();
        }
        public override void UnInit()
        {
            dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordUpdate;
            dungeonModel.updateDungeonBuyCnt -= OnDungeonBuyCount;
            FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        }
        void ParseConfig()
        {
            {
                var configs = Config.Instance.GetAllValues<JadeDynastyBossConfig>();
                foreach (var config in configs)
                {
                    var dungeonId = dungeonModel.GetDungeonId(JADEDYNASTY_MAP, config.LineID);
                    var dungeonConfig = Config.Instance.Get<DungeonConfig>(dungeonId);
                    jadeDynastyBosses.Add(new JadeDynastyBossData()
                    {
                        bossNpcId = config.NPCID,
                        lineId = config.LineID,
                        challengeCondition = new JadeDynastyBossCondition()
                        {
                            level = dungeonConfig.LVLimitMin,
                            realmLevel = config.RealmLV,
                            score = config.ZhuXianScore,
                        },
                    });
                    var itemArray = LitJson.JsonMapper.ToObject<int[][]>(config.dropItems);
                    List<Item> list = new List<Item>();
                    for (int k = 0; k < itemArray.Length; k++)
                    {
                        Item item = new Item()
                        {
                            id = itemArray[k][0],
                            count = itemArray[k][1],
                            bind = itemArray[k][2] == 1,
                        };
                        list.Add(item);
                    }
                    dropItemDict.Add(config.NPCID, list);
                }
                jadeDynastyBosses.Sort(SortCompare);
            }
        }
        public bool IsJadeDynastyBoss(int bossNpcId)
        {
            var index = jadeDynastyBosses.FindIndex((x) =>
            {
                return x.bossNpcId == bossNpcId;
            });
            return index >= 0;
        }
        public bool IsBossUnLocked(int bossNpcId, out int condition)
        {
            condition = 0;
            var index = jadeDynastyBosses.FindIndex((x) =>
            {
                return x.bossNpcId == bossNpcId;
            });
            if (index != -1)
            {
                var challengeCondition = jadeDynastyBosses[index].challengeCondition;
                if (PlayerDatas.Instance.baseData.LV < challengeCondition.level)
                {
                    condition = 1;
                    return false;
                }
                if (PlayerDatas.Instance.baseData.realmLevel < challengeCondition.realmLevel)
                {
                    condition = 2;
                    return false;
                }
                if (jadeDynastyScore < challengeCondition.score)
                {
                    condition = 3;
                    return false;
                }
            }
            return true;
        }
        public List<int> GetJadeDynastyBosses()
        {
            List<int> list = new List<int>();
            foreach (var boss in jadeDynastyBosses)
            {
                list.Add(boss.bossNpcId);
            }
            return list;
        }
        public int GetParticipantCount(int bossId)
        {
            if (jadeDynastyBossParticipantDict.ContainsKey(bossId))
            {
                return jadeDynastyBossParticipantDict[bossId];
            }
            return 0;
        }
        public int GetLatestUnLockBoss()
        {
            if (FuncOpen.Instance.IsFuncOpen(FUNCTIONID))
            {
                var latestBossId = jadeDynastyBosses[0].bossNpcId;
                foreach (var boss in jadeDynastyBosses)
                {
                    var condition = 0;
                    if (IsBossUnLocked(boss.bossNpcId, out condition))
                    {
                        latestBossId = boss.bossNpcId;
                    }
                }
                return latestBossId;
            }
            else
            {
                return jadeDynastyBosses[0].bossNpcId;
            }
        }
        public bool TryGetDropItems(int bossId, out List<Item> dropItems)
        {
            return dropItemDict.TryGetValue(bossId, out dropItems);
        }
        public bool TryEnterDungeon(int bossId,out int error)
        {
            var condition = 0;
            error = 0;
            if (!IsBossUnLocked(bossId, out condition))
            {
                switch (condition)
                {
                    case 1:
                        error = 1;
                        break;
                    case 2:
                        error = 2;
                        break;
                    case 3:
                        error = 3;
                        break;
                }
                return false;
            }
            var totalTimes = dungeonModel.GetTotalTimes(JADEDYNASTY_MAP);
            var enterTimes = dungeonModel.GetEnterTimes(JADEDYNASTY_MAP);
            if (enterTimes >= totalTimes)
            {
                error = 4;
                return false;
            }
            if (!findPreciousModel.IsBossAlive(bossId))
            {
                error = 5;
                return false;
            }
            if (CrossServerUtility.IsCrossServer())
            {
                error = 6;
                return false;
            }
            return true;
        }
        public void DisplayErrorTip(int error)
        {
        }
        private void MapLinesUpdateEvent(int mapId)
        {
            if (mapId != JADEDYNASTY_MAP)
            {
                return;
            }
            var lines = mapModel.GetMapLines(JADEDYNASTY_MAP);
            foreach (var boss in jadeDynastyBosses)
            {
                var index = lines.FindIndex((x) =>
                {
                    return x.lineIndex == boss.lineId;
                });
                if (index != -1)
                {
                    jadeDynastyBossParticipantDict[boss.bossNpcId] = lines[index].playerCount;
                }
                else
                {
                    jadeDynastyBossParticipantDict[boss.bossNpcId] = 0;
                }
            }
            if (participantRefresh != null)
            {
                participantRefresh();
            }
        }
        public static int SortCompare(JadeDynastyBossData lhs, JadeDynastyBossData rhs)
        {
            if (lhs.challengeCondition.level != rhs.challengeCondition.level)
            {
                return lhs.challengeCondition.level.CompareTo(rhs.challengeCondition.level);
            }
            if (lhs.challengeCondition.realmLevel != rhs.challengeCondition.realmLevel)
            {
                return lhs.challengeCondition.realmLevel.CompareTo(rhs.challengeCondition.realmLevel);
            }
            if (lhs.challengeCondition.score != rhs.challengeCondition.score)
            {
                return lhs.challengeCondition.score.CompareTo(rhs.challengeCondition.score);
            }
            return 0;
        }
        private void OnDungeonRecordUpdate(int _dataMapId)
        {
            if (JADEDYNASTY_MAP == _dataMapId)
            {
                UpdateRedpoint();
            }
        }
        private void OnDungeonBuyCount()
        {
            UpdateRedpoint();
        }
        private void OnFuncStateChangeEvent(int id)
        {
            if (id == FUNCTIONID)
            {
                UpdateRedpoint();
            }
        }
        void UpdateRedpoint()
        {
            if (FuncOpen.Instance.IsFuncOpen(FUNCTIONID))
            {
                var count = dungeonModel.GetTotalTimes(JADEDYNASTY_MAP) - dungeonModel.GetEnterTimes(JADEDYNASTY_MAP);
                redpoint.count = count;
            }
            else
            {
                redpoint.count = 0;
            }
            redpoint.state = redpoint.count > 0 ? RedPointState.Quantity : RedPointState.None;
        }
    }
    public struct JadeDynastyBossData
    {
        public int bossNpcId;
        public int lineId;
        public JadeDynastyBossCondition challengeCondition;
    }
    public struct JadeDynastyBossCondition
    {
        public int level;
        public int realmLevel;
        public int score;
    }
}
System/JadeDynastyBoss/JadeDynastyBossModel.cs.meta
System/JadeDynastyBoss/JadeDynastyBossWin.cs
New file
@@ -0,0 +1,331 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, January 17, 2019
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class JadeDynastyBossWin : Window
    {
        [SerializeField] CyclicScroll m_Bosses;
        [SerializeField] ItemCell[] m_Items;
        [SerializeField] Text m_ChallengeTimes;
        [SerializeField] Text m_AssistTimes;
        [SerializeField] Text m_JadeDynastyScore;
        [SerializeField] Button m_BuyTimes;
        [SerializeField] Transform m_SurpassLevel;
        [SerializeField] ToggleButton m_Subscribe;
        [SerializeField] Button m_Goto;
        [SerializeField] Transform m_ContainerKillRecord;
        [SerializeField] Transform m_ContainerNoneRecord;
        [SerializeField] Transform m_ContainerExistRecord;
        [SerializeField] JadeDynastyBossKillRecord[] m_KillRecords;
        [SerializeField] Transform m_ContainerBelongTo;
        [SerializeField] Text m_BelongToPlayerName;
        [SerializeField] Text m_BelongToNonePlayer;
        JadeDynastyBossModel model { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
        MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        float refreshBossStateTime = 0f;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_BuyTimes.AddListener(BuyTimes);
            m_Subscribe.AddListener(SwitchSubscribeBoss);
            m_Goto.AddListener(GotoKillBoss);
        }
        protected override void OnPreOpen()
        {
            SetDefaultSelectBoss();
            refreshBossStateTime = -1f;
            FindPreciousModel.BossInfo bossInfo;
            if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive())
            {
                if (TimeUtility.ServerNow <= bossInfo.refreshTime)
                {
                    var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1;
                    refreshBossStateTime = Time.realtimeSinceStartup + seconds;
                }
            }
            mapModel.RequestQueryMapLineState(JadeDynastyBossModel.JADEDYNASTY_MAP);
            model.assginSelectBossId = 0;
        }
        protected override void OnActived()
        {
            base.OnActived();
            Display();
        }
        protected override void OnAfterOpen()
        {
            model.selectBossRefresh += SelectBossRefresh;
            dungeonModel.updateDungeonBuyCnt += ChallengeTimesRefresh;
            dungeonModel.dungeonRecordChangeEvent += ChallengeTimesRefresh;
            findPreciousModel.bossSubscribeChangeEvent += DisplaySubscribe;
            findPreciousModel.bossInfoUpdateEvent += BossInfoUpdateEvent;
        }
        protected override void OnPreClose()
        {
            model.selectBossRefresh -= SelectBossRefresh;
            dungeonModel.updateDungeonBuyCnt -= ChallengeTimesRefresh;
            dungeonModel.dungeonRecordChangeEvent -= ChallengeTimesRefresh;
            findPreciousModel.bossSubscribeChangeEvent -= DisplaySubscribe;
            findPreciousModel.bossInfoUpdateEvent -= BossInfoUpdateEvent;
            refreshBossStateTime = -1f;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            if (refreshBossStateTime > 0)
            {
                if (Time.realtimeSinceStartup > refreshBossStateTime)
                {
                    DisplayKillRecord();
                    DisplayBelongTo();
                    refreshBossStateTime = -1f;
                }
            }
        }
        #endregion
        public void SetDefaultSelectBoss()
        {
            if (model.assginSelectBossId != 0
                && model.IsJadeDynastyBoss(model.assginSelectBossId))
            {
                model.selectBossId = model.assginSelectBossId;
            }
            else
            {
                model.selectBossId = model.GetLatestUnLockBoss();
            }
        }
        public void Display()
        {
            DisplayBosses();
            DisplayChallengeTimes();
            DisplayDropItems();
            DisplaySubscribe(model.selectBossId);
            DisplayKillRecord();
            DisplayBelongTo();
            DisplayAssistTimes();
            DisplayJadeDynastyScore();
        }
        public void DisplayBosses()
        {
            var bosses = model.GetJadeDynastyBosses();
            m_Bosses.Init(bosses);
            m_Bosses.MoveToCenter(bosses.IndexOf(model.selectBossId));
        }
        public void DisplayChallengeTimes()
        {
            var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
            var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
            m_ChallengeTimes.text = StringUtility.Contact(totalTimes - enterTimes, "/", model.challengeLimitCount);
        }
        public void DisplayAssistTimes()
        {
            m_AssistTimes.text = StringUtility.Contact(model.assistLimitCount - model.assistTimes, "/", model.assistLimitCount);
        }
        void DisplayDropItems()
        {
            List<Item> dropItems = null;
            model.TryGetDropItems(model.selectBossId, out dropItems);
            for (int i = 0; i < m_Items.Length; i++)
            {
                m_Items[i].cellBtn.RemoveAllListeners();
                if (dropItems != null && i < dropItems.Count)
                {
                    m_Items[i].gameObject.SetActive(true);
                    var item = dropItems[i];
                    ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count, item.bind ? 1 : 0);
                    m_Items[i].Init(itemCellModel);
                    m_Items[i].cellBtn.AddListener(() =>
                    {
                        ItemAttrData itemAttrData = new ItemAttrData(item.id, true, (ulong)item.count, -1, item.bind ? 1 : 0);
                        ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemAttrData);
                    });
                }
                else
                {
                    m_Items[i].gameObject.SetActive(false);
                }
            }
            var npcDropConfig = Config.Instance.Get<NPCDropItemConfig>(model.selectBossId);
            m_SurpassLevel.gameObject.SetActive(npcDropConfig.MaxLV != 0
                && PlayerDatas.Instance.baseData.LV > npcDropConfig.MaxLV);
        }
        private void DisplaySubscribe(int _bossId)
        {
            m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectBossId);
        }
        private void DisplayKillRecord()
        {
            var alive = findPreciousModel.IsBossAlive(model.selectBossId);
            m_ContainerKillRecord.gameObject.SetActive(!alive);
            if (!alive)
            {
                var killRecords = findPreciousModel.GetBossKillRecords(model.selectBossId);
                m_ContainerExistRecord.gameObject.SetActive(killRecords != null && killRecords.Count > 0);
                m_ContainerNoneRecord.gameObject.SetActive(killRecords == null || killRecords.Count == 0);
                if (killRecords != null && killRecords.Count > 0)
                {
                    for (int i = 0; i < m_KillRecords.Length; i++)
                    {
                        if (killRecords != null && i < killRecords.Count)
                        {
                            m_KillRecords[i].gameObject.SetActive(true);
                            m_KillRecords[i].Display(killRecords[i].killTime, killRecords[i].playerName);
                        }
                        else
                        {
                            m_KillRecords[i].gameObject.SetActive(false);
                        }
                    }
                }
            }
        }
        private void DisplayBelongTo()
        {
            var alive = findPreciousModel.IsBossAlive(model.selectBossId);
            m_ContainerBelongTo.gameObject.SetActive(alive);
            if (alive)
            {
                var belongToPlayer = false;
                m_BelongToNonePlayer.gameObject.SetActive(!belongToPlayer);
                m_BelongToPlayerName.gameObject.SetActive(belongToPlayer);
            }
        }
        private void DisplayJadeDynastyScore()
        {
            m_JadeDynastyScore.text = Language.Get("", model.jadeDynastyScore);
        }
        private void SelectBossRefresh(int bossId)
        {
            DisplayDropItems();
            DisplaySubscribe(model.selectBossId);
            DisplayKillRecord();
            DisplayBelongTo();
            FindPreciousModel.BossInfo bossInfo;
            if (findPreciousModel.TryGetBossInfo(model.selectBossId, out bossInfo) && !bossInfo.IsBossAlive())
            {
                if (TimeUtility.ServerNow <= bossInfo.refreshTime)
                {
                    var seconds = (int)(bossInfo.refreshTime - TimeUtility.ServerNow).TotalSeconds + 1;
                    refreshBossStateTime = Time.realtimeSinceStartup + seconds;
                }
            }
        }
        private void ChallengeTimesRefresh()
        {
            DisplayChallengeTimes();
        }
        private void ChallengeTimesRefresh(int mapId)
        {
            if (JadeDynastyBossModel.JADEDYNASTY_MAP != mapId)
            {
                return;
            }
            DisplayChallengeTimes();
        }
        private void BuyTimes()
        {
            var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
            var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
            if ((totalTimes - enterTimes) >= model.challengeLimitCount)
            {
                MessageWin.Inst.ShowFixedTip(Language.Get("DemonJar18"));
            }
            else
            {
                dungeonModel.currentDungeon = new Dungeon(JadeDynastyBossModel.JADEDYNASTY_MAP, 0);
                WindowCenter.Instance.Open<DungeonBuyTimesWin>();
            }
        }
        private void SwitchSubscribeBoss()
        {
            if (findPreciousModel.IsBossSubscribed(model.selectBossId))
            {
                findPreciousModel.RequestDeSubscribeBoss(model.selectBossId);
            }
            else
            {
                findPreciousModel.RequestSubscribeBoss(model.selectBossId, false);
            }
        }
        private void BossInfoUpdateEvent(int bossId)
        {
            if (bossId == model.selectBossId)
            {
                DisplayKillRecord();
                DisplayBelongTo();
            }
        }
        private void GotoKillBoss()
        {
            var error = 0;
            if (model.TryEnterDungeon(model.selectBossId, out error))
            {
                var config = Config.Instance.Get<JadeDynastyBossConfig>(model.selectBossId);
                dungeonModel.SingleChallenge(JadeDynastyBossModel.JADEDYNASTY_MAP, config.LineID);
            }
            else
            {
                model.DisplayErrorTip(error);
            }
        }
    }
}
System/JadeDynastyBoss/JadeDynastyBossWin.cs.meta
System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs
File was renamed from System/StrangleGodBoss/StrangleGodBossWin.cs
@@ -1,6 +1,6 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Thursday, January 17, 2019
//    [  Date ]:           Friday, January 18, 2019
//--------------------------------------------------------
using System;
@@ -11,35 +11,38 @@
namespace Snxxz.UI {
    public class StrangleGodBossWin : Window
    public class JadeDynastyDamageRankWin : Window
    {
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        [SerializeField] DungeonRankBehaviour m_RankBehaviour;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
        }
        protected override void OnPreOpen()
        {
            var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
            var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
            m_RankBehaviour.Init(dataMapId);
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
    }
}
System/JadeDynastyBoss/JadeDynastyDamageRankWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 118ee6dbac3babc488ba966899aae754
timeCreated: 1547814117
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/MainInterfacePanel/InGamePushContainer.cs
@@ -35,7 +35,7 @@
        DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
        DogzDungeonModel dogzDungeonModel { get { return ModelCenter.Instance.GetModel<DogzDungeonModel>(); } }
        CrossServerBossModel crossServerBossModel { get { return ModelCenter.Instance.GetModel<CrossServerBossModel>(); } }
        StrangleGodBossModel strangleGodBossModel { get { return ModelCenter.Instance.GetModel<StrangleGodBossModel>(); } }
        JadeDynastyBossModel jadeDynastyBossModel { get { return ModelCenter.Instance.GetModel<JadeDynastyBossModel>(); } }
        VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
@@ -270,10 +270,12 @@
                        show = !GeneralDefine.elderGodNoRebornRemindMaps.Contains(mapId);
                        break;
                    case FindPreciousType.DemonJar:
                        var totalTimes = dungeonModel.GetTotalTimes(DemonJarModel.DEMONJAR_MAPID);
                        var enterTimes = dungeonModel.GetEnterTimes(DemonJarModel.DEMONJAR_MAPID);
                        killable = totalTimes > enterTimes;
                        show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId);
                        {
                            var totalTimes = dungeonModel.GetTotalTimes(DemonJarModel.DEMONJAR_MAPID);
                            var enterTimes = dungeonModel.GetEnterTimes(DemonJarModel.DEMONJAR_MAPID);
                            killable = totalTimes > enterTimes;
                            show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId);
                        }
                        break;
                    case FindPreciousType.DogzDungeon:
                        killable = dogzDungeonModel.wearyValue < GeneralDefine.bossWearyValues[2];
@@ -283,8 +285,13 @@
                        killable = crossServerBossModel.wearyValue < GeneralDefine.bossWearyValues[2];
                        show = !GeneralDefine.dogzNoRebornRemindMaps.Contains(mapId);
                        break;
                    case FindPreciousType.StrangleGodBoss:
                    case FindPreciousType.JadeDynastyBoss:
                        {
                            var totalTimes = dungeonModel.GetTotalTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
                            var enterTimes = dungeonModel.GetEnterTimes(JadeDynastyBossModel.JADEDYNASTY_MAP);
                            killable = totalTimes > enterTimes;
                            show = !GeneralDefine.demonJarNoRebornRemindMaps.Contains(mapId);
                        }
                        break;
                }
System/StrangleGodBoss/StrangleGodBossBehaviour.cs
File was deleted
System/StrangleGodBoss/StrangleGodBossModel.cs
File was deleted
System/WindowBase/ModelCenter.cs
@@ -221,7 +221,7 @@
            RegisterModel<CrossServerBossModel>();
            RegisterModel<OpenServiceAchievementModel>();
            RegisterModel<FashionDressModel>();
            RegisterModel<StrangleGodBossModel>();
            RegisterModel<JadeDynastyBossModel>();
            inited = true;
        }
Utility/EnumHelper.cs
@@ -1179,7 +1179,7 @@
    DemonJar = 4,
    DogzDungeon = 5,
    CrossServerBoss = 6,
    StrangleGodBoss = 7,
    JadeDynastyBoss = 7,
    None = 99,
}