System-Scriptvariablen und -Events

  • Auflistung und Beschreibung von System-Scriptvariablen.

    Es gibt eine Reihe von System-Variablen. Das Script darf auf die Systemvariable schreibend und/oder lesend zugreifen, je nach Variable.


    Einige System-Variablen sind schon "von alleine" da und dürfen nirgendwo extra deklariert werden, aber es gibt auch andere System-Variablen, die in der "PUBLIC VARS"-Sektion im Script trotzdem deklariert werden müssen.


    Die Variablen, die noch deklariert werden müssen, sind in der letzten Spalte "Dekl." mit "muss" beschriftet, die, die bereits deklariert sind, mit "ist".

    1 Allgemein

    Variablenname Beschreibung Typ Einheit Schreibzugriff Dekl.
    Timegap
    Zeitdauer seit letztem Berechnungsschritt Single Sekunden
    ist
    NightTex
    Map-weite Variable zur Steuerung der Nachttexturen von Gebäuden u.Ä. Integer -
    ist
    EnvirBrightness Umgebungshelligkeit Single 0..1 ist
    TimeOfDay Uhrzeit Single 0 = 0:00,
    0.5 = 12:00,
    1 = 24:00
    muss
    Hint
    Hinweis-Text. Setze diese Variable auf eine Sprachdatei-ID, damit der zugehörige Text im Hint-Fenster in LOTUS erscheint. Dies ist z.B. geeignet, wenn dem User bei einer Fehlbedienung ein Hinweis gegeben werden soll, warum etwas nicht geht.

    Konvention ist hierbei, dass die benutzerdefinierten Sprach-IDs folgendermaßen aufgebaut sind:
    "[Fahrzeugname].Hint.[Kurztext]"

    Beispiel: "GT6N.Hint.ReverserNotSet"

    Es muss dann eine eigene Sprach-Datei angelegt werden, bei der jene IDs in die links Spalte und die dazugehörigen darzustellenden Texte (der jeweiligen Sprache) rechts eingetragen werden. Auf diese Weise können - mit mehreren Sprachdateien - auch Hints in verschiedenen Sprachen realisiert werden.
    String - X muss
    Mouse_X & Mouse_Y Bewegung des Mauszeigers seit dem letzten Simulationsschritt Single Pixel muss
    RealisticElecSupply Zustand der Benutzer-Einstellung "Stromversorgung real" Boolean - muss
    InitReadyForMovement Zustand der Benutzer-Einstellung "Abgerüstet platzieren":
    0 = Kalt & Dunkel (z.B. Richtungswender auf 0, Stromabnehmer abgesenkt, Hauptschalter aus, Umformer aus
    1 = Aufgerüstet (z.B. Richtungswender auf I oder *, Stromabnehmer angehoben, Hauptschalter ein, Umformer ein)
    2 = Fahrbereit (z.B. Richtungswender auf V)
    Integer 0..2 muss
    InitPosInTrain Position des Wagens im Zug unmittelbar nach Platzieren des Zuges (0 = vorderstes Fahrzeug). Integer muss
    InitCarIsReversed Gibt die Ausrichtung des Wagens im Zugverband nach Platzieren des Zuges an. False = steht in Zug-Richtung, True = steht entgegen der Zug-Richtung. Boolean muss
    DeadMansSwitch Zustand der Benutzer-Einstellung "SiFa/Totmann simulieren" Boolean muss


    2 Remote-Control (KI-/Multiplayer, Standzug)

    Die folgenden Variablen dienen der Kommunikation zwischen Multiplayer-, KI-Fahrzeugen und dem Userfahrzeug. Falls das Fahrzeug das User-Fahrzeug ist, dann ist "RC_Active" false und die Variablen können gesetzt werden, im Folgenden "Sende-Modus" genannt. Ist es kein User-Fahrzeug, d.h. ein Multiplayer-, ein KI- oder ein vom User abgestelltes Fahrzeug, dann ist "RC_Active" true und die Variablen können nur gelesen werden, das Fahrzeug befindet sich im sog. "Empfangs-Modus".


    Variablenname Beschreibung Typ Einheit Schreibzugriff Dekl.
    RC_Active Zug befindet sich im Empfangs-/Remote-Control-Modus. Dies bedeutet, dass es zur Zeit nicht vom User gesteuert wird, sondern dass es sich um die Darstellung des Fahrzeuges eines anderen Spielers (im Multiplayer) bzw. ein KI- oder ein abgestelltes Fahrzeug handelt. Ist die Variable false, dann ist es ein User-Fahrzeug und befindet sich im Sende-Modus. Boolean - muss
    RC_DirLeaver Hiermit kann der sendende Zug übertragen, welches Fahrzeug im Zugverband der "Master" ist (üblicherweise wenn der Richtungswender aus der Nullstellung hinausbewegt wird) und aus welchem Fahrerraum dies getan wird. Laut Konvention geht es hier nicht darum, welche Fahrtrichtung eingestellt wird:

    - Wenn der Richtungswender im vorderen Fahrerraum betätigt wird (oder bei Einrichtern auf dem "Hauptfahrpult"), dann wird der Wert immer auf 1 gesetzt, auch in der Stellung "R"
    - Wenn der Richtungswender im hinteren Fahrerraum betätigt wird (oder bei Einrichtern auf der Rückfahreinrichtung), dann wird der Wert immer auf -1 gesetzt, auch in der Stellung "V".

    Wird diese Variable im gesamten Zug nicht gesetzt, dann:
    - Wird für bestimmte folgende Variablen (RC_Belling, RC_Cockpitlight) die Position des Users im sendenden Zug verwendet
    - Erhalten alle empfangenden Fahrzeuge eine 0 als Variablenwert.

    Wird diese Variable in mehr als einem Fahrzeug ungleich 0 gesetzt, dann gilt der Wert des ersten Fahrzeug relativ zum Zugverband. Alle weiteren Werte werden ignoriert.
    Integer 1 = im vorderen Fahrerstand gesetzt
    0 = nicht gesetzt
    -1 = im hinteren Fahrerstand gesetzt

    (gesetzt = V, I oder R, aber NICHT 0)
    [falls Sende-Modus]
    muss
    RC_Throttle Dient der Übertragung der Antriebsleistung, absolut betrachtet, d.h. ohne Berücksichtigung der Richtung. Es wird über die einzelnen Werte der Fahrzeuge im sendenden Zug das Maximum ermittelt und für den Zug übertragen. Der Wert dient nicht der Antriebsphysik (das empfangende Fahrzeug wird ohnehin genauso bewegt wie das sendende Fahrzeug), sondern zur korrekten Simulation insbesondere des Sounds, aber auch von Animationen und Lichtern, die von der Leistung abhängig sind. Single 0..1 [falls Sende-Modus] muss
    RC_Brake Dient der Übertragung der Bremsleistung. Behandlung und Nutzen wie RC_Throttle, normiert auf 0..1. Single 0..1 [falls Sende-Modus] muss
    RC_IndR, RC_IndL Blinker rechts / links. Diese Variable zeigt an/übermittelt, ob der rechte und/oder linke Blinker aktiv ist. Wenn beide Variablen true sind, dann ist der Warnblinker aktiv.

    Das Besondere an diesen Variablen ist, dass die einzelnen Fahrzeuge die Variable stets "richtungssensitiv" erhalten bzw. senden. Beispiel: Fahren in einem Zug zwei Wagen "Rücken-an-Rücken" und soll dieser Zug seitens der KI in Fahrtrichtung rechts blinken, dann wird beim "vorwärts" eingereihtem Fahrzeug die Variable RC_IndR auf true gesetzt, beim "rückwärts" eingereihtem Fahrzeug die Variable RC_IndL.

    Im Sende-Modus reicht es, wenn nur ein Fahrzeug die jeweilige Variable auf true setzt, damit der Zug als blinkend interpretiert wird. Im Empfangs-Modus werden die Variablen sämtlicher Fahrzeuge gesetzt.
    Boolean - [falls Sende-Modus] muss
    RC_FrontLight_Front
    RC_FrontLight_Back
    Diese Variable wird nur für das erste und letzte Fahrzeug des Zuges übertragen und dort nur für das ungekuppelte Ende. Im Empfangsbetrieb verbleibt die Variable an gekuppelten Enden bei 0. Integer 0 = aus
    1 = Standlicht
    2 = Abblendlicht
    3 = Fernlicht
    [falls Sende-Modus] muss
    RC_OtherLights_Front
    RC_OtherLights_Back
    Hiermit können weitere Lichter am vorderen oder hinteren Ende übertragen werden, beispielsweise Rück- und Bremslichter, Nebelschlussleuchten o.Ä.

    Diese Variable wird nur für das erste und letzte Fahrzeug des Zuges übertragen und dort nur für das ungekuppelte Ende. Im Empfangsbetrieb verbleibt die Variable an gekuppelten Enden bei 0.
    Integer Bit-Flags:
    +1 = Rücklicht
    +2 = Bremslicht
    +4 = Rückfahrlicht
    +8 = Nebelscheinwerfer
    +16 = Nebelschluss
    +32 = frei
    +64 = frei
    +128 = frei
    [falls Sende-Modus] muss
    RC_Belling Zustand der Klingel. Im Sendebetrieb ist es unerheblich, welches Fahrzeug den Klingelzustand sendet. Im Empfangsbetrieb erhält nur das Fahrzeug, in welchem der Richtungswender gesetzt wurde (andernfalls wo sich der sendende User befindet), den Klingelvariablen-Zustand; alle anderen erhalten 0. Integer [falls Sende-Modus] muss
    RC_Sanding Zustand der Sandstreuer. Wenn mindestens ein Fahrzeug im Zug sandet, wird dieser Zustand auf den gesamten empfangenden Zug übertragen. Boolean [falls Sende-Modus] muss
    RC_DoorsOpen_Left, RC_DoorsOpen_Right Diese Variablen dienen dem übertragen der Türzustände. Die Zustände werden bitweise in je eine Integer-Zahl für die linken und rechten Türen kodiert; wie das geht, wird exemplarisch in diesem Artikel beschrieben: Bit-Flags.

    Es empfielt sich, als Zustand das "Ziel" der Türbewegung zu übertragen. Der Grund sei am Gegenbeispiel dargestellt: Würde man bspw. als Öffnungszustand die Formel "Türöffnung > 0.5" übertragen, dann würde der Schließvorgang bei den Multiplayer-Kollegen erst beginnen, wenn beim User die Türen schon halb geschlossen sind. Insbesondere beim Vorlauf mit Türschließwarnanlage würde es damit zu einer erheblichen Verzögerung kommen.

    ACHTUNG: Damit diese Übertragung funktioniert, muss zunächst die Anzahl der Türen in den "Objekteinstellungen" im ContentTool eingetragen werden! Diese Anzahl zählt pro Seite, wobei die jeweils größere Zahl von Türen zu wählen ist. Also: Wert = Maximum( Türanzahl linke Seite, Türanzahl rechte Seite ).
    Integer Bit-Flags [falls Sende-Modus] muss
    RC_CockpitLight Das User-Fahrzeug (bzw. Fahrzeug mit gesetztem Richtungswender) im sendenden Zugverband kann hierüber den Zustand seiner Fahrerraumbeleuchtung übertragen. Boolean [falls Sende-Modus] muss
    RC_CabinLight
    Die Variable wird im Bit-Flags-Verfahren übertragen, damit mehrere Cabinlight-Kreise realisierbar sind (z.B. Ober- und Unterdeck). Beim Senden gilt pro Lichtkreis, dass ein Wagen ausreicht, damit das Licht im gesamten Zug an ist (Bitweises OR). Max. 8 Bit. Integer Bit-Flags [falls Sende-Modus] muss
    RC_PantographApplied Zustand der Pantographen des Wagens. Diese musst Du lediglich durchzählen und setzt dann das jeweilige Bit (siehe Lexikonartikel Bit-Flags) für den jeweiligen Stromabnehmer (sendendes Fahrzeug) bzw. liest es aus (empfangendes Fahrzeug). Diese Information wird je Wagen individuell übertragen (wie bei den Türen). Integer Bit-Flags [falls Sende-Modus] muss
    RC_Wiper Modus des Scheibenwischers. Gelesen und geschrieben wird immer nur das Fahrzeug, in dem der Richtungswender gesetzt wurde (oder andernfalls sich der User befindet).
    0: Aus
    1: Intervall
    2: Normal
    3: Schnell
    4: Waschen
    ab 5: User-definiert
    muss


    Fahrzeuge

    2.1 Allgemein

    Variablenname Beschreibung Typ Einheit Schreibzugriff Dekl.
    v_ground Geschwindigkeit in Richtung Fahrzeug-Längsachse Single Meter pro Sekunde muss
    a_ground Beschleunigung in Richtung Fahrzeug-Längsachse Single Meter pro Quadratsekunde muss
    panto_voltage_{a} Oberleitungsspannung am Stromabnehmer mit dem Index {a} verfügbar.
    Trolley: Stange hängt an einem Fahrdraht und dieser steht unter Spannung.
    Pantograph: Der niedrigste Fahrdraht (dessen Höhe übergeben wird) steht unter Spannung. Ob der Stromabnehmer selbst angelegt ist, muss vom Scripter geprüft werden.
    boolean - muss
    panto_{a} Höhe des niedrigsten Fahrdrahtes im Bereich des (Scheren-/Einholm-) Stromabnehmers mit dem Index {a}. Die Angabe erfolgt im Koordinatensystem des Fahrzeugobjektes zuzüglich des Bewegungszustands der assoziierten Animation. Single m muss
    trolley_angle_{a}_hori, trolley_angle_{a}_vert
    Auslenkung der Trolley-Stange mit dem Index {a} horiziontal gegenüber der Mittelposition (_hori) bzw. vertikal gegenüber der Waagerechten (_vert) des Fahrzeugobjektes zuzüglich des Bewegungszustands der assoziierten Animation.

    Schreibzugriff ist solange möglich, bis der Trolley eingegleist ist. Auf diese Weise können Trolley-Entgleisungs-Schutzmechanismen simuliert werden.
    Single Grad (°) [X] muss
    trolley_free_{a} Trolley-Rad ist weder in der Oberleitung eingegleist noch wird es vom User gezogen. {a} ist der Index des Stromabnehmers. Boolean - muss
    trolley_online_{a} Trolley-Rad ist an der Oberleitung. {a} ist der Index des Stromabnehmers. Boolean - muss
    TextureRaindropSet_{x}
    Texturindex des Regentropfenfensters mit Index {x} (0-basiert). Integer -
    ist
    coupled_{a} Gekuppelt: An der vorderen (a = 0) bzw. hinteren (a = 1) Kupplung ist ein weiteres Fahrzeug angekuppelt (und die Kupplung ist verriegelt) Boolean - ist
    couplingState_{a} Kupplungszustand:
    0: Kupplung deaktiviert, beim Heranfahren passiert nichts - "nur Puffer"
    1: Kupplung bereit, beim Heranfahren wird angekuppelt - Automatikkupplung
    2: Angekuppelt
    Vorne: a = 0, hinten: a = 1.
    Integer - [X] ist
    couplingOffsetY_{a} Kupplung temporär in Y-Richtung verschieben, z.B. falls die Kupplung wie beim GT eingeklappt werden kann. Vorne: a = 0, hinten: a = 1. Single - [X] muss



    2.2 Bahn

    Variablenname Beschreibung Typ Einheit Schreibzugriff Dekl.
    M_Axle_N_{b}_{a}
    Traktionskraft des Rades am Kontaktpunkt zur Schiene. Hierzu zählen auch die Kräfte der E-Bremse. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert. Single Newton X muss
    MBrake_Axle_N_{b}_{a}
    Bremskraft des Rades an der Kontaktfläche zum Gleis. Nur positive Werte; diese wirken stets entgegen der Fahrtrichtung und haben die Fähigkeit, den Zug auch auf einem Gefälle festzuhalten. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single Newton X muss
    sanding_{b}_{a} Sanden. Wenn diese Variable auf true gesetzt wird, dann wird diese Achse besandet. Boolean - X muss
    F_RailBrake_Bogie_N_{b}
    Anpresskraft einer Schienenbremse am Drehgestell Nr. {b} (0-basiert). Die Wirkung hängt vom aktuellen Reibungskoeffizienten der Schiene ab. Die Wirkung ist immer der Fahrtrichtung entgegengesetzt und hat die Fähigkeit, den Zug auch auf einem Gefälle festzuhalten. Single Newton X muss
    v_Axle_mps_{b}_{a}
    Geschwindigkeit des Rades an seinem Kontakt mit der Schiene. Wenn das Rad weder blockiert noch durchdreht ist diese Geschwindigkeit die Fahrzeuggeschwindigkeit. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single Meter pro Sekunde
    ist
    alpha_Axle_deg_{b}_{a}
    Drehwinkel der Achse. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single Grad (°)
    ist
    spring_Axle_m_{b}_{a}
    Aktuelle Auslenkung der Achsfederung (Primärfederung) aus der Nullstellung. Die Nullstellung ist jene Stellung, in der sich die Feder befindet, wenn der Wagen ohne Zuladung ruhig auf einem horizontalen Gleis steht. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single Meter
    ist
    loadforce_Axle_N_{b}_{a}
    Aktuelle Andruckkraft der Achse gegenüber der Schiene. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single Newton
    muss
    invradius_abs_max Betrag der maximalen Krümmung des unter den Achsen dieses Fahrzeug liegenden Gleisabschnitts. Die Krümmung ist der Kehrwert des Radiusses: 200 m Radius bedeuten eine Krümmung von 0,005, 100 m dagegen 0.01. Single 1 / m
    muss
    invradius_{b}_{a} Aktuelle Krümmung des Gleises unter der Achse. {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert Single 1 / m
    muss
    railquality_{b}_{a} Schienenqualität unter der Achse: ( {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert)
    0 = Gut
    1 = Schlecht
    2 = mit Herzstücken, gut
    3 = mit Herzstücken, schlecht
    4 = Flachrille
    5 = Sehr gut (z.B. Hochgeschwindigkeitsstrecke)
    Integer - muss
    surfacetype_{b}_{a} Oberfläche unterhalb des Gleises: ( {b} = Index des Drehgestells, {a} = Index der Achse, jeweils 0-basiert)
    0 = Normal (Schotter)
    1 = Straße
    2 = Rasen
    Integer - muss


    Hinweis: Beim Ersetzen der Indizes in den Variablennamen fallen die geschwungenen Klammern weg! Beispiel: loadforce_Axle_N_{b}_{a} am ersten Drehgestell, zweite Achse, lautet: loadforce_Axle_N_0_1.

    3 Szenerieobjekte

    Variablenname Beschreibung Typ Einheit Schreibzugriff Dekl.
    trafficlight_phase Aktuelle Phase der verknüpften Ampelanlage und Richtung:
    0..2 = drei verschiedene Rotphasen
    3..5 = drei verschiedene Gelbphasen für den Übergang Rot => Grün
    6..8 = drei verschiedene Grünphasen
    9..11 = drei verschiedene Gelbphasen für den Übergang Grün => Rot
    12 = Ampel ausgeschaltet für die primäre (Vorfahrt) Richtung
    13 = Ampel ausgeschaltet für die sekundäre (Vorfahrt gewähren) Richtung
    14..16 = drei verschiedene Phasen für sonstige Zwecke
    Integer - muss


    4 System-Events

    Das den System-Events zugrundeliegende System ist folgendermaßen zu verstehen: Es gibt gewisse LOTUS-interne Ereignisse, die aus dem Fahrzeug heraus ausgelöst werden sollen. Hierzu soll nicht nur ggf. eine Tastenkombination aufgerufen werden, sondern es sollen auch Maus-Klickspots im Fahrzeug definiert werden können. Momentan werden System-Events nicht aufgelistet, wenn man einem Fahrzeug-Mesh ein Maus-Event zuweisen möchte. Stattdessen müssen System-Events manuell eingetippt werden.


    Event-Name Funktion
    TrolleyRerail_{a}
    Dient dem (Wieder-) Eingleisen des Stangen-Stromabnehmers in die Oberleitung. Hierzu wird der so markierte Klickspot angeklickt, die Maus gedrückt gehalten und bewegt, um den Stromabnehmer zu drehen und zu haben bzw. senken. An der Wunschposition wird die Maustaste losgelassen.

    5 System-Send-Events

    Das Script kann in LOTUS bestimmte Ereignisse auslösen. Hierfür gibt es procedure SendEvent(self: integer; id: string; value: integer). Als erster Parameter muss stets die (automatisch von LOTUS deklarierten) Public-Var "Self" gesetzt werden. Im Folgenden sind die möglichen IDs aufgelistet:


    Event-ID Funktion
    TrolleyDerail Lässt den Trolley-Stromabnehmer "absichtlich" entgleisen. Mit "value" wird der Index des zu entgleisenden Stromabnehmers angegeben.