using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System.Linq; namespace vnxbqy.UI { public class ActivityModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize { HeavenBattleModel battleModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } AllianceBossModel allianceBossModel { get { return ModelCenter.Instance.GetModel(); } } FairyNewModel fairyNewModel { get { return ModelCenter.Instance.GetModel(); } } FairyFeastModel fairyFeastModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { var dic = DailyQuestConfig.GetValues(); foreach (var cfg in dic) { DailyQuestOpenTime dailyQuestOpenTime; if (dailyQuestModel.TryGetOpenTime(cfg.ID, out dailyQuestOpenTime)) { dailyQuests.Add(dailyQuestOpenTime); m_NotifyDict.Add(cfg.ID, false); } } for (int i = (int)SpecialActivity.None + 1; i < (int)SpecialActivity.max; i++) { m_NotifyDict.Add(i, false); } fairyLeagueModel.OnRefreshFairyLeagueEvent += CheckActivity; fairyLeagueModel.onFairyLeagueBattleEvent += CheckActivity; StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; NewBieCenter.Instance.guideCompletedEvent += GuideCompletedEvent; AdventureStage.Instance.onLoadAdventureStage += OnLoadAdventureStageFinish; //var _funcCfg = FuncConfigConfig.Get("SpecialActivitys"); //var _json = LitJson.JsonMapper.ToObject(_funcCfg.Numerical1); //foreach (var _key in _json.Keys) //{ // var _type = int.Parse(_key); // specialActivityDict.Add(_type, JsonMapper.ToObject(_json[_key].ToJson())); //} activityNotifies = new List(); } private void GuideCompletedEvent(int _id) { SnxxzGame.Instance.StartCoroutine(Co_GuideComplete()); } public override void UnInit() { fairyLeagueModel.onFairyLeagueBattleEvent -= CheckActivity; fairyLeagueModel.OnRefreshFairyLeagueEvent -= CheckActivity; AdventureStage.Instance.onLoadAdventureStage -= OnLoadAdventureStageFinish; } IEnumerator Co_GuideComplete() { yield return null; CheckActivity(); } public void OnPlayerLoginOk() { CheckActivity(); TimeMgr.Instance.OnMinuteEvent -= CheckActivity; TimeMgr.Instance.OnMinuteEvent += CheckActivity; } public void OnBeforePlayerDataInitialize() { TimeMgr.Instance.OnMinuteEvent -= CheckActivity; var _list = m_NotifyDict.Keys.ToList(); if (_list != null) { for (int i = 0; i < _list.Count; i++) { int id = _list[i]; m_NotifyDict[id] = false; } } activityNotifies.Clear(); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } private bool mainStage = false; private Dictionary m_NotifyDict = new Dictionary(); private List dailyQuests = new List(); public List activityNotifies { get; private set; } public event Action OnActivityBehaviourCloseEvent; DailyQuestModel m_DailyQuestModel; DailyQuestModel dailyQuestModel { get { return m_DailyQuestModel ?? (m_DailyQuestModel = ModelCenter.Instance.GetModel()); } } DungeonModel m_DungeonModel; DungeonModel dungeonModel { get { return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel()); } } FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel(); } } private void OnStageLoadFinish() { if (StageLoad.Instance.currentStage is DungeonStage) { var _mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID); if (_mapConfig.MapFBType == 0 || PlayerDatas.Instance.baseData.MapID == 31020) { mainStage = true; SnxxzGame.Instance.StartCoroutine(Co_StageLoad()); } else { mainStage = false; activityNotifies.Clear(); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } } else { ancientRandomName.Clear(); nameRandomIndexs.Clear(); } } private void OnLoadAdventureStageFinish() { if (AdventureStage.Instance.IsInAdventureStage) { mainStage = false; activityNotifies.Clear(); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } } IEnumerator Co_StageLoad() { yield return null; yield return null; CheckActivity(); } private void CheckActivity() { if (!mainStage || !(StageLoad.Instance.currentStage is DungeonStage) || AdventureStage.Instance.IsInAdventureStage) { return; } for (int i = 0; i < dailyQuests.Count; i++) { if (dailyQuests[i].always) { continue; } int _id = dailyQuests[i].id; if (!dailyQuests[i].InOpenTime() || !dailyQuests[i].IsValidServerOpenTime()) { m_NotifyDict[_id] = false; if (OnActivityBehaviourCloseEvent != null) { OnActivityBehaviourCloseEvent(_id); } continue; } if (!CheckActivity(_id)) { m_NotifyDict[_id] = false; if (OnActivityBehaviourCloseEvent != null) { OnActivityBehaviourCloseEvent(_id); } continue; } if (!m_NotifyDict[_id] && !activityNotifies.Contains(_id)) { activityNotifies.Add(_id); } } //CheckSpecialActivity(); if (activityNotifies.Count > 0) { NotifyActivity(); } } private bool CheckActivity(int type) { if (CheckLimit(type)) { return false; } if (type == (int)DailyQuestType.FairyGrabBoss) { return false; } else if (type == (int)DailyQuestType.default3) { if (!PlayerDatas.Instance.fairyData.HasFairy) { return false; } if (fairyNewModel.sitRound == fairyNewModel.sitMaxRound) return false; } else if (type == (int)DailyQuestType.FairyChuanGong) { //if (!PlayerDatas.Instance.fairyData.HasFairy) //{ // return false; //} //if (TimeUtility.OpenDay >= fairyFeastModel.activeOpenday) //{ // return false; //} return false; } else if (type == (int)DailyQuestType.WyTaiChi) { return false; } DailyQuestConfig cfg = DailyQuestConfig.Get(type); if (cfg == null) { return false; } if (cfg.RelatedType == 2 && PlayerDatas.Instance.baseData.MapID == cfg.RelatedID) { return false; } return true; } public bool CheckLimit(int type) { DailyQuestConfig config = DailyQuestConfig.Get(type); if (config == null) { return true; } switch ((DailyQuestType)type) { case DailyQuestType.FairyGrabBoss: case DailyQuestType.FairyFeast: { if (!PlayerDatas.Instance.fairyData.HasFairy) { return true; } } break; case DailyQuestType.GuardSky: { if (!PlayerDatas.Instance.fairyData.HasFairy) { return true; } if (ModelCenter.Instance.GetModel().completeGuardSky) { return true; } } break; case DailyQuestType.FairyLeague: { int _error = 0; if (!fairyModel.SatisfyOpenFairyLeagueLv()) { return true; } if (!fairyLeagueModel.SatisfyEnterLeague(out _error)) { return true; } } break; case DailyQuestType.WyTaiChi: { if (VersionConfig.Get().isBanShu) { return true; } } break; case DailyQuestType.CrossServerPk: { bool isStatify = CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch; if (!isStatify) { return true; } } break; case DailyQuestType.default4: { if(!ILCrossServerModel.Instance.IsOpen()) { return true; } } break; case DailyQuestType.AllianceBoss: { if (!PlayerDatas.Instance.fairyData.HasFairy) { return true; } if (allianceBossModel.isActivityOver) { return true; } } break; } if (config.UnLockFuncID != 0) { if (!FuncOpen.Instance.IsFuncOpen(config.UnLockFuncID)) { return true; } } int entertimes = dailyQuestModel.GetDailyQuestCompletedTimes(type); if (dailyQuestModel.GetDailyQuestTotalTimes(config.ID) <= entertimes) { return true; } return false; } private void NotifyActivity() { if (!WindowCenter.Instance.IsOpen()) { if (!NewBieCenter.Instance.inGuiding) { WindowCenter.Instance.Open(); } } } public void SetActivityNotifty(int _type) { if (m_NotifyDict.ContainsKey(_type)) { m_NotifyDict[_type] = true; } } #region 特殊活动 private Dictionary specialActivityDict = new Dictionary(); public bool TryGetSpecialActivityData(int _index, out SpecialActivityData _data) { return specialActivityDict.TryGetValue(_index, out _data); } public void CheckSpecialActivity() { for (int i = (int)SpecialActivity.None + 1; i < (int)SpecialActivity.max; i++) { var _open = CheckSpecialActivity((SpecialActivity)i); if (!_open) { m_NotifyDict[i] = false; if (OnActivityBehaviourCloseEvent != null) { OnActivityBehaviourCloseEvent(i); } } else { if (!m_NotifyDict[i] && !activityNotifies.Contains(i)) { activityNotifies.Add(i); } } } } private bool CheckSpecialActivity(SpecialActivity _type) { switch (_type) { case SpecialActivity.FairyBoss: return ModelCenter.Instance.GetModel().IsFairyBossOpen(); } return false; } public enum SpecialActivity { None = 1000, FairyBoss, max = 1002, } public struct SpecialActivityData { public string Title; public string Icon; } #endregion Dictionary> ancientRandomName = new Dictionary>(); List nameRandomIndexs = new List(); public string GetAncientRobotName(int objId, int npcId) { if (ancientRandomName.ContainsKey(objId) && ancientRandomName[objId].ContainsKey(npcId)) { return ancientRandomName[objId][npcId]; } var configs = AncientRobotNameConfig.GetValues(); if (nameRandomIndexs.Count == 0) { for (int i = 0; i < configs.Count; i++) { nameRandomIndexs.Add(configs[i].id); } } var index = UnityEngine.Random.Range(0, nameRandomIndexs.Count); var name = AncientRobotNameConfig.Get(nameRandomIndexs[index]).Name; nameRandomIndexs.RemoveAt(index); Dictionary dict; if (!ancientRandomName.ContainsKey(objId)) { dict = new Dictionary(); dict.Add(npcId, name); ancientRandomName.Add(objId, dict); } else { ancientRandomName[objId].Add(npcId, name); } return name; } } }