Szenario Skripting

  • Der Train Simulator bietet Skriptfunktionen für Szenarioereignisse und -bedingungen.
    Diese können verwendet werden, um Animation abzuspielen, einen Kamerawechsel auszulösen oder um Eigenschaften/Zustände des Spielerzugs zu messen und zu steuern.

    Dies is eine Auflistung verschiedener Möglichkeiten, die es im Szenario Skripting gibt.

    INFORMATION:
    Das Meiste des folgenden ist nicht ausreichend dokumentiert.
    Alle Informationen setzen sich aus offiziellen, inoffiziellen und meinen Erkenntnissen zusammen.
    Alle Inhalte ohne Gewähr.
    *achtung*Inhalt und Richtigkeit kann sich jederzeit ändern, da es sich nicht um kein offizielles Dokument handelt.

    Beispiele werden ebenfalls folgen.
    Für einen kleinen Überblick, siehe hier.



    == Grundlegendes ==

    Ereignisse
    "Events"
    - werden durch Erfolg oder Misserfolg einer Anweisung oder den Abschluss eines Triggers ausgelöst
    - in der Fahrplan Ansicht können sie in den Feldern "Erfolgsbedingung", "Auslösen Erfolg" und "Auslösen Fehler" verwendet werden
    "DefferedEvents"
    - können auch durch einen Skriptaufruf durch die Funktion "TriggerDeferredEvent" ausgelöst werden (dazu später)


    - Ereignisse, deren Auslösung nach einem festgelegten Intervall erfolgt
    - Sie sind der Mechanismus, um das gesamte Timing durchzuführen, wenn sie mit einem Spiel gespeichert werden


    Bedingungen
    - Testen von zusätzlichen Anforderungen an den Spieler, wenn eine Anweisung ansonsten erfolgreich wäre
    - Zum Beispiel kann für eine "Gehe über"-Anweisung eine Bedingung getestet werden, wenn der Zug in die Markierung einfährt
    - Bedingungen können zu einer Anweisung im Feld "Erfolgsbedingung" hinzugefügt werden
    - Bedingungen können auch durch einen Aufruf der Skriptfunktion "BeginConditonCheck" getestet werden (dazu später)
    - Überprüfte Bedingungen sind eine Möglichkeit zu testen, ob eine Bedingung über einen bestimmten Zeitraum beibehalten wird z.B.: Druck
    - Sobald eine Bedingung abgeschlossen ist, wird ihr Wert gespeichert und alle weiteren Überprüfungen geben diesen gespeicherten Wert zurück.


    Szenarioskript
    - ein ScenarioScript.lua muss im Stammverzeichnis des Szenarios platziert werden
    - Diese sollte zwei Funktionen definieren:


    - mit "function OnEvent ( event )" werden alle Ereignisaufrufe aus dem Szenariosystem verarbeitet
    - TRUE (1), wenn das Ereignis behandelt wird
    - FALSE (0), wenn das Ereignis unbekannt ist
    - "event" Name des Ereignisses, wie in der Anweisung, dem Trigger oder dem "TriggerDeferredEvent" definiert


    - mit "function TestCondition ( condition )" wird getestet, ob der Spieler zusätzliche Bedingungen für eine Anweisung erfüllt hat
    - CONDITION_NOT_YET_MET (0), CONDITION_SUCCEEDED (1) oder CONDITION_FAILED (2) zurückgeben
    - "condition" Name der Bedingung, wie in der Anweisung oder in "BeginConditonCheck" definiert


    - Szenarioskripte haben eine andere Aufrufkonvention als andere Skripte im Spiel
    - Statt Call, verwendet das Szenario Skript "SysCall"
    "SysCall" hat Zugriff auf eine Reihe globaler Funktionen, sowie auf die normalen Skriptfunktionen aller benannten Objekte
    "SysCall" verwendet eine Doppelpunktnotation, um das Objekt oder das Modul zu beschreiben, für das der Funktionsaufruf erforderlich ist z.B.:
    SysCall ( "ScenarioManager:ShowMessage", "Title", "Message" )
    richtung = SysCall ( "PlayerEngine:GetControlValue", "Regulator" );
    Eine zweite Doppelpunktnotation kann verwendet werden, um ein untergeordnetes Objekt abzurufen z.B.:
    SysCall ( "PlayerEngine:Main Smoke Stack:GetEmitRate" )


    - Jedes in einem Szenario platzierte Objekt kann im Eigenschaften-Flyout im Feld " Objektname " benannt werden.
    - PlayerEngine ist ein besonderer Wert, dieser bezieht sich immer auf die "PlayerEngine".
    - Auch jedes nummerierte Schienenfahrzeug kann verwendet werden.


    Wichtig:
    Es ist zu empfehlen, jegliches Scripting mit einem geeigneten Text-Editor durchzuführen (Notepad++, LuaEdit, etc.)
    Zustände in Szenarioskripten werden bei Speichern und Fortsetzen des Szenarios nicht beibehalten


    Scenario Manger:

    TriggerScenarioComplete

    Syntax TriggerScenarioComplete ( message )
    Funktion Erfolgreicher Abschluss eines Szenarios
    Eingabewerte message Meldung, weshalb das Szenario erfolgreich war
    Ausgabe N/A


    TriggerScenarioFailure

    Syntax TriggerScenarioFailure ( message )
    Funktion Nicht erfolgreicher Abschluss eines Szenarios
    Eingabewerte message Meldung, weshalb das Szenario nicht erfolgreich war
    Ausgabe N/A


    TriggerDeferredEvent

    Syntax TriggerDeferredEvent ( event, time )
    Funktion Löst ein verzögertes Ereignis aus
    Eingabewerte event Name des Ereignisses
    time Zeit in Sekunden, bis das Ereignis ausgelöst werden soll
    Ausgabe false, wenn das Ereignis bereits geplant ist


    CancelDeferredEvent

    Syntax CancelDeferredEvent ( event )
    Funktion Bricht ein verzögertes Ereignis ab
    Eingabewerte event Name des Ereignisses
    Ausgabe false, wenn das Ereignis nicht mehr geplant war


    BeginConditionCheck

    Syntax BeginConditionCheck ( condition )
    Funktion Beginnt mit dem Testen eines Zustands
    Eingabewerte condition Name der Bedingung
    Ausgabe false, wenn die Bedingung bereits getestet wird
    Hinweis Sobald die Bedingung als CONDITION_SUCCEEDED (1)
    oder CONDITION_FAILED (2)abgeschlossen wurde,
    wird die Bedingung nicht mehr getestet.


    EndConditionCheck

    Syntax EndConditionCheck ( condition )
    Funktion Beendet das Testen eines Zustands
    Eingabewerte condition Name der Bedingung
    Ausgabe false, wenn die Bedingung bereits nicht mehr getestet wird
    Hinweis Kann nicht aus TestCondition heraus gefunden werden


    GetConditionStatus

    Syntax GetConditionStatus ( condition )
    Funktion Ruft den Status einer Skriptbedingung ab
    Eingabewerte condition Name der Bedingung
    Ausgabe CONDITION_NOT_YET_MET (0)
    CONDITION_SUCCEEDED (1)
    CONDITION_FAILED (2)
    Hinweis testet nur den gespeicherten Status einer Bedingung
    generiert keinen Aufruf von CheckCondition.


    ShowMessage

    Syntax ShowMessage ( title, message, type )
    Funktion Dialogfeld mit einer Nachricht
    Eingabewerte title Titel des Dialogsfelds
    message Inhalt der Nachricht
    type Typ des Meldungsfelds INFO (0) oder ALERT (1)
    Ausgabe N/A
    Hinweis Wenn title oder message im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet


    ShowInfoMessageExt

    Syntax ShowInfoMessageExt ( title, message, time, pos, size, pause )
    Funktion Dialogfeld mit einer Nachricht und erweiterten Attributen
    Eingabewerte title Titel des Dialogfelds
    message Inhalt oder .html
    time Zeit zum Anzeigen der Nachricht, 0.0 für unbestimmte Zeit
    pos Position ( MSG_TOP (1), MSG_VCENTRE (2), MSG_BOTTOM (4), MSG_LEFT (8), MSG_CENTRE (16), MSG_RIGHT (32))
    size Größe ( MSG_SMALL (0), MSG_REG (1), MSG_LRG (2))
    pause Spiel unterbrechen ( TRUE, FALSE)
    Ausgabe N/A
    Hinweis Wenn title oder message im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet


    ShowAlertMessageExt

    Syntax ShowAlertMessageExt ( title, message, time, event )
    Funktion Dialogfeld mit einer Nachricht und erweiterten Attributen
    Eingabewerte title Titel des Dialogfelds
    message Inhalt
    time Zeit zum Anzeigen der Nachricht, 0.0 für unbestimmte Zeit
    event Ereignis wird bei Klicken auf die Nachricht ausgelöst
    Ausgabe N/A
    Hinweis Wenn title oder message im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet


    IsAtDestination

    Syntax IsAtDestination ( service, dest )
    Funktion Löst ein verzögertes Ereignis aus
    Eingabewerte service Name des Ereignisses
    dest Zeit in Sekunden, bis das Ereignis ausgelöst werden soll
    Ausgabe false, wenn Ereignis bereits geplant war
    Hinweis Es kann nur ein Ereignis pro Aktualisierung ausgelöst werden. Zwei Ereignisse mit derselben Ablaufzeit werden in aufeinanderfolgenden Frames ausgelöst.


    GetSceanrioTime

    Syntax GetScenarioTime ()
    Funktion Ruft die Zeit seit dem Start des Szenarios in Sekunden ab
    Eingabewerte N / A
    Ausgabe Die Zeit seit dem Start des Szenarios in Sekunden
    Hinweis -


    GetTimeOfDay

    Syntax GetTimeOfDay ()
    Funktion Ruft die Zeit seit 0:00Uhr in Sekunden ab
    Eingabewerte N / A
    Ausgabe Die Zeit seit Mitternacht in Sekunden
    Hinweis -


    LockControls

    Syntax LockControls()
    Funktion Sperrt alle Bedienelemente und Tastaturbefehle im Simulator
    Eingabewerte N / A
    Ausgabe N / A
    Hinweis Lok kann erst vom User wieder bedient werden, wenn der Befehl UnlockControls gegeben wurde


    UnlockControls

    Syntax UnlockControls()
    Funktion Entsperrt alle Bedienelemente und Tastaturbefehle im Simulator
    Eingabewerte N / A
    Ausgabe N / A
    Hinweis -


    GetSeason

    Syntax GetSeason()
    Funktion Ruft die Jahreszeit ab
    Eingabewerte
    N / A
    Ausgabe SEASON_SPRING = 0, SEASON_SUMMER = 1, SEASON_AUTUMN = 2, SEASON_WINTER = 3
    Hinweis -



    WetterController:


    GetCurrentPrecipitationType

    Syntax GetCurrentPrecipitationType ()
    Funktion Ruft die aktuelle Niederschlagsart ab
    Argumente N / A
    Rückgabe 0 = Regen, 1 = Schneeregen, 2 = Hagel, 3 = Schnee
    Hinweis -


    GetCurrentPrecipitationDensity

    Syntax GetPrecipitationDensity ()
    Funktion Ruft die Dichte des Niederschlags ab
    Argumente N / A
    Rückgabe Wert zwischen 0 und 1
    Hinweis Wert variiert


    GetCurrentPrecipitationSpeed

    Syntax GetPrecipitationSpeed ()
    Funktion Ruft die Geschwindigkeit des Niederschlags ab
    Argumente N / A
    Rückgabe Die vertikale Fallgeschwindigkeit des Niederschlags in Metern pro Sekunde
    Hinweis -



    WetterController:



    ActivateCamera

    Syntax ActivateCamera ( name, time)
    Funktion Wechseln Sie zu einer benannten Kamera
    Argumente name Name der Kamera
    time Zeit in Sek., bevor zur vorherigen Kamera zurückgekehrt wird. 0 für kein rücksetzen
    Rückgabe N / A
    Hinweis Die Kamera kann eine der Standardkameras oder eine benutzerdefinierte Kamera sein.
    Standardkameras:
    CabCamera - Führerstandsansicht (wie 1)
    ExternalCamera - Zugverfolgungskamera (wie 2 )
    HeadOutCamera - Abfertigungskamera (aus dem Fenster schauen) (wie Umschalt + 2)
    TrackSideCamrea - streckenseitige Kamera (wie 4)
    CarriageCamera - Wageninnenkamera/Passagierkamera (wie 5)
    CouplingCamera - Kopplungskamera (wie 6 )
    YardCamera - Ansicht der Kamera von oben nach unten (wie 7 )
    FreeCamera - freie Kamera ( wie "8" )


    LookAt

    Syntax LookAt ( name )
    Funktion die Kamera auf Objekt richten
    Argumente name Name des Objekts
    Rückgabe True, wenn das benannte Objekt gefunden wurde
    Hinweis Ist name eine Schienenfahrzeugnummer, schaut die Kamera auf dieses Schienenfahrzeug.
    Ist name ein benannten Objekts, wird das Objekt von der freien Kamera betrachtet.


    JumpTo

    Syntax JumpTo ( longitude, latitude, height )
    Funktion Bewegt die Kamera an einen bestimmten Ort
    Argumente longitude Längengrad
    latitude Breitengrad
    height Höhe über n.N.
    Rückgabe right , wenn sich die Kamera an den Ort bewegen konnte
    Hinweis Drei Achsen; Nur für die freie Kamera verfügbar


Share