BetterContacts: Funktionsparameter in Kontaktpunkten, Nachfolger meiner "Codezeile"

!!! 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.
In the case of pictures that are attached to the article, the source must also be stated. This also applies to your own pictures, which were taken by you. Pictures without source information will be deleted!
  • Wenn du trotzdem an deinem Wunsch festhältst und auch andere dies wollen, könnte ich eine weitere Option namens printVersionInfo hinzufügen, die dann die gewünschte Info ausgibt.

    Hallo Benny :)

    das handhabe ich genauso und wäre ganz in meinem Sinne.

    Die Rangelei um Lokale Variablen ist unnötig weil im Profi-Bereich, in allen Programmiersprachen, immer Lokale bevorzugt werden.

    Da zeigt sich halt der wahre Profi:be_1:

    Gruß Ingo

  • immer Lokale bevorzugt werden.

    vor allen Dingen, wenn und weil es da erfrischende und/oder berauschende Getränke und Geselligkeit gibt. :bg_1:

  • Hallo Ingo ( schlingo ),

    der wahre Profi zeigt sich darin, dass er die Version, global/local, einsetzt, die für das aktuelle Problem die beste Lösung ist.

    Und da können auch globale Variablen sinnvoll sein.

    Ich möchte nur als Beispiel Programmeinstellungen nennen, die einmalig, z.B. beim Programmstart, eingelesen werden und in verschiedensten Funktionen verwendet werden.

    Da werden in den seltensten Fällen bei jedem Funktionsaufruf die Einstellungs-Werte als Parameter übergeben (durchgeschleift) oder in den Funktionen jedesmal die Einstellungs-Werte neu gelesen.

    Aber das Problem mit den Kontaktpunkt-Funktionen mit Parametern wäre schon lange keines mehr, wenn das Manko, ich möchte es den Fehler nennen, sofort nach dem Feststellen in EEP behoben worden wäre, als dieser durch die User festgestellt wurde.

    So verlässt man sich von Seiten Trend einfach auf ein Dauer-Work-Around, der den Fehler behebt.

    Jürgen

    EEP: 12.1, 13.2, 14.1, 15.1, 16.4 (z.Zt. installiert aber nur für Tests im Einsatz)

    keinerlei externe Zusatztools und manuell manipulierte Anlagendateien

    Prozessor: Intel(R) Core(TM) i5-4460S CPU @ 2.90 GHz 2.90 GHz
    PC: RAM 12 GB, Windows 10 Home, 64 Bit
    GK: NVIDIA Geforce GT 730, 4 GB

    Edited 2 times, last by JuergenSchm (August 29, 2020 at 11:38 PM).

  • Hallo Benny,

    den Wunsch lasse ich mal so stehen, auch wenn ich diesen nicht mehr benötige, denn Du hast ja eine Zeile spendiert.

    print("Die Version von BetterContacts ist " .. table.concat(require("BetterContacts_BH2")._VERSION, "."))

    Bei mir steht es halt so da.

    Lua
    require("BetterContacts_BH2")
    print("Skript BetterContacts_BH2 v. ".. table.concat(require("BetterContacts_BH2")._VERSION, ".").. " wurde eingebunden.")

    Grundsätzlich habe ich immer 2 EEP-Versionen aktiv mit separaten LUA-Ordnern, da kann man schon mal ein Update in einer Version vergessen.

    Des weiteren kommen auch mal User und haben eine Herausforderung (Problem), da ist es hilfreich für mich, wenn das Skript geladen wird, welche Module mit welcher Version aktiv sind. Das nur als Hintergedanke von mir.

    Mir persönlich reicht die eine Zeile außerhalb des Skriptes. :bn_1:

    MfG. Jörg
    Ausstattung: Notebook: i7-6700K, 4[8]x4.0 GHz, 32GB RAM DDR4, NVIDIA GTX 980M 8GB, Windows 10, 64-Bit
    Installiert: EEP17.2 Plugin 1 + 2

    Zusatzprogramme: ResourcenSwitcher2 (BH2), EEP-Gleisplan (Frank Buchholz)

  • Heute ist das Plugin 3 für EEP16 erschienen, nun übergibt EEP bei einem Kontaktpunktaufruf auch die ID des Gleises, auf dem der Kontaktpunkt liegt, an die aufgerufene Lua-Funktion.

    Mir fällt dafür zwar kein Anwendungsfall ein, der nicht durch BetterContacts besser abgedeckt würde, aber meine mangelnde Fantasie soll euch nicht abhalten:

    Ab sofort gibt es auf meiner Homepage (und auf GitHub) die Version 1.1.0 von BetterContacts!

    Mit der neuen Option varnameTrackID kann nun ein Variablenname festgelegt werden, unter dem die Gleis-ID innerhalb des Kontaktpunkt-Eintrags zur Verfügung stehen soll . Standardmäßig ist kein Variablenname vergeben (ein vorgegebener Name könnte eine globale Variable gleichen Namens verdecken, das wäre ein Breaking Change); um die Gleis-ID nutzen zu können, müsst ihr also erstmal selbst einen Variablennamen vergeben.

    Und wo ich schonmal dabei war, habe ich auch noch gleich die schon länger versprochene Option printVersionInfo implementiert.

    Ein Minimalbeispiel, das beide Neuerungen zeigt:

    Lua
    clearlog()
    require("BetterContacts_BH2"){printVersionInfo=true,varnameTrackID="TrackID"}
    function EEPMain()
        return 1
    end

    Eintrag im Kontaktpunkt: print("Zug ", Zugname, " auf Gleis ", TrackID)

    Ausgabe im Ereignisfenster (mit Plugin 3 zu EEP16):

    Wer das Plugin 3 nicht hat, kann BetterContacts v1.1.0 übrigens trotzdem nutzen. In diesem Fall bleibt die Variable mit der Gleis-ID halt einfach nil.

    Im Ereignisfenster sieht das dann so aus (EEP16 ohne Plugin 3):


    Ich hoffe, ihr könnt damit etwas anfangen :ae_1:

    Rückmeldungen sind wie immer gerne gesehen, allerdings finde ich vermutlich erst morgen Abend wieder Zeit, ins Forum zu schauen.

    Viele Grüße

    Benny

  • Ich glaube auch nicht, dass varnameTrackID allzu wichtig ist.

    Trotzdem wundert es mich, dass nach meinem Test im neuen EEP 17 für TrackID auch nur nil geliefert wird, bzw. eine globale Variable TrackID nicht geändert wird. Ich dachte, dass EEP alle Plugins von EEP 16 enthält.

    Online EEP-Tools: Gleisplan-Programm / Inventar-Programm

    EEP 15 ab Mai 2019 und EEP 17 ab Nov. 2021
    EEP 6 in 2011 und EEP 13 ab Januar 2019 sind eingemottet
    XMP Core 17 Laptop mit Intel Core i7-10870H 8-Core-CPU, 16 GB Arbeitsspeicher, NVIDIA GeForce RTX 3060 Laptop GPU mit DirectX 12

  • Hallo Frank,

    bei mir funktioniert alles unter EEP17.

    Ich habe aber die Variablen abgeändert nach meinen Wünschen schon in EEP16.

    Sieht dann so aus:

    Lua
    require("BetterContacts_BH2"){printVersionInfo = true,varnameTrackID = "Gleis_ID", varname = "Name_ZV"}

    Im Kontaktpunkt steht dann z.B.

    Lua
    Tufftuff.RM_ZV_Zeit.RM_Kp(Name_ZV, Gleis_ID)

    Bei mir wird immer die richtige Tabellen-Position gefunden, denn die Gleis_ID ist gleichzeitig eine Untertabelle, welche weitere Untertabellen beinhaltet.

    MfG. Jörg
    Ausstattung: Notebook: i7-6700K, 4[8]x4.0 GHz, 32GB RAM DDR4, NVIDIA GTX 980M 8GB, Windows 10, 64-Bit
    Installiert: EEP17.2 Plugin 1 + 2

    Zusatzprogramme: ResourcenSwitcher2 (BH2), EEP-Gleisplan (Frank Buchholz)

  • Hallo Frank,

    Trotzdem wundert es mich, dass nach meinem Test im neuen EEP 17 für TrackID auch nur nil geliefert wird, bzw. eine globale Variable TrackID nicht geändert wird. Ich dachte, dass EEP alle Plugins von EEP 16 enthält.

    Ich habe es gerade probiert, und ich bekomme mit meinem Beispiel von oben (aus #25) auch in EEP17 die Gleis-ID ausgegeben.

    Hast du daran gedacht, TrackID als Variablennamen festzulegen? Dass und warum das nötig ist, habe ich ebenfalls in #25 beschrieben.

    Eine globale Variable sollte generell nicht mehr geändert werden (es sei denn, du hast explizit deprecatedUseGlobal eingeschaltet. Dann ist der Variablenname für den Zugnamen festgelegt, und es lässt sich auch kein zweiter vergeben).

    Viele Grüße

    Benny

  • Asche auf mein Haupt, kaum macht man es richtig funktioniert es - und ich weiß nicht was ich gestern beim Eintippen falsch gemacht habe.

    Vielen Dank für's bestätigen.

    Schönen Gruß

    Frank

    Online EEP-Tools: Gleisplan-Programm / Inventar-Programm

    EEP 15 ab Mai 2019 und EEP 17 ab Nov. 2021
    EEP 6 in 2011 und EEP 13 ab Januar 2019 sind eingemottet
    XMP Core 17 Laptop mit Intel Core i7-10870H 8-Core-CPU, 16 GB Arbeitsspeicher, NVIDIA GeForce RTX 3060 Laptop GPU mit DirectX 12