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; }
private bool onQuestStatesReceived(QuestServiceEvents.QuestStatesRecieved evt) { trace("Receiving quest states"); CoroutineRunner.Start(applyReceivedQuestStates(evt), this, "applyReceivedQuestStates"); return(false); }