using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace vnxbqy.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 sortedElites = new List(); 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 = DungeonOpenTimeConfig.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 List GetElderGodNpces() { var bosses = new List(); bosses.Add(sortedElites[0]); var lockedCount = 0; for (int i = 0; i < sortedBossIds.Count; i++) { var bossId = sortedBossIds[i]; if (findPreciousModel.IsBossUnlock(bossId)) { bosses.Add(sortedBossIds[i]); } else { if (lockedCount < FindPreciousModel.ShowLockBossCnt) { lockedCount++; bosses.Add(sortedBossIds[i]); } } } return bosses; } public List GetElderGodBosses() { var bosses = new List(); for (int i = 0; i < sortedBossIds.Count; i++) { bosses.Add(sortedBossIds[i]); } return bosses; } public int GetRecommendNpc() { var preferBoss = 0; for (var i = sortedBossIds.Count - 1; i >= 0; i--) { var bossId = sortedBossIds[i]; if (findPreciousModel.IsBossUnlock(bossId) && findPreciousModel.IsPlayerLevelLargerOrBiggerThanBoss(bossId)) { if (preferBoss == 0) { preferBoss = bossId; } if (findPreciousModel.IsBossAlive(bossId) && findPreciousModel.IsSameBigRealmStageBoss(bossId)) { return bossId; } } } if (preferBoss == 0) { preferBoss = sortedBossIds[0]; } return preferBoss; } public int GetRecommendEliteNpc() { var npc = 0; var levelDelta = int.MaxValue; var myLevel = PlayerDatas.Instance.baseData.LV; foreach (var item in sortedElites) { var config = NPCConfig.Get(item); var delta = Mathf.Abs(myLevel - config.NPCLV); if (delta < levelDelta) { npc = item; levelDelta = delta; } } return npc; } private void ParseConfig() { var bossConfigs = ElderGodAreaConfig.GetValues(); for (int i = 0; i < bossConfigs.Count; i++) { var config = bossConfigs[i]; if (config.MonsterType == 2) { elderGodBosses[config.NPCID] = new ElderGodBossData(config.NPCID); } else { sortedElites.Add(config.NPCID); } npcAngers[config.NPCID] = config.MonsterAnger; } sortedElites.Sort(EliteMonsterCompare); sortedBossIds.AddRange(elderGodBosses.Keys); sortedBossIds.Sort(FindPreciousModel.BossCompare); } private int EliteMonsterCompare(int lhs, int rhs) { var config1 = NPCConfig.Get(lhs); var config2 = NPCConfig.Get(rhs); return config1.NPCLV < config2.NPCLV ? -1 : 1; } public void OnMapInitOk() { //var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); //if (dataMapId == ELDERGODAREA_MAPID) //{ // var target = 0; // if (sortedElites.Contains(selectedBoss)) // { // target = GetRecommendEliteNpc(); // } // else // { // target = selectedBoss; // } // MapTransferUtility.Instance.MoveToNPC(target); //} } } public class ElderGodBossData { public int id { get; private set; } public int unLockLevel { get; set; } public ElderGodBossData(int _id) { this.id = _id; } } }