Animationen von .bin funktionieren nur bei fehlerhaften Skript

Discord Einladung
Trete unserem Discord-Server bei (klicke hier zum Beitreten).
  • Liebe Community!


    Ich versuche, mich in das Scripting im Train Sim Classic anhand des RSSLO 4010 einzuarbeiten, jedoch bin ich auf eine massive Verwirrung gestoßen. Ich habe ein komplett neues Skript aufgesetzt, sodass ich alle Funktionen neu und ggf. besser ausführen kann. Ich wollte dabei auch die Möglichkeit nutzen, das Lua-Skript in einzelnen Files aufzuteilen und die Teile durch require() zu laden, sodass alles übersichtlicher wird. Nun zum eigentlichen Problem. DIe Skriptteile sind dazu im .rar file im Anhang, sodass sie direkt in den RSSLO/OBB4010/RailVehicles/Engine/Script-Ordner kopiert werden können.


    Wenn ich im Throttle-Teil die ThrottleScript Liste public lasse (also ohne local) und am Ende nicht returne und ich im Main-Script einfach ThrottleScript.Update... benutze, bekomme ich in LogMate keine Errors und das Skript gibt meine Prints aus. Der Fahrschalter ingame bleibt jedoch auf der 0-Position und geht nicht in die in der .bin definierte Default-Position. Auch lässt er sich nicht über die Tastatur steuern.


    Mache ich jetzt die ThrottleScript-Liste lokal und returne sie am Ende, sodass ich im Main-Skript die kleingeschriebene Variable throttleScript.Update... benutze, bekomme ich im Logmate den Error weiter unten. Das macht ohnehin nach meinem Lua-Verständnis schon wenig Sinn. Das Verwunderliche ist aber, dass nun ingame die Default-Animationen funktionieren!? Also bei mStart wandert der Fahrschalter in die in der .bin definierten Default-Position und er lässt sich auch über die Tastatur steuern. Jedoch nur der Fahrschalter, alle anderen Hebel nicht.


    In keiner Dokumentation konnte ich nachvollziehen, wie die Animationen in der .bin mit dem Script zusammenhängen und ob oder was was überschreibt!? Wieso funktioniert die Animation, wenn das Skript nicht funktioniert? Aber eben auch nur für den einen Schalter? Kann mich da bitte jemand aufklären? Ich verzweifle damit gerade sehr.


    Laut meinem logischen Verständnis sollte dann ja jede Default-Animation immer funktionieren, solange das Skript nicht brute-force einen Wert direkt setzt, wenn man eine Taste drückt, und vor allem sollten sie immer funktionieren, selbst wenn das Skript zum Beispiel völlig leer ist!?

  • Ok verstehe, ich versuch's dann mal, in den gleichen Ordner zu geben. Das erklärt aber trotzdem nicht, warum die Default-Animationen und auch die Rasten, die in der .bin definiert sind, funktionieren, wenn das Skript nicht funktioniert,aber nicht mehr funktionieren, wenn das Skript geht.


    Edit: Die Position macht keinen Unterschied. Wenn es gefunden wird, liegt es als Boolean-Value vor und wenn es nicht gefunden wird, dann crasht das ganze Skript. Wenn das ganze Skript crasht, dann sind die Rasten und Animationen auch weg. Irgendwie nur, wenn ich den Fehler habe, dass das throttleScript als Boolean-Value versucht wird zu indizieren, dann sind die Animationen und Rasten aus der .bin vorhanden.

  • Eventuell verstehe ich Deinen Ansatz nicht, aber wenn Du das Originalskript mit "require" einbindest, "kaufst" Du das Verhalten aus dem Orginalskript mit.


    Wenn Du zB eine Zugsicherungsvsariante einbinden willst, die das Orginal nicht hat, dann ist das eine valider Ansatz, weil Du hinzufügst, nicht überschreibst.


    Für eine Veränderung vorhandenen Verhaltens, müsstest Du das zentrale Skript neu aufsetzen, sonst kämpfst Du mit dem Verhalten aus dem Orginalskript.

  • Eventuell verstehe ich Deinen Ansatz nicht, aber wenn Du das Originalskript mit "require" einbindest, "kaufst" Du das Verhalten aus dem Orginalskript mit.


    Wenn Du zB eine Zugsicherungsvsariante einbinden willst, die das Orginal nicht hat, dann ist das eine valider Ansatz, weil Du hinzufügst, nicht überschreibst.


    Für eine Veränderung vorhandenen Verhaltens, müsstest Du das zentrale Skript neu aufsetzen, sonst kämpfst Du mit dem Verhalten aus dem Orginalskript.

    Ich will ein komplett neues Skript schreiben. Also alles von neu auf, aber aufgeteilt, sodass es leichter maintanable ist. Auf das Aufteilen kann ich sosnt auch fürs erste verzichten, das für mich grade Wichtigste ist, warum die Animationen und Rasten aus dem .bin file da sind, wenn das Skript mir den Error gibt, dass das require einen boolean gibt, den es natpürlich nicht indizieren kann, aber die Rasten und Animationen weg sind, wenn das Skript entweder komplett crashed oder keinen error gibt.

  • Also ich fürchte, Du hast da schon einen Fehler im "require" Vorgang, bei der V200 habe ich folgende Zeilen im Hauptskript:


    ##

  • Ich würde erwarten, dass es eigentlich in der Animation einfach eine Bewegung des Hebels gibt. Ob die einzelnen Frames der Animation an bestimmte Positionen oder Raststellungen orientiert sind, oder in linearen Animationen auf/ab, links/rechts oder aufgeteilt auf, ab, links, rechts vorliegen, hängt vom Autor ab.


    Aber neben dem Namensraum für Objekte, den man als Entwickler frei wählen kann, innerhalb der TSC Vorgaben, gibt es reservierte Namen, die dann die Mechanik fest eingebaut von "Kuju" oder besser dem TSC bekommen.

    reverser, horn, sander guck am Besten in die Dokumentation, gibt es bei ChrisTrains.com.

    Hier würde man VirtualControls einsetzen, um das Verhalten des TSC zu korrigieren.

    So kann man zB Druckluftbremsen und Hauptluftleitung in eine Bremssimulation auslagern, um das gewünschte Verhalten zurück an den TSC zu geben und die Ausgabe der Anzeigen im Führerstand daran auszurichten.

    Umgekehrt, könntest Du so Positionen/Stellungen der Hebel auslesen und für deine Simulation nutzen.

  • Ja voll, das ist mir klar. Mein Problem liegt aber etwas woanders. Wenn ich mir den Eintrag vom Fahrschalter in der 4010_A.bin anschaue, wie RSSLo ihn definiert hat, dann sehe ich da eine Animation, die verlinkt ist, und fest definierte Raststellungen. So wie ich den Teil bei ChrisTrains in der Dokumentation verstanden habe, sollte damit automatisch bei dem jeweiligen Tastendruck der Fahrschalter auf/abschalten mit der gegebenen Animation und vor allem in den definierten Rasten einrasten, ohne, dass ich das manuell nochmal im Skript einfügen müsste. Das Problem ist jetzt, wenn mein neues Skriptfile leer ist oder ohne Errors funktioniert, kann ich den Fahrschalter nicht mit der Tastatur drehen und wenn ichs per Drag-and-Drop mit der Maus mache, bleibt er einfach dort stehen, wo ich ihn loslasse, und rastet nicht in den definierten Positionen ein. Wenn das Skript abstürzt, ebenfalls. Wenn ich im Skript nur den Fehler habe, dass das require einen Boolean zurückgibt, wie oben beschrieben, dann ist der Fahrschalter beim Start der Simulation in der definierten Defaultposition, er lässt sich über die Tastatur steuern und rastet auch in den definierten Stellungen ein. Genau das verstehe ich nicht: Warum funktioniert das nur, wenn das Skript einen Fehler ausgibt, und nicht, wenn es entweder leer ist oder nur Funktionen hat, die ohne Error funktionieren!?


  • Weil LUA nicht so logisch kompiliert, wie man sich das wünschen würde. Leider hast Du Fehler im Skript, die sich unter einer bestimmten Bedingung aufheben und dann das Default Verhalten zulassen, wäre mein Erklärungsversuch.


    Dein Hauptskript und dein eingebundenes Skript haben Fehler, die zwar kompilieren, aber logisch nicht funktionieren können, soweit ich es beurteilen kann.

    Das Hauptskript müsste auf den von mir beschriebenen "require" Ansatz umgestellt werden und das Nebenskript hat umständliche Funktionsnamen, die Probleme verursachen könnten, oder korrekt aus dem Hauptskript aufgerufen werden müssten.


    Und nur weil ich eine Variante kenne, heißt das nicht, dass ich alle möglichen Varianten kenne.

    Ich versuche Dein Skript anzupassen und schicke es Dir hier zurück, damit Du testen kannst.