using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace vnxbqy.UI { public class BossHomeModel : Model { public const int BOSSHOME_MAPID = 31270; public const int BOSSHOME_REDPOINT = 76002; int m_SelectedFloor = 0; public int selectedFloor { get { return this.m_SelectedFloor; } set { if (this.m_SelectedFloor != value) { this.m_SelectedFloor = value; if (bossHomeFloorSelectedEvent != null) { bossHomeFloorSelectedEvent(this.m_SelectedFloor); } } } } 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 m_WearyValue = 0; public int wearyValue { get { return m_WearyValue; } set { m_WearyValue = value; UpdateRedpoint(); if (bossWearyValueChangeEvent != null) { bossWearyValueChangeEvent(); } } } int m_BoughtTimes = 0; public int boughtTimes { get { return m_BoughtTimes; } set { m_BoughtTimes = value; UpdateRedpoint(); if (boughtTimeChangeEvent != null) { boughtTimeChangeEvent(); } } } public int remindTimes { get { var wearyValueLimit = vipModel.GetVipPrivilegeCnt(VipPrivilegeType.BossHomeAwardLimit); return wearyValueLimit + boughtTimes - wearyValue; } } public event Action bossHomeFloorSelectedEvent; public event Action bossSelectedEvent; public event Action bossWearyValueChangeEvent; public event Action boughtTimeChangeEvent; public Redpoint bossHomeRedpoint = new Redpoint(FindPreciousModel.FINDPRECIOUS_REDPOINTID, BOSSHOME_REDPOINT); Dictionary bossHomes = new Dictionary(); Dictionary vipLackFloorCost = new Dictionary(); List sortedBosses = new List(); VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { ParseConfig(); PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataChange; FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionOpenChange; } public override void UnInit() { PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataChange; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionOpenChange; } public bool TryGetBossHomeData(int _layer, out BossHomeData _data) { return bossHomes.TryGetValue(_layer, out _data); } public int GetRecommendFloor() { var vipLevel = PlayerDatas.Instance.baseData.VIPLv; var vipNeedFloor1 = GetFloorVipRequirement(1); if (vipLevel < vipNeedFloor1) { return 1; } if (PlayerDatas.Instance.baseData.MapID == BOSSHOME_MAPID) return PlayerDatas.Instance.baseData.FBID + 1; for (int i = sortedBosses.Count - 1; i >= 0; i--) { var bossId = sortedBosses[i]; var bossHomeConfig = BossHomeConfig.Get(bossId); if (!findPreciousModel.IsBossUnlock(bossId)) continue; if (vipLevel < GetFloorVipRequirement(bossHomeConfig.FloorNum)) continue; if (NPCConfig.Get(bossId).NPCLV > PlayerDatas.Instance.baseData.LV) continue; return bossHomeConfig.FloorNum; } return 1; } public int GetFloorVipRequirement(int _floor) { return -1; //var vipFloors = VipPrivilegeConfig.GetVipPrivilegeDic(VipPrivilegeType.BossHome); //foreach (var key in vipFloors.Keys) //{ // if (vipFloors[key] == _floor) // { // return key; // } //} //return 16; } public int GetVipLackCost(int _floor) { if (vipLackFloorCost.ContainsKey(_floor)) { return vipLackFloorCost[_floor]; } else { return 0; } } private void OnPlayerDataChange(PlayerDataType _type) { if (_type == PlayerDataType.VIPLv) { UpdateRedpoint(); } } private void OnFunctionOpenChange(int id) { if (id == 23) { UpdateRedpoint(); } } private void UpdateRedpoint() { if (FuncOpen.Instance.IsFuncOpen(23)) { var count = remindTimes; bossHomeRedpoint.count = count; bossHomeRedpoint.state = count > 0 ? RedPointState.Quantity : RedPointState.None; } else { bossHomeRedpoint.count = 0; bossHomeRedpoint.state = RedPointState.None; } } private void ParseConfig() { var bossHomeConfigs = BossHomeConfig.GetValues(); foreach (var config in bossHomeConfigs) { BossHomeData bossHomeData; if (bossHomes.ContainsKey(config.FloorNum)) { bossHomeData = bossHomes[config.FloorNum]; } else { bossHomeData = bossHomes[config.FloorNum] = new BossHomeData(config.FloorNum); } bossHomeData.bossIds.Add(config.NPCID); if (config.MonsterType == 2) { sortedBosses.Add(config.NPCID); } } sortedBosses.Sort((int a, int b) => { var npcConfigA = NPCConfig.Get(a); var npcConfigB = NPCConfig.Get(b); if (npcConfigA.NPCLV == npcConfigB.NPCLV) { var bossHomeConfigA = BossHomeConfig.Get(a); var bossHomeConfigB = BossHomeConfig.Get(b); return bossHomeConfigA.FloorNum > bossHomeConfigB.FloorNum ? -1 : 1; } else { return npcConfigA.NPCLV < npcConfigB.NPCLV ? -1 : 1; } }); foreach (var bossHomeData in bossHomes.Values) { bossHomeData.bossIds.Sort( (int a, int b) => { var bossHomeConfigA = BossHomeConfig.Get(a); var bossHomeConfigB = BossHomeConfig.Get(b); if (bossHomeConfigA.MonsterType != bossHomeConfigB.MonsterType) { return bossHomeConfigA.MonsterType < bossHomeConfigB.MonsterType ? -1 : 1; } return FindPreciousModel.BossCompare(a, b); }); } var configString = FuncConfigConfig.Get("BossHomeCost").Numerical1; var keyValues = configString.Split('|'); for (int i = 0; i < keyValues.Length; i++) { var stringArray = keyValues[i].Split('_'); var floor = int.Parse(stringArray[0]); var cost = int.Parse(stringArray[1]); vipLackFloorCost[floor] = cost; } } //public void OnMapInitOk() //{ // var dataMapId = MapUtility.GetDataMapId(PlayerDatas.Instance.baseData.MapID); // if (dataMapId == BOSSHOME_MAPID) // { // MapTransferUtility.Instance.MoveToNPC(selectedBoss); // } //} } public class BossHomeData { public int id { get; private set; } public List bossIds = new List(); FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } public BossHomeData(int _id) { this.id = _id; } public List GetShowBosses() { var bosses = new List(); var lockedCount = 0; for (var i = 0; i < bossIds.Count; i++) { var bossId = bossIds[i]; var bossHomeConfig = BossHomeConfig.Get(bossId); if (bossHomeConfig.MonsterType == 1) { bosses.Add(bossId); } else { if (findPreciousModel.IsBossUnlock(bossId)) { bosses.Add(bossId); } else { if (lockedCount < FindPreciousModel.ShowLockBossCnt) { bosses.Add(bossId); lockedCount++; } } } } if (bosses.Count == 0) { bosses.Add(bossIds[0]); } return bosses; } public int GetRecommendNpc() { for (var i = bossIds.Count - 1; i >= 0; i--) { var bossId = bossIds[i]; var bossHomeConfig = BossHomeConfig.Get(bossId); if (bossHomeConfig.MonsterType == 2 && findPreciousModel.IsBossUnlock(bossId) && findPreciousModel.IsPlayerLevelLargerOrBiggerThanBoss(bossId)) { return bossIds[i]; } } return bossIds[0]; } } }