Exemplo n.º 1
0
    private int GetQuestStatus(int questStatus, Conversation conversation, HashSet <int> testedIds, Dialog sourceDialog, bool addToQuestListener)
    {
        if (testedIds.Contains(conversation.uniqueId))
        {
            return(questStatus);
        }
        testedIds.Add(conversation.uniqueId);

        foreach (Option o in conversation.options)
        {
            if (o._available)
            {
                if (o.quest)
                {
                    // Test quest
                    if (o._available)
                    {
                        Quest quest = Parley.GetInstance().GetQuest(o.destinationId);
                        if (quest != null)
                        {
                            if (addToQuestListener)
                            {
                                quest.AddQuestChangedListener(sourceDialog);
                            }

                            if (quest.readyToHandIn && !quest.completed)
                            {
                                questStatus = 3;
                            }
                            else if (quest.available && !quest.open && questStatus < 2)
                            {
                                questStatus = 2;
                            }
                            else if (quest.open && questStatus < 1)
                            {
                                questStatus = 1;
                            }
                        }
                    }
                    else
                    {
                        Debug.LogError("Parley: Dialog linked to quest id #" + o.destinationId + " but that quest can not be found in this scene");
                    }
                }
                else
                {
                    if (o.destinationDialogName != null && o.destinationDialogName.Length > 0)
                    {
                        // find that dialog
                        Dialog d = Parley.GetInstance().GetDialogs()[o.destinationDialogName];
                        if (d != null)
                        {
                            if (testedIds.Contains(d.conversations[o.destinationId].uniqueId))
                            {
                                questStatus = d.GetQuestStatus(questStatus, d.conversations[o.destinationId], testedIds, sourceDialog, addToQuestListener);
                            }
                        }
                        else
                        {
                            Debug.LogError("Parley: Can not find nested dialog '" + o.destinationDialogName + "' as seen in '" + dialogname + "'");
                        }
                    }
                    else
                    {
                        if (testedIds.Contains(conversations[o.destinationId].uniqueId))
                        {
                            questStatus = GetQuestStatus(questStatus, conversations[o.destinationId], testedIds, sourceDialog, addToQuestListener);
                        }
                    }
                }
            }
        }
        return(questStatus);
    }