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); }