void ProcessQuestList(RawQuestList rpData)
        {
            if (rpData != null && rpData.Quests != null)
                foreach (var rRawQuest in rpData.Quests)
                {
                    ProgressInfo rProgressInfo;
                    if (Progresses.TryGetValue(rRawQuest.ID, out rProgressInfo))
                        rProgressInfo.ResetType = rRawQuest.Type;
                }

            var rQuests = KanColleGame.Current.Port.Quests.Table;
            if (GetResetTime(QuestType.Daily) > r_LastProcessTime)
            {
                var rOutdatedProgresses = Progresses.Values.Where(r => GetResetTime(!r.Quest.IsDailyReset ? r.ResetType : QuestType.Daily) > r.UpdateTime).ToArray();
                foreach (var rProgressInfo in rOutdatedProgresses)
                {
                    var rID = rProgressInfo.Quest.ID;

                    rQuests.Remove(rID);
                    Progresses.Remove(rID);
                    RecordService.Instance.QuestProgress.DeleteRecord(rID);
                }
                var rOutdatedQuests = rQuests.Values.Where(r => GetResetTime(r.Type) > r.CreationTime).ToArray();
                foreach (var rQuest in rOutdatedQuests)
                    rQuests.Remove(rQuest);
            }

            if (rpData == null || rpData.Quests == null)
                return;

            foreach (var rRawQuest in rpData.Quests)
            {
                var rID = rRawQuest.ID;

                QuestInfo rInfo;
                ProgressInfo rProgressInfo = null;
                if (!Infos.TryGetValue(rID, out rInfo))
                    Progresses.TryGetValue(rID, out rProgressInfo);
                else
                {
                    var rTotal = rInfo.Total;
                    if (rTotal > 0)
                    {
                        int rProgress;
                        if (Progresses.TryGetValue(rID, out rProgressInfo) && rQuests.ContainsKey(rID))
                        {
                            rProgress = rProgressInfo.Progress;

                            if (rRawQuest.State == QuestState.Completed)
                                rProgress = rTotal;
                            else if (rID != 214)
                                switch (rRawQuest.Progress)
                                {
                                    case QuestProgress.Progress50: rProgress = Math.Max(rProgress, (int)Math.Ceiling(rTotal * 0.5) - rInfo.StartFrom); break;
                                    case QuestProgress.Progress80: rProgress = Math.Max(rProgress, (int)Math.Ceiling(rTotal * 0.8) - rInfo.StartFrom); break;
                                }

                            rProgressInfo.Progress = rProgress;
                            rProgressInfo.State = rRawQuest.State;
                        }
                        else
                        {
                            rProgress = 0;

                            if (rRawQuest.State == QuestState.Completed)
                                rProgress = rTotal;
                            else if (rID != 214)
                                switch (rRawQuest.Progress)
                                {
                                    case QuestProgress.Progress50: rProgress = (int)Math.Ceiling(rTotal * 0.5) - rInfo.StartFrom; break;
                                    case QuestProgress.Progress80: rProgress = (int)Math.Ceiling(rTotal * 0.8) - rInfo.StartFrom; break;
                                }

                            Progresses.Add(rID, rProgressInfo = new ProgressInfo(rID, rRawQuest.Type, rRawQuest.State, rProgress));
                        }

                        if (rID == 214)
                        {
                            OSSQuestProgressRule rOSSRule;
                            if (OSSQuestProgressRule.Maps.TryGetValue(214, out rOSSRule))
                                ((OperationA)rOSSRule).UpdatePercentage(rProgressInfo);
                        }

                        if (rRawQuest.State == QuestState.Active)
                            RecordService.Instance.QuestProgress.InsertRecord(rRawQuest, rProgress);
                    }
                }

                QuestClass rQuest;
                if (!rQuests.TryGetValue(rID, out rQuest))
                    rQuests.Add(rQuest = new QuestClass(rRawQuest));

                rQuest.RealtimeProgress = rProgressInfo;
                rQuest.Extra = rInfo;
            }

            r_LastProcessTime = DateTimeOffset.Now.ToOffset(Offset);
        }
Exemple #2
0
        void ProcessQuestList(RawQuestList rpData)
        {
            if (rpData != null && rpData.Quests != null)
            {
                foreach (var rRawQuest in rpData.Quests)
                {
                    ProgressInfo rProgressInfo;
                    if (Progresses.TryGetValue(rRawQuest.ID, out rProgressInfo))
                    {
                        rProgressInfo.ResetType = rRawQuest.Type;
                    }
                }
            }

            var rQuests = KanColleGame.Current.Port.Quests.Table;

            if (GetResetTime(QuestType.Daily) > r_LastProcessTime)
            {
                var rOutdatedProgresses = Progresses.Values.Where(r => GetResetTime(!r.Quest.IsDailyReset ? r.ResetType : QuestType.Daily) > r.UpdateTime).ToArray();
                foreach (var rProgressInfo in rOutdatedProgresses)
                {
                    var rID = rProgressInfo.Quest.ID;

                    rQuests.Remove(rID);
                    Progresses.Remove(rID);
                    RecordService.Instance.QuestProgress.DeleteRecord(rID);
                }
                var rOutdatedQuests = rQuests.Values.Where(r => GetResetTime(r.Type) > r.CreationTime).ToArray();
                foreach (var rQuest in rOutdatedQuests)
                {
                    rQuests.Remove(rQuest);
                }
            }

            if (rpData == null || rpData.Quests == null)
            {
                return;
            }

            foreach (var rRawQuest in rpData.Quests)
            {
                var rID = rRawQuest.ID;

                QuestInfo    rInfo;
                ProgressInfo rProgressInfo = null;
                if (!Infos.TryGetValue(rID, out rInfo))
                {
                    Progresses.TryGetValue(rID, out rProgressInfo);
                }
                else
                {
                    var rTotal = rInfo.Total;
                    if (rTotal > 0)
                    {
                        int rProgress;
                        if (Progresses.TryGetValue(rID, out rProgressInfo) && rQuests.ContainsKey(rID))
                        {
                            rProgress = rProgressInfo.Progress;

                            if (rRawQuest.State == QuestState.Completed)
                            {
                                rProgress = rTotal;
                            }
                            else if (rID != 214)
                            {
                                switch (rRawQuest.Progress)
                                {
                                case QuestProgress.Progress50: rProgress = Math.Max(rProgress, (int)Math.Ceiling(rTotal * 0.5) - rInfo.StartFrom); break;

                                case QuestProgress.Progress80: rProgress = Math.Max(rProgress, (int)Math.Ceiling(rTotal * 0.8) - rInfo.StartFrom); break;
                                }
                            }

                            rProgressInfo.Progress = rProgress;
                            rProgressInfo.State    = rRawQuest.State;
                        }
                        else
                        {
                            rProgress = 0;

                            if (rRawQuest.State == QuestState.Completed)
                            {
                                rProgress = rTotal;
                            }
                            else if (rID != 214)
                            {
                                switch (rRawQuest.Progress)
                                {
                                case QuestProgress.Progress50: rProgress = (int)Math.Ceiling(rTotal * 0.5) - rInfo.StartFrom; break;

                                case QuestProgress.Progress80: rProgress = (int)Math.Ceiling(rTotal * 0.8) - rInfo.StartFrom; break;
                                }
                            }

                            Progresses.Add(rID, rProgressInfo = new ProgressInfo(rID, rRawQuest.Type, rRawQuest.State, rProgress));
                        }

                        if (rID == 214)
                        {
                            OSSQuestProgressRule rOSSRule;
                            if (OSSQuestProgressRule.Maps.TryGetValue(214, out rOSSRule))
                            {
                                ((OperationA)rOSSRule).UpdatePercentage(rProgressInfo);
                            }
                        }

                        if (rRawQuest.State == QuestState.Active)
                        {
                            RecordService.Instance.QuestProgress.InsertRecord(rRawQuest, rProgress);
                        }
                    }
                }

                QuestClass rQuest;
                if (!rQuests.TryGetValue(rID, out rQuest))
                {
                    rQuests.Add(rQuest = new QuestClass(rRawQuest));
                }

                rQuest.RealtimeProgress = rProgressInfo;
                rQuest.Extra            = rInfo;
            }

            r_LastProcessTime = DateTimeOffset.Now.ToOffset(Offset);
        }