Ein elektronisches Stellwerk für den Minecraft-Mod ComputerCraft.
Der typische Aufbau eines Stellwerk-Rechners (Server, der mit dem Bildschirm) ist wie folgt:
- bin
- stellwerk.lua
- log.lua
- ...
- log (Ordner wird automatisch erstellt)
- config.lua
- fahrstrassen.tmp (Datei wird automatisch erstellt, wenn speichereFahrstrassen aktiviert ist)
- gleisbild.txt
- startup
Durch die Erstellung einer Datei namens startup wird das ESTW gestartet, sobald der Computer startet (insb. wenn der Chunk wieder geladen wird, weil ein Spieler in die Nähe kommt).
shell.run("bin/stellwerk.lua")
Hier kommt das Gleisbild (Hintergrundbild) als reiner Text hinein. Backslashes \ brauchen nicht verdoppelt werden. Bitte daran denken, dass die untersten 3 Zeilen von der ESTW-Software benötigt werden
Die Projektierung des Stellwerks (Konfiguration der Anzeige, Ein-/Ausgänge etc.) erfolgt über eine Config-Datei im Lua-Format.
Folgende Konstanten sollten am Anfang der Config-Datei definiert werden:
local SIGNAL_HP = "hp"
local SIGNAL_SH = "sh"
local SIGNAL_ERS = "ers"
local SIGNAL_ZA = "za"
local WEICHE_GERADE = 0
local WEICHE_ABZW = 1
Bei Eingängen gibt es zwei Aktionen:
Wenn an
Aktion wird einmalig ausgeführt, wenn ein Redstone-Signal angelegt wirdSolange an
Aktion wird dauerhaft ausgeführt, solange ein Redstone-Signal anliegt
Datentyp "Eingang": Table mit folgenden Werten:
pc
Zahl oder String: Bezeichnung des Clientsau
String: Seite des Clients, einer aus {"top", "bottom", "left", "right", "front", "back"}fb
Zahl: Farbe im Bundled Cable, siehe ComputerCraft-Wiki
Datentyp "Position":
x
Zahl: Position des Signals im Gleisbild auf der X-Achse, linkeste Spalte ist 1y
Zahl: Position des Signals im Gleisbild auf der Y-Achse, oberste Zeile ist 1
Die Reihenfolge der benannten Schlüssel kann beliebig geändert werden.
-
signale
Signale werden zum Anzeigen von Signalbegriffen sowie zum Einstellen von Fahrstraßen verwendet.Ein Klick schreibt den Namen des Signals in das Feld EIN und stellt ggf. eine Fahrstraße ein.
Hat ein Signal entweder die Eigenschaft "hp" oder "stelle_hp", wird es als Hauptsignal angezeigt. Hat ein Signal entweder die Eigenschaft "stelle_za" oder "za", ist das Signal eine Zustimmungsabgabe an ein anderes Stellwerk, ohne ein Signal vor Ort zu stellen. In allen anderen Fällen wird ein Sperrsignal angezeigt.
"hp" und "stelle_hp" sollten nicht gleichezeitig verwendet werden, genauso wie "sh" und "stelle_sh" sowie "za" und "stelle_za".
- Name des Signals
- Position: Positionierung auf dem Gleisbild
richtung
String: Ausrichtung des Signals, einer aus {"l", "r"}hp
Eingang: Solange an wird das Signal als grün (Fahrtbegriff) angezeigtsh
Eingang: Solange an wird das Signal als weiß (Rangierfahrtbegriff) angezeigtza
Eingang: Solange an wird das Signal als orange (Zustimmungsabgabe) angezeigtstelle_hp
Ausgang: Ist an, wenn das Signal einen Fahrtbegriff zeigen sollstelle_sh
Ausgang: Ist an, wenn das Signal einen Rangierfahrtbegriff zeigen sollstelle_ers
Ausgang: Ist an, wenn das Signal einen Ersatzsignalbegriff zeigen sollstelle_za
Ausgang: Ist an, wenn das Signal eine Zustimmungsabgabe isthaltAbschnitte
Liste von Strings: Namen von Haltabschnitten oder Gleisen. Beim Belegen einer der Abschnitte wird das Signal auf Halt gestellthalt
Ausgang: Impuls, wenn das Signal im ESTW auf Halt gestellt wird
- Name des Signals
-
fsZiele
Verhält sich für das Einstellen von Fahrstraßen wie ein Signal. Ein Klick schreibt den Namen des Fahrstraßenziels in das Feld EIN und stellt ggf. eine Fahrstraße ein.- Name des Fahrstraßenziels
- Position: Positionierung auf dem Gleisbild
length
Zahl: Anzahl der Zeichen, die auf Klick reagieren sollen
- Name des Fahrstraßenziels
-
fsAufloeser
- Name des FS-Auflösers
- Eingang: Wenn an, werden alle Fahrstraßen, die den Namen des FS-Auflösers in "aufloeseAbschn" definiert haben, aufgelöst
- Name des FS-Auflösers
-
bahnuebergaenge
- Name des Bahnübergangs
- Eingang: Solange an, wird der Bahnübergang als gesichert angezeigt
- Position: Positionierung auf dem Gleisbild
hoehe
Zahl: Anzahl Zeilen, über die der Bahnübergang gezeichnet werden soll
- Name des Bahnübergangs
-
gleise
- Name des Gleises
- Eingang:
- Solange an, wird das Gleis als Besetzt angezeigt.
- Wenn an, werden Signale, die den Namen des Gleises in "haltAbschnitte" enthalten, auf Halt gestellt
- Wenn an, werden Signale der Fahrstraßen, die den Namen des Gleises in "haltAbschnitte" enthalten, auf Halt gestellt
- Position: Positionierung auf dem Gleisbild
text
String: anzuzeigender Text (wird gefärbt)weiche
Table mit folgenden 2 Werten:- String: Name der Weiche
- Zahl: Eine von {WEICHE_GERADE, WEICHE_ABZW}
- Eingang:
- Name des Gleises
-
weichen
- Name der Weiche
- Ausgang: Ist an, wenn die Weiche abzweigend gestellt sein soll
- Name der Weiche
-
fahrstrassenteile
Gleise können ebenfalls als FS-Teile verwendet werden und müssen bei gleichem Namen nicht zusätzlich hier definiert werden.Hinweis zur Benennung: Ist in der Fahrstraße das FS-Teil "A" definiert, werden davon die FS-Teile "A", "A/1", "A/2" und "A/3" angesprochen. Dies ist z.B. bei Kurven sinnvoll, wenn zusammengehörige Teile in verschiedenen Zeilen sind. Diese Regel gilt analog für Gleise.
- Name des Fahrstraßenteils
- Position: Positionierung auf dem Gleisbild
text
String: anzuzeigender Text (wird gefärbt)
- Name des Fahrstraßenteils
-
fahrstrassen
- Name der Fahrstraße: "Start.Ziel" für eine Zugstraße von Start nach Ziel, "Start-Ziel" für eine Rangierstraße von Start nach Ziel. Beispiel: "A.N1" für Signale A und N1 sowie "N1.XAP" für Signal A nach Fahrstraßenziel XAP
fsTeile
Liste von Strings: Namen von Fahrstraßenteilen oder Gleisen, die gefärbt werden sollen, wenn die Fahrstraße eingestellt istmelder
Eingang: Solange an, wird die Fahrstraße als eingestellt angezeigtanstoss
Eingang: Wenn an wird versucht, die Fahrstraße einzustellensteller
Ausgang: Impuls, wenn die Fahrstraße eingestellt werden sollaufloeser
Ausgang: Impuls, wenn die Fahrstraße (manuell) augelöst werden sollgleise
Liste von Strings: Namen von Gleisen, die nicht belegt sein dürfen, wenn die Fahrstraße eingestellt werden sollsignale
Signale, die einen Signalbegriff anzeigen sollen, wenn die Fahrstraße eingestellt ist. Wird die Fahrstraße aufgelöst, werden alle Signale der Fahrstraße auf Halt gestellt.- Name des Signals: String, einer aus {SIGNAL_HP, SIGNAL_SH, SIGNAL_ERS, SIGNAL_ZA}
haltAbschnitte
Liste von Strings: Namen von Gleisen, wenn diese belegt werden, werden alle Signale der Fahrstraße auf Halt gestelltaufloeseAbschn
String: Name des Auflöseabschnitts, wenn dieser belegt wird, wird die Fahrstraße aufgelöstweichen
Liste von Strings: Namen von Weichen, die auf abzweigende Lage gebracht werden sollenrangieren
Boolean: Ob die Fahrstraße eine Rangierstraße (blau statt grün) ist, einer von {true, false}, default ist false
- Name der Fahrstraße: "Start.Ziel" für eine Zugstraße von Start nach Ziel, "Start-Ziel" für eine Rangierstraße von Start nach Ziel. Beispiel: "A.N1" für Signale A und N1 sowie "N1.XAP" für Signal A nach Fahrstraßenziel XAP
-
gleisbildDatei
String, erforderlich: Name der Datei mit dem Hintergrundtext für das Gleisbild -
stellwerkName
String, erforderlich: Name des Stellwerks für die Kommunikation mit den Clients -
bildschirm
String, erforderlich: Seite des Bildschirms, einer aus {"top", "bottom", "left", "right", "front", "back"} -
modem
String, erforderlich: Seite des Modems, einer aus {"top", "bottom", "left", "right", "front", "back"} -
speichereFahrstrassen
Boolean: Ob Fahrstraßen über einen Reboot des Stellwerks hinweg gespeichert werden sollen, einer von {true, false}, default ist false
Der typische Aufbau eines Client-Rechners (der mit dem Bildschirm) ist wie folgt:
- bin
- client.lua
- log.lua
- ...
- log (Ordner wird automatisch erstellt)
- config.lua
- startup
Durch die Erstellung einer Datei namens startup wird das ESTW gestartet, sobald der Computer startet (insb. wenn der Chunk wieder geladen wird, weil ein Spieler in die Nähe kommt).
shell.run("bin/client.lua")
Die Projektierung des Stellwerks (Konfiguration der Anzeige, Ein-/Ausgänge etc.) erfolgt über eine Config-Datei im Lua-Format.
Folgende Variablen können gesetzt werden:
-
stellwerkName
String, erforderlich: Name des Stellwerks für die Kommunikation mit dem Server -
role
String, erforderlich: Kennung des Clients innerhalb des Stellwerks, wird in der Server-Config alspc
referenziert -
modem
String, erforderlich: Seite des Modems, einer aus {"top", "bottom", "left", "right", "front", "back"} -
sides
Table mit den Seiten, an denen die Bundeled Redstone-Kabel angeschlossen sind. Pro Eintrag ist der Schlüssel einer aus {"top", "bottom", "left", "right", "front", "back"}, der Wert ist immertrue
.Beispiel:
sides = { right = true, }