Hallo Muklin,
ich hatte hierzu einmal einen zweiteiligen Crashkurs für Lua mit VS aufgenommen.
Der zweite Teil hatte dann auch etwas mit der Interaktion mit VS Objekten zu tun:
zu deinen Fragen:
1. ) Um VS Bedingungen/Values zu bearbeiten muss man sich der Datenstruktur befusst sein.
Du siehst es gibt dort einen Wert (Value), den wir aktiv beeinflussen können und auch in die Speicherstände übernommen wird. Um also eine Bedingung zu bearbeiten kann man ganz einfach folgendes LuaScript ausfühen :
Conditions["Name"].Value = true/false
natürlich kannst du auch abfragen ob eine VS bedingung wahr oder falsch ist:
if Conditions["Name"].Value == false then
...
end
Um hier den Int Wert zu bearbeiten kannst du also folgendes tun:
String bearbeiten:
Values["Name"].String = "ein Text"
Du kannst auch in Lua If-Abfragen dies kombinieren:
if Values["Code"].Int = 242 and Conditions["terminal_aktiv"].Value then
...
end
Wie du bemerkt hast, habe ich bei der Bedingunge das "== true/false" weggelassen. Bei If-Abfragen sind diese theoretisch überflüssig. das Weglassen fragt also immer auf true ab.
Solltest du VS Bedingungen/Werte haben, die vom Namen her öfter vorkommen, musst du dies ggf. weiter spezifizieren, sonst nimm VS in der Regel die Bedingung/den Wert, der als westes im Spiel angelegt worden ist.
Beispiel: Wenn du jedes Objekt in deinem Raum die Bedingung "angeschaut" gegeben hast, aber nur die vom Tisch "true" setzen willst.
Scenes["Scene1"].Objects["Tisch"].Conditions["angeschaut"] == true
2/3) Indirekt. Je nachdem, was du jetzt vorhast kannst du per Lua einen String eines Wertes ändern (Lua: Values["Name"].String = "ein Text") und dann eine Aktion starten (Lua: startAction(Actions["meineAktion"]), welcher dann als Inhalt den String des Wertes ausgibt:
(Display Text Aktionsteil: <vs=Name>
Du kannst auch Texte per Lua vollkommen unabhängig darstellen. Dazu ist es nötig einen Luastring per drawFont Funktion zu zeigen:
https://www.visionaire-studio.com/luadocs/#graphics108 . Benötigt, dass dies dann pro Frame neu durchgeführt wird... Also nicht unbedingt etwas für Einsteiger.
Beispiele:
startAnimation("Scenes[scene_name].SceneObjects[object_name].ObjectAnimations[animation_name]")
local anim = getObject("Animations[animation_name]")
startAnimation(anim)
-- play audio file and set volume, balance and offset
startSound('vispath:sounds/example.ogg', {flags=1, volume=70, balance=-10, offset=1000})
5) In der Regel hast du hier mit den Standartaktionen eine gute Wahl getroffen. Lua könnte dir ggf. noch helfen um mehere Bedingungsabfragen in eine zu packen. Dazu gibt es einen Aktionsteile "If Lua Result" (kenne hier nur den Englischen Begriff). Hier kannst du dann mehrere Dinge abfragen:
return Conditions["Schublade1"].Value and Conditions["Schublade1"].Value
würde hier nur "true" zurückliefern, wenn beide Bedingungen "true" sind.
Grüße
Sebastian