using vnxbqy.UI; using System; using System.Collections.Generic; using UnityEngine.UI; using System.Linq; using LitJson; using UnityEngine; public class CrossServerMHBossModel : ILModel { public const int DATA_MAPID = 32080; public const int REDPOINT = 21303; List sortedBossIds = new List(); Dictionary bosses = new Dictionary(); public List AddBossTimesCosts = new List(); CrossServerBossModel crossBossModel { get { return ModelCenter.Instance.GetModelEx(); } } 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 { if (m_WearyValue != value) { m_WearyValue = value; UpdateRedpoint(); if (bossWearyValueChangeEvent != null) { bossWearyValueChangeEvent(); } } } } int m_BuyCnt = 0; public int buyCnt { get { return m_BuyCnt; } set { if (m_BuyCnt != value) { m_BuyCnt = value; UpdateRedpoint(); if (bossWearyValueChangeEvent != null) { bossWearyValueChangeEvent(); } } } } public event Action bossWearyValueChangeEvent; public event Action bossSelectedEvent; public Redpoint redpoint = new Redpoint(FindPreciousModel.LOOTPRECIOUs_REDPOINTID, REDPOINT); FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } TeamModel teamModel { get { return ModelCenter.Instance.GetModel(); } } protected override void Init() { ParseConfig(); FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionStateChange; crossBossModel.bossSelectedEvent += CrossBossSelectedEvent; GameEvent.playerLoginOkEvent += OnPlayerLoginOk; GameEvent.mapInitOkEvent += OnMapInitOk; } protected override void UnInit() { FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionStateChange; crossBossModel.bossSelectedEvent -= CrossBossSelectedEvent; } void CrossBossSelectedEvent(int bossID) { if (bosses.ContainsKey(bossID)) selectedBoss = bossID; } public void OnMapInitOk() { if (PlayerDatas.Instance.baseData.MapID == DATA_MAPID) { if (selectedBoss != 0) { MapTransferUtility.Instance.MoveToNPC(selectedBoss); } } } public void RequestEnter() { if (PlayerDatas.Instance.extersion.bossState == 1) { SysNotifyMgr.Instance.ShowTip("CrossMap11"); return; } if (!AssetVersionUtility.IsUnpriorAssetDownLoadOk()) { InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole); return; } var sendInfo = new CC105_tagCMEnterCrossServer(); sendInfo.DataMapID = DATA_MAPID; GameNetSystem.Instance.SendInfo(sendInfo); } public bool CanEnter(out int error) { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = MapConfig.Get(mapId); if (mapConfig.MapFBType != (int)MapType.OpenCountry) { error = 1; return false; } if (teamModel.isMatching) { error = 2; return false; } if (teamModel.teamPrepare.isPreparing) { error = 3; return false; } if (CrossServerLogin.Instance.IsEnterCrossServerPreparing()) { error = 4; return false; } var deadModel = ModelCenter.Instance.GetModel(); if (deadModel.playerIsDie) { error = 5; return false; } var config = CrossServerBossConfig.Get(selectedBoss); if (config.MonsterType == 4 && !findPreciousModel.IsBossUnlock(selectedBoss)) { error = 6; return false; } if (PlayerDatas.Instance.baseData.FightPoint < (ulong)NPCExConfig.Get(selectedBoss).SuppressFightPower) { error = 7; return false; } error = 0; return true; } public void ProcessEnterError(int error) { switch (error) { case 1: SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); break; case 2: SysNotifyMgr.Instance.ShowTip("CrossMap1"); break; case 3: SysNotifyMgr.Instance.ShowTip("CrossMap2"); break; case 4: SysNotifyMgr.Instance.ShowTip("CrossMap3"); break; case 5: SysNotifyMgr.Instance.ShowTip("CrossMap4"); break; case 6: SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(NPCConfig.Get(selectedBoss).Realm).LvLarge); break; case 7: SysNotifyMgr.Instance.ShowTip("TaskFeedback4"); break; } } public void RequestExit() { var match = new CC104_tagCMExitCrossRealm(); GameNetSystem.Instance.SendToCrossServer(match); } public bool TryGetBossData(int bossId, out CrossServerBossData data) { return bosses.TryGetValue(bossId, out data); } public List GetNpcIds() { var npcIds = new List(); var lockedCount = 0; var keyList = bosses.Keys.ToList(); for (var i = 0; i < keyList.Count; i++) { var bossId = keyList[i]; if (findPreciousModel.IsBossUnlock(bossId)) { npcIds.Add(bossId); } else { if (lockedCount < FindPreciousModel.ShowLockBossCnt) { lockedCount++; npcIds.Add(bossId); } } } return npcIds; } public List GetShowBosses() { return new List(sortedBossIds); } public int GetRecommendNpc() { var preferBoss = 0; for (int i = sortedBossIds.Count - 1; i >= 0; i--) { var bossId = sortedBossIds[i]; if (IsBossUnLocked(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 bool IsBossUnLocked(int bossId) { if (!bosses.ContainsKey(bossId)) { return false; } if (!findPreciousModel.IsBossUnlock(bossId)) { return false; } if (PlayerDatas.Instance.baseData.FightPoint < (ulong)NPCExConfig.Get(bossId).SuppressFightPower) { return false; } return true; } public void OnPlayerLoginOk() { UpdateRedpoint(); } private void OnFunctionStateChange(int id) { if (id == 202) { UpdateRedpoint(); } } public void UpdateRedpoint() { if (FuncOpen.Instance.IsFuncOpen(202)) { var wearyValueLimit = GeneralDefine.bossWearyValues[3]; var count = wearyValueLimit - wearyValue; redpoint.count = count; } else { redpoint.count = 0; } redpoint.state = redpoint.count > 0 ? RedPointState.Quantity : RedPointState.None; CrossServerUtility.UpdateCrossServerRedpoint(); } private void ParseConfig() { var keyList = CrossServerBossConfig.GetKeys(); for (var i = 0; i < keyList.Count; i++) { var config = CrossServerBossConfig.Get(keyList[i]); if (config.MonsterType != 5) continue; bosses[config.NPCID] = new CrossServerBossData(config.NPCID); sortedBossIds.Add(config.NPCID); } sortedBossIds.Sort(FindPreciousModel.BossCompare); AddBossTimesCosts.Clear(); var addTimes = JsonMapper.ToObject(FuncConfigConfig.Get("KillBossCntLimit1").Numerical3); var keyList1 = addTimes.Keys.ToList(); for (int i = 0; i < keyList1.Count; i++) { var key = keyList1[i]; if (key != "3") { continue; } var awards = addTimes[key]; for (int j = 0; j < awards.Count; j++) { AddBossTimesCosts.Add(int.Parse(awards[j].ToString())); } break; } } public void GotoKillBoss() { if (!FuncOpen.Instance.IsFuncOpen(202)) { FuncOpen.Instance.ProcessorFuncErrorTip(202); return; } selectedBoss = GetRecommendNpc(); if (PlayerDatas.Instance.baseData.MapID == DATA_MAPID) { MapTransferUtility.Instance.MoveToNPC(selectedBoss); return; } var error = 0; if (!CanEnter(out error)) { ProcessEnterError(error); return; } RequestEnter(); } public void GotoKillBossByBossID(int bossID) { if (!FuncOpen.Instance.IsFuncOpen(202)) { FuncOpen.Instance.ProcessorFuncErrorTip(202); return; } selectedBoss = bossID; if (PlayerDatas.Instance.baseData.MapID == DATA_MAPID) { MapTransferUtility.Instance.MoveToNPC(selectedBoss); return; } var error = 0; if (!CanEnter(out error)) { ProcessEnterError(error); return; } RequestEnter(); } public ulong GetBossFightPower(int bossId) { if (!bosses.ContainsKey(bossId)) { return 0; } return (ulong)NPCExConfig.Get(bossId).SuppressFightPower; } public void SetSelectBoss(int bossID) { selectedBoss = bossID; } //今日已击杀数 public int GetBossKilledCnt() { return wearyValue; } }