Szenario Skripting

Discord Einladung
Trete unserem Discord-Server bei (klicke hier zum Beitreten).

Sie betrachten gerade eine ältere Version des Eintrags. Klicken Sie hier, um zur aktuellen Version zu gelangen.

  • IN ARBEIT!

    Der Train Simulator bietet Skriptfunktionen für Szenarioereignisse und -bedingungen.
    Diess können verwendet werden, um Animation abzuspielen, einen Kamerawechsel auszulösen, Elemente des Spielerzugs zu messen und zu steuern.

    Dies is eine Auflistung verschiedener Möglichkeiten, die es im Szenario Skripting gibt.
    [font='Trebuchet MS, Helvetica, sans-serif']INFORMATION: [i]Das Meiste des folgenden ist nicht ausreichend dokumentiert.[/i] [i]alle Informationen setzen sich aus offiziellen, inoffiziellen und meinen Erkenntnissen zusammen.[/i] [i]Alle Inhalte ohne Gewähr.[/i] [i][b]Inhalt und Richtigkeit kann sich jederzeit ändern, da es sich nicht um kein offizielles Dokument handelt.[/b][/i] [lines][/lines] [size=12]== Grundl[/size][/font][size=12]egendes == [/size] [b][font='Trebuchet MS, Helvetica, sans-serif']Ereignisse[/font][/b] [b][font='Trebuchet MS, Helvetica, sans-serif']"Events"[/font][/b] [font='Trebuchet MS, Helvetica, sans-serif']- werden durch Erfolg oder Misserfolg einer Anweisung oder den Abschluss eines Triggers ausgelöst - in der Fahrplan Ansicht können sie in den Feldern "[i]Erfolgsbedingung[/i][i]", "Auslösen Erfolg"[/i] und "[i]Auslösen Fehler" verwendet werden[/i] [b]"DefferedEvents"[/b] - können auch durch einen Skriptaufruf durch die Funktion "[i]TriggerDeferredEvent" [/i]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 [b]Bedingungen[/b] - 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 "[i]Erfolgsbedingung"[/i] hinzugefügt werden - Bedingungen können auch durch einen Aufruf der Skriptfunktion[i] "BeginConditonCheck"[/i] 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. [b]Szenarioskript[/b][/font] - ein ScenarioScript.lua muss im Stammverzeichnis des Szenarios platziert werden - Diese sollte zwei Funktionen definieren: - mit "[tt]function OnEvent ( event )[/tt]" werden alle Ereignisaufrufe aus dem Szenariosystem verarbeitet - [i]TRUE[/i] (1), wenn das Ereignis behandelt wird - [i]FALSE[/i] (0), wenn das Ereignis unbekannt ist [i] - "event" [/i]Name des Ereignisses, wie in der Anweisung, dem Trigger oder dem [i]"TriggerDeferredEvent"[/i] definiert - mit "[tt]function TestCondition ( condition )[/tt]" wird getestet, ob der Spieler zusätzliche Bedingungen für eine Anweisung erfüllt hat - [i]CONDITION_NOT_YET_MET[/i] (0), [i]CONDITION_SUCCEEDED[/i] (1) oder [i]CONDITION_FAILED[/i] (2) zurückgeben [i] - "condition"[/i] Name der Bedingung, wie in der Anweisung oder in "[i]BeginConditonCheck" [/i]definiert - Szenarioskripte haben eine andere Aufrufkonvention als andere Skripte im Spiel - Statt Call, verwendet das Szenario Skript "[i]SysCall"[/i] [i] "SysCall"[/i] hat Zugriff auf eine Reihe globaler Funktionen, sowie auf die normalen [i]Skriptfunktionen[/i] aller benannten Objekte [i] "SysCall"[/i] verwendet eine Doppelpunktnotation, um das Objekt oder das Modul zu beschreiben, für das der Funktionsaufruf erforderlich ist z.B.: [tt]SysCall ( "ScenarioManager:ShowMessage", "Title", "Message" )[/tt] [tt]richtung = SysCall ( "PlayerEngine:GetControlValue", "Regulator" );[/tt] Eine zweite Doppelpunktnotation kann verwendet werden, um ein untergeordnetes Objekt abzurufen z.B.: [tt]SysCall ( "PlayerEngine:Main Smoke Stack:GetEmitRate" )[/tt] - Jedes in einem Szenario platzierte Objekt kann im Eigenschaften-Flyout im Feld " [i]Objektname[/i] " benannt werden. [i]- PlayerEngine[/i] ist ein besonderer Wert, dieser bezieht sich immer auf die "PlayerEngine". - Auch jedes nummerierte Schienenfahrzeug kann verwendet werden. [b]Wichtig:[/b] 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 [lines][/lines] [size=12][font='Trebuchet MS, Helvetica, sans-serif']== Funktionen == [/font][/size] [b]Szenario Manger:[/b] [size=14][font='Trebuchet MS, Helvetica, sans-serif'][b]TriggerScenarioComplete[/b][/font][/size] [font='Trebuchet MS, Helvetica, sans-serif'][size=14][/size][/font] [table] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Syntax[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']TriggerScenarioComplete ( [i]message[/i] )[/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Funktion[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']Erfolgreicher Abschluss eines Szenarios[/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Eingabewerte[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif'][i]message [/i]Meldung, weshalb das Szenario erfolgreich war [/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Ausgabe[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']N/A[/font][/td] [/tr] [/table] [size=14][font='Trebuchet MS, Helvetica, sans-serif'][b]TriggerScenarioFailure[/b][/font][/size] [font='Trebuchet MS, Helvetica, sans-serif'][size=14][/size][/font] [table] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Syntax[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']TriggerScenarioFailure ( [i]message[/i] )[/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Funktion[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']Nicht erfolgreicher Abschluss eines Szenarios[/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Eingabewerte[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif'][i]message [/i]Meldung, weshalb das Szenario nicht erfolgreich war [/font][/td] [/tr] [tr] [td][font='Trebuchet MS, Helvetica, sans-serif']Ausgabe[/font][/td] [td][font='Trebuchet MS, Helvetica, sans-serif']N/A[/font][/td] [/tr] [/table] [size=14][b]TriggerDeferredEvent[/b] [/size] [table] [tr] [td]Syntax[/td] [td]TriggerDeferredEvent ( [i]event, time[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Löst ein verzögertes Ereignis aus[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]event [/i] Name des Ereignisses [i]time[/i] Zeit in Sekunden, bis das Ereignis ausgelöst werden soll[/td] [/tr] [tr] [td]Ausgabe[/td] [td][i]false[/i], wenn das Ereignis bereits geplant ist[/td] [/tr] [/table] [size=14][b]CancelDeferredEvent[/b] [/size] [table] [tr] [td]Syntax[/td] [td]CancelDeferredEvent ( [i]event[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Bricht ein verzögertes Ereignis ab[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]event [/i] Name des Ereignisses[/td] [/tr] [tr] [td]Ausgabe[/td] [td][i]false,[/i] wenn das Ereignis nicht mehr geplant war[/td] [/tr] [/table] [size=14][b]BeginConditionCheck[/b] [/size] [table] [tr] [td]Syntax[/td] [td]BeginConditionCheck ( [i]condition[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Beginnt mit dem Testen eines Zustands[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]condition [/i]Name der Bedingung[/td] [/tr] [tr] [td]Ausgabe[/td] [td][i]false,[/i] wenn die Bedingung bereits getestet wird[/td] [/tr] [tr] [td]Hinweis[/td] [td]Sobald die Bedingung als [i]CONDITION_SUCCEEDED[/i] (1) oder [i]CONDITION_FAILED[/i] (2)abgeschlossen wurde, wird die Bedingung nicht mehr getestet.[/td] [/tr] [/table] [size=14][b]EndConditionCheck[/b] [/size] [table] [tr] [td]Syntax[/td] [td]EndConditionCheck ( [i]condition[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Beendet das Testen eines Zustands[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]condition [/i]Name der Bedingung[/td] [/tr] [tr] [td]Ausgabe[/td] [td][i]false,[/i] wenn die Bedingung bereits nicht mehr getestet wird[/td] [/tr] [tr] [td]Hinweis[/td] [td]Kann nicht aus [i]TestCondition [/i]heraus gefunden werden[/td] [/tr] [/table] [size=14][b]GetConditionStatus[/b] [/size] [table] [tr] [td]Syntax[/td] [td]GetConditionStatus ( [i]condition[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Ruft den Status einer Skriptbedingung ab[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]condition [/i]Name der Bedingung[/td] [/tr] [tr] [td]Ausgabe[/td] [td][i]CONDITION_NOT_YET_MET[/i] (0) [i]CONDITION_SUCCEEDED[/i] (1) [i]CONDITION_FAILED[/i] (2)[/td] [/tr] [tr] [td]Hinweis[/td] [td]testet nur den gespeicherten Status einer Bedingung generiert keinen Aufruf von [i]CheckCondition.[/i][/td] [/tr] [/table] [table] [/table] [size=14][b]ShowMessage[/b] [/size] [table] [tr] [td]Syntax[/td] [td]ShowMessage ( [i]title, message, type[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Dialogfeld mit einer Nachricht[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]title [/i]Titel des Dialogsfelds [i]message [/i]Inhalt der Nachricht [i]type [/i]Typ des Meldungsfelds [i]INFO[/i] (0) oder [i]ALERT[/i] (1)[/td] [/tr] [tr] [td]Ausgabe[/td] [td]N/A[/td] [/tr] [tr] [td]Hinweis[/td] [td]Wenn [i]title [/i]oder [i]message [/i]im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet[/td] [/tr] [/table] [size=14][b]ShowInfoMessageExt[/b] [/size] [table] [tr] [td]Syntax[/td] [td]ShowInfoMessageExt ( [i]title, message, time, pos, size, pause[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Dialogfeld mit einer Nachricht und erweiterten Attributen[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]title [/i]Titel des Dialogfelds [i]message [/i]Inhalt oder .html [i]time [/i]Zeit zum Anzeigen der Nachricht, 0.0 für unbestimmte Zeit [i]pos [/i]Position ( [i]MSG_TOP[/i] (1), [i]MSG_VCENTRE[/i] (2), [i]MSG_BOTTOM[/i] (4), [i]MSG_LEFT[/i] (8), [i]MSG_CENTRE[/i] (16), [i]MSG_RIGHT[/i] (32)) [i]size [/i]Größe ( [i]MSG_SMALL[/i] (0), [i]MSG_REG[/i] (1), [i]MSG_LRG[/i] (2)) [i]pause [/i]Spiel unterbrechen ( TRUE, FALSE)[/td] [/tr] [tr] [td]Ausgabe[/td] [td]N/A[/td] [/tr] [tr] [td]Hinweis[/td] [td]Wenn [i]title [/i]oder [i]message [/i]im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet[/td] [/tr] [/table] [size=14][b]ShowAlertMessageExt[/b] [/size] [table] [tr] [td]Syntax[/td] [td]ShowAlertMessageExt ( [i]title, message, time, event[/i] )[/td] [/tr] [tr] [td]Funktion[/td] [td]Dialogfeld mit einer Nachricht und erweiterten Attributen[/td] [/tr] [tr] [td]Eingabewerte[/td] [td][i]title [/i]Titel des Dialogfelds [i]message [/i]Inhalt [i]time [/i]Zeit zum Anzeigen der Nachricht, 0.0 für unbestimmte Zeit [i]event [/i]Ereignis wird bei Klicken auf die Nachricht ausgelöst[/td] [/tr] [tr] [td]Ausgabe[/td] [td]N/A[/td] [/tr] [tr] [td]Hinweis[/td] [td]Wenn [i]title [/i]oder [i]message [/i]im UUID-Format vorliegen, werden sie als Schlüssel für die Sprachtabelle verwendet[/td] [/tr] [/table]

Teilen