예제 #1
0
    /// <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);
    }
예제 #2
0
 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);
    }
예제 #4
0
        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);
        }
예제 #5
0
 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;
 }
예제 #6
0
 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);
 }
예제 #7
0
        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;
            }
        }
예제 #8
0
    /// <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;
    }