Page 1 of 1

How to end all current conversations?

Posted: Tue Jan 25, 2022 3:35 pm
by eeeli
Hello,

I'm running into an issue upon reloading a scene, but the dialogue system continues running the current conversation. There are events the player can trigger that will cause the scene to reload even if they're in the middle of a conversation, and this causes issues in the scene reload because the Dialogue Manager is never destroyed/reloaded so it just tries to finish out the conversation.

I was wondering how I can end all current conversations mid-flow, so I do that before calling the reload. It might be worth mentioning that I have it set up so there might be multiple parallel conversations happening at once.

Thanks in advance!

Re: How to end all current conversations?

Posted: Tue Jan 25, 2022 3:47 pm
by Tony Li
Hi,

You can close the conversation controllers in the DialogueManager's activeConversations list. Loop down from the end because they'll remove themselves from the list as they close.

Code: Select all

public void StopAllConversations()
{
    for (int i = DialogueManager.instance.activeConversations.Count - 1; i >= 0; i--)
    {
        DialogueManager.instance.activeConversations[i].conversationController.Close();
    }
}

Re: How to end all current conversations?

Posted: Tue Jan 25, 2022 4:34 pm
by eeeli
Brilliant! Thanks :)

Re: How to end all current conversations?

Posted: Tue Jan 25, 2022 4:51 pm
by Tony Li
Happy to help! I'll wrap up that code in a new DialogueManager.StopAllConversations() method in version 2.2.25.

Re: How to end all current conversations?

Posted: Thu Feb 03, 2022 3:04 pm
by eeeli
Hi Tony,

Sorry to resurrect this thread. I have a quick follow up question. How should I go about stopping a specific conversation.

The context again, is that there might be multiple conversations running at once (background texting conversations), and the a primary phone-call conversation that can be ended at any given point if the player hangs up the phone.

Is there a way to perhaps record which Dialogue Instance a given conversation is when I start that conversation, so I know which one to stop later on?

Re: How to end all current conversations?

Posted: Thu Feb 03, 2022 3:34 pm
by Tony Li
After you call DialogueManager.StartConversation(), DialogueManager.instance.Conversation will be a reference to that conversatios. DialogueManager.instance.]activeConversations will contain a list of all active conversations. These are ActiveConversationRecords.

Let's say you've recorded the value of DialogueManager.instance.activeConversation after starting a conversation into a variable "myConversationRecord". You can stop that conversation by closing its controller:

Code: Select all

myConversationRecord.conversationController.Close();
Side note: You can get an active conversation's ID like this example:

Code: Select all

ConversationModel model = DialogueManager.instance.activeConversation.conversationModel;
int ID = model.GetConversationID(model.firstState);

Re: How to end all current conversations?

Posted: Thu Feb 03, 2022 4:38 pm
by eeeli
Awesome! I think I understand the system, and I have it up and running nicely :)