Ich habe mich jetzt auf den Hinweis von VacuumTube (Danke!) fokussiert (sobald ich speziell etwas zu den anderen Beiträge in diesem Thema beitragen kann, werde ich das auch noch tun). Es sind einige neue Skript-Zeilen entstanden, die ihr an eine originale Skript-Datei anhängen und dadurch Probleme mit Modifiers und FileFilters deutlich effektiver identifizieren könnt. Das neue Skript kann Fehler, die in Modifier- und Filefilter-Funktionen während des Ladevorgangs eines Spielstands auftreten, abfangen und daraufhin entsprechende Fehlermeldungen in der Datei stdout.txt ausgeben (die Meldungen meines Skripts werden mit [relozu_find_modifiers_and_filefilters] eingeleitet). Zusätzlich werden die Rückgabetypen der Modifier-/Filefilter-Funktionen überprüft.
Eine Mod-Lösung mit den selben Möglichkeiten ist mir leider nicht gelungen, dazu aber weiter unten mehr.
Möchtet ihr mein Skript nun an die besagte originale Skript-Datei anhängen, hier der Hinweis, dass ein Spielstand, der nach der Änderung der Skript-Datei geladen wird, ungewollte Veränderungen aufweisen kann. Ein derartiger Spielstand sollte daher nicht einfach so gespeichert werden! Bevor ihr die Skript-Datei ändert, könnt ihr zur Vorbeugung von beschädigten Spielständen beispielsweise ein Backup eurer Spielstände machen. Auch können lediglich die Spielstände, die in Bezug auf Modifier-/FileFilter-Probleme überprüft werden sollen, mit neuem Namen gespeichert und danach als Test-Spielstände verwendet werden.
Wenn ihr die Änderungen in der originalen Skript-Datei wieder zurücksetzen wollt, müsst ihr die hinzugefügten Skript-Zeilen entfernen und das Spiel danach am besten neu starten. Auch eine Überprüfung der Spieldateien auf Fehler kann die Datei in den ursprünglichen Zustand zurücksetzen. Bedenkt dabei bitte, dass bei so einer Überprüfung all eure Änderungen an Spieldateien und Steam-Workshop-Mod-Dateien zurückgesetzt werden!
Hier sind die Skript-Zeilen, die am unteren Ende der Datei [...]/Transport Fever 2/res/scripts/mod.lua eingefügt werden sollen: relozu_find_modifiers_and_filefilters_script_1_0.txt
Hinweise
Dieses Skript ist mit der gleichnamigen Mod relozu_find_modifiers_and_filefilters_1 nicht kompatibel!
Mein Skript habe ich getestet, dennoch sind Fehler nicht ausgeschlossen. Wie üblich, hier noch der Hinweis, dass ich für durch mein Skript entstandene Schäden an Hardware und/oder Software nicht hafte.
Einige Details zur Funktionsweise
Die Skript-Änderung wirkt sich auf den Ladevorgang neuer und bestehender Spielstände aus. Wird ein Spielstand geladen, wird beim Hinzufügen von Modifier- und Filefilter-Funktionen die zugehörige Mod und der Typ des Modifier/FileFilter zwischengespeichert. Im weiteren Verlauf werden Modifiers und FileFilters ganz normal vom Spiel angewandt, die Besonderheit mit dem geänderten Skript ist, dass bestimmte Fehler, die beim Aufruf der Modifier- und FileFilter-Funktionen auftreten können, abgefangen werden. Nach dem Abfangen wird eine Fehlermeldung in die Datei stdout.txt geschrieben. Außerdem wird der Rückgabetyp der Modifier- und FileFilter-Funktionen überprüft, falls dabei ein falscher Rückgabetyp festgestellt wird, wird ebenfalls eine Fehlermeldung erzeugt. Wird eine Fehlermeldung von meinem Skript ausgegeben, wird die weitere Verarbeitung des aktuellen Modifier/Filefilter abgebrochen. Zur Zeit ist es so, dass die Änderungen eines fehlerhaften Modifier, die er bis zum Auftreten des Fehlers durchgeführt hat, übernommen werden.
Beim Ladevorgang eines Spielstands könnte mein Skript potenziell sehr viele eigentlich gleiche Fehlermeldungen in die stdout.txt-Datei schreiben, weshalb mein Skript Fehlermeldungen, die sich wiederholen, filtert. Standardmäßig reduziert mein Skript Wiederholungen von Fehlermeldungen auf ein Minimum, dieses Verhalten lässt sich bei Bedarf beeinflussen, indem das Feld rReduceErrorMessagesToMinimum auf den Wert false geändert wird.
Fehlermeldungen werden nach folgenden Eigenschaften gefiltert:
| betrifft gewöhnliche Fehlermeldung mit rReduceErrorMessagesToMinimum = true | betrifft gewöhnliche Fehlermeldung mit rReduceErrorMessagesToMinimum = false | betrifft Fehlermeldung wegen falschem Rückgabetyp |
Art des Fehlers (gewöhnlicher Fehler oder falscher Rückgabetyp)
| ja | ja | ja |
Art der Funktion (Modifier oder FileFilter)
| ja | ja | ja |
Mod, von der aus ein Modifier/Filefilter hinzugefügt wurde
| ja | ja | ja |
Typ des Modifier/FileFilter
| ja | ja | ja |
| Lua-Fehlermeldung | nein | ja | - |
Erhaltener Rückgabetyp
| - | - | ja |
| Erwarteter Rückgabetyp | - | - | ja |
Die Realisierung einer Mod ist mir vorerst nicht gelungen. Die mod.lua-Skript-Datei zu überschreiben, hat nichts gebracht und die Funktionen in einer neuen gewöhnlichen Skript-Datei zu überschreiben, sorgte für Probleme beim Laden, was mit einem Spielabsturz und der folgender Fehlermeldung endete: ..\..\src\Game\transport\street\StreetShapeFactory.cpp:898: struct StreetGeometry::StreetContext __cdecl CreateStreetContext(const struct StreetType &,int,bool,bool,bool,bool): Assertion `Valid(result.laneConfigs)' failed.