Page 1 of 1

Actor Names / Items / Locations in Dialogue Text

Posted: Fri Apr 09, 2021 1:30 pm
by SystemId
I've been trying to find the best way to go about about displaying Actor Names (Or additional Fields), Locations names (or Additional fields) .. Variables .. variable values etc. in the Dialogue Text.

Example:
A Shop Keeper is asking the Player:

Welcome, (Rich Text Bold)(Player's name), to (Location name)!
We currently have (Item stock variable) (Item Name) on sale for (Addition field price) each!

Sorry if the answer for this is really easy to find, because I am having some problems finding some examples to work off of in the documentation.

Re: Actor Names / Items / Locations in Dialogue Text

Posted: Fri Apr 09, 2021 2:31 pm
by Tony Li
Hi,

For the player's and conversant's (NPC's) display names, you can use the [var=Actor] and [var=Conversant] markup tags. You can use [var=variable] for any other variables, too. When a conversation starts, it sets four variables:
  • Variable["Actor"]: Display name of the conversation's actor.
  • Variable["ActorIndex"]: Index in the Actor[] Lua table (e.g., "Player" in Actor["Player"]).
  • Variable["Conversant"]: Display name of the conversation's conversant.
  • Variable["ConversantIndex"]: Index in the Actor[] Lua table of the conversant (e.g., "Bob" in Actor["Bob"] if Bob is the conversant).
You can also set your own variables, of course. Example C# code:

Code: Select all

DialogueLua.SetVariable("ItemStock", 99);
DialogueLua.SetVariable("ItemName", "Red Balloons");
DialogueLua.SetVariable("FieldPrice", "1 gold");
  • Dialogue Text: "We currently have [var=ItemStock] [var=ItemName] on sale for [var=FieldPrice] each!"
For fields of other types such as actors and locations, you can use the [lua(code)] markup tag.

Example:
  • Dialogue Text: "Welcome, <b>[var=Actor]</b>m to [lua(Actor[Variable["ConversantIndex"]].ShopName)]!
You can also connect your own C# methods to Lua (see the video tutorial in the manual's Tutorials section) and use that in [lua(code)] tags. For example, if you have a C# method named GetPlayerHometown(). Example:
  • Dialogue Text: "Nice to see a visitor from [lua(GetPlayerHometown())]."


You can also manipulate the entire subtitle text before it's display if you want. To do that, add a script with an OnConversationLine method to the Dialogue Manager or one of the conversation participants. Example:

Code: Select all

void OnConversationLine(Subtitle subtitle)
{
    // Replace any instances of "<weather>" with the return value of some function named GetWeather():
    subtitle.formattedText.text = subtitle.formattedText.text.Replace("<weather>", GetWeather());
}