Blog-Artikel mit dem Tag „Skripting“

Ab Sofort kann das TrainzDepot nur noch zum Lesen aufgerufen werden, eine Nachfolge-Seite ist in Arbeit, siehe unsere Ankündigung. In Kürze wird trainz.de eine Anlaufstelle für die deutschsprachige Trainz-Gemeinschaft bieten.
Zum 28.02.2019 werden persönliche Daten (u.A. Angaben im Benutzerprofil und private Nachrichten) gelöscht, bei Bedarf also bitte selbst sichern.

    Heute melde ich mich einmal mit einem reinen Codeschnipsel. Dabei geht es um die Umsetzung der Berechnung der Prüfziffer einer Wagennummer nach dem deutschen Baureihenschema.
    Wir erstellen in diesem Teil kein neues Script. Es geht lediglich um die Rechnung.


    Zu Beginn sollte man zuerst wissen, wie die Wagennummer aufgebaut ist.
    Beispiele für Wagennummern anhand eines Triebwagens der Baureihe 425/435:


    425 155-0
    435 155-8
    435 655-7
    425 655-9


    Die ersten drei Ziffern bilden die Baureihennummer (425, 435). Danach kommt die Ordnungsnummer (155, 655) und zum Schluss die Prüfziffer.


    Wenn man aber jetzt benutzerdefinierte Wagennummern realisieren möchte, hat man das Problem mit der Prüfziffer. Diese ist Entscheidend für eine gültige Wagennummer.
    Die Baureihe lässt sich nicht editieren, die ist gegeben. Die Ordnungsnummer (155, 655) sollte veränderbar sein, damit der Benutzer am Ende die Möglichkeit hat diese neuzudefinieren.
    So fahren am Ende nicht immer mehrere Triebwagen mit der gleichen

    Weiterlesen

    Hier einmal ein Lösungsvorschlag für einen Trigger der in beide Richtungen ausgelöst werden soll.


    Die config.txt muss für ein Objekt der Kategorie ?Trackside? sein (kind ?scenery? mit Eintrag: ?trackside?). Außerdem muss für die Trigger-Funktion der Eintrag ?trigger 1?, sowie ?surveyor-only 1?, eingefügt werden. Wie genau das aussieht wird gleich gezeigt. Näher darauf eingehen werde ich nicht. Ich setze beim Scripting voraus, daß man in der Lage ist eine config.txt anzulegen. Eine Hilfe kann dabei der CCP (Content Creator Plus) sein.


    Als Vorlage für die config.txt habe ich eine vor mir genommen. Die Einträge müssen natürlich individuell angepasst werden.


    Vorbereitung der config.txt

    Weiterlesen

    Im 6. Teil der Scriptsprache-Reihe war zuletzt ein Script gegeben, das eine Funktion enthielt,
    die zwei Zahlen miteinander addiert:

    Weiterlesen

    Guten Tag!


    Ja ? richtig, es gibt schon wieder gleich nach einigen Stunden einen neuen Teil!
    Wir haben im letzten Teil die grundlegenden Variablen, also die Datentypen besprochen. Mir kam nun die Idee noch die Methoden in einem Teil hinterherzugeben.


    Schutzklassen
    Um mit den Funktionen im Script anfangen zu können, benötigen wir aber noch ein kleines bisschen was an Wissen. Dabei ist die Rede von den sog. ?Schutzklassen?. Bitte nicht erschrecken, die Bezeichnung ?Schutzklasse? ist was ganz anderes, als das, was wir bisher als ?Klasse? kennengelernt haben.
    Es sind nämlich einfach bloß eine reihe Schlüsselwörter, die uns den Umgang mit unseren Methoden und Variablen erleichtern.


    Man stelle sich folgendes einmal vor:
    Es ist ja nur logisch, daß irgendetwas von ?Außen? auf unsere Klasse zugreifen muß um dort die Methoden, also die Funktionen ausführen zu können. Da wir aber vielleicht nicht alles ?freigeben? möchten und dies an manchen Stellen auch nicht sollten, gibt es sowohl im

    Weiterlesen

    Liebe Leser/innen,


    das Weihnachtsfest kommt immer näher, das Jahr neigt sich dem Ende. Draußen ist es kalt und nass und somit einfach perfekt, um den Abend oder einen Nachmittag mit Trainz zu verbringen und etwas neues zu lernen.


    Darum möchte ich euch heute ein weiteres Kapitel unserer Scripting-Reihe schenken. Ich weiß, es ist im Moment recht trocken, was Beispielscripte angeht, allerdings muß ich erst einmal zusehen, daß ich eine gewisse Grundlage schaffe. Im neuen Jahr wird es dann richtig los gehen.
    Es kamen Wünsche aus dem Auran Forum zum Thema Animationen, denen ich natürlich gerne nachkommen werde, sobald ich hier alles wichtige vorab besprochen habe.


    Heute wird es darum gehen Datentypen, also im Allgemeinen Variablen (Member!) zu verstehen.
    Dann gehts mal los!


    Variablen
    Wer sich mit dem Wort ?Variable? wieder an seine Schulzeit in den Mathematikunterricht zum Thema ?Algebra? zurück erinnert fühlt, liegt richtig. Egal, wie schwer oder leicht es damals gefallen ist, die

    Weiterlesen

    In letzter Zeit habe ich hier nicht wirklich viel getan, sodass ich jetzt einmal als eine Kleinigkeit wieder etwas zum Thema ?Auran Game Script? von mir gebe.
    Und zwar geht es heute um Klassen. Dabei werde ich die Idee von Klassen, wie man sie aus der Softwareentwicklung her kennt, erklären. Denn: In Trainz haben Klassen genau die gleiche Funktion!


    Die Definition einer Klasse
    In fast jedem guten Lehrbuch zu egal welcher Programmiersprache steht ein Satz, der so oder so ähnlich lautet: ?Eine Klasse ist nichts weiter, als ein Objekt.?


    Was kann aber der Laie daraus gewinnen? ? Genau: Noch gar nichts.


    Wir kennen Klassen bereits von unseren Standard-Scripten:
    Jedes Objekt in Trainz gehört einer sog. ?Kind? an (zu Deutsch sinngemäß etwas wie: Objekt-Kategorie).
    Und da wird es jetzt interessant!


    Wir können also nun eine Verbindung zwischen einer Klasse (einem Objekt) und einer Objekt-Kategorie bilden. Auch, wenn ein Softwareentwickler mir für den folgenden Satz den Vogel zeigte, erfüllt

    Weiterlesen

    Im vergangenden Beitrag wurde von mir die sog. Soup vorgestellt. Es wurde angeregt, dass ich da noch ein wenig mehr zu erkläre, was ich hiermit tun möchte.


    Eine Soup in Trainz ist nichts anderes als eine Art ?Datenbank? in Form einer Tabelle. Diese Tabelle besitzt zwei Spalten und so viele Zeilen, wie Daten in der Tabelle sind.
    In unserem letzten Beispiel sähe diese Tabelle so aus:


    Name der Eigenschaft Wert der Eigenschaft
    IsPoleVisible true oder false (je nach Einstellung, die der Benutzer im Editor vorgenommen hat)



    Unsere Soup hatte also nur einen Werte, den wir gespeichert haben. Diese Art Datenbank wird von Trainz immer zu der Map oder der Aufgabe gelegt, je nachdem, wie die Layer verteilt sind, sodass wir die Wert auch immer wieder erfolgreich laden können. Mehr gibt es zur Soup eigentlich nicht zu sagen. Ich hoffe, dass deren Funktion und Aufgabe dadurch wieder ein wenig klarer geworden ist.

    Weiterlesen

    Heute geht es richtig los. Wir steigen in die Materie ein!
    Thema wird sein, wie sich Meshes eines Objektes ein- oder ausschalten lassen. Das klingt zunächst einfach, ist aber noch nicht alles. Gezeigt wird das ganze an einem Verkehrszeichen, dessen Quelldateien ich euch zur Verfügung stellen werde. Dies beinhaltet einmal:

    • Das SketchUp-Modell des Schildes
    • Das Schild als 3ds-Datei
    • Die Textur des Schildes
    • Das Script
    • Die config.txt
    • Das Thumbnail (Vorschaubild im Content Manager)
    • Das fertige Objekt als CDP-Datei

    Alles zusammen habe ich in eine Zip-Datei gepackt (siehe unten).


    Ziel wird es sein, durch das Einstellen des Benutzers im Editor-Modus den Mast des Schildes ein- oder auszublenden. Ich habe mir überlegt, dass ich die config.txt dazu nicht auch einmal erläutern werde. Ich werde mich bei den Erläuterungen nur auf die Dinge fokussieren, die für das Script von Bedeutung sind.
    Alles in allem sieht unsere TODO-Liste so aus:

    • Vorbereitung der config.txt für das spätere Einbauen des

    Weiterlesen

    Ich werde euch nun etwas über das Scripting in Trainz erklären. Man hört zwar immer, dass es besser sei, man bringe Vorkenntnisse aus der ?richtigen? Welt der Programmierung mit, aber unbedingt brauchen tut man sie auch nicht. Zu aller erst werde ich erklären, womit man am meistens arbeitet und was man damit schon alles machen kann. Eine Wichtige Seite, die man sich unbedingt abspeichern sollte, ist das TrainzDEV-Wiki (http://online.ts2009.com/mediaWiki/index.php/Scripting). Dort stehen alle Funktionen, die Trainz mitbringt. Was das genau heißt, erkläre ich später.


    Wie ist ein Script aufgebaut?
    Ein Trainz-Script ist eine Datei mit der Endung ?.gs? (es gibt auch GSE, aber ich finde die Verschlüsselung von Scripten nicht gut, weshalb ich dazu hier auch nichts erklären werde).
    Man kann diese Datei mit einem ganz normalen Editor erstellen (es geht sogar der in Windows eingebaute Editor). Ich verwende immer Notepad++ mit Syntaxhighlightning, was aber auch nicht zwingend erforderlich ist.

    Weiterlesen