Page 1 of 1

Accessing Dialogue Entry Fields

Posted: Mon Feb 07, 2022 5:25 pm
by snailBerry
Hey! I want to add quotes from conversations to a List<string> in a separate script. I was planning on using the "Dialogue Text" field under the dialogue entry, but I can't find a good way of accessing it.

Basically I want the loop to go as such:
-player talks to character
-player gets to specific line of dialogue
-that line is saved to a list of special quotes

I feel like there's a lua command I'm missing or something. I'll take any help.

Re: Accessing Dialogue Entry Fields

Posted: Mon Feb 07, 2022 6:57 pm
by Tony Li
Hi,

You could use a script like the one below. It registers a Lua function RecordQuote(). Since dialogue entry Script fields run before OnConversationLine, it sets a bool so OnConversationLine knows to add the line to the list.

Code: Select all

using UnityEngine;
using PixelCrushers.DialogueSystem;

public class Quotes : MonoBehaviour
{
    bool quoteThisLine = false;
    
    List<string> quotes = new List<string>();

    void Awake()
    {
        Lua.RegisterFunction(nameof(RecordQuote), this, SymbolExtensions.GetMethodInfo(() => RecordQuote()));
    }

    void RecordQuote()
    {
        quoteThisLine = true;
    }

    void OnConversationLine(Subtitle subtitle)
    {
        if (quoteThisLine) 
        {
            quotes.Add(subtitle.formattedText.text);
            quoteThisLine = false;
        }
    }
}

Re: Accessing Dialogue Entry Fields

Posted: Mon Feb 07, 2022 9:36 pm
by snailBerry
This is great! thank you! I just have a small follow up question.

I understand that I would use the RecordQuote() function on dialogue nodes that I want to save to the quotes list.
I don't know where to implement the OnConversationLine(Subtitle subtitle) function. I also dont know what to pass into the subtitle variable.

Any extra help would be awesome. I'm super new to the dialogue system.

Re: Accessing Dialogue Entry Fields

Posted: Mon Feb 07, 2022 10:40 pm
by Tony Li
Sorry, I completed skipped over that part, didn't I.

Put the script on your Dialogue Manager GameObject. If it's on the Dialogue Manager, the Dialogue System will automatically call the OnConversationLine() method.