Danke dir vielmals, das macht sehr viel Sinn. Eine Verständnisfrage noch zur onControlValueChange, wieso muss man nochmal SetControlValue mit dem gleichen Namen, index und value aufrufen? So wie ich das verstanden habe, passiert der Aufruf für die OnControlValueChange ja weil der value für das objekt mit dem Namen und dem index geändert wurde oder nicht?
Beiträge von Transalpin4010
-
-
Danke für die ganzen hilfreichen Antworten, mangels Autoabo vom Thread hab ich die jetzt erst sehr spät gesehen. Kuju Skripte habe ich mir bereits ein paar angeschaut und auch ein paar andere, unter anderem das vom RSSLO 4010er, das ich ja rekonstruieren, am besten verbessern, will und obwohl dabei zwar die Methodennamen verloren gehen, ist das auch sehr praktisch zum reverse Engineeren. Die Skripte von AP werde ich mir auf jeden Fall noch anschauen.
Anschließend an meinen anderen Thread: Werden in den Skript files, nicht dem SimpleEngineScript, weil das ist zu 90% tatsächlich leer, alle 4 Basic Methoden, also die Initialise, Setup, Update und ControlValueChange aufgerufen theoretisch oder nur bestimmte bzw. gibt es Voraussetzungen dafür, dass eine Methode aufgerufen wird, also dass ich das Fahrzeug zb Bewegen muss oder so?
Alles anzeigenDie Developer Docs und die dortige Scripting Function Reference enthält die von Dir gesuchten Beschreibungen.
Ansonsten guck Dir die Skripte vom Kuju-Rollmaterial an, die sind nicht verschlüsselt. Damit hast Du aber ein Grundangebot an Funktionen, die Du erweitern kannst.
Es gibt auch ein paar andere unverschlüsselte Skripte, bei denen man ein Verständnis für diese spezielle Art von Skript entwickeln kann.
Es gibt zB Funktionen des Rollmaterials, bei dem Du Dich an eine bestimmte Namensgebung halten musst um diese im TSC eingebaute Funktionen nutzen zu können.
Bei anderen Ideen und Konzepten bewirkt das Zusammenspiel von Objekt, Animation und Script das gewünschte Verhalten.
Die Verbindung zwischen Script und Child erfolgt über die dazugehörige Engine.xml. Dort findest Du die Namen der Childs und die Verknüpfung zum Modell im Bereich "ContainerComponent". Guck Dir dort unbedingt auch den Bereich "ControlContainerComponent" an, um das Zusammenspiel besser nachvollziehen zu können.
Deine letzten beiden Beispiele könnten nur dann funktionieren, wenn es das Child "Vleka" geben würde. Um eine Animation ablaufen zu lassen, musst Du den Aufruf anders gestalten:
Call("[Animationsobjekt]:AddTime", "[Animationsname]", time)
Viel Erfolg

PS und Update:
Hier gibt es ein Projekt für Updates zu Rollmaterial aus New York und dazugehörigen Strecken. Hier auf der Seite kannst Du lt. Beschreibung auch die Source-Dateien herunterladen und gucken, wie die Skripte aufgebaut sind.
Hier der Link zum Projekt.
Daran anschließend, kann man im Train Simulator statt lua jetzt auch TypeScript verwenden? Ich habe mir den Sourcecode heruntergeladen, die Scripte haben dort aber alle .ts Endung, das verwirrt mich etwas.
-
Danke dir für die Antwort, also das SimpleEngineScript ruft nur noch die Update und Setup Funktion auf? Die ,,normalen" Skript files dann nur noch die Initialise und diese ValueChange methode? Ich schau da nochmal drüber aber ich habe ein paar Scripte decompiled und, obwohl zwar die Methodennamen dabei verloren gehen, finde ich immer einige Methoden, die von der Anzahl der Parameter immer auf die 4, also Init, Setup, Update und ControlValueChanged, passen würden, also sollten sie in den normalen ja auch aufgerufen werden oder?
-
Liebe Community!
Ich versuche gerade eine Skript Update für den RSSLO 4010 zu machen. Dafür habe ich erstmal die wichtigsten Funktionen definiert, Die Initialise(), Setup(), Update(interval) und OnControlValueChange(name, index value). Alle sind in der Script_OBB4010.lua. Für alle habe ich Print Statements eingefügt, um in LogMate zu sehen, ob alles funktioniert, wie erwartet. Die Setup Methode wird jedoch nur in der SimpleEngineSimulation aufgerufen, die Setup Methode allgemein nie, egal ob von der Script_OBB4010.lua oder von der SimpleEngineSimulation.lua. Das macht für mich aber absolut keinen Sinn, muss davor irgendwas passieren, damit die Methoden aufgerufen werden? Habe ich etwas falsch definiert?
Script_OBB4010:
Code
Alles anzeigenisInitialized = false lastPantoFrontValue = 0 lastPantoBackValue = 0 function Initialise() Print("[Init] Locomotive script loaded. From OBB4010.lua") end function Setup () Print("[DEBUG] Setup method called in script.") end function Update (interval) Print("[UPDATEMETHOD] called update from SCRIPT!") end function OnControlValueChange(name, index, value) Print("[ControlValueChanged] Control changed with name " .. name .. " and index " .. index .. " and value " .. value) if not isInitialized then Call("*:SetControlValue", "VirtualThrottle", 0, 0.5) Call("*:SetControlValue", "Pantograph_Kontrol", 0, 2) Print("Throttle set to initial position") isInitialized = true end if name == "Reverser" then local reverserValue = Call("*:GetControlValue", "Reverser", 0) Print("[ControlValueChanged] Reverser value is " .. reverserValue) elseif name == "Pantograph_Kontrol" then local pantoValue = Call("*:GetControlValue", "Pantograph_Kontrol", 0) local correctedPantoValue = CorrectPantoPosition(pantoValue) if correctedPantoValue == 0 then Call("*:SetControlValue", "Pantograph_Control_Front", 0, 0) Call("*:SetControlValue", "Pantograph_Control_Back", 0, 1) Call("SendConsistMessage", PANTOGRAPH, "Pantograph_Control_Back = 1", 1) Print("[Panto Control] Front pantograph active") elseif correctedPantoValue == 4 then Call("*:SetControlValue", "Pantograph_Control_Front", 0, 1) Call("*:SetControlValue", "Pantograph_Control_Back", 0, 0) Call("SendConsistMessage", PANTOGRAPH, "Pantograph_Control_Front = 1", 1) Print("[Panto Control] Rear pantograph active") else Call("*:SetControlValue", "Pantograph_Control_Front", 0, 0) Call("*:SetControlValue", "Pantograph_Control_Back", 0, 0) Call("SendConsistMessage", PANTOGRAPH, "0", 1) Print("[Panto Control] No pantograph active") end local frontPantographAnimation = Call("*:GetControlValue", "Pantograph_Front_Animation", 0) local backPantographAnimation = Call("*:GetControlValue", "Pantograph_Back_Animation", 0) if frontPantographAnimation > 0.99 or backPantographAnimation > 0.99 then Print("[ControlValueChanged] At least one panto fully deployed") Call("*:SetControlValue", "PantographControl", 0, 1) Call("*:SetControlValue", "MainLine", 0, 15) elseif frontPantographAnimation <= 0.99 and backPantographAnimation <= 0.99 then Print("[ControlValueChanged] No pantos fully deployed - cutting power") Call("*:SetControlValue", "PantographControl", 0, 0) Call("*:SetControlValue", "MainLine", 0, 0) -- Optionally reset MainLine to 0 if needed end end Print("[ControlMethod] name is: " .. name) end function CorrectPantoPosition(pantoValue) local correctedPantoValue = 0 if pantoValue >= 0 and pantoValue < 0.5 then correctedPantoValue = 0 elseif pantoValue >= 0.5 and pantoValue < 1.5 then correctedPantoValue = 1 elseif pantoValue >= 1.5 and pantoValue < 2.5 then correctedPantoValue = 2 elseif pantoValue >= 2.5 and pantoValue < 3.5 then correctedPantoValue = 3 elseif pantoValue >= 3.5 then correctedPantoValue = 4 end Call("*:SetControlValue", "Pantograph_Kontrol", 0, correctedPantoValue) return correctedPantoValue endSimpleEngineSimulation:
-
Ahja das macht Sinn, danke vielmals. Während meiner weiteren Recherche bin ich hier im Rail Sim Forum auf die Liste der möglichen Methoden gekommen, ist die vollständig? Ich habe leider nichts zu dem Togglen von Animationen gefunden. Laut dem .bin file wäre für den Fahrschalter zum Beispiel die default Position auf 0.5, was ,,Aus" entspricht. Mittels der SetControlValue habe ich versucht per Script den Fahrschalter auch auf die Position zu setzen, im Simulator steht der Fahrschalter im f4 hud auch auf der richtigen Position, nur das 3d Schaltrad steht auf 0. Gibt es da eine gute Möglichkeit, den Fahrschalter in der Initialisierung auch im 3d Modell auf die richtige Position zu stellen?
Eine eher Pfusch Möglichkeit wäre, kurz nach der Initialisierung die Animation über einen Zeitraum in die Position laufen zu lassen und nachdem man tatsächlich sieht, wie sich das Rad dreht, wenn man die Standard Version des Scriptes hat, nehme ich an, dass RSSLO das auch so gemacht hat, aber ich bin mir auch da mit den möglichen Methoden nicht ganz sicher, wie das am besten geht.
Dazu stellt sich mir auch die Frage, woher finde ich den Childname? In der .GeoPcDx gibt es zwar diverse <Child> tags, die über TransformIds mit Transforms verbunden sind, die passende Namen tragen würden und auch in der .bin finde ich zum Beispiel den ElementName Vleka für den VirtualThrottle, wenn ich aber zum Beispiel pos = Call("Vleka:getNearPosition") verwende um zu Debuggen, ob das das richtige Element ist bzw. Call("Vleka:SetTime", "Vleka", 0.5) um die Animation zu starten, passiert nichts, bzw. wenn ich pos printen will, bekomme ich nur einen Error, weil es wohl nil ist.
-
Liebe Community!
Ich habe vor, mich ins Lua Scripting für den Train Sim einzuarbeiten. Programmiererfahrung habe ich bereits in Java und C#, also gilt es für Lua nur mit der neuen Syntax umzugehen. Ich habe mir bereits die zwei verfügbaren Tutorials zum Lua Scripting angesehen, die sind jedoch sehr allgemein und gehen nicht auf den Train Sim ein. Für den Anfang wollte ich das Script eines bereits funktionierten Fahrzeuges, dem RSSLO 4010, erneuern, da das Fahrzeug bereits existiert, der Funktionsumfang bisher recht einfach ist und grundsätzlich die Eigenschaften feststehen, es sind daher nur die .out files, also die verschlüsselten lua Scripte neu zu erstellen.
Die originalen habe ich gesichert und dem ,;Create an Engine" Tutorial von den Developer Documents (Developer Documents) folgend, habe ich ein neues SimpleEngineScript.lua File erstellt in der Location vom alten, damit ich den Speicherort nicht in der bin ändern muss. Für den Anfang wollte ich einfachen Debug Output für LogMate haben, damit ich einfach und schnell sehen kann, was für Auswirkungen meine Änderungen haben. Die Struktur habe ich dafür aus genanntem Tutorial genommen und sieht folgendermaßen aus:
Codefunction Setup () Print("[DEBUG] Script initialized.") end function Update (interval) local speed = SysCall("GetSpeed") * 3.6 -- m/s to km/h Print("[Speed] Current speed: " .. tostring(speed) .. " km/h") endGespeichert habe ich das mit Notepad++ als .lua file, ich nehme nicht an, dass ich das file auch als .out file verschlüsseln muss während des Development Prozesses. Dem Thread (Lua-Script Print-Funktion) folgend, habe ich auch die Startoption hinzugefügt, wie am Screenshot erkennbar, im Logfile von LogMate habe ich jedoch keinen Debug output von meinem Code. Was ist hierbei das Problem? Was habe ich vergessen? Muss man das File doch verschlüsseln?
Durch trial and Error habe ich auch im Script folder das Script_OBB4010.out file durch ein eigenes .lua fil eersetzt mit folgendem, leicht abweichenden Code:
Codefunction Initialise() Print("[Init] Locomotive script loaded. From OBB4010.lua") end function Update(time) local speed = SysCall("GetSpeed") * 3.6 -- m/s to km/h Print("[Speed] Current speed: " .. tostring(speed) .. " km/h") endNun habe ich tatsächlich Debug output von diesem File. Das bringt mich aber zu weiteren Fragen. Was ist nun die Aufgabe der SimpleEngineSimulation.lua im Vergleich zu der Script.lua? Wieso haben die Methoden, zumindest die zur Initialisierung, andere Signaturen?
-
Ist die DTG Mittenwaldbahn grundsätzlich anders als die RSSLO oder ist das nur die RSSLO unter Steam veröffentlicht? Kann man das upgrade dann ggf. auch für die RSSLO installieren, wenn es die gleiche ist?
-
Danke euch vielmals für die ganzen Rückmeldungen. Ich war skeptisch weil bei PlayWay als publisher gabs ja mal eine Kontroverse, aber ich denke, ich werd ihn mir holen.
-
Wie ist eigentlich der Stand vom Sim und die Zukunftsaussichten? Ich überlege mir, mir den Sim vor allem für die Stellwerke zu kaufen, aber nachdem die ja nur über Server spielbar sind, stellt sich mir auch die Frage, wie Zukunftssicher der Simulator ist und was man da noch erwarten kann weiter, 35 Euro sind ja auch nicht wenig.
-
Ja, das ist ziemlich vorbildfrei. Schade, dass sie nicht mit den IC Wagen noch irgendeinen Fernverkehr gemacht haben.
-
Keine Szenarien, aber im Fahrplan kann man mit dem Taurus den Euronight fahren.
True meinte eh den Fahrplanmodus. Sonst ist nichts drin im Fahrplanmodus mit anderen Fahrzeugen?
-
Sind auf der Vorarlbergstrecke auch Szenarien mit anderen Fahrzeugen drauf im Personenverkehr oder nur der Talent?
-
Vll kann sich ja einer erbarmen und ein Soundupdate machen für den Talent, so wie damals für den Taurus.
-
Irgendwelceh D A Ch Strecken gibts noch nicht für SimRail oder?
-
Ich freu mich, dass endlich eine Österreichische Strecke kommt und freu mich auf mehr. Der TSW ist ein Nischenprodukt und die Community hat bekanntermaßen keine Wahl, also ist es ja nur natürlich im Kapitalismus, dass der TSW jedes Jahr neu rauskommt mit kaum Neuerungen aber Vollpreis.
-
Gibt es auch Fahrplan Integrationen von der 103 auf anderen Strecken? Welche Fahrzeuge von anderen Strecken sind bei der Linken Rheinstrecke verwendbar im Fahrplan?
-
Kann man durch die Wagen eigentlich auch spazieren wie in TSW?
-
Wenn was österreichisches kommt und man wie im TSW durch den zug gehen kann und so wär er perfekt.
-
Ich frag mich dabei aber auch, wer auf dieser Welt will einen Autofahrsimulator!? Da hat Straßenbahn doch noch viel mehr zu bieten!?
-
Jetzt, wo TSW3 draußen ist und die anderen Addons importiert, ist es dabei geblieben, dass der ICE im Fahrplan nur auf der neuen Strecke verfügbar ist?