Skripten in Visionaire - Was kann ich erwarten?

  • #1, by MuklinSunday, 05. August 2018, 18:06 2 years ago
    Hallo, 
    ich möchte mich nun endlich rantrauen und möchte lernen, in Visionaire, also mit Lua zu scripten; vor allem weil es mich reizt, Bedingungen im Stil von "if [...] und [...] und [...] then [...] end if" zu programmieren, weil mir das so Spaß macht und ich so auch immer in Java gearbeitet habe. 

    Jetzt habe ich es geschafft, ein paar Variablen zu deklarieren und  ich habe es auch schnell geschafft, eine If-Bedingung zu schreiben, die aber leer geblieben ist, weil ich überhaupt keine Idee habe, wie ich irgendwas Visionaire-Betreffendes anspreche oder auslöse

    Und ja; natürlich habe ich mir die Dokumentationen angesehen; wenn da drin steht, was ich wissen will, dann haben meine Augen es übersprungen und wenn es nicht drin steht, geht das dann auch nicht? Was kann ich überhaupt davon erwarten, mit Lua zu arbeiten und wie kann ich Lua sinnvoll einsetzen?
    Zunächst: Ja, ich hab eiiigentlich ein gutes Programmierverständnis, aber im Vergleich zu euch stehe ich vermutlich wie ein Schaf da. ;D Naja, aber wer nicht fragt, bleibt dumm wink 

    Ich möchte euch natürlich nicht die ganze Arbeit machen, aber nehmen wir mal das Beispiel, was ich auch mit Lua etwas entwirren wollte, weil es mir mit den Visionaire-eigenen Befehlen etwas umständlich wurde: 
    (Siehe Bildausschnitt) Wir haben diese drei Schubladen, die separat geöffnet werden können. Egal, in welcher Reihenfolge die Schubladen geöffnet werden, der geforderte Gegenstand ist immer in der letzten Schublade drin; eine kleine Hommage an King's Quest 7 und die Tontöpfe. grin
    Dazu habe ich euch die ""Linksklick" Executed" Aktion der mittleren Schublade geschickt; das funktioniert so.

    Und nun meine Fragen:
    1. Wie kann ich auf die bereits in Visionaire deklarierten Variablen (also Bedingungen und Werte; ist ja Dynamisch in Lua, oder?) zugreifen? Auch in den If-Köpfen.
    2. Wie kann ich "Abigal" Text ausgeben lassen in Lua? Ist das denn überhaupt möglich?
    3. Muss das ganze in eine Funktion? Wie würde diese grob aussehen in diesem Fall?
    4. Wie kann ich einen bestimmten Sound abspielen lassen oder eine bestimmte Animation abspielen lassen? 
    5. Wie könnte man ebendiese Aktion bzw die ganze Kommode denn Sinnvoll in Kombination von Lua und Visionaire gestalten? 

    Ich denke, dass diese kleine Spielerei ein gutes erstes stück Code ist, um Lua endlich zu begreifen, deshalb habe ich es ausgewählt.  Ich hoffe auf eure Hilfe und hoffe, dass ich nicht zu viel verlange.

    Newbie

    94 Posts


  • #2, by sebastianSunday, 05. August 2018, 19:39 2 years ago
    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.
    Um eine Bedingung zu bearbeiten, schauen wir uns also erst einmal die Struktur einer Bedingung an: https://www.visionaire-studio.com/luadocs/#conditions-10

    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
    1
    2

    natürlich kannst du auch abfragen ob eine VS bedingung wahr oder falsch ist:
    if Conditions["Name"].Value == false then
       ...
    end
    1
    2
    3

    Das Gleiche gilt auch für Values, wobei diese in VS einen Wert (int, float) und einen String beinhalten können: https://www.visionaire-studio.com/luadocs/#values-20

    Um hier den Int Wert zu bearbeiten kannst du also folgendes tun:
    Values["Name"].Int = 457
    1

    String bearbeiten:
    Values["Name"].String = "ein Text"
    1



    Du kannst auch in Lua If-Abfragen dies kombinieren:

    if Values["Code"].Int = 242 and Conditions["terminal_aktiv"].Value then
       ...
    end
    1
    2
    3

    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
    1

    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>wink

    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)
    1
    2
    3
    4
    -- play audio file and set volume, balance and offset
    startSound('vispath:sounds/example.ogg', {flags=1, volume=70, balance=-10, offset=1000})
    1
    2


    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
    1

    würde hier nur "true" zurückliefern, wenn beide Bedingungen "true" sind.


    Grüße
    Sebastian

    Thread Captain

    2336 Posts

Write post