using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using TableConfig; namespace Snxxz.UI { public class ElderGodAreaModel : Model, IMapInitOk { public const int ELDERGODAREA_MAPID = 31150; 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); } } } } int baseTimes = 0; public int totalTimes { get { var times = ModelCenter.Instance.GetModel().GetVipPrivilegeCnt(VipPrivilegeType.ForbiddenArea); return times + baseTimes; } } public event Action bossSelectedEvent; public event Action surplusTimesChangeEvent; List sortedBossIds = new List(); Dictionary elderGodBosses = new Dictionary(); Dictionary npcAngers = new Dictionary(); DungeonModel dungeonModel; FindPreciousModel findPreciousModel; public override void Init() { dungeonModel = ModelCenter.Instance.GetModel(); findPreciousModel = ModelCenter.Instance.GetModel(); ParseConfig(); baseTimes = Config.Instance.Get(31150).DayTimes; } public override void UnInit() { } public bool TryGetBossData(int _bossId, out ElderGodBossData _data) { return elderGodBosses.TryGetValue(_bossId, out _data); } public bool IsElderGodAreaNPC(int _npcId) { return npcAngers.ContainsKey(_npcId); } public int GetElderGodAreaNPCAnger(int _npcId) { if (npcAngers.ContainsKey(_npcId)) { return npcAngers[_npcId]; } else { return 0; } } public bool IsBossUnLocked(int _bossId) { var playerLevel = PlayerDatas.Instance.baseData.LV; return elderGodBosses.ContainsKey(_bossId) && playerLevel >= elderGodBosses[_bossId].unLockLevel; } public List GetElderGodBosses() { return new List(sortedBossIds); } public int GetLatestUnLockBoss() { for (int i = 0; i < sortedBossIds.Count; i++) { var bossId = sortedBossIds[i]; if (findPreciousModel.IsBossAlive(bossId)) { return bossId; } } return sortedBossIds[0]; } private void ParseConfig() { var bossConfigs = Config.Instance.GetAllValues(); for (int i = 0; i < bossConfigs.Count; i++) { var config = bossConfigs[i]; if (config.MonsterType == 2) { elderGodBosses[config.NPCID] = new ElderGodBossData(config.NPCID); } npcAngers[config.NPCID] = config.MonsterAnger; } sortedBossIds.AddRange(elderGodBosses.Keys); sortedBossIds.Sort(ElderGodBossData.LevelCompare); } public void OnMapInitOk() { var dataMapId = dungeonModel.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dataMapId == ELDERGODAREA_MAPID) { MapTransferUtility.Instance.MoveToNPC(selectedBoss); } } } public class ElderGodBossData { public int id { get; private set; } public int unLockLevel { get; set; } public ElderGodBossData(int _id) { this.id = _id; } public static int LevelCompare(int _lhs, int _rhs) { var configA = Config.Instance.Get(_lhs); var configB = Config.Instance.Get(_rhs); return configA.NPCLV < configB.NPCLV ? -1 : 1; } } }