Lokale Variablen werden Kreaturenlokal gespeichert. In BG2 jedenfalls (in BG1 werden die gar nicht gespeichert, soweit ich weiß). Was heißt, sie müssen Kreaturenlokal gesetzt und abgefragt werden, können aber natürlich von allem benutzt werden, was diese Kreatur hat. Also DLGs und BCSs und ITMs und SPLs und so weiter und so fort. Das setzen kann über ein ActionOverride() selbstverständlich auch von jeder anderen Kreatur aus erfolgen, das Abfragen aber natürlich nicht.
Da lokale Variablen kreaturenlokal im Savegame gespeichert werden, können mehrere Kreaturen die gleiche Variable besitzen (NumTimesTalkedTo() fragt zum Beispiel eine Variable ab, die immer gleich heißt und bei jeder Kreatur, mit der man labert gesetzt wird) oder verschiedene Inkarnationen der selben Kreatur können die Variable in unterschiedlichen Werten besitzen.
Du kannst also eine lokale Variable per ActionOverride() in einem Area-Script setzen, sie in der Banter.dlg zuerst benutzen und sie danach für einen PID in der Joined.dlg abfragen.
Die Vorteile sind, dass der Scope kleiner ist und du damit wesentlich weniger Variablen zum Abfragen hast auf lange Sicht. Wenn du ein IF ~Global("muhkuh","GLOBAL",42)~ THEN hast, geht er alle globalen Variablen durch. Wenn du da 10k stück im Save hast, ackert er. Bei nem IF ~Global("muhkuh","LOCALS",42)~ würde er halt nur die Variablen der Kreatur durchgehen und keine anderen.
Bei den hunderten Mods, die wir inzwischne haben, ist es sehr vorteilhaft, wenn man anfängt, LOCALS clever zu benutzen, da son Savegame sowieso schon mit tausenden Variablen total zugemüllt wird .
Der große Nachteil ist, dass du bei einem Verlust der Kreatur auch die ganzen Variablen verlierst. Denke ich jedenfalls, das hab ich noch nicht getestet gehabt.