/// <summary> /// Determines how many branches a node has given the active quest state /// </summary> private int CountNumActiveChildren() { int children = 0; // Get the active quest and its current state if they exist Quest currentQuest = GameManager.instance.GetActiveQuest(); Quest.QuestState state = Quest.QuestState.inactive; if (currentQuest != null) { state = currentQuest.GetCurrentState(); } foreach (DialogueNode.DialogueBranchCondition dbc in currentNode.childNodes) { // If the condition matches the current quest state, then it is a possible condition if ((dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.cleared) && state.Equals(Quest.QuestState.completed)) || (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.failed) && state.Equals(Quest.QuestState.failed)) || (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.active) && state.Equals(Quest.QuestState.active)) || dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.none)) { children++; } } return(children); }
private void onQuestStateChanged(Quest quest, Quest.QuestState newState) { if (newState == Quest.QuestState.Locked && quest.UnlockedTimeMilliseconds != 0 && !timeLockedQuests.Contains(quest)) { timeLockedQuests.Add(quest); } quest.StateChanged -= onQuestStateChanged; }
//Gets quests listed by quest state, will be used by UI public List <Quest> GetQuests(Quest.QuestState state) { List <Quest> questInfo = new List <Quest>(); foreach (Quest q in Quests) { if (q.State == state) { questInfo.Add(q); } } return(questInfo); }
public void LoadQuestData(QuestDefinition questData) { this.questData = questData; int num = 0; int num2 = 0; Quest.QuestState state = Quest.QuestState.Locked; Mascot mascot = Service.Get <MascotService>().GetMascot(questData.Mascot.name); foreach (Quest availableQuest in mascot.AvailableQuests) { if (availableQuest.Definition.name == questData.name) { state = availableQuest.State; associatedQuest = availableQuest; break; } } if ((associatedQuest == null || associatedQuest.TimesCompleted == 0) && questData.CompleteReward != null) { foreach (MascotXPRewardDefinition definition in questData.CompleteReward.GetDefinitions <MascotXPRewardDefinition>()) { num += definition.XP; } num2 = CoinRewardableDefinition.Coins(questData.CompleteReward); } HeaderText.text = Service.Get <Localizer>().GetTokenTranslation(questData.Title); if (associatedQuest != null && associatedQuest.TimesCompleted > 0) { ContentPanel.SetActive(value: false); CompletedPanel.SetActive(value: true); } else { XPText.text = num.ToString(); CoinsText.text = num2.ToString(); } if (!XPCheck.activeSelf) { bool flag = Service.Get <ProgressionService>().IsMascotMaxLevel(mascot.Name); MaxLevelIcon.SetActive(flag); XPText.gameObject.SetActive(!flag); } breadcrumb.SetBreadcrumbId(BreadcrumbType, questData.name); ShowState(state); }
private void forceSuspend() { Quest.QuestState state = Quest.QuestState.Suspended; if (activeQuest != null) { EventManager.Instance.PostEvent("MIX/MusicWorldOn", EventAction.PlaySound, null); if (!activeQuest.Definition.IsPausable) { state = Quest.QuestState.Active; } } deactivateQuest(state, doCleanup: false); foreach (Mascot value in questToMascotMap.Values) { value.AvailableQuests.Clear(); } availableQuests.Clear(); IsQuestDataRecieved = false; }
private void deactivateQuest(Quest.QuestState state, bool doCleanup = true) { if (ActiveQuest != null) { trace("Deactivating quest {0} with state {1}", ActiveQuest.Id, state); ActiveQuest.Deactivate(state); if (state == Quest.QuestState.Suspended) { Mascot mascot = questToMascotMap[ActiveQuest.Id]; mascot.ResumableQuests.Add(ActiveQuest); } ActiveQuest = null; Service.Get <ZonePathing>().ClearWaypoint(); } Service.Get <TutorialBreadcrumbController>().RemoveAllBreadcrumbs(); if (doCleanup) { dispatcher.DispatchEvent(default(HudEvents.ResetQuestNotifier)); RemotePlayerVisibilityState.ShowRemotePlayers(); } Service.Get <EventDispatcher>().DispatchEvent(default(CinematographyEvents.ClearGroupCullingOverride)); setPlayerOutOfWorld(isOutOfWorld: false); }
private void ShowState(Quest.QuestState state) { if (associatedQuest != null && !associatedQuest.HasStartedQuest() && state == Quest.QuestState.Suspended) { state = ((associatedQuest.TimesCompleted != 0) ? Quest.QuestState.Completed : Quest.QuestState.Available); } if (questData.isMemberOnly && !Service.Get <CPDataEntityCollection>().IsLocalPlayerMember()) { LockedOverlay.SetActive(value: true); MemberLockIcon.SetActive(value: true); LevelLockIcon.SetActive(value: false); return; } switch (state) { case Quest.QuestState.Active: ResumeButton.SetActive(value: false); StartButton.SetActive(value: false); ReplayButton.SetActive(value: false); CompletedButton.SetActive(value: false); GotoButton.SetActive(value: false); break; case Quest.QuestState.Available: ResumeButton.SetActive(value: false); if (questData.IsReplayable) { if (associatedQuest.TimesCompleted > 0) { ReplayButton.SetActive(value: true); } else if (Service.Get <MascotService>().ActiveMascot == null) { replayQuest = true; GotoButton.SetActive(value: true); } else { StartButton.SetActive(value: true); GotoButton.SetActive(value: false); } CompletedButton.SetActive(value: false); } else if (associatedQuest.TimesCompleted == 0) { if (Service.Get <MascotService>().ActiveMascot == null) { GotoButton.SetActive(value: true); } else { StartButton.SetActive(value: true); GotoButton.SetActive(value: false); } ReplayButton.SetActive(value: false); CompletedButton.SetActive(value: false); } else { StartButton.SetActive(value: false); ReplayButton.SetActive(value: false); CompletedButton.SetActive(value: true); GotoButton.SetActive(value: false); } break; case Quest.QuestState.Locked: ResumeButton.SetActive(value: false); StartButton.SetActive(value: false); ReplayButton.SetActive(value: false); CompletedButton.SetActive(value: false); GotoButton.SetActive(value: false); applyLockedState(); break; case Quest.QuestState.Suspended: StartButton.SetActive(value: false); ReplayButton.SetActive(value: false); CompletedButton.SetActive(value: false); GotoButton.SetActive(value: false); ResumeButton.SetActive(value: true); break; case Quest.QuestState.Completed: ResumeButton.SetActive(value: false); StartButton.SetActive(value: false); if (!questData.IsReplayable) { CompletedButton.SetActive(value: true); GotoButton.SetActive(value: false); } else if (Service.Get <MascotService>().ActiveMascot == null) { replayQuest = true; GotoButton.SetActive(value: true); GotoButton.GetComponentInChildren <Text>().text = Service.Get <Localizer>().GetTokenTranslation("GlobalUI.Adventure.Menu.Replay"); } else { ReplayButton.SetActive(value: true); GotoButton.SetActive(value: false); } break; } }
/// <summary> /// Advances to the next node. It also contains behavior for ending a dialogue /// </summary> public void Next() { // This button does nothing if the text is automatically being displayed. if (currentNode.auto.isAuto && !forceNext) { return; } // If the player attempts to advance while text is printing, abort the printing and return. if (isPrinting) { textBox.text = currentNode.dialogueText.Replace("[PLAYER]", "name"); StopCoroutine(textPrint); isPrinting = false; return; } // Last one in the list if ((CountNumActiveChildren() == 0) || currentNode == null) { // Enables the player's movement, and allows the quest giver to be interacted with again dialogueUI.SetActive(false); GameManager.instance.EnablePlayerMovement(); GameManager.instance.EndQuestFirstEncounter(); GameManager.instance.ToggleQuestInteractivity(true); return; } // Get the active quest and its current state if they exist Quest currentQuest = GameManager.instance.GetActiveQuest(); Quest.QuestState state = Quest.QuestState.inactive; if (currentQuest != null) { state = currentQuest.GetCurrentState(); } // Which child do we advance to? foreach (DialogueNode.DialogueBranchCondition dbc in currentNode.childNodes) { // If the quest is cleared, use the child with that condition if (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.cleared) && state.Equals(Quest.QuestState.completed)) { currentNode = currentTree.GetNode(dbc.targetID); break; } // If the quest is failed, use the child with that condition else if (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.failed) && state.Equals(Quest.QuestState.failed)) { currentNode = currentTree.GetNode(dbc.targetID); break; } // If the quest is active, use the child with that condition else if (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.active) && state.Equals(Quest.QuestState.active)) { currentNode = currentTree.GetNode(dbc.targetID); break; } // Otherwise, just use the default condition. This one must always be last. else if (dbc.condition.Equals(DialogueNode.DialogueBranchCondition.Condition.none)) { currentNode = currentTree.GetNode(dbc.targetID); break; } } firstLine = false; // Processes the node ProcessCurrentNode(); forceNext = false; }