//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, September 16, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System; namespace vnxbqy.UI { public class DailyQuestModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IMapInitOk, IAfterPlayerDataInitialize { const int DAILYQUEST_REDPOINTID = 78000; const int EVERYDAY_REDPOINTID = 78001; const int TIMELIMIT_REDPOINTID = 78002; const int ACTIVEVALUE_REDPOINT = 78004; const int DAILYQUEST_REDPOINTIDBASE = 78100; const int TRIALEXCHANGE_REDPOINTID = 78006; const int LIVENESSREWARD_REDPOINTID = 78007; Redpoint dailyQuestRedpoint = new Redpoint(DAILYQUEST_REDPOINTID); public Redpoint everyDayRedpoint = new Redpoint(DAILYQUEST_REDPOINTID, EVERYDAY_REDPOINTID); public Redpoint timeLimitRedpoint = new Redpoint(DAILYQUEST_REDPOINTID, TIMELIMIT_REDPOINTID); Redpoint activeValueRedpoint = new Redpoint(EVERYDAY_REDPOINTID, ACTIVEVALUE_REDPOINT); public Redpoint LivenessRewardRedPoint = new Redpoint(EVERYDAY_REDPOINTID, LIVENESSREWARD_REDPOINTID); PrayerModel modelPray { get { return ModelCenter.Instance.GetModel(); } } WorldBossModel worldBossModel { get { return ModelCenter.Instance.GetModel(); } } private PackModel m_PackModel { get { return ModelCenter.Instance.GetModel(); } } VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } BuffModel buffModel { get { return ModelCenter.Instance.GetModel(); } } CommonDungeonSelectModel commonDungeonSelectModel { get { return ModelCenter.Instance.GetModel(); } } int m_DailyQuestTotalActiveValue = 150; public int dailyQuestTotalActiveValue { get { return m_DailyQuestTotalActiveValue; } } int m_CurrentDailyQuest = 0; public int currentDailyQuest { get { return this.m_CurrentDailyQuest; } set { this.m_CurrentDailyQuest = value; } } int m_WannaLookDailyQuest = 0; public int wannaLookDailyQuest { get { return this.m_WannaLookDailyQuest; } set { this.m_WannaLookDailyQuest = value; } } int m_CurrentRewardStageIndex = 0; public int currentRewardStageIndex { get { return m_CurrentRewardStageIndex; } private set { m_CurrentRewardStageIndex = value; } } int m_CurrentActiveValue = 0; public int currentActiveValue { get { return m_CurrentActiveValue; } private set { if (m_CurrentActiveValue != value) { m_CurrentActiveValue = value; if (currentActiveValueUpdateEvent != null) { currentActiveValueUpdateEvent(); } } } } int useActivity = 0; //单次探索的活跃消耗 // 可使用的活跃点 int m_UsableActivePoint = 0; public int usableActivePoint { get { return m_UsableActivePoint; } private set { if (m_UsableActivePoint != value) { m_UsableActivePoint = value; if (usableActivePointUpdateEvent != null) { usableActivePointUpdateEvent(); } if (useActivity > 0) UpdateDailyActionRedpoint((int)DailyQuestType.ActivityPlace); } } } DailyQuestCategory m_Category; public DailyQuestCategory category { get { return m_Category; } set { if (m_Category != value) { m_Category = value; if (categoryChangeEvent != null) { categoryChangeEvent(); } } } } private List m_HasShowDailyQuestList = new List(); Dictionary dailyQuests = new Dictionary(); Dictionary dungeonToDailyQuestTable = new Dictionary(); Dictionary dailyActionToDailyQuestTable = new Dictionary(); List dailyQuestActiveValueRewards = new List(); Dictionary dailyQuestTimes = new Dictionary();//除了副本的其他任务放在这里 Dictionary dailyQuestOpenTimes = new Dictionary(); Dictionary>> questCalendar = new Dictionary>>(); List DailyQuestLVList = new List(); DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } FairyLeagueModel fairyLeagueModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } AllianceBossModel allianceBossModel { get { return ModelCenter.Instance.GetModel(); } } TaskModel taskModel { get { return ModelCenter.Instance.GetModel(); } } MapModel mapModel { get { return ModelCenter.Instance.GetModel(); } } SkyTowerModel skyTowerModel { get { return ModelCenter.Instance.GetModel(); } } HazyRegionModel hazyRegionModel { get { return ModelCenter.Instance.GetModel(); } } PrayerModel prayerModel { get { return ModelCenter.Instance.GetModel(); } } FairyNewModel fairyNewModel { get { return ModelCenter.Instance.GetModel(); } } FairyFeastModel fairyFeastModel { get { return ModelCenter.Instance.GetModel(); } } public event Action activeValueRewardGotEvent; public event Action dailyQuestProgressUpdateEvent; public event Action currentActiveValueUpdateEvent; public event Action usableActivePointUpdateEvent; public event Action categoryChangeEvent; public event Action newDailyQuestOpenEvent; public override void Init() { ParseConfig(); var values = DailyLivenessRewardConfig.GetValues(); for (int i = 0; i < values.Count; i++) { var config = values[i]; dailyQuestActiveValueRewards.Add(new DailyQuestActiveValueReward(config.id)); } dailyQuestActiveValueRewards.Sort((x, y) => { return x.id.CompareTo(y.id); }); UpdateRedpoints(); fairyLeagueModel.onFairyLeagueBattleEvent += OnFairyLeagueBattle; dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange; FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionStateChange; PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh; fairyModel.guardSkyCompleteEvent += GuardSkyCompleteEvent; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyInfo; allianceBossModel.allianceBossStateRefresh += AllianceBossStateRefresh; RedpointCenter.Instance.redpointValueChangeEvent += RedpointValueChangeEvent; TaskModel.Event_FairyAuTask += OnFairyTaskRefresh; //ActivityPlaceInfoEvent usableActivePointUpdateEvent } public override void UnInit() { fairyLeagueModel.onFairyLeagueBattleEvent -= OnFairyLeagueBattle; dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordChange; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionStateChange; PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh; fairyModel.guardSkyCompleteEvent -= GuardSkyCompleteEvent; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyInfo; allianceBossModel.allianceBossStateRefresh -= AllianceBossStateRefresh; RedpointCenter.Instance.redpointValueChangeEvent -= RedpointValueChangeEvent; TaskModel.Event_FairyAuTask -= OnFairyTaskRefresh; m_HasShowDailyQuestList.Clear(); } public void OnBeforePlayerDataInitialize() { currentActiveValue = 0; usableActivePoint = 0; } public void OnAfterPlayerDataInitialize() { m_HasShowDailyQuestList.Clear(); var playerId = PlayerDatas.Instance.baseData.PlayerID; var localSavedArray = LocalSave.GetIntArray(StringUtility.Contact("DailyQuestNewFunctionShowList_", playerId)); if (!localSavedArray.IsNullOrEmpty()) { m_HasShowDailyQuestList.AddRange(localSavedArray); } } public void OnPlayerLoginOk() { DailyQuestActionTimer.Instance.Begin(); } public void OnMapInitOk() { UpdateRedpoints(); } public bool IsNewDailyQuest(int id) { if (category != DailyQuestCategory.EveryDay) { return false; } if (PlayerDatas.Instance.baseData.LV >= 90) { return false; } switch ((DailyQuestType) id) { case DailyQuestType.Prayer: case DailyQuestType.Auction: case DailyQuestType.KillMonster: case DailyQuestType.SkyTower: case DailyQuestType.ActivityPlace: case DailyQuestType.PersonalBoss: case DailyQuestType.WorldBoss: case DailyQuestType.BossHome: return false; } if (!IsDailyQuestUnLock(id)) { return false; } if (m_HasShowDailyQuestList.Contains(id)) { return false; } return true; } public void AddHasShowNewDailyQuest(int id) { if (IsDailyQuestUnLock(id) && !m_HasShowDailyQuestList.Contains(id)) { m_HasShowDailyQuestList.Add(id); var playerId = PlayerDatas.Instance.baseData.PlayerID; LocalSave.SetIntArray(StringUtility.Contact("DailyQuestNewFunctionShowList_", playerId), m_HasShowDailyQuestList.ToArray()); } } private void RedpointValueChangeEvent(int id) { if (id == prayerModel.redpoint.id) { UpdateDailyActionRedpoint((int)DailyQuestType.Prayer); } if (id == hazyRegionModel.redpoint.id) { UpdateDailyActionRedpoint((int)DailyQuestType.HazyRegion); } if (id == skyTowerModel.redpoint03.id) { UpdateDailyActionRedpoint((int)DailyQuestType.SkyTower); } if (id == skyTowerModel.redpoint04.id) { UpdateDailyActionRedpoint((int)DailyQuestType.SkyTower); } if (id == fairyNewModel.sitRedpoint.id) { UpdateDailyActionRedpoint((int)DailyQuestType.default3); } } private void OnFairyTaskRefresh() { UpdateDailyActionRedpoint((int)DailyQuestType.FairyTask); } public List GetDailyQuests() { var quests = new List(dailyQuests.Keys); if (quests.Contains((int)DailyQuestType.SkyTower) && skyTowerModel.allPassed) { quests.Remove((int)DailyQuestType.SkyTower); } return quests; } public List GetLivenessRewardDatas() { List DataList = new List(); List[] DataListAry = new List[3] { new List(),//可领取 new List(),//未达成条件 new List() //已领取 }; for (int i = 0; i < dailyQuestActiveValueRewards.Count; i++) { var Reward = dailyQuestActiveValueRewards[i]; LivenessRewardData Data = new LivenessRewardData(); Data.config = DailyLivenessRewardConfig.Get(Reward.id); if (Data.config.Liveness > currentActiveValue) { Data.state = 0; DataListAry[1].Add(Data); } else { if (Reward.got) { Data.state = 2; DataListAry[2].Add(Data); } else { Data.state = 1; DataListAry[0].Add(Data); } } } foreach (var TempDataList in DataListAry) { foreach (var TempData in TempDataList) { DataList.Add(TempData); } } return DataList; } public List GetDailyQuests(DailyQuestCategory category, bool LimitLv = false) { var quests = new List(); var PlayerLV = PlayerDatas.Instance.baseData.LV; var NextLV = 0; if (PlayerLV >= DailyQuestLVList[DailyQuestLVList.Count - 1]) { NextLV = PlayerLV; } else { for (int i = 0; i < DailyQuestLVList.Count; i++) { if (DailyQuestLVList[i] > PlayerLV) { NextLV = DailyQuestLVList[i]; break; } } } foreach (var key in dailyQuestOpenTimes.Keys) { //if (key == (int)DailyQuestType.SkyTower && skyTowerModel.allPassed) //{ // continue; //} if (key == (int)DailyQuestType.FairyChuanGong && TimeUtility.OpenDay >= fairyFeastModel.activeOpenday) { continue; } if (key == (int)DailyQuestType.CrossServerBoss && !FuncOpen.Instance.IsFuncOpen(162)) { continue; } if (key == (int)DailyQuestType.CrossServerPk && (TimeUtility.OpenDay < GeneralDefine.crossServerOneVsOneOpenDay || !CrossServerOneVsOnePKSeason.Instance.InPkSeason(TimeUtility.ServerNow))) { continue; } if (key == (int)DailyQuestType.default4 && (TimeUtility.OpenDay < GeneralDefine.crossServerBattleFieldOpenDay)) { continue; } var openTime = dailyQuestOpenTimes[key]; switch (category) { case DailyQuestCategory.EveryDay: if (openTime.always && ShouldShowOnDailyQuestWin(key)) { if (LimitLv) { if (GetDailyQuestLV(key) <= NextLV) { quests.Add(key); } } else { quests.Add(key); } } break; case DailyQuestCategory.TimeLimit: if (!openTime.always) { quests.Add(key); } break; } } switch (category) { case DailyQuestCategory.EveryDay: quests.Sort(EveryDayQuestCompare); break; case DailyQuestCategory.TimeLimit: quests.Sort(TimeLimitQuestCompare); break; } return quests; } public bool TryGetDailyQuest(int _id, out DailyQuestData _data) { return dailyQuests.TryGetValue(_id, out _data); } public bool TryGetActiveValueRewardData(int _id, out DailyQuestActiveValueReward _data) { for (int i = 0; i < dailyQuestActiveValueRewards.Count; i++) { if (dailyQuestActiveValueRewards[i].id == _id) { _data = dailyQuestActiveValueRewards[i]; return true; } } _data = null; return false; } public bool TryGetDailyQuestTimes(int _id, out DailyQuestTimes _dailyQuestTime) { _dailyQuestTime = default(DailyQuestTimes); var config = DailyQuestConfig.Get(_id); if (config != null && config.RelatedType == 1) { return dailyQuestTimes.TryGetValue(config.RelatedID, out _dailyQuestTime); } else { return false; } } public bool IsDailyQuestUnLock(int _dailyQuestId) { var config = DailyQuestConfig.Get(_dailyQuestId); var unlockFunctionId = config.UnLockFuncID; var defaultUnlock = unlockFunctionId == 0 || FuncOpen.Instance.IsFuncOpen(unlockFunctionId); switch ((DailyQuestType)_dailyQuestId) { case DailyQuestType.FairyFeast: case DailyQuestType.FairyGrabBoss: case DailyQuestType.AllianceBoss: return defaultUnlock && PlayerDatas.Instance.baseData.FamilyId > 0; case DailyQuestType.RuneTowerSweep: return ModelCenter.Instance.GetModel().yesterdayPassFloor > 0; case DailyQuestType.GuardSky: return defaultUnlock && fairyModel.SatisfyGuardSkyFairyLv(); case DailyQuestType.FairyLeague: return defaultUnlock && fairyModel.SatisfyOpenFairyLeagueLv(); default: return defaultUnlock; } } public int GetDailyQuestActiveValue(int _dailyQuestId) { var times = GetDailyQuestCompletedTimes(_dailyQuestId); var config = DailyQuestConfig.Get(_dailyQuestId); if (config.OnceActivityTime <= 0) { return 0; } else { return times / config.OnceActivityTime * config.OnceActivity; } } /// true包含当前VIP可增加次数,false则返回含购买的次数 public int GetDailyQuestTotalTimes(int _dailyQuestId, bool includeVip = true) { var config = DailyQuestConfig.Get(_dailyQuestId); switch (config.RelatedType) { case 1: var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); if (dailyQuestOpenTime != null) { switch (config.RelatedID) { case 11: return Math.Max(dailyQuestOpenTime.DayTimes, GetDailyQuestCompletedTimes(_dailyQuestId)); case 9: return worldBossModel.WorldBossMaxCount + m_PackModel.GetItemUsedTimesToday(1129) + m_PackModel.GetItemUsedTimesToday(1128) + m_PackModel.GetItemUsedTimesToday(4680)*3; default: if (dailyQuestOpenTime.DayReKind > 0) { if (dailyQuestTimes.ContainsKey(config.RelatedID)) return dailyQuestOpenTime.DayTimes + dailyQuestTimes[config.RelatedID].dayBuyTimes + dailyQuestTimes[config.RelatedID].dayUseItemTimes; else return dailyQuestOpenTime.DayTimes; } else { return dailyQuestOpenTime.WeekTimes; } return dailyQuestOpenTime.DayReKind > 0 ? dailyQuestOpenTime.DayTimes : dailyQuestOpenTime.WeekTimes; } } else { return 0; } case 2: return dungeonModel.GetTotalTimes(config.RelatedID, includeVip); } return 0; } public int GetDailyQuestCompletedTimes(int _dailyQuestId) { var config = DailyQuestConfig.Get(_dailyQuestId); switch (config.RelatedType) { case 1: if (dailyQuestTimes.ContainsKey(config.RelatedID)) { return dailyQuestTimes[config.RelatedID].completeTimes; } else { return 0; } case 2: DungeonRecord dungeonRecord; if (dungeonModel.TryGetRecord(config.RelatedID, out dungeonRecord)) { return dungeonRecord.enterTimes; } else { return 0; } } return 0; } public int GetDailyQuestCompletedNums(int relatedID) { if (dailyQuestTimes.ContainsKey(relatedID)) { return dailyQuestTimes[relatedID].completeTimes; } else { return 0; } } public int GetDungeonEnterNums(int relatedID) { DungeonRecord dungeonRecord; if (dungeonModel.TryGetRecord(relatedID, out dungeonRecord)) { return dungeonRecord.enterTimes; } else { return 0; } } public int GetDailyQuestIdByDataMapId(int _dataMapId) { if (dungeonToDailyQuestTable.ContainsKey(_dataMapId)) { return dungeonToDailyQuestTable[_dataMapId]; } else { return 0; } } public void OnDailyQuestCompletedTimesUpdate(HA315_tagMCDailyActionCnt _serverInfo) { for (int i = 0; i < _serverInfo.Count; i++) { var dailyAction = _serverInfo.ActionInfo[i]; if (dailyAction.DayFinishCnt > 0) { dailyQuestTimes[(int)dailyAction.ActionID] = new DailyQuestTimes() { completeTimes = dailyAction.DayFinishCnt, dayBuyTimes = dailyAction.DayBuyTimes, dayUseItemTimes = dailyAction.DayItemTimes, }; } else { dailyQuestTimes[(int)dailyAction.ActionID] = new DailyQuestTimes() { completeTimes = (int)dailyAction.WeekFinishCnt, }; } if (dailyActionToDailyQuestTable.ContainsKey((int)dailyAction.ActionID)) { var dailyQuestId = dailyActionToDailyQuestTable[(int)dailyAction.ActionID]; UpdateDailyActionRedpoint(dailyQuestId); } if (dailyQuestProgressUpdateEvent != null) { dailyQuestProgressUpdateEvent((int)dailyAction.ActionID); } } } void OnDungeonRecordChange(int _dungeonId) { if (dungeonToDailyQuestTable.ContainsKey(_dungeonId)) { var dailyQuestId = dungeonToDailyQuestTable[_dungeonId]; UpdateDailyActionRedpoint(dailyQuestId); } } private bool IsGetNewLivenessReward(int OldValue, int NewValue) { foreach (var reward in dailyQuestActiveValueRewards) { if (reward.got) { continue; } var RewardConfig = DailyLivenessRewardConfig.Get(reward.id); if (OldValue < RewardConfig.Liveness && NewValue >= RewardConfig.Liveness) { return true; } } return false; } public void OnDailyQuestActiveValueInfoUpdate(HA333_tagMCDailyActivityInfoList _activeValueInfo) { int OldCurrentActiveValue = currentActiveValue; currentActiveValue = (int)_activeValueInfo.CurValue; currentRewardStageIndex = (int)_activeValueInfo.StageIndex; usableActivePoint = (int)_activeValueInfo.UsableActivePoint; for (int i = 0; i < dailyQuestActiveValueRewards.Count; i++) { var reward = dailyQuestActiveValueRewards[i]; var oldGot = reward.got; dailyQuestActiveValueRewards[i].got = MathUtility.GetBitValue(_activeValueInfo.AwardRecord, (ushort)i); if (oldGot != reward.got) { if (activeValueRewardGotEvent != null) { activeValueRewardGotEvent(reward.id); } } } if (IsGetNewLivenessReward(OldCurrentActiveValue, currentActiveValue)) { LivenessRewardRedPoint.state = RedPointState.Simple; } UpdateActiveValueRedpoint(); } public void RequestGetActiveValueReward(int _id) { var index = 0; for (int i = 0; i < dailyQuestActiveValueRewards.Count; i++) { if (dailyQuestActiveValueRewards[i].id == _id) { index = i; break; } } var sendInfo = new CA504_tagCMPlayerGetReward(); sendInfo.RewardType = (int)GotServerRewardType.Def_RewardType_Activity; sendInfo.DataEx = (uint)index; sendInfo.DataExStrLen = 0; sendInfo.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(sendInfo); } public void RequestGetRealmPoint() { var sendInfo = new CA504_tagCMPlayerGetReward(); sendInfo.RewardType = (int)GotServerRewardType.Def_RewardType_DayRealmPoint; sendInfo.DataExStrLen = 0; sendInfo.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(sendInfo); } public bool TryGetOpenTime(int _id, out DailyQuestOpenTime _openTime) { return dailyQuestOpenTimes.TryGetValue(_id, out _openTime); } public List GetQuestByWeekTimeNode(int _week, int _timeNode) { var quests = new List(); foreach (var item in dailyQuestOpenTimes.Values) { if (item.ContainTimeNode(_week, _timeNode)) { quests.Add(item.id); } } return quests; } /// /// 时间 活动id列表 /// /// /// public Dictionary> GetQuestByWeekTime(int _week) { var timeNodes = new Dictionary>(); foreach (var item in GeneralDefine.dailyQuestOpenTime) { timeNodes[item] = GetQuestByWeekTimeNode(_week, item); } return timeNodes; } private void OnFunctionStateChange(int _functionId) { if (_functionId == 78) { UpdateRedpoints(); DailyQuestActionTimer.Instance.Begin(); } else if (_functionId == 16) { UpdateDailyActionRedpoint((int)DailyQuestType.FairyTask); } } public void UpdateArenaRedPoint() { UpdateDailyActionRedpoint((int)DailyQuestType.ArenaPK); } private void GuardSkyCompleteEvent() { UpdateDailyActionRedpoint((int)DailyQuestType.GuardSky); } private void OnRefreshFairyInfo() { UpdateDailyActionRedpoint((int)DailyQuestType.GuardSky); UpdateDailyActionRedpoint((int)DailyQuestType.FairyLeague); } private void AllianceBossStateRefresh() { UpdateDailyActionRedpoint((int)DailyQuestType.AllianceBoss); } private void OnPlayerDataRefresh(PlayerDataType _refreshType) { switch (_refreshType) { case PlayerDataType.LV: if (PlayerDatas.Instance.baseData.LV == GeneralDefine.dailyQuestRedpointLevelLimit) { UpdateRedpoints(); } else if (PlayerDatas.Instance.baseData.LV > 50) UpdateDailyActionRedpoint((int)DailyQuestType.SkyTower); break; case PlayerDataType.Family: UpdateDailyActionRedpoint((int)DailyQuestType.FairyTask); break; } } private void OnFairyLeagueBattle() { UpdateDailyActionRedpoint((int)DailyQuestType.FairyLeague); } public void UpdateRedpoints() { foreach (var dailyQuest in dailyQuests.Values) { UpdateDailyActionRedpoint(dailyQuest.id); } } private void UpdateDailyActionRedpoint(int _questId) { if (!FuncOpen.Instance.IsFuncOpen(78)) { return; } var dailyQuest = dailyQuests[_questId]; if (dailyQuest.redpoint == null) { return; } DailyQuestOpenTime openTime; if (!TryGetOpenTime(_questId, out openTime)) { return; } var dailyQuestState = GetQuestState(_questId); if (openTime.always) { switch ((DailyQuestType)_questId) { case DailyQuestType.FairyTask: if (PlayerDatas.Instance.baseData.LV <= GeneralDefine.dailyQuestRedpointLevelLimit) { if (FuncOpen.Instance.IsFuncOpen(16) && TaskAllocation.Instance.FairyAuAllNumber() < taskModel.FairyAuTaskCount_Day) { dailyQuest.redpoint.state = RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.Prayer: if (PlayerDatas.Instance.baseData.LV <= GeneralDefine.dailyQuestRedpointLevelLimit) { var completedTimes = GetDailyQuestCompletedTimes(_questId); var totalTimes = GetDailyQuestTotalTimes(_questId); dailyQuest.redpoint.state = prayerModel.redpoint.state != RedPointState.None && completedTimes < totalTimes ? RedPointState.Simple : RedPointState.None; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.BlastStove: case DailyQuestType.PersonalBoss: case DailyQuestType.ElderGodArea: case DailyQuestType.RuneTower: case DailyQuestType.TreasureCollectSoul: case DailyQuestType.Auction: dailyQuest.redpoint.state = RedPointState.None; break; case DailyQuestType.HazyRegion: dailyQuest.redpoint.state = hazyRegionModel.redpoint.state; break; case DailyQuestType.ActivityPlace: dailyQuest.redpoint.state = RedPointState.None; if (FuncOpen.Instance.IsFuncOpen(186)) { if (usableActivePoint > useActivity || ActivityPlaceInfo.RewardCount > 2 || (ActivityPlaceInfo.RewardCount > 0 && ActivityPlaceInfo.PlaceCount == 0)) dailyQuest.redpoint.state = RedPointState.Simple; else dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.SkyTower: var state = RedPointState.None; if (skyTowerModel.redpoint04.state != RedPointState.None) state = skyTowerModel.redpoint04.state; else if (skyTowerModel.redpoint03.state != RedPointState.None) state = skyTowerModel.redpoint03.state; else if (skyTowerModel.IsRecommendNextLevel()) state = RedPointState.Simple; dailyQuest.redpoint.state = state; break; case DailyQuestType.DungeonAssist: break; case DailyQuestType.ArenaPK: dailyQuest.redpoint.state = RedPointState.None; var _funcOpenLv = FuncOpenLVConfig.Get((int)FuncOpenEnum.default6); if (PlayerDatas.Instance.baseData.LV >= _funcOpenLv.LimitLV && !ArenaManager.isArenaOver) { dailyQuest.redpoint.state = RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; default: if (PlayerDatas.Instance.baseData.LV <= GeneralDefine.dailyQuestRedpointLevelLimit && dailyQuestState == DailyQuestState.Normal) { dailyQuest.redpoint.state = RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; } } else { var dailyQuestConfig = DailyQuestConfig.Get(_questId); var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dailyQuestConfig.RelatedType == 2 && dataMapId == dailyQuestConfig.RelatedID) { dailyQuest.redpoint.state = RedPointState.None; } else { var completedTimes = GetDailyQuestCompletedTimes(dailyQuest.id); var totalTimes = GetDailyQuestTotalTimes(dailyQuest.id); switch ((DailyQuestType)_questId) { case DailyQuestType.HeavenBattle: case DailyQuestType.FairyFeast: if ((dailyQuestState == DailyQuestState.Normal && completedTimes < totalTimes)) { dailyQuest.redpoint.state = RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.FairyLeague: if (dailyQuestState == DailyQuestState.Normal) { var error = 0; dailyQuest.redpoint.state = fairyLeagueModel.SatisfyEnterLeague(out error) ? RedPointState.Simple : RedPointState.None; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.FairyGrabBoss: case DailyQuestType.AllianceBoss: case DailyQuestType.RidingPetActivity: if (dailyQuestState == DailyQuestState.Normal && !allianceBossModel.isActivityOver) { dailyQuest.redpoint.state = completedTimes >= totalTimes ? RedPointState.None : RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.CrossServerPk: if (CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch && FuncOpen.Instance.IsFuncOpen(157)) { dailyQuest.redpoint.state = completedTimes >= totalTimes ? RedPointState.None : RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.default4: if(ILCrossServerModel.Instance.IsOpen()) { dailyQuest.redpoint.state = completedTimes >= totalTimes ? RedPointState.None : RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.FairyChuanGong: if (dailyQuestState == DailyQuestState.Normal) { dailyQuest.redpoint.state = completedTimes >= totalTimes ? RedPointState.None : RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; case DailyQuestType.default3: if (dailyQuestState == DailyQuestState.Normal) { dailyQuest.redpoint.state = fairyNewModel.sitRedpoint.state; } else { dailyQuest.redpoint.state = RedPointState.None; } break; default: if (dailyQuestState == DailyQuestState.Normal) { dailyQuest.redpoint.state = RedPointState.Simple; } else { dailyQuest.redpoint.state = RedPointState.None; } break; } } } } private void UpdateActiveValueRedpoint() { var count = dailyQuestActiveValueRewards.Count; var anyAwardable = false; for (int i = 0; i < count; i++) { var reward = dailyQuestActiveValueRewards[i]; if (!reward.got) { var config = DailyLivenessRewardConfig.Get(reward.id); if (currentActiveValue >= config.Liveness) { anyAwardable = true; break; } } } activeValueRedpoint.state = anyAwardable ? RedPointState.Simple : RedPointState.None; } private int EveryDayQuestCompare(int _lhs, int _rhs) { var state1 = GetQuestState(_lhs); var state2 = GetQuestState(_rhs); var config1 = DailyQuestConfig.Get(_lhs); var config2 = DailyQuestConfig.Get(_rhs); if (state1 == state2) { return config1.order < config2.order ? -1 : 1; } else { if (state1 == DailyQuestState.Completed) { return 1; } else if (state2 == DailyQuestState.Completed) { return -1; } else if (state1 == DailyQuestState.Locked) { return 1; } else if (state2 == DailyQuestState.Locked) { return -1; } else if (state1 == DailyQuestState.CanBuyTimes) { return 1; } else if (state2 == DailyQuestState.CanBuyTimes) { return -1; } else { return config1.order < config2.order ? -1 : 1; } } } private int TimeLimitQuestCompare(int _lhs, int _rhs) { var unLock1 = IsDailyQuestUnLock(_lhs); var unLock2 = IsDailyQuestUnLock(_rhs); if (unLock1 && !unLock2) { return -1; } else if (!unLock1 && unLock2) { return 1; } else { DailyQuestOpenTime openTime1; TryGetOpenTime(_lhs, out openTime1); DailyQuestOpenTime openTime2; TryGetOpenTime(_rhs, out openTime2); var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek; var isActiveDay1 = openTime1.always || openTime1.GetHourMinuteByWeek(dayOfWeek) != null; var isActiveDay2 = openTime2.always || openTime2.GetHourMinuteByWeek(dayOfWeek) != null; if (isActiveDay1 && !isActiveDay2) { return -1; } else if (!isActiveDay1 && isActiveDay2) { return 1; } else { var inOpenTime1 = openTime1.InOpenTime(); var inOpenTime2 = openTime2.InOpenTime(); if (inOpenTime1 && !inOpenTime2) { return -1; } else if (!inOpenTime1 && inOpenTime2) { return 1; } else if (!inOpenTime1 && !inOpenTime2) { var serverHour = TimeUtility.ServerNow.Hour; var serverMinute = TimeUtility.ServerNow.Minute; HourMinute hourMinute1; var miss1 = openTime1.TryGetTodayNearestOpenTime(out hourMinute1) && hourMinute1.AfterOpenTime(serverHour, serverMinute); HourMinute hourMinute2; var miss2 = openTime2.TryGetTodayNearestOpenTime(out hourMinute2) && hourMinute2.AfterOpenTime(serverHour, serverMinute); if (!miss1 && miss2) { return -1; } else if (miss1 && !miss2) { return 1; } else { return HourMinute.Compare(hourMinute1, hourMinute2); } } else { return _lhs < _rhs ? -1 : 1; } } } } private bool ShouldShowOnDailyQuestWin(int _dailyQuestId) { switch ((DailyQuestType)_dailyQuestId) { case DailyQuestType.BossHome: var bossHomeModel = ModelCenter.Instance.GetModel(); var vipLevel = PlayerDatas.Instance.baseData.VIPLv; return vipLevel >= bossHomeModel.GetFloorVipRequirement(1); case DailyQuestType.PersonalBoss: return ModelCenter.Instance.GetModel().GetTotalTimes(PersonalBossModel.PERSONALBOSS_MAPID) > 0; case DailyQuestType.FairyChuanGong: if (TimeUtility.OpenDay > 6) return false; return true; default: return true; } } public DailyQuestState GetQuestState(int _dailyQuestId) { var isUnLocked = IsDailyQuestUnLock(_dailyQuestId); if (!isUnLocked) { return DailyQuestState.Locked; } DailyQuestOpenTime openTime; if (TryGetOpenTime(_dailyQuestId, out openTime)) { var inOpenTime = openTime.InOpenTime(); if (!inOpenTime) { return DailyQuestState.OutTime; } } switch ((DailyQuestType)_dailyQuestId) { case DailyQuestType.HeavenBattle: case DailyQuestType.FairyFeast: case DailyQuestType.FairyLeague: case DailyQuestType.FairyGrabBoss: case DailyQuestType.AncientBattleGround: case DailyQuestType.RidingPetActivity: return DailyQuestState.Normal; case DailyQuestType.GuardSky: if (!fairyModel.completeGuardSky) { return DailyQuestState.Normal; } break; case DailyQuestType.AllianceBoss: return DailyQuestState.Normal; case DailyQuestType.Prayer: if (modelPray.GetAllCoinPrayCnt() == modelPray.coinPrayerCnt && modelPray.GetAllExpPrayCnt() == modelPray.expPrayerCnt) { return DailyQuestState.Completed; } break; case DailyQuestType.default3: if (fairyNewModel.sitRound == fairyNewModel.sitMaxRound) { return DailyQuestState.Completed; } break; } var completedTimes = GetDailyQuestCompletedTimes(_dailyQuestId); var totalTimes = GetDailyQuestTotalTimes(_dailyQuestId); var config = DailyQuestConfig.Get(_dailyQuestId); if (completedTimes >= totalTimes) { switch (config.RelatedType) { case 1: var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); switch (config.RelatedID) { case 11: { if (completedTimes >= dailyQuestOpenTime.DayTimes + GeneralDefine.runeTowerSweepBuyTimes) { return DailyQuestState.Completed; } else { return DailyQuestState.CanBuyTimes; } } case 25: { if (!hazyRegionModel.IsAllIncidentComplete()) { //还有未寻访的小事件 return DailyQuestState.Normal; } else { return DailyQuestState.CanBuyTimes; } } case 19: default: return DailyQuestState.Completed; } case 2: DungeonRecord record; dungeonModel.TryGetRecord(config.RelatedID, out record); var buyTimes = record != null ? record.buyTimes : 0; var buyTimesLimit = dungeonModel.GetBuyTimesLimit(config.RelatedID); return buyTimes >= buyTimesLimit ? DailyQuestState.Completed : DailyQuestState.CanBuyTimes; } } return DailyQuestState.Normal; } public static string GetDailyQuestUnLockDescription(int _dailyQuestId) { var type = (DailyQuestType)_dailyQuestId; var dailyConfig = DailyQuestConfig.Get(_dailyQuestId); if (type == DailyQuestType.FairyFeast || type == DailyQuestType.FairyGrabBoss) { if (PlayerDatas.Instance.fairyData.HasFairy) { var config = FuncOpenLVConfig.Get(dailyConfig.UnLockFuncID); if (config.LimitMissionID > 0) { var taskConfig = PyTaskConfig.Get(config.LimitMissionID); return Language.Get("DailyQuestwin2", taskConfig.lv); } else { return Language.Get("LoadIconLV", FuncOpen.Instance.GetLimitLv(dailyConfig.UnLockFuncID)); } } else { return Language.Get("DailyQuestWin_Participate"); } } var _fairyModel = ModelCenter.Instance.GetModel(); switch (type) { case DailyQuestType.AllianceBoss: if (!PlayerDatas.Instance.fairyData.HasFairy) { return Language.Get("DailyQuestWin_Participate"); } break; case DailyQuestType.GuardSky: if (!PlayerDatas.Instance.fairyData.HasFairy) { return Language.Get("DailyQuestWin_Participate"); } if (!_fairyModel.SatisfyGuardSkyFairyLv()) { return Language.Get("DailyquestXMLevel", _fairyModel.guardSkyOpenFairyLv); } break; case DailyQuestType.FairyLeague: if (!PlayerDatas.Instance.fairyData.HasFairy) { return Language.Get("DailyQuestWin_Participate"); } if (!_fairyModel.SatisfyOpenFairyLeagueLv()) { return Language.Get("DailyquestXMLevel", _fairyModel.fairyLeagueLimit); } break; } var description = string.Empty; var treasureModel = ModelCenter.Instance.GetModel(); var functionConfig = FuncOpenLVConfig.Get(dailyConfig.UnLockFuncID); if (functionConfig == null) { description = Language.Get("DailyQuest_NoLevelLimit"); } else if (functionConfig.LimitMagicWeapon > 0) { Treasure treasure = null; if (treasureModel.TryGetTreasure(functionConfig.LimitMagicWeapon / 100, out treasure)) { var treasureConfig = TreasureConfig.Get(functionConfig.LimitMagicWeapon / 100); description = Language.Get("DailyQuestwin1", treasureConfig.Name); } } else if (functionConfig.LimitMissionID > 0) { var config = PyTaskConfig.Get(functionConfig.LimitMissionID); description = Language.Get("DailyQuestwin2", config.lv); } else { description = Language.Get("LoadIconLV", functionConfig.LimitLV); } if (type == DailyQuestType.RuneTowerSweep && FuncOpen.Instance.IsFuncOpen(80)) { var runeTowerModel = ModelCenter.Instance.GetModel(); if (runeTowerModel.yesterdayPassFloor <= 0) { var runeModel = ModelCenter.Instance.GetModel(); if (runeModel.passRuneTowerFloor > 0) { description = Language.Get("DailyQuestwin4"); } else { description = Language.Get("DailyQuestwin3"); } } } return description; } //通过日常任务表->日常活动表-》界面索引表 void SetURLJump(int id) { var currentMapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID); if (currentMapConfig.MapFBType != 0) { SysNotifyMgr.Instance.ShowTip("DungeonNoGO"); return; } var config = DailyQuestConfig.Get(id); var TimeConfig = DailyQuestOpenTimeConfig.Get(config.RelatedID); WindowJumpMgr.Instance.WindowJumpTo((JumpUIType)TimeConfig.OpenUI); } public void GotoDailyQuest(int _id) { switch ((DailyQuestType)_id) { case DailyQuestType.default2: //情缘副本 WindowCenter.Instance.Open("WeddingWin", false, 2); break; case DailyQuestType.ArenaPK: //WindowCenter.Instance.Open("ArenaWin"); SetURLJump(_id); break; case DailyQuestType.FairyLand: GotoNormalDungeon(_id); break; case DailyQuestType.IceCrystal: WindowCenter.Instance.Open(); break; case DailyQuestType.GuardSky: var _fairyModel = ModelCenter.Instance.GetModel(); if (!_fairyModel.SatisfyGuardSkyFairyLv()) { SysNotifyMgr.Instance.ShowTip("GuardSkyOpenLvError", _fairyModel.guardSkyOpenFairyLv); break; } if (_fairyModel.completeGuardSky) { SysNotifyMgr.Instance.ShowTip("TheEmperor1"); break; } GotoNormalDungeon(_id); break; case DailyQuestType.Kirin: GotoMultipleDifficultyDungeon(_id); break; case DailyQuestType.BountyMission: WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.BountyInterface); break; case DailyQuestType.Demon: GotoChaosDemon(_id); break; case DailyQuestType.Trial: GotoTrial(); break; case DailyQuestType.default5: case DailyQuestType.default6: case DailyQuestType.default7: case DailyQuestType.default8: case DailyQuestType.default9: GotoCommonTrial(_id); break; case DailyQuestType.BlastStove: GotoBlastStove(); break; case DailyQuestType.AncientBattleGround: GotoNormalDungeon(_id, dungeonModel.GetBelongToLine(_id)); break; case DailyQuestType.EmperorRelic: GotoNuwa(); break; case DailyQuestType.WyTaiChi: GotoTaiChiDungeon(_id); break; case DailyQuestType.HeavenBattle: GotoHeavenBattleDungeon(_id); break; case DailyQuestType.Prayer: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); WindowCenter.Instance.Close(); break; case DailyQuestType.WorldBoss: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; case DailyQuestType.DemonJar: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 0); break; case DailyQuestType.FairyTask: WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.UnionTask); break; case DailyQuestType.FairyLeague: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 4); break; case DailyQuestType.FairyFeast: dungeonModel.SingleChallenge(31230); break; case DailyQuestType.RuneTowerSweep: RuneTowerWin.guideSweep = true; WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; case DailyQuestType.BossHome: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 2); break; case DailyQuestType.PersonalBoss: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 3); break; case DailyQuestType.ElderGodArea: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 4); break; case DailyQuestType.RuneTower: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; case DailyQuestType.TreasureCollectSoul: GotoTreasureCollectSoul(); break; case DailyQuestType.DungeonAssist: WindowCenter.Instance.Open(); break; case DailyQuestType.FairyGrabBoss: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; case DailyQuestType.KillMonster: var point = mapModel.GetRecommendHangPoint(); var mapEventConfig = MapEventPointConfig.Get(point); mapModel.wannaLookLocalMap = mapEventConfig.DataMapID; WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); break; case DailyQuestType.GatherSoulDungeon: GotoNormalDungeon(_id, 0); break; case DailyQuestType.CrossServerPk: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 0); break; case DailyQuestType.default4: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 3); break; case DailyQuestType.AllianceBoss: GotoAllianceBoss(_id, 0); break; case DailyQuestType.RidingPetActivity: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; case DailyQuestType.HazyRegion: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); break; case DailyQuestType.ActivityPlace: WindowCenter.Instance.Open(); break; case DailyQuestType.SkyTower: GotoSkyTower(); break; case DailyQuestType.Auction: GotoAuction(); break; case DailyQuestType.JadeDynastyBoss: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 5); break; case DailyQuestType.CrossServerBoss: WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 1); break; default: SetURLJump(_id); break; } WindowJumpMgr.Instance.ClearJumpData(); } private void GotoTaiChiDungeon(int _dailyQuestId, int _lineId = 0) { if (VersionConfig.Get().isBanShu) { return; } var config = DailyQuestConfig.Get(_dailyQuestId); currentDailyQuest = config.ID; dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); WindowCenter.Instance.Open(); } private void GotoHeavenBattleDungeon(int _dailyQuestId, int _lineId = 0) { var config = DailyQuestConfig.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); WindowCenter.Instance.Open(); } private void GotoNormalDungeon(int _dailyQuestId, int _lineId = 0) { var config = DailyQuestConfig.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); WindowCenter.Instance.Open(); } private void GotoMultipleDifficultyDungeon(int _dailyQuestId) { var config = DailyQuestConfig.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); dungeonModel.selectedKylinDungeon = default(Dungeon); WindowCenter.Instance.Open(); } private void GotoChaosDemon(int _dailyQuestId) { var completedTimes = GetDailyQuestCompletedTimes(_dailyQuestId); var totalTimes = GetDailyQuestTotalTimes(_dailyQuestId); if (completedTimes >= totalTimes) { if (DayRemind.Instance.GetDayRemind(DayRemind.DUNGEON_DEMON_TIP)) { GotoNormalDungeon(_dailyQuestId); } else { ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("TodayDungeonComplete"), Language.Get("TodayNoNotify"), (bool isOk, bool isToggle) => { if (isOk) { GotoNormalDungeon(_dailyQuestId); } if (isToggle) { DayRemind.Instance.SetDayRemind(DayRemind.DUNGEON_DEMON_TIP, true); } }); } return; } GotoNormalDungeon(_dailyQuestId); } private void GotoNuwa() { var id = (int)DailyQuestType.EmperorRelic; var completedTimes = GetDailyQuestCompletedTimes(id); var totalTimes = GetDailyQuestTotalTimes(id); if (completedTimes >= totalTimes) { if (DayRemind.Instance.GetDayRemind(DayRemind.DUNGEON_RELIC_TIP)) { GotoNormalDungeon(id); } else { ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("TodayDungeonComplete"), Language.Get("TodayNoNotify"), (bool isOk, bool isToggle) => { if (isOk) { GotoNormalDungeon(id); } if (isToggle) { DayRemind.Instance.SetDayRemind(DayRemind.DUNGEON_RELIC_TIP, true); } }); } return; } GotoNormalDungeon(id); } private void GotoTrial() { var id = (int)DailyQuestType.Trial; var config = DailyQuestConfig.Get(id); var completedTimes = GetDailyQuestCompletedTimes(id); var totalTimes = GetDailyQuestTotalTimes(id); if (completedTimes >= totalTimes) { if (DayRemind.Instance.GetDayRemind(DayRemind.DUNGEON_TRIAL_TIP)) { WindowCenter.Instance.Close(); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); WindowCenter.Instance.Open(); } else { ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("TodayTrialComplete"), Language.Get("TodayNoNotify"), (bool isOk, bool isToggle) => { if (isOk) { WindowCenter.Instance.Close(); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); WindowCenter.Instance.Open(); } if (isToggle) { DayRemind.Instance.SetDayRemind(DayRemind.DUNGEON_TRIAL_TIP, true); } }); } return; } WindowCenter.Instance.Close(); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); WindowCenter.Instance.Open(); } //通用的材料副本 private void GotoCommonTrial(int id) { var config = DailyQuestConfig.Get(id); commonDungeonSelectModel.selectDailyQuestType = id; WindowCenter.Instance.Close(); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); WindowCenter.Instance.Open(); } private void GotoBlastStove() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); } private void GotoBountyMission() { var inDungeon = MapUtility.IsDungeon(PlayerDatas.Instance.baseData.MapID); if (inDungeon) { SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); } else { taskModel.DailyBountyMove(); WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); } } private void GotoAllianceBoss(int id, int lineId) { WindowCenter.Instance.Open(false, 3); } private void GotoTreasureCollectSoul() { var treasureModel = ModelCenter.Instance.GetModel(); var treasures = treasureModel.GetTreasureCategory(TreasureCategory.Human); var gotoTreasureId = 0; for (int i = treasures.Count - 1; i >= 0; i--) { if (IsTreasureCollectSoul(treasures[i])) { gotoTreasureId = treasures[i]; break; } } if (gotoTreasureId == 0) { for (int i = 0; i < treasures.Count; i++) { Treasure treasure; if (treasureModel.TryGetTreasure(treasures[i], out treasure)) { if (treasure != null && (treasure.state == TreasureState.Locked || treasure.state == TreasureState.Collecting)) { gotoTreasureId = treasure.id; break; } } } } WindowCenter.Instance.Close(); if (gotoTreasureId == 0) { treasureModel.currentCategory = TreasureCategory.Human; WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureFunc1); } } private void GotoSkyTower() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 0); } private void GotoAuction() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 0); } private bool IsTreasureCollectSoul(int _treasureId) { return false; } public int GetDailyQuestLV(int id) { var QuestConfig = DailyQuestConfig.Get(id); var LVConfig = FuncOpenLVConfig.Get(QuestConfig.UnLockFuncID); int NeedLV = 0; if (LVConfig.LimitLV != 0) { NeedLV = LVConfig.LimitLV; } else { if (LVConfig.LimitMissionID != 0) { var TaskConfig = PyTaskConfig.Get(LVConfig.LimitMissionID); NeedLV = TaskConfig == null ? NeedLV : TaskConfig.lv; } } return NeedLV; } private void ParseConfig() { var allConfigs = DailyQuestConfig.GetValues(); var redpointIndex = 1; foreach (var config in allConfigs) { if (VersionConfig.Get().isBanShu && config.ID == 12) { continue; } var openTime = default(DailyQuestOpenTime); var redpointParent = 0; switch (config.RelatedType) { case 1: var NeedLV = GetDailyQuestLV(config.ID); if (!DailyQuestLVList.Contains(NeedLV)) { bool bIsAdd = false; for (int i = 0; i < DailyQuestLVList.Count; i++) { if (NeedLV < DailyQuestLVList[i]) { DailyQuestLVList.Insert(i, NeedLV); bIsAdd = true; break; } } if (!bIsAdd) { DailyQuestLVList.Add(NeedLV); } } var activityOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID); openTime.ParseQuestNormalOpenTime(activityOpenTime); openTime.ParseQuestSpecialOpenTimes(DailyQuestSpecialOpenTimeConfig.GetDailyQuestTimes(config.RelatedID)); openTime.ParseQuestMixServerOpenTime(DailyQuestMixServerStateTimeConfig.GetDailyQuestTimes(config.RelatedID)); dailyActionToDailyQuestTable[config.RelatedID] = config.ID; break; case 2: var dungeonOpenTimes = DungeonStateTimeConfig.DungeonStateCanEnterFB(config.RelatedID); openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID); openTime.ParseDungeonNormalOpenTimes(dungeonOpenTimes); openTime.ParseDungeonSpecialOpenTimes(DungeonSpecialStateTimeConfig.GetDungeonTimes(config.RelatedID)); openTime.ParseDungeonMixServerOpenTimes(DungeonMixServerStateTimeConfig.GetDungeonTimes(config.RelatedID)); dungeonToDailyQuestTable[config.RelatedID] = config.ID; break; } redpointParent = openTime.always ? EVERYDAY_REDPOINTID : TIMELIMIT_REDPOINTID; dailyQuests[config.ID] = new DailyQuestData(config.ID, DAILYQUEST_REDPOINTIDBASE + redpointIndex++, redpointParent); } var allRewardKeys = DailyLivenessRewardConfig.GetKeys(); m_DailyQuestTotalActiveValue = DailyLivenessRewardConfig.Get(allRewardKeys[allRewardKeys.Count - 1]).Liveness; useActivity = int.Parse(FuncConfigConfig.Get("ActivityPlace").Numerical2); //单次消耗活跃点 } public enum DailyQuestCategory { EveryDay = 1, TimeLimit = 2, //后续IL开发添加预设 default1, default2, default3, default4, default5, } public enum DailyQuestState { Locked = 0, OutTime = 2, Normal = 3, CanBuyTimes = 5, Completed = 6, } BuffModel m_BuffModel; BuffModel BuffModel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel()); } } public HB027_tagMCActivityPlaceInfo ActivityPlaceInfo = new HB027_tagMCActivityPlaceInfo(); public event Action ActivityPlaceInfoEvent; public void OnActivityPlaceInfo(HB027_tagMCActivityPlaceInfo pack) { ActivityPlaceInfo = pack; UpdateDailyActionRedpoint((int)DailyQuestType.ActivityPlace); if (ActivityPlaceInfoEvent != null) ActivityPlaceInfoEvent(); if (pack.PlaceCount != 0) { H0605_tagObjAddBuff _h0605 = new H0605_tagObjAddBuff() { ObjType = (byte)GameObjType.gotPlayer, ObjID = PlayerDatas.Instance.PlayerId, BuffType = (int)E_BuffType.bfBuff, SkillID = 22218, LastTime = 0, }; if (!buffModel._BuffDic.ContainsKey(_h0605.SkillID)) { StatusMgr.Instance.Request(_h0605); BuffModel.ObjAddBuff(_h0605); } } else { H0606_tagObjDelBuff vNetData = new H0606_tagObjDelBuff() { ObjType = (byte)GameObjType.gotPlayer, ObjID = PlayerDatas.Instance.PlayerId, BuffType = (int)E_BuffType.bfBuff, SkillID = 22218, }; StatusMgr.Instance.Release(vNetData); BuffModel.ObjDelBuff((int)vNetData.ObjID, (int)vNetData.SkillID); } } } }