コード例 #1
0
        private IEnumerator applyReceivedQuestStates(QuestServiceEvents.QuestStatesRecieved evt)
        {
            while (!QuestPlayerIsReady)
            {
                yield return(null);
            }
            CPDataEntityCollection dataEntityCollection = Service.Get <CPDataEntityCollection>();

            foreach (QuestState questState in evt.QuestStates)
            {
                if (!questToMascotMap.TryGetValue(questState.questId, out var value))
                {
                    continue;
                }
                QuestDefinition questDefinition = knownQuests[questState.questId];
                if (questDefinition.Prototyped)
                {
                    continue;
                }
                Quest quest = GetQuest(questDefinition, value);
                if (quest == null)
                {
                    continue;
                }
                if (questState.status == QuestStatus.ACTIVE && (ActiveQuest == null || ActiveQuest != quest) && !quest.IsActivating && pendingQuest != quest && quest.Definition.IsPausable)
                {
                    trace(Time.time + ": applyReceivedQuestStates() setting " + quest.Id + " to SUSPENDED");
                    Service.Get <INetworkServicesManager>().QuestService.SetStatus(questState.questId, QuestStatus.SUSPENDED);
                    continue;
                }
                trace(Time.time + ": applyReceivedQuestStates() quest.UpdateState()");
                quest.UpdateState(questState);
                if (quest.State == Quest.QuestState.Suspended)
                {
                    if (!value.ResumableQuests.Contains(quest))
                    {
                        value.ResumableQuests.Add(quest);
                    }
                }
                else if (quest == ActiveQuest && !quest.IsActivating)
                {
                    trace(Time.time + ": applyReceivedQuestStates() calling RestoreAsync()");
                    GameObjectReferenceData component = dataEntityCollection.GetComponent <GameObjectReferenceData>(dataEntityCollection.LocalPlayerHandle);
                    if (component != null)
                    {
                        quest.RestoreAsync(component.GameObject);
                    }
                }
                if (quest.TimesCompleted == 0 && (quest.State == Quest.QuestState.Available || quest.State == Quest.QuestState.Suspended))
                {
                    AdventureReminderTutorial.SetAvailableAdventureTimestamp(value.Name);
                }
            }
            dispatcher.DispatchEvent(default(QuestEvents.QuestSyncCompleted));
            IsQuestDataRecieved = true;
        }
コード例 #2
0
 private bool onQuestStatesReceived(QuestServiceEvents.QuestStatesRecieved evt)
 {
     trace("Receiving quest states");
     CoroutineRunner.Start(applyReceivedQuestStates(evt), this, "applyReceivedQuestStates");
     return(false);
 }