Lua-Funktionsaufrufe mit Parametern in KPs: Geht nicht? Geht doch!

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
  • Seit der Einführung von Lua in EEP lassen sich über Kontaktpunkte Lua-Funktionen aufrufen. Dabei kann man aber nur einen Funktionsnamen angeben, und keine zusätzlichen Parameter. Mit folgendem Trick, man könnte es fast schon „Hack“ nennen, lässt sich diese Einschränkung umgehen. Es lassen sich dann nicht nur Funktionsaufrufe mit Parametern tätigen, man kann sogar jede gültige Lua-Anweisung direkt in einen Kontaktpunkt schreiben.


    Für ganz eilige: Einfach die folgende Code-Zeile irgendwo an den Anfang eures Anlagenskripts kopieren, das Skript neu laden, einmal die 3D-Ansicht aufrufen (damit das Skript einmal ausgeführt wird), und ihr könnt Funktionsaufrufe mit Parametern in Kontaktpunkten verwenden.

    Code
    1. setmetatable(_ENV,{__index=function(s,k) local n=k:gsub("%.",","); local p=load(n);if p then _ENV[k]=p;_ENV[n]=p;return p end;return nil end})


    Einzige Einschränkung: Da EEP leider automatisch alle Kommas in Punkte umwandelt, kann zwischen Punkt und Komma nicht mehr unterschieden werden. Mit der obigen Zeile werden zwar alle Punkte wieder in Kommas zurückverwandelt (um Funktionsaufrufe mit mehreren Parametern zu ermöglichen), allerdings sind dann auch gewollte Punkte verschwunden.

    Update: In Beitrag 26 gibt es eine neue Version der Codezeile.


    Für die, die es auch verstehen wollen, habe ich anlässlich des 50.000sten Besuchers auf meiner Homepage den obigen Code-Schnipsel nochmal recht ausführlich erklärt. Aber nicht verzweifeln, wenn ihr es auch mit Erklärung nicht versteht: Das dahinterstehende Thema der "metatables" ist sehr komplex. Wichtig ist eigentlich nur, dass ihr den Code-Schnipsel oben kopieren müsst, und dass er dann das tut, was er soll.


    Viele Grüße
    Benny

  • Super.


    Ein konkretes Anwendungsbeispiel wäre ergänzend hilfreich. :bp_1:


    Gruss Urmel

    EEP 14; EEP 13; EEP 12.1 Plugin 1; EEP X Plugin 2 Update 2 Patch 1; EEP 9.0; EEP 8.0; EEP 7.2; EEP 6.0 mit allen Updates und Patches, Windows 7 64bit,
    Laptop Aces Aspire 7745G mit Radeon HD5850 2GRAM Intel I5 460M, 4 GB RAM
    Desktop Intel I7, Radeon HD 5850 2,8G RAM, 12 GB RAM

  • Die Anwendungsbeispiele findet man am besten dann, wenn man es selber braucht...


    Hier trotzdem ein (theoretisches) Beispiel. Man hat sich eine Funktion geschrieben, die die Einfahrt in einen Bahnhof auf das vom Zug gewünschte Gleis stellt. Da man bisher nur Funktionsnamen angeben konnte, hätte man für jedes mögliche Gleis eine eigene (Hilfs-)Funktion schreiben müssen, die dann per KP (mit Routen/Zugfilter) aufgerufen wird.
    Jetzt kann das gewünschte Gleis direkt als Parameter im KP übergeben werden.


    Im Prinzip spart man dadurch einfach einen Haufen von "Hilfsfunktionen", die nichts anderes machen, als eine andere Funktion mit einem festen Parameter aufzurufen.


    Noch ein Beispiel: Man kann an jeder Stelle der Anlage einen "Debug-Kontaktpunkt" setzen, der mittels print("Das ist eine wichtige Meldung") eine frei einstellbare Meldung ins Ereignisfenster schreibt.


    Viele Grüße
    Benny

  • Super Benny! Herzlichen Dank!

    Mainboard: ASUSTeK COMPUTER INC. Z87-EXPERT (SOCKET 1150)
    CPU:Intel Core i7 4770 @ 3.40GHz Haswell 22nm Technologie
    Memory:16.0GB Dual Kanal DDR3 @ 799MHz (9-9-9-27)

    Grafik: Nvidia GeForce GTX d1060 6 GB
    BIOS:American Megatrends Inc, Version 1405
    OS: Windows 10 Pro/64bit
    EEP6, EEP 8.x, EEP 9.x, EEP 10.2, EEP 11.3, EEP 12.1 , EEP 13, EEP 14, KE 9/64bit, RSS_Tool

  • Weshalb hat ein Wochenende nur 48 h?
    Danke Benny!


    Viele Grüße
    Thomas

    - - - - -
    MidiTower (i7 4790K 4×4GHz, 16GB RAM, AsusZ97, 4GB Zotac-GeForce GTX970 AMP! Omega, WIN 8.1prof)
    DELL-Notebook (Intel Core i7 3520M Quad Core, 2,9GHz, 8GB RAM, NVIDIA Quadro K1500M, WIN 10 Home Premium 64bit;
    EEP von 4 bis 14.1+P1

    »Nach diesem Jahrhundert der großen Sprüche und schlimmen Illusionen hoffe ich auf eine Zeit, in der die großen Sprüche nichts mehr gelten, sondern nur noch das, was man wirklich und greifbar getan hat.«

    Gerhard Richter, 1999

  • Ich kann mich da Volker nur anschließen, Benny, echt super, nicht nur dieser Code-Schnipsel. :be_1:

  • Hallo Benny,
    mit LUA werde ich mich natürlich erst dann richtig beschäftigen, wenn ich das Plugin 2 gekauft habe - oder vielleicht auch erst die nächste Version von EEP mit LUA.
    Aber trotzdem habe ich mit großem Interesse Deine Erläuterungen zu Deinem Script gelesen und freue mich mit Dir, dass Du diese Möglichkeit ausgetüftelt hast.
    Jetzt musst Du nur noch einen Weg suchen und finden, die bisher noch nicht zugänglichen Parameter auszulesen und zu beeinflussen.
    Ich weiß jedoch auch, dass sich EEP nicht in jeder Weise überlisten lässt.
    Gruß
    ruetzi

    EEP 5 Patch 2 PlugIn 1-5, HomeNos 5/8/13, EEP 8.3, 10.2 Expert Update 2 Patch 1, EEP 11.3, EEP 13.2 Patch 2, EEP 14.1 Expert Patch 2
    PC Intel Core i5-4460 QUAD-Core 3.2 GHz, 16 GB PC1600 DDR3-RAM, 250 GB SSD, nVidia GeForce GTX 750Ti - 2 GB DDR5, Windows 8.1
    Notebook Pentium Dual Core 2 GHz, 4 GB DDR3-RAM, Intel GMA3000 Grafik


    EEP - immerhin das Beste vom Schlechten!

  • dieser "Code-Schnipsel" ist einfach Spitze.
    Damit eröffnest Du einige Möglichkeiten in der EEP-Lua Programmierung.


    Hallo Benny,


    Diese Antwort kann ich nur bestätigen ! Sehr nützlicher Tipp ! Danke !!


    EepNolie

    Desktop : Windows 10 Pro 64Bit - i7-4790 4.0Ghz - 32Gb RAM - Asus Geforce GTX-06G 1060 (6Gb) - Dual screen Asus VS247 24"
    Laptop : Windows 10 Home 64Bit - i7-4750HQ 3.2Ghz - 16Gb RAM - NVidia GTX960M


    Ich bin dabei seit EEP 6 und benutze jetzt EEP 14


    Free EEP-tools : Model Multiplier / Texture Multiplier / Registry Tool


    4089-banner2018-jpg

  • Nette Idee. Meiner Meinung nach hätte EEP das von Anfang an so umsetzen sollen.

    What is a committee? A group of the unwilling, picked from the unfit, to do the unnecessairy.


    EEP 6.1 & EEP 8 Expert


    Windows 7 64bit
    AMD Phenom(tm) II X4 810 Prozessor
    4 GB Ram
    ATI Radeon HD 4600


    Ich bin für eine Skriptfunktion zur Steuerung des Betriebsablaufs bei EEP.

  • Hallo Benny,
    Auch von mir ein herzliches Dankeschön für den "Schnipsel". :bb_1:
    Ganz besonders fantastisch ist, dass man nun direkt einen Lua Befehl aus dem KP heraus ausführen kann. Damit wird es wunderbar einfach einen Eintrag im Ereignisfenster zu generieren usw., usw., ohne im Lua Script dafür rumeiern zu müssen.

    Viele Grüße aus Franken
    Manfred
    __________________________

    Windows 10 64Bit - Intel i7 8700 (6x3.2 GHz) -GeForce GTX1060 6GB - 16GB RAM

    Windows 8.1 64Bit - Intel i7 4790 - GeForce GTX970 4GB - 16GB RAM
    Windows 7 Home Premium 64Bit - Intel i5 650 - Ati Radeon HD5750 - 8GB RAM

    2 Monitore

    EEP 2.43 Gold bis EEP14.1
    Modell Katalog

    Modell Explorer

  • Hallo Benny,


    danke auch von mir für deinen Code-Schnipsel. Habe gerade getestet,
    man kann auch mehrere Befehle schreiben. Sogar das geht:
    [IMG:http://up.picr.de/19506928lm.jpg]
    Es ist nur leider nicht viel Platz in der Zeile.


    Kannst du bitte auch etwas erfinden, dass man die Signal-Variablen nicht mehr braucht?
    :ba_1: :ba_1: :ba_1:
    Das wäre zu schön um wahr zu sein.

    Gruß, Hans-Christian

    ...der mit der Maus tanzt.


    Videos für die Schaltmodule, den Trafo und LUA: Playlist

  • damit meine ich, dass man Signale verwenden muss um den Zustand von Variablen abzuspeichern
    wenn man nicht möchte, dass nach dem Schließen einer Anlage oder nach dem Neuladen des
    LUA-Scripts alle aktuellen Werte der Variablen flöten gehen.


    Oder habe ich was verpasst, gibt es dafür schon eine Lösung?


    Gruß, Hans-Christian

    ...der mit der Maus tanzt.


    Videos für die Schaltmodule, den Trafo und LUA: Playlist

  • Du kannst nie garantieren, dass zugleich mit einer Anlage auch etwas anderes gespeichert wird, in dem beispielsweise Variablen festgehalten werden. Lua erfährt nicht, dass eine Anlage gespeichert wird. Und kann dementsprechend auch nicht reagieren. Also ist der einzige zuverlässige Speicherplatz für Zustandsmerker die Anlage selbst. Und dort geht es nur mit Signalen oder Weichen. Weil nur diese beiden Elemente beim nächsten Start ausgelesen werden können.

    "Guess about all I got left now is doubts. Doubts and scars."

    John Marston