using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using Snxxz.UI; namespace Snxxz.UI { [XLua.LuaCallCSharp] public class PersonalBossModel : Model { public const int PERSONALBOSS_MAPID = 31240; public const int PERSONAL_REDPOINTID = 76003; public Redpoint personalRedpoint = new Redpoint(FindPreciousModel.FINDPRECIOUS_REDPOINTID, PERSONAL_REDPOINTID); int m_SelectedBoss = 0; public int selectedBoss { get { return this.m_SelectedBoss; } set { if (this.m_SelectedBoss != value) { this.m_SelectedBoss = value; if (bossSelectedEvent != null) { bossSelectedEvent(value); } } } } public event Action bossSelectedEvent; List sortedBossIds = new List(); Dictionary personalBosses = new Dictionary(); int dungeonTicket = 0; FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { ParseConfig(); playerPack.refreshItemCountEvent += RefreshItemCount; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataChange; dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange; } public override void UnInit() { playerPack.refreshItemCountEvent -= RefreshItemCount; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataChange; dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordChange; } public void RequestSetDungeonAction() { var sendInfo = new CA508_tagCMDoFBAction(); sendInfo.ActionType = 0; sendInfo.ActionInfo = (uint)selectedBoss; GameNetSystem.Instance.SendInfo(sendInfo); } public bool TryGetBossData(int _bossId, out PersonalBossData _data) { return personalBosses.TryGetValue(_bossId, out _data); } public List GetPersonalBosses() { var bosses = new List(); var lockedCount = 0; for (int i = 0; i < sortedBossIds.Count; i++) { var bossId = sortedBossIds[i]; if (findPreciousModel.IsBossUnlock(bossId)) { bosses.Add(bossId); } else { if (lockedCount < 2) { bosses.Add(bossId); lockedCount++; } } } return bosses; } public int GetRecommendBoss() { for (int i = sortedBossIds.Count - 1; i >= 0; i--) { var bossId = sortedBossIds[i]; if (findPreciousModel.IsBossUnlock(bossId) && findPreciousModel.IsPlayerLevelLargerOrBiggerThanBoss(bossId)) { return bossId; } } return sortedBossIds[0]; } public int GetBossNpcId(int lineId) { var configs = PersonalBossConfig.GetValues(); foreach (var config in configs) { if (config.lineId == lineId) { return config.NPCID; } } return 0; } private void OnPlayerDataChange(PlayerDataType _type) { if (_type == PlayerDataType.VIPLv) { UpdateRedpoint(); } } private void RefreshItemCount(PackType type, int index, int id) { if (type == PackType.Item && id == dungeonTicket) { UpdateRedpoint(); } } private void OnDungeonRecordChange(int _id) { if (_id == PERSONALBOSS_MAPID) { UpdateRedpoint(); } } public void UpdateRedpoint() { if (!FuncOpen.Instance.IsFuncOpen(76)) { return; } var dungeonModel = ModelCenter.Instance.GetModel(); var enterTimes = dungeonModel.GetEnterTimes(PERSONALBOSS_MAPID); var totalTimes = dungeonModel.GetTotalTimes(PERSONALBOSS_MAPID); if (enterTimes >= totalTimes) { personalRedpoint.count = 0; personalRedpoint.state = RedPointState.None; return; } var ticketItem = dungeonModel.GetTicketCost(PERSONALBOSS_MAPID); var own = playerPack.GetItemCountByID(PackType.Item, ticketItem.id); if (own < ticketItem.count) { personalRedpoint.count = 0; personalRedpoint.state = RedPointState.None; return; } personalRedpoint.count = Mathf.Clamp(own / ticketItem.count, 0, totalTimes - enterTimes); personalRedpoint.state = RedPointState.Quantity; } private void ParseConfig() { var bossConfigs = PersonalBossConfig.GetValues(); for (int i = 0; i < bossConfigs.Count; i++) { var config = bossConfigs[i]; var bossData = personalBosses[config.NPCID] = new PersonalBossData(config.NPCID); var dungeonId = dungeonModel.GetDungeonId(PERSONALBOSS_MAPID, config.lineId); var dungeonConfig = DungeonConfig.Get(dungeonId); if (dungeonConfig != null) { bossData.challengableLevel = dungeonConfig.LVLimitMin; } } sortedBossIds.AddRange(personalBosses.Keys); sortedBossIds.Sort(FindPreciousModel.BossCompare); { var dungeonId = dungeonModel.GetDungeonId(PERSONALBOSS_MAPID, 0); var dungeonConfig = DungeonConfig.Get(dungeonId); dungeonTicket = dungeonConfig == null ? 0 : dungeonConfig.TicketID; } } public void RequestGotoDungeon(int _bossId) { var config = PersonalBossConfig.Get(_bossId); ClientDungeonStageUtility.GotoNormalClientDungeon(PERSONALBOSS_MAPID, PERSONALBOSS_MAPID, config.lineId); } } public class PersonalBossData { public int id { get; private set; } public int challengableLevel { get; set; } public PersonalBossData(int _id) { this.id = _id; } } }