Ich wollte wohl das LUA-Scripting näher kennen lernen. Es gibt da ja Funktionen, wie Initialise oder OnControlValueChange. Wann genau tritt dieses OnControlValueChange ein? Dann, wenn eine Taste auf der Tastatur gedrückt wurde, oder gibt es hierfür speziell eine Funktion? Wie kann man eigentlich dafür sorgen, dass sich beim Drücken einer Taste auf der Tastatur, wie z.B. U, die Türen eines Wagens öffnen? Stehen geblieben bin ich bei Call("*:SetControlValue", "NameDerBanDateiFürDieTüröffnung", 0, 1). Speziell diese "1" sollte dann doch letztlich die Türe öffnen oder?
LUA-Scripting - Tür eines Wagens öffnen
-
- erledigt
- p530
-
-
Dieses OnControlValueChange tritt dann ein, wenn ein ControlValue seinen Wert ändert. Ein Control Value hat übrigens erstmal nichts mit der Tastatur zutun. In Railworks werden bei Fahrzeugen für alle möglichen Schalter und Hebel Control Values vom Entwickler angelegt. Da gibt es z.B. welche für die Führerstandsbeleuchtung oder für die Zugbremse. Wenn du diese jetzt per Tastatur ändern willst, musst du in dem emtsprechendem Inputmapper des Fahrzeuges einstellen, dass auf Tastendruck der Taste XY der ControlValue XY verändert wird.
Dein Beispiel würde so übrigens nicht funktionieren. SetControlValue setzt eine ControlValue, keine Animation. Du musst also einen ControlValue erstellen, und an diesem kannst du die Animation koppeln. Dann könntest du bei Fahrzeugen die Türen per ControlValue ändern. Um die Türen auf Tastendruck zu öffnen, würde jetzt noch ein entsprechenden Inputmapper eintrag fehlen. Leider kann man aber für Wagen keine eigenen Inputmapper machen. Folglich funktioniert dein Plan leider nicht so leicht...
-
-
Hier mal ein Inputmapper Beispiel aus meinem aktuellen Projekt:
Mit Parameter wird der Controlvalue aufgerufen, das hast du richtig erkannt. Um den Wert zu verändern, nutzt du die Name Zeile. Dort trägst du ein, was passieren soll wenn die Taste gedrückt oder losgelassen wird. Hier wurde ToggleControl verwendet. ToggleControl meint, dass der Wert immer zwischen maximal und minimal geändert wird. Auch eintragbar wäre IncreaseControlStart und IncreaseControlStop sowie DecreaseControlStart und DecreaseControlStop.
Allerdings funktionieren Inputmapper wie bereits geschrieben nur bei Loks, nicht bei Wagen.
-
Ja, aber irgendwie haben Wagen doch auch InputMapper Allerdings gelingt hier nur die Türsteuerung mit. Auch ZZA ist glaube ich mit drin. Wobei in dem Ordner auch ein funktionierender Steuerwagen mit enthalten ist. Wagen und Steuerwagen quasi in einem Ordner. Kann auch sein, dass der InputMapper für den Steuerwagen ist Edit: Jap, der ist für den Steuerwagen
Was passiert eigentlich, wenn man im InputMapper die Taste T nicht mit aufnimmt? Die Türen öffnen quasi trotzdem. Wird da etwas über das LUA-Skript geregelt (quasi Tastaturabfrage)? Oder braucht man Key_T eigentlich gar nicht belegen, um die Türen zu öffnen?
-
-
Die Taste T für die Türen ist quasi eine Kernfunktion des Train Simulator. Dafür brauch man keinen Inputmapper eintrag. Das regelt der TS intern. Wenn man Wagen scripten will, muss man das Script eben so programmieren, dass es ohne Werte von außen arbeitet. Denn man kann eben nicht per Tastendruck Wagen Controlvalues ändern. Es sei denn, man macht es sehr kompliziert, dann geht das aber nur mit entsprechend vorbereiteter Lok, die die CotrolValues im ganzen Zug verändert oder ConsistMessages schickt.
-
Okay. Wo wird eigentlich geregelt, nach welcher Zeit die Türen wieder schließen? Da müsste man vermute ich einfach mal in der OnEvent-Funktion mit dem Parameter "Event" arbeiten, welches da übergeben wird? Oder wird es quasi mit der Lok.bin gemacht? Da findet man meist aber nur DoorsOpenCloseLeft/DoorsOpenCloseRight. Und diese beiden "Wörter" lassen sich in einer *.lua/*.out-Datei auch finden, wenn man sie in Notepad++ zieht. Klar, viel sieht man da nicht, außer ein paar Hieroglyphen. Aber man kann schon sehen, womit gearbeitet wurde. Was passiert, wenn man im Lua-Skript DoorsOpenCloseLeft aufruft? Es wird vermutlich irgendwie die dazugehörige tuer.ban aufgerufen. Der Aufruf erfolgt dann zwischen den Werten 0 und 1 (nach einer im Editor festgelegten Standzeit) vermute ich mal
-
Was passiert, wenn man im Lua-Skript DoorsOpenCloseLeft aufruft?
Ich habe das ganze mal in einem Wagen- Script mit folgendem Code probiert:
function Update(tm)
Call("*:SetControlValue", "DoorsOpenCloseLeft", 0, 1);
end
Ergebnis: Das Script hat die Tür immer aufgemacht und der TS hat die Tür sofort wieder zugemacht. Es gab also nur wildes auf und zu gehen der Tür. So funktioniert das also nicht.
-
Joah, Update wird ja auch im Sekundentakt ausgeführt
In welche Funktion sollte man das mit der Türe denn wohl packen? Es geht mir darum, dass der Fahrer eine Tastenkombi drückt und sich dann die Türen schließen.
-
Was ich damit meinte ist, dass man über das nur über das ändern des Wertes der Funktion DoorsOpenCloseLeft keine Türsteuerung umsetzen kann.
Das Problem ist, dass die Tastenkombi nur über das Script der Lok abgefangen werden kann. Eine Möglichkeit ist, dass du im Lok Script wenn die Tür geschlossen wird eine Consist Message durch den Zug schickst, durch den das Wagenscript weiß, dass es die Türen schliessen kann. Die Türanimation würde ich wegen dem eben beschriebenen Probleme in einen eigenen ControlValue tun. Aber dafür musst du dann eben auch das Lokscript ändern. Das geht nicht nur mit dem Wagenscript.
-
-
Und wäre auch sehr umständlich.
Danke für deine Erläuterungen
-
Gerne...
-
Hi,
finde ich wirklich super, dass sich jemand mit Lua-Script beschäftigen mag und ich hoffe das noch mehr User den Weg der achtfachen Erleuchtung hin zur Lua-Programmierung finden mögen. Das Schöne auch hierbei, es entstehen keinerlei Kosten im Selbststuduim, selbst die Lehrbücher sind als Pdf kostenlos downzuloaden.
Schon ein altes Geheimnis des Opel Fabrikgründers hat er mal unter Einfluss von Alkohol preisgegeben: "Mit den Augen stehlen!" Wollte er wohl sagen, man muss das Rad nicht immer neu erfinden.Hier zu dem speziellen Thema. Wer die vR BR 111 auf seine Platte hat, kann sich dort in Klarschrift anschauen, wie eine Türsteuerung realisiert wurde. Ich hoffe, ich bekomme für diesen Tipp keinen Ärger, von abkupfern habe ich ja nichts geschrieben, sondern nur davon, sich entsprechende Anregungen zu holen.
Pfad zu den Lua-Dateien: ... :\Programme (x86)\Steam\SteamApps\common\RailWorks\Assets\virtualRailroads\vR_BR111_ORot\Scripts
Grüße
-
Ich kann auch nur jedem der sich für die Zusammenhänge der BIN-Dateien, LUA-Script, Texturen und InputMapper interessiert, die die O-Rote 111 von vR nochmal genauer unter die Lupe zu nehmen...Wie der Kollege @Cotten Eye Joe bereits sagte hat Maik uns allen hier einen Guten Einblick in die Thematik hinterlassen (Ob jetzt beabsichtigt oder nicht sei mal dahingestellt )
Ich persönlich habe (nachdem ich das mal entdeckt habe) dadurch einige positive Aha-Erlebnisse gehabt.grüße
-setter-