Page 1 of 1

Scripting with Dialogue System Variables

Posted: Wed May 19, 2021 11:45 am
by annathehank
Hello <3

I just had a few clarification questions for using the Dialogue System classes/namespaces in scripting.

1) Do I need to/can I include something in the 'using' area of a script? Such as Using PixelCrushers.DialogueSystem.
2) When referring to a variable set up in the Dialogue Manager in a C# script, what's the best practice? Is it PixelCrushers.DialogueSystem.DialogueLua.GetVariable("variable"), and would I still need all of that if the pixelcrushers.dialguesystem is in the using scetion? Or could I just use DialogueLua.GetVariable("name")?
3) Do we need to clarify .asString or .asInt for each variable? What if it's a bool?
4) Are the actors listed in the manager a class? And can we call upon the class in scripts? Is there a way to assign a variable to an actor?

The process I'm trying to set up is an image appearing when certain variables are met.
I'm trying to, basically, build something like this:

Code: Select all

public GameObject alertnotif;
int RelLvl;
int TalkLvl;

void Start()
{
//Not sure how to grab the class/list of actors
var NPC = (whatever I would put to grab the list of actors)
 //not sure how to get the variable to relate to specific actors either
foreach (Actor in NPC)
  {RelLvl = PixelCrushers.DialogueSystem.DialogueLua.GetVariable("npcnameRelLvl").asInt;
   TalkLvl = PixelCrushers.DialogueSystem.DialogueLua.GetVariable("npcnameTalkLvl").asInt;
   if(TalkLvl * 10 + 1 > RelLvl) 
     {alertnotif.SetActive(true);}
   }
}

Sorry for the long list of questions, hopefully they make sense and aren't super complicated to answer <3 Thank you for your time and help again!

Re: Scripting with Dialogue System Variables

Posted: Wed May 19, 2021 1:19 pm
by Tony Li
Hi,

Put this at the top of your script:

Code: Select all

using PixelCrushers;
using PixelCrushers.DialogueSystem;
The first line may not be necessary; it's useful if you're making calls to the SaveSystem class.

Then you can omit PixelCrushers.DialogueSystem from DialogueLua.GetVariable. In Lua, a variable can be any type. To get the variable's value as a specific type in your C# script, you can use .asBool, .asString, .asInt, or .asFloat.

In addition to variables, which you can get using DialogueLua.GetVariable, you can also get and set actor fields. For example, to change the Player actor's Display Name, you could use this C# code:

Code: Select all

DialogueLua.SetActorField("Player", "Display Name", "Anna");
Or, to get the Player's Health points as an int (assuming you've defined such a field in your database):

Code: Select all

int health = DialogueLua.GetActorField("Player", "Health").asInt;

Re: Scripting with Dialogue System Variables

Posted: Wed May 19, 2021 8:40 pm
by annathehank
Thank you for pointing out the actor fields, too! I can use them instead of variables for the relationship levels and points.

I think I may have figured out how to make the scripting for everything work...*hopefully* :lol:
I'll keep you updated (a.k.a. probably be back tomorrow when it doesn't work)

Re: Scripting with Dialogue System Variables

Posted: Thu May 20, 2021 11:27 am
by annathehank
I actually do have just a quick follow up with this:

Is there a way to populate Actor fields in quest states/conversations in a similar manner to using [var=name]?

I've tried a few different ways but can't seem to figure it out

My gut instinct was to just put this:
Actor["name"].fieldname
but I think that's just for assigning/checking not displaying values.

Re: Scripting with Dialogue System Variables

Posted: Thu May 20, 2021 11:32 am
by Tony Li
Hi,

Variables have the shortcut [var=variable] markup tag.

For other data, you'll need to use the [lua(code)] markup tag, such as:
  • Dialogue Text: "I'd never guess you're [lua(Actor["Player"].Age)]! You look so young!"

Re: Scripting with Dialogue System Variables

Posted: Thu May 20, 2021 11:35 am
by annathehank
Ahh thank you so much!! <3
I kept trying different versions of () and [] to get it to work :lol: