| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using System; |
| | | using TableConfig; |
| | | using Snxxz.UI; |
| | | |
| | | namespace Snxxz.UI |
| | | { |
| | | public class PersonalBossModel : Model, IMapInitOk |
| | | { |
| | | 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<int> bossSelectedEvent; |
| | | List<int> sortedBossIds = new List<int>(); |
| | | Dictionary<int, PersonalBossData> personalBosses = new Dictionary<int, PersonalBossData>(); |
| | | int dungeonTicket = 0; |
| | | |
| | | FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } } |
| | | PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } } |
| | | DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } } |
| | | |
| | | public override void Init() |
| | | { |
| | | ParseConfig(); |
| | | UpdateRedpoint(); |
| | | playerPack.RefreshItemCountAct += RefreshItemCnt; |
| | | } |
| | | |
| | | public override void UnInit() |
| | | { |
| | | playerPack.RefreshItemCountAct -= RefreshItemCnt; |
| | | } |
| | | |
| | | 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<int> GetPersonalBosses() |
| | | { |
| | | return new List<int>(sortedBossIds); |
| | | } |
| | | |
| | | public bool IsBossUnLocked(int _bossId) |
| | | { |
| | | var playerLevel = PlayerDatas.Instance.baseData.LV; |
| | | return personalBosses.ContainsKey(_bossId) && playerLevel >= personalBosses[_bossId].challengableLevel; |
| | | } |
| | | |
| | | public int GetLatestUnLockBoss() |
| | | { |
| | | for (int i = sortedBossIds.Count - 1; i >= 0; i--) |
| | | { |
| | | var bossId = sortedBossIds[i]; |
| | | if (IsBossUnLocked(bossId)) |
| | | { |
| | | return bossId; |
| | | } |
| | | } |
| | | |
| | | return sortedBossIds[0]; |
| | | } |
| | | |
| | | private void RefreshItemCnt(PackType type, int index, int id) |
| | | { |
| | | if (type == PackType.rptItem && id == dungeonTicket) |
| | | { |
| | | UpdateRedpoint(); |
| | | } |
| | | } |
| | | |
| | | public void UpdateRedpoint() |
| | | { |
| | | if (!FuncOpen.Instance.IsFuncOpen(76)) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>(); |
| | | var enterTimes = dungeonModel.GetDungeonEnterTimes(PERSONALBOSS_MAPID); |
| | | var totalTimes = dungeonModel.GetDungeonTotalTimes(PERSONALBOSS_MAPID); |
| | | |
| | | if (enterTimes >= totalTimes) |
| | | { |
| | | personalRedpoint.state = RedPointState.None; |
| | | return; |
| | | } |
| | | |
| | | var ticketItem = dungeonModel.GetDungeonTicketCost(PERSONALBOSS_MAPID); |
| | | var own = playerPack.GetItemCountByID(PackType.rptItem, ticketItem.id); |
| | | |
| | | if (own < ticketItem.count) |
| | | { |
| | | personalRedpoint.count = 0; |
| | | personalRedpoint.state = RedPointState.None; |
| | | return; |
| | | } |
| | | |
| | | personalRedpoint.count = own / ticketItem.count; |
| | | personalRedpoint.state = RedPointState.Quantity; |
| | | |
| | | } |
| | | |
| | | private void ParseConfig() |
| | | { |
| | | var bossConfigs = ConfigManager.Instance.GetAllValues<PersonalBossConfig>(); |
| | | for (int i = 0; i < bossConfigs.Count; i++) |
| | | { |
| | | var config = bossConfigs[i]; |
| | | var bossData = personalBosses[config.NPCID] = new PersonalBossData(config.NPCID); |
| | | bossData.challengableLevel = config.ChanllengeLv; |
| | | } |
| | | |
| | | sortedBossIds.AddRange(personalBosses.Keys); |
| | | sortedBossIds.Sort((int a, int b) => |
| | | { |
| | | var data1 = personalBosses[a]; |
| | | var data2 = personalBosses[b]; |
| | | return PersonalBossData.ChallengableLevelCompare(data1, data2); |
| | | }); |
| | | |
| | | var dungeonId = dungeonModel.DungeonMap(PERSONALBOSS_MAPID, 0); |
| | | var dungeonConfig = ConfigManager.Instance.GetTemplate<DungeonConfig>(dungeonId); |
| | | dungeonTicket = dungeonConfig == null ? 0 : dungeonConfig.TicketID; |
| | | |
| | | } |
| | | |
| | | public void OnMapInitOk() |
| | | { |
| | | var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>(); |
| | | var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); |
| | | |
| | | switch (dataMapId) |
| | | { |
| | | case PERSONALBOSS_MAPID: |
| | | var sendInfo = new CA508_tagCMDoFBAction(); |
| | | sendInfo.ActionType = 0; |
| | | sendInfo.ActionInfo = (uint)selectedBoss; |
| | | GameNetSystem.Instance.SendInfo(sendInfo); |
| | | MapTransferUtility.Instance.MoveToNPC(selectedBoss); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | public class PersonalBossData |
| | | { |
| | | public int id { get; private set; } |
| | | public int challengableLevel { get; set; } |
| | | |
| | | public PersonalBossData(int _id) |
| | | { |
| | | this.id = _id; |
| | | } |
| | | |
| | | public static int ChallengableLevelCompare(PersonalBossData _lhs, PersonalBossData _rhs) |
| | | { |
| | | return _lhs.challengableLevel < _rhs.challengableLevel ? -1 : 1; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEngine;
|
| | | using System;
|
| | | using TableConfig;
|
| | | using Snxxz.UI;
|
| | |
|
| | | namespace Snxxz.UI
|
| | | {
|
| | | public class PersonalBossModel : Model, IMapInitOk
|
| | | {
|
| | | 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<int> bossSelectedEvent;
|
| | | List<int> sortedBossIds = new List<int>();
|
| | | Dictionary<int, PersonalBossData> personalBosses = new Dictionary<int, PersonalBossData>();
|
| | | int dungeonTicket = 0;
|
| | |
|
| | | FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
|
| | | PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
|
| | | DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
| | |
|
| | | public override void Init()
|
| | | {
|
| | | ParseConfig();
|
| | | playerPack.RefreshItemCountAct += RefreshItemCount;
|
| | | PlayerDatas.Instance.PlayerDataRefreshEvent += OnPlayerDataChange;
|
| | | dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange;
|
| | |
|
| | | }
|
| | |
|
| | | public override void UnInit()
|
| | | {
|
| | | playerPack.RefreshItemCountAct -= 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<int> GetPersonalBosses()
|
| | | {
|
| | | return new List<int>(sortedBossIds);
|
| | | }
|
| | |
|
| | | public bool IsBossUnLocked(int _bossId)
|
| | | {
|
| | | var playerLevel = PlayerDatas.Instance.baseData.LV;
|
| | | return personalBosses.ContainsKey(_bossId) && playerLevel >= personalBosses[_bossId].challengableLevel;
|
| | | }
|
| | |
|
| | | public int GetLatestUnLockBoss()
|
| | | {
|
| | | for (int i = sortedBossIds.Count - 1; i >= 0; i--)
|
| | | {
|
| | | var bossId = sortedBossIds[i];
|
| | | if (IsBossUnLocked(bossId))
|
| | | {
|
| | | return bossId;
|
| | | }
|
| | | }
|
| | |
|
| | | return sortedBossIds[0];
|
| | | }
|
| | |
|
| | |
|
| | | private void OnPlayerDataChange(PlayerDataRefresh _type, int _value)
|
| | | {
|
| | | if (_type == PlayerDataRefresh.VIPLv)
|
| | | {
|
| | | UpdateRedpoint();
|
| | | }
|
| | | }
|
| | |
|
| | | private void RefreshItemCount(PackType type, int index, int id)
|
| | | {
|
| | | if (type == PackType.rptItem && 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<DungeonModel>();
|
| | | var enterTimes = dungeonModel.GetDungeonEnterTimes(PERSONALBOSS_MAPID);
|
| | | var totalTimes = dungeonModel.GetDungeonTotalTimes(PERSONALBOSS_MAPID);
|
| | |
|
| | | if (enterTimes >= totalTimes)
|
| | | {
|
| | | personalRedpoint.state = RedPointState.None;
|
| | | return;
|
| | | }
|
| | |
|
| | | var ticketItem = dungeonModel.GetDungeonTicketCost(PERSONALBOSS_MAPID);
|
| | | var own = playerPack.GetItemCountByID(PackType.rptItem, ticketItem.id);
|
| | |
|
| | | if (own < ticketItem.count)
|
| | | {
|
| | | personalRedpoint.count = 0;
|
| | | personalRedpoint.state = RedPointState.None;
|
| | | return;
|
| | | }
|
| | |
|
| | | personalRedpoint.count = own / ticketItem.count;
|
| | | personalRedpoint.state = RedPointState.Quantity;
|
| | |
|
| | | }
|
| | |
|
| | | private void ParseConfig()
|
| | | {
|
| | | var bossConfigs = Config.Instance.GetAllValues<PersonalBossConfig>();
|
| | | for (int i = 0; i < bossConfigs.Count; i++)
|
| | | {
|
| | | var config = bossConfigs[i];
|
| | | var bossData = personalBosses[config.NPCID] = new PersonalBossData(config.NPCID);
|
| | | bossData.challengableLevel = config.ChanllengeLv;
|
| | | }
|
| | |
|
| | | sortedBossIds.AddRange(personalBosses.Keys);
|
| | | sortedBossIds.Sort((int a, int b) =>
|
| | | {
|
| | | var data1 = personalBosses[a];
|
| | | var data2 = personalBosses[b];
|
| | | return PersonalBossData.ChallengableLevelCompare(data1, data2);
|
| | | });
|
| | |
|
| | | var dungeonId = dungeonModel.DungeonMap(PERSONALBOSS_MAPID, 0);
|
| | | var dungeonConfig = Config.Instance.Get<DungeonConfig>(dungeonId);
|
| | | dungeonTicket = dungeonConfig == null ? 0 : dungeonConfig.TicketID;
|
| | |
|
| | | }
|
| | |
|
| | | public void OnMapInitOk()
|
| | | {
|
| | | var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
|
| | | var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
| | |
|
| | | switch (dataMapId)
|
| | | {
|
| | | case PERSONALBOSS_MAPID:
|
| | | var sendInfo = new CA508_tagCMDoFBAction();
|
| | | sendInfo.ActionType = 0;
|
| | | sendInfo.ActionInfo = (uint)selectedBoss;
|
| | | GameNetSystem.Instance.SendInfo(sendInfo);
|
| | | MapTransferUtility.Instance.MoveToNPC(selectedBoss);
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public class PersonalBossData
|
| | | {
|
| | | public int id { get; private set; }
|
| | | public int challengableLevel { get; set; }
|
| | |
|
| | | public PersonalBossData(int _id)
|
| | | {
|
| | | this.id = _id;
|
| | | }
|
| | |
|
| | | public static int ChallengableLevelCompare(PersonalBossData _lhs, PersonalBossData _rhs)
|
| | | {
|
| | | return _lhs.challengableLevel < _rhs.challengableLevel ? -1 : 1;
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | }
|