Neue Features / Bedingungen für Lua Scripting und Node Editor

  • Mit der TEN können wir mit den Volume Triggern und via Lua Scripting und / oder dem Node Editor coole Sachen einbauen.

    Leider fehlt da noch so einiges. Zum Beispiel auch so banale Sachen wie "FlipMap" oder "FlyBy" triggern.

    Es wird sicher auch Abfragen / Conditions geben, die man sich wünscht aber noch nicht in der TEN enthalten sind.

    Dieser Thread soll dazu dienen, dass man hier ein wenig Brainstorming betreibt, was noch alles eingebaut werden könnte.

    Ich habe mich mittlerweile ein wenig in den TEN Code eingearbeitet dass ich kleinere Sachen auch selbst umsetzen kann.

    Die FlipMap und FlyBy Trigger hatte ich beispielweise die letzten Tage schon in die TEN eingebaut.

    Vielleicht habt ihr auch Anregungen, Ideen, Wünsche, was für Features oder Abfragen noch fehlen.

    Ich werde diese dann hier in dem Post sammeln, dass man die hier direkt auf einem Blick sehen kann.

    Grün: Wurde bereits entwickelt und ist im Master Branch vorhanden (wird im nächsten Release zur Verfügung stehen)

    Orange: Wurde bereits entwickelt, muss noch getestet werden, kann evtl. im nächsten Release zur Verfügung stehen

    Rot: Wurde noch nicht umgesetzt

    Feature / Funktionen

    • FlipMap triggern
    • FlyCheat Enablen / Disablen
    • FlyBy triggern
    • GetStaticsBySlot(X) - Selektiere alle Statics eines Slots
    • GetMoveablesBySlot(X) - Selektiere alle Moveables eines Slots
    • Lara vergiften / entgiften
    • Lara SetAir() / GetAir (Laras Sauerstoffversorgung anpassen)
    • Torch Status prüfen Lara:TorchIsLit()
    • Camera triggern
    • Object als Target definieren
    • Funktion aufrufen wenn Static berührt wird

    Abfragen

    • ...

    --- Have fun while raiding ---

    Legacy of Oda Nobunaga

    :) Gruß, L.M. :)

    24 Mal editiert, zuletzt von l.m. (10. Dezember 2022 um 21:00)

  • Hi I.m :)

    we have a TEN github issue that could help you: https://github.com/MontyTRC89/TombEngine/issues/660 :)

    there's also another issue regarding this command: https://github.com/MontyTRC89/TombEngine/issues/693 however this goes down to renderer code as the command is implemented but the renderer does not render the picture in the menu. So I am not sure if you would like to do it ahah.

    • Offizieller Beitrag

    Um ehrlich zu sein, wäre ich froh, wenn das DEV Team das nächste Update für Bug Fixes nutzen würde. Denn es gibt noch in vielen Bereichen erhebliche Bugs

    Wünsche hätte man viele. man könnte im Prinzip erwähnen, dass man all die TRNG Funktionen auch in Lua haben möchte.

    Aber wie gesagt, denke ich dass zuerst einmal die Bugs gefixt werden sollten.

    Und es gehen ja auch Basis Sachen noch nicht, wie FogBulb, Mirror, usw. Vielleicht können die Entwickler schauen, ob man das erstmal zum Laufen kriegt.

  • Um ehrlich zu sein, wäre ich froh, wenn das DEV Team das nächste Update für Bug Fixes nutzen würde. Denn es gibt noch in vielen Bereichen erhebliche Bugs

    Wünsche hätte man viele. man könnte im Prinzip erwähnen, dass man all die TRNG Funktionen auch in Lua haben möchte.

    Aber wie gesagt, denke ich dass zuerst einmal die Bugs gefixt werden sollten.

    Und es gehen ja auch Basis Sachen noch nicht, wie FogBulb, Mirror, usw. Vielleicht können die Entwickler schauen, ob man das erstmal zum Laufen kriegt.

    ja.. das stimmt. aber bei den größeren sachen wie fogbulb, mirror etc bin ich auch raus.. das ist noch ne stufe zu "hart" für mich :D

    Ein paar Bugfixes kann ich auch schauen, manche "Kleinigkeiten" wie zb. Monkey TR3 Fix etc ging auch für mich.

    Daher würd ich zusätzlich parallel einfach da schonmal in Richtung Lua / Node Editor was machen bzw. wir könnten da auch mal schauen was wir als Bauer uns noch wünschen, denn da fehlt auch einfach noch einiges, dass man da vernünftig mit bauen kann.

    Hi I.m :)

    we have a TEN github issue that could help you: https://github.com/MontyTRC89/TombEngine/issues/660 :)

    there's also another issue regarding this command: https://github.com/MontyTRC89/TombEngine/issues/693 however this goes down to renderer code as the command is implemented but the renderer does not render the picture in the menu. So I am not sure if you would like to do it ahah.

    Ah thanks! :D

    • Offizieller Beitrag

    Jetzt ist mir doch noch was eingefallen, was man vielleicht realisieren könnte und was noch dringend fehlt:

    Und zwar

    Moveable:Poison

    Wäre auch ganz gut, um Lara vergiften zu können, um Damage Rooms mit giftigen Gasen zu simulieren usw.

  • Zur Ergänzung:

    Einbauen werde ich vorraussichtlich diese Funktion:

    Moveable:SetPoison(potency)

    Wobei der Parameter "potency" der Vergiftungsgrad ist. Ich muss mir noch anschauen welche Werte dort am besten eingetragen werden können.

    Da Lara selbst auch ein spezielles "Moveable" ist, kann man in Lua auch direkt folgendes nutzen:

    Lara:SetPoison(potency)

    Möchte man Lara nun mit einem Moveable vergiften - kann man folgendes benutzen:

    Moveable:SetOnCollidedWithObject(func)

    Somit wäre es folgendermaßen:

    Das Moveable was Lara vergiften soll, "called" eine Funktion (in der man nun Lara vergiften kann - oder / zusätzlich noch andere Dinge passieren) wenn Lara es berührt.


    Möchte man Lara aber vergiften wenn andere Dinge passieren (einfach ein spezieller Raum oder ähnliches), kann man dies trotzdem "triggern", einfach dann in eine andere Bedingung bzw. Funktion packen und mit Lara:SetPoison(potency) aufrufen.

    Wenn dies irgendwann eingebaut ist und eine neue Version der TEN rauskommt, werd ich dazu dann mal ein Tutorial schreiben, wo ich das dann noch etwas ausführlicher erkläre.

    • Offizieller Beitrag

    Moveable:SetOnCollidedWithObject(func)

    Somit wäre es folgendermaßen:

    Das Moveable was Lara vergiften soll, "called" eine Funktion (in der man nun Lara vergiften kann - oder / zusätzlich noch andere Dinge passieren) wenn Lara es berührt.

    Haber gerade mal in der Tomb Engine Lua Dokumentation nachgeschaut, leider gibts überhaupt keine Funktion, um Lara mit einem Static agieren zu lassen. Bei der TRNG konnte man ja einstellen, ob ein Static Lara Schaden zufügt, sie vergiftet, sie explodieren lässt usw. wenn sie es berührt.

    Oder funktioniert der obige Befehl auch mit Statics? Habe ich noch nicht getestet.

    • Offizieller Beitrag

    Jörg, ich hab die Poison Lua Funktionen erstellt und die in Discord zum Testen zur Verfügung gestellt, schau mal rein, wenn du Zeit hast.

    Danke dir!

    Wenn es gemerged ist, kann ich direkt davon abzweigen und mal schauen ob es einfach ist, das mit den Static:SetOnCollidedWithObject verfügbar zu machen.

    Alles klar! Mache ich dann!

    • Offizieller Beitrag

    Mir ist noch was eingefallen. Die Funktion

    Moveable:MakeInvisible()

    macht Moveables oder Lara unsichtbar. Es gibt aber keine Funktion, um sie wieder sichtbar zu machen, jedenfalls habe ich keine gefunden.

  • Doch, das gibt es schon. ist nur ein wenig versteckt:

    Moveable:MakeInvisible()Make the item invisible. Use EnableItem to make it visible again.

    Mit Moveable:EnableItem() sollte es wieder sichtbar sein.

    Warum ist das so?

    Es gibt in der EnableItem Funktion die Abfrage ob es Deaktiviert oder auch ob es Invisible ist,

    in beiden Abfragen wird das Item dann wieder Active gesetzt.

    Ist etwas unglücklich könnte man mal in der Zukunft anpassen ^^

    • Offizieller Beitrag

    Mit Moveable:EnableItem() sollte es wieder sichtbar sein.

    Warum ist das so?

    Es gibt in der EnableItem Funktion die Abfrage ob es Deaktiviert oder auch ob es Invisible ist,

    in beiden Abfragen wird das Item dann wieder Active gesetzt.

    Ist etwas unglücklich könnte man mal in der Zukunft anpassen ^^

    Ah o.k. Hatte ich wohl überlesen.

    Ja, ich hatte auch eher sowas wie

    Moveable:Visible()

    erwartet als Gegenbefehl.

    PS. EnableItem() gibt es auch schon nicht mehr, zumindest nicht in der Dokumentation, gibt nur noch den Befehl

    Moveable:Enable()

    aber damit geht es.

  • kurzes Update:

    Im nächsten Release (1.0.3) wird es die Möglichkeit geben Statics und Moveables via Slot zu selektieren:

    Zum Beispiel kann man nun alle Statics eines Slots (in dem Beispiel Static ID 196) mit der Soft Collision versehen:

    Code
    local statics = GetStaticsBySlot(196)
    
    for index, static in pairs(statics) do
        static:SetSolid(false)
    end

    Oder man wählt alle aktiven BADDY2 Objekte aus und lässt sie beispielsweise gleichzeitig explodieren, das würde z.B. so gehen:

    Code
    local moveables = GetMoveablesBySlot(TEN.Objects.ObjID.BADDY2)
    
    for index, moveable in pairs(moveables) do
        moveable:Explode()
    end

    Dies kann man nun eben für jeden weiteren Anwendungsfall adaptieren, zB. Färbe alle Items ein, shatter Statics vom Typ Static ID 10, usw usf.

    • Offizieller Beitrag

    Super!!!! Das hat auf jeden Fall noch gefehlt.

    Habe auch zwei Fragen dazu:

    1. Muss die Schreibweise immer mit den Vorsilben "TEN.Objects.ObjID." sein oder reicht auch einfach

    GetMoveablesBySlot(BADDY2) ?

    2. Muss man das immer in einem Loop schreiben oder geht auch

    Code
    local moveables = GetMoveablesBySlot(TEN.Objects.ObjID.BADDY2)
    moveables:Explode()
  • zu 1.)

    Ja, bei Moveables muss man immer auf TEN.Objects.ObjID.SLOT referenzieren, das geht leider nicht anders.

    Statics kann man direkt mit der ID ansprechen.

    zu 2.)

    Auch dazu - ja man muss die Loop benutzen.

    Erklärung dazu ist ganz einfach. Die ganzen Aktionen wie "Explode" oder "SetHP" oder ähnliches sind Member Functions der Moveable / Static Klasse.

    Diese referenziert auf EINEM Moveable bzw. Static Item Objekt. Daher muss man sich auf einem "Item / Moveable / Static" "befinden" bevor man diese Aktionen auf dem Objekt ausführen kann.

    • Offizieller Beitrag

    o.k. das sollte dann auf jeden Fall in der Dokumentation erwähnt werden, sonst wissen die Leute nicht wie man diese Funktion richtig anwendet, am Besten so mit einem praktischen Beispiel wie oben geschrieben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!