| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System; | 
| using LitJson; | 
|   | 
|   | 
| public class DailyQuestModel : GameSystemManager<DailyQuestModel> | 
| { | 
|     const int EVERYDAY_REDPOINTID = 78001; | 
|     const int DAILYQUEST_REDPOINTIDBASE = 78100; | 
|     const int ACTIVEVALUE_REDPOINT = 78004; | 
|   | 
|     Redpoint activeValueRedpoint = new Redpoint(EVERYDAY_REDPOINTID, ACTIVEVALUE_REDPOINT); //活跃度奖励红点 | 
|   | 
|     int m_DailyQuestTotalActiveValue = 0; | 
|     public int dailyQuestTotalActiveValue | 
|     { | 
|         get { return m_DailyQuestTotalActiveValue; } | 
|     } | 
|   | 
|     Dictionary<int, DailyQuestTimes> dailyQuestTimes = new Dictionary<int, DailyQuestTimes>();//除了副本的其他任务放在这里 | 
|     Dictionary<int, int> dailyActionToDailyQuestTable = new Dictionary<int, int>(); | 
|     List<int> DailyQuestLVList = new List<int>(); | 
|     Dictionary<int, DailyQuestOpenTime> dailyQuestOpenTimes = new Dictionary<int, DailyQuestOpenTime>(); | 
|     Dictionary<int, DailyQuestData> dailyQuests = new Dictionary<int, DailyQuestData>(); | 
|     List<DailyQuestActiveValueReward> dailyQuestActiveValueRewards = new List<DailyQuestActiveValueReward>(); | 
|   | 
|   | 
|     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(); | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     public event Action<int> dailyQuestProgressUpdateEvent; | 
|     public event Action currentActiveValueUpdateEvent; | 
|   | 
|     public override void Init() | 
|     { | 
|         ParseConfig(); | 
|     } | 
|   | 
|     public override void Release() | 
|     { | 
|     } | 
|   | 
|     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); | 
|   | 
|             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); | 
|                     dailyActionToDailyQuestTable[config.RelatedID] = config.ID; | 
|                     break; | 
|                 case 2: | 
|   | 
|                     break; | 
|             } | 
|   | 
|             dailyQuests[config.ID] = new DailyQuestData(config.ID, DAILYQUEST_REDPOINTIDBASE + redpointIndex++, EVERYDAY_REDPOINTID); | 
|         } | 
|   | 
|         var allRewardKeys = DailyLivenessRewardConfig.GetKeys(); | 
|         m_DailyQuestTotalActiveValue = DailyLivenessRewardConfig.Get(allRewardKeys[allRewardKeys.Count - 1]).Liveness; | 
|   | 
|         var values = DailyLivenessRewardConfig.GetValues(); | 
|         for (int i = 0; i < allRewardKeys.Count; i++) | 
|         { | 
|             var config = DailyLivenessRewardConfig.Get(allRewardKeys[i]); | 
|             dailyQuestActiveValueRewards.Add(new DailyQuestActiveValueReward(config.id)); | 
|         } | 
|   | 
|         dailyQuestActiveValueRewards.Sort((x, y) => { return x.id.CompareTo(y.id); }); | 
|   | 
|     } | 
|   | 
|   | 
|   | 
|   | 
|     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); | 
|             } | 
|         } | 
|     } | 
|   | 
|     public int GetDailyQuestLV(int id) | 
|     { | 
|         var QuestConfig = DailyQuestConfig.Get(id); | 
|         var LVConfig = FuncOpenLVConfig.Get(QuestConfig.UnLockFuncID); | 
|         if (LVConfig == null) | 
|         {  | 
|             Debug.LogError($"DailyQuestConfig.Get({id}) == null"); | 
|             return 9999999; | 
|         } | 
|         int NeedLV = 0; | 
|         if (LVConfig.LimitLV != 0) | 
|         { | 
|             NeedLV = LVConfig.LimitLV; | 
|         } | 
|         else if (LVConfig.LimitMissionID != 0) | 
|         { | 
|   | 
|         } | 
|         return NeedLV; | 
|     } | 
|   | 
|     public void OnDailyQuestActiveValueInfoUpdate(HA333_tagMCDailyActivityInfoList _activeValueInfo) | 
|     { | 
|         int OldCurrentActiveValue = currentActiveValue; | 
|         currentActiveValue = (int)_activeValueInfo.CurValue; | 
|         currentRewardStageIndex = (int)_activeValueInfo.StageIndex; | 
|   | 
|         UpdateActiveValueRedpoint(); | 
|     } | 
|      | 
|     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; | 
|     } | 
|   | 
|   | 
| } |