//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, September 16, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System; namespace Snxxz.UI { [XLua.LuaCallCSharp] public class DailyQuestModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IMapInitOk { const int DAILYQUEST_REDPOINTID = 78000; const int EVERYDAY_REDPOINTID = 78001; const int TIMELIMIT_REDPOINTID = 78002; const int ACTIVEVALUE_REDPOINT = 78004; const int REALMPOINT_REPOINT = 78005; const int DAILYQUEST_REDPOINTIDBASE = 78100; const int TRIALEXCHANGE_REDPOINTID = 78006; 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); Redpoint realmPointRedpoint = new Redpoint(EVERYDAY_REDPOINTID, REALMPOINT_REPOINT); 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_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(); } } } } 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>>(); 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(); } } public event Action activeValueRewardGotEvent; public event Action dailyQuestProgressUpdateEvent; public event Action currentActiveValueUpdateEvent; 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)); } 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; } 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; } public void OnPlayerLoginOk() { DailyQuestActionTimer.Instance.Begin(); } public void OnBeforePlayerDataInitialize() { currentActiveValue = 0; } public void OnMapInitOk() { UpdateRedpoints(); } public List GetDailyQuests() { return new List(dailyQuests.Keys); } public List GetDailyQuests(DailyQuestCategory _category) { var quests = new List(); foreach (var key in dailyQuestOpenTimes.Keys) { var openTime = dailyQuestOpenTimes[key]; switch (_category) { case DailyQuestCategory.EveryDay: if (openTime.always && ShouldShowOnDailyQuestWin(key)) { quests.Add(key); } break; case DailyQuestCategory.TimeLimit: if (!openTime.always) { if ((DailyQuestType)key == DailyQuestType.CrossServerPk) { if (TimeUtility.OpenDay >= GeneralDefine.crossServerOneVsOneOpenDay && CrossServerOneVsOnePKSeason.Instance.InPkSeason(TimeUtility.ServerNow)) { quests.Add(key); } } else { 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.FairyTask: 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; } } public int GetDailyQuestTotalTimes(int _dailyQuestId) { 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 25: if (dailyQuestTimes.ContainsKey(config.RelatedID)) { return dailyQuestOpenTime.DayTimes + dailyQuestTimes[config.RelatedID].dayBuyTimes + dailyQuestTimes[config.RelatedID].dayUseItemTimes; } else { return dailyQuestOpenTime.DayTimes; } default: return dailyQuestOpenTime.DayReKind > 0 ? dailyQuestOpenTime.DayTimes : dailyQuestOpenTime.WeekTimes; } } else { return 0; } case 2: return dungeonModel.GetTotalTimes(config.RelatedID); } 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); } } public void OnDailyQuestActiveValueInfoUpdate(HA333_tagMCDailyActivityInfoList _activeValueInfo) { currentActiveValue = (int)_activeValueInfo.CurValue; currentRewardStageIndex = (int)_activeValueInfo.StageIndex; 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); } } } 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(); } } 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(); } 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 dailyQuestState = GetQuestState(_questId); var dailyQuest = dailyQuests[_questId]; if (dailyQuest.redpoint != null) { DailyQuestOpenTime openTime; if (TryGetOpenTime(_questId, out openTime)) { if (openTime.always) { switch ((DailyQuestType)_questId) { case DailyQuestType.FairyTask: case DailyQuestType.BlastStove: case DailyQuestType.Prayer: case DailyQuestType.PersonalBoss: case DailyQuestType.ElderGodArea: case DailyQuestType.RuneTower: case DailyQuestType.TreasureCollectSoul: dailyQuest.redpoint.state = RedPointState.None; break; case DailyQuestType.DungeonAssist: break; default: if (PlayerDatas.Instance.baseData.LV <= GeneralDefine.dailyQuestRedpointLevelLimit && (dailyQuestState == DailyQuestState.CanBuyTimes || 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.CanBuyTimes || (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: if (dailyQuestState == DailyQuestState.Normal) { 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; default: if (dailyQuestState == DailyQuestState.CanBuyTimes || 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; 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: return DailyQuestState.Normal; case DailyQuestType.GuardSky: if (!fairyModel.completeGuardSky) { return DailyQuestState.Normal; } break; case DailyQuestType.AllianceBoss: if (allianceBossModel.isActivityOver) { return DailyQuestState.Completed; } return DailyQuestState.Normal; } var completedTimes = GetDailyQuestCompletedTimes(_dailyQuestId); var totalTimes = GetDailyQuestTotalTimes(_dailyQuestId); var config = DailyQuestConfig.Get(_dailyQuestId); if (completedTimes >= totalTimes) { switch (config.RelatedType) { case 1: switch (config.RelatedID) { case 11: { var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); if (completedTimes >= dailyQuestOpenTime.DayTimes + GeneralDefine.runeTowerSweepBuyTimes) { return DailyQuestState.Completed; } else { return DailyQuestState.CanBuyTimes; } } case 19: return DailyQuestState.Normal; case 25: { var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); if (completedTimes >= dailyQuestOpenTime.DayTimes + dailyQuestOpenTime.DayBuyTimes + dailyQuestOpenTime.DayItemAddTimes) { return DailyQuestState.Completed; } else { return DailyQuestState.CanBuyTimes; } } 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.FairyTask || type == DailyQuestType.FairyGrabBoss) { if (PlayerDatas.Instance.fairyData.HasFairy) { return StringUtility.Contact(FuncOpen.Instance.GetLimitLv(dailyConfig.UnLockFuncID), Language.Get("Z1041")); } 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.LimitLV > 0 && functionConfig.LimitMissionID > 0) { var config = PyTaskConfig.Get(functionConfig.LimitMissionID); var taskInfoConfig = TASKINFOConfig.Get(config.name); description = Language.Get("DailyQuestwin2", functionConfig.LimitLV); } else if (functionConfig.LimitMissionID > 0) { var config = PyTaskConfig.Get(functionConfig.LimitMissionID); var taskInfoConfig = TASKINFOConfig.Get(config.name); description = Language.Get("DailyQuestwin8"); } else { description = StringUtility.Contact(functionConfig.LimitLV, Language.Get("Z1041")); } 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; } 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 activityOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID); openTime = dailyQuestOpenTimes[config.ID] = new DailyQuestOpenTime(config.ID); openTime.ParseQuestNormalOpenTime(activityOpenTime.OpenTime, activityOpenTime.Duration); 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); } } public enum DailyQuestCategory { EveryDay = 1, TimeLimit = 2, } public enum DailyQuestState { Locked = 0, OutTime = 2, Normal = 3, CanBuyTimes = 5, Completed = 6, } } }