CommonAPI2 Entwicklungsdiskussion, Fragen & Antworten

Willkommen in der Transport Fever Community

Welcome to the fan community of Transport Fever and Train Fever, the economic simulators of Urban Games. The community is free for you to share and inform yourself about the game. We cultivate a friendly and objective interaction with each other and our team will be happy to answer any questions you may have.

 

Registration and use is of course free for you.

 

We wish you a lot of fun and hope for active participation.

The Team of the Transport-Fever Community

  • Super, die Tab Completion funktioniert jetzt auch in den Fällen mit [x].


    Die Mod Einstellungen werden bei mir im Spiel manchmal nicht angezeigt, die Liste ist dann leer. Konnte nicht rausfinden, wann und warum. Die CommonApi ist auf jeden Fall immer als Mod aktiviert.


    Und was die Liste der Einstellungen angeht: Die Optionen sind nicht immer in derselben Reihenfolge. Ideal wäre es natürlich, wenn sie immer in der Reihenfolge sind, in der sie in der mod.lua definiert werden.

    Man muss die Dinge so einfach wie möglich machen. Aber nicht einfacher. - Albert Einstein

  • Die Einstellungen können in der mod.lua, in der Definition einer Einstellung via order = <int>, in die richtige Reihenfolge gebracht werden.

    LUA hat explizit keine feste Sortierung für key, value Tabellen. (es wird sogar technisch wie in Go etwaige Sortierung verhindert), order wird auch von TPFMM unterstützt.


    Code
    1. settings = {
    2. option_ = {
    3. order = 10,
    4. ...
    5. },
    6. option_b = {
    7. order = 11,
    8. ...
    9. },
    10. ...


    Modlisten:

    Ja, ich hab gestern gemerkt das neue Spiele keine Modliste erhalten, ich hab noch keine Ahnung warum, UG bzw. der Compiler hat da wohl was herum geschraubt. 100% sicher bin ich mir noch nicht. (Bei gespeicherten Spielstand funktioniert es wieder)

  • Allgemeine Info für CommonAPI2 Nutzer, nun gibt es wieder eine neue Version. Diesmal keine Dev , sondern eine "fertige" Version.


    Wichtig: Um Crashes bei zu viel Nutzung von print in Lua zu umgehen, bitte ich euch dringend ein Update zur neusten Version zu machen.

    Steam Release wohl heute Abend... Veröffentlicht


    Der FileFilter Fix bewirkt, das nun auch Fahrzeuge aus Mods, die im Benutzerverzeichnis / mods liegen, auch wirklich als Mod Fahrzeuge im Spiel geladen werden und nicht heraus gefiltert.

    Dies kann dazu führen das ehemals gefilterte Fahrzeuge nun doch auftauchen, man kann den Fix via Einstellungen abschalten.


    1.2.20200407

    - Fix crash with heavy concurrent access to stdout.txt by using mutex

    - Refactor code for ModList handling, don't call lua in render state but while constructor/destructor runs, should reduce race conditions

    - linux build with active luasocket

    - Add FileFilter fix so staging_area and userdir/mods won't be filtered by region settings


    Hier geht es zu unserer Download Datenbank:

    CommonAPI2 Herunterladen

  • Hallo eis_os,

    ich hätte da eine kurze frage. Wäre es möglich, das man mittels der Commonapi bei den Assets die Kategrie der Assets bearbeiten kann mithilfe deines Mod-Konfigurationstools (Auswahl was im mod aktiv sein soll)?


    Aktuell wird es immer unübersichtlicher, was man wo bei den Assets findet und ich würde eine Möglichkeit suchen, wie man das als "Einfacher User" anpassen kann.

  • Aktuell wird es immer unübersichtlicher, was man wo bei den Assets findet

    Das ist natürlich die Folge wenn jeder Modder andere oder seine eigenen Kategorien verwendet.

    Das einzige was du tun kannst um Übersicht zu schaffen, ist die Kategorien der Mods selber umzubenennen:

    Mod Ordner -> res\construction\asset -> entsprechende Datei öffnen

    Bei der Zeile categories = {"fences"} kann man die Kategorie ändern

    Man muss die Dinge so einfach wie möglich machen. Aber nicht einfacher. - Albert Einstein

  • Um Crashes bei zu viel Nutzung von print in Lua zu umgehen

    Ich befürchte, das Problem ist noch nicht ganz weg. Beim Testen in der Console (auf der im Hintergrund geprintet wurde) bin ich auf zwei sehr seltsame Fehler gestoßen:



    Code
    1. PANIC: unprotected error in call to Lua API ([string "res/config/game_script/base.lua"]:18: attempt to index a nil value)

    Man muss die Dinge so einfach wie möglich machen. Aber nicht einfacher. - Albert Einstein

  • Ich denke du versuchst da gerade in einem GameScript game.interface.getGameTime() aufzurufen, an diesem Punkt gab es ein Problem und das Spiel crasht.

    Ich müsste dann schon deine geänderte base.lua sehen um das nachzustellen um da etwas genauer zu untersuchen.


    Das Problem was ich gefixt habe, hat technisch eigentlich nichts mit Lua zu tun.

    Es gab ein Problem wenn meine Streamumleitung von mehreren Threads gleichzeitig Daten erhalten hatte, konnte es dazu führen, das ein Leeren der ältesten Zeilen zu einem Crash führen.


    Das TPF2 auch ohne CommonAPI2 schon von mehreren Threads ohne Mutex auf stdout schreibt, wird daran nichts ändern.

    Dies kann zu fehlerhaften Daten kommen. std::cout wird zwar nicht crashen aber das Ergebnis ist eine undefinierte Reihenfolge der Ausgabe.

  • Ja wie gesagt das war in der Console. Hab was getestet. Und habe das Gefühl, dass wenn man zu viel schreibt (vor allem wenn im Hintergrund noch geprintet wird), es mal schnell einen Absturz gibt.


    EDIT: Meinte mit viel schreiben nur das Ausführen (Enter)

    Man muss die Dinge so einfach wie möglich machen. Aber nicht einfacher. - Albert Einstein

    Edited once, last by VacuumTube ().

  • Ahh, ok, das liegt eher daran, das ich den Fehler nicht abgefangen bekomme. Wenn du etwas in die Konsole schreibst oder Enter drückst?
    Das sieht mir eher danach aus,

    a) Es steht commonapi.dmp(game.interface.getGameTime()) in der Console zum Ausführen

    b) Du hast nen Game Thread der gerade läuft

    c) Du drückst Enter zum Ausführen oder machst Tab Completion


    Dann wird der Befehl commonapi.dmp(game.interface.getGameTime()) an den Game Thread gegeben.

    TPF2 ist gerade in einer Subfunktion. setMaximumLoan

    game.interface.getGameTime() kann nicht ausgeführt werden. -> Ein Crash entsteht.

    Der Crash wird trotz Exception Handler nicht abgefangen...


    Das Threading von TPF2 ist leider ein sehr leidiges Problem. Da ich keinen Mutex habe wenn TPF2 gerade in einem LUA Thread ist, kann ich auch nicht wirklich alles verhindern.

    Ich versuche es aber weiterhin auf dem Radar zu haben und empfehle entweder nen Debugger an zuwerfen, der den Thread anhält oder in den Pause Modus zu wechseln...

  • Bitte versuche ein Update eines Mods im Lademenü und nicht während Du schon den Spielstand spielst...

    (wenn es dann auch nicht geht, bitte eine stdout.txt anhängen).


    1. Transport Fever 2 starten
    2. Spiel laden klicken im Hauptmenü (nicht das Savegame starten!)
    3. CommonAPI2 Mods -> Mod Einstellungen
    4. Dann ein Mod versuchen zu updaten

    Wenn es nicht geht, die stdout.txt senden.

  • Ich hab es auch im Hauptmenü versucht darum mein Einfall im Spiel.Hier mal die stoudt beim Versuch im Hauptmenü zu upgraden.

    Zur Erläuterung sei noch gesagt, das sich mein Spiel auf dem Device D:/ befindet.

    Muss ich auf C:/ umziehen?

    Ich mach für heute Schluss und wünsche dir noch einen schönen Abend.

    Files

    • stdout.txt

      (890.21 kB, downloaded 18 times, last: )

    Ein Computer ist dazu da, die Probleme effizient und schnell zu lösen, die man ohne ihn gar nicht hätte.

  • Deine stdout.txt zeigt leider klar eine Laden eine Spielstands.

    Es kann möglich sein das Windows kein Atomic Move zwischen Partition unterstützt. Dann müsste ich mir etwas anderes Ausdenken zum verschieben der Daten.

    Ich habe MOVEFILE_COPY_ALLOWED als Flag gesetzt und MSDN sagt: "If the destination is on another drive, you must set the MOVEFILE_COPY_ALLOWED flag in dwFlags." Das muss also gehen, ist das Verzeichnis oder irgendwelche Dateien dort drin noch geöffnet? Zugriff Verweigert kommt klar vom Betriebssystem, das sagt, es kann es gerade nicht...

  • Wenn du mir jetzt noch erklären könntest wie und wo ich das einstellen kann wäre ich dir sehr dankbar.

    Habe mich mal dran gesetzt und alle Mods vom Modordner D ins Benutzerverzeichnis nach Laufwerk C kopiert.

    Bringt auch nichts.

    Ein Computer ist dazu da, die Probleme effizient und schnell zu lösen, die man ohne ihn gar nicht hätte.

    Edited once, last by franki66 ().

  • Hallo eis_os,

    habe das gleiche Problem wie mein vor Poster "franki66" .

    Steam-Hauptordner befindet sich auf Laufwerk E:\Steam\userdata\xxxxxx\1066780\local

    Spielordner: C:\SteamLibrary\steamapps\common\Transport Fever 2


    Deine stdout.txt zeigt leider klar eine Laden eine Spielstands.

    Es kann möglich sein das Windows kein Atomic Move zwischen Partition unterstützt. Dann müsste ich mir etwas anderes Ausdenken zum verschieben der Daten.

    Ich habe MOVEFILE_COPY_ALLOWED als Flag gesetzt und MSDN sagt: "If the destination is on another drive, you must set the MOVEFILE_COPY_ALLOWED flag in dwFlags." Das muss also gehen, ist das Verzeichnis oder irgendwelche Dateien dort drin noch geöffnet? Zugriff Verweigert kommt klar vom Betriebssystem, das sagt, es kann es gerade nicht...


    Es ist sind keine Verzeichnisse oder Dateien geöffnet


    Wenn ich in den Einstellungen/Verzeichnisse schaue, fällt mir auf das er unter "Spielverzeichnis" meinen Spielerordner anzeigt und unter "Benutzerverzeichnis" den Steam-Hauptordner .


    mfg Kelrin

  • Hallo eis_os,

    die zu aktualisiere Mod´s liegen im Spielverzeichnis C:\SteamLibrary\steamapps\common\Transport Fever 2\mods.

    Werde sie zum testen in den Ordner E:/Steam/userdata\xxxxxx\1066780\local\mods kopieren und testen.

  • Hey eis_os,

    wollte deine (wirklich sehr nützliche) Implementation der Modupdates testen. Funktioniert auch auf Win7 mit installiertem Curl und 7zip hervorragend, solange man die Mods alle nach <userdata>\...\local\mods\ migriert.

    Vorher hatte ich die alle aus Gewohnheit zu TpF1 irgendwie in <gamedir>\mods\ liegen. Allerdings, nach Verschieben aller Mods (ausgenommen der UG Mods) nach <userdata>\...\local\mods\, scheint das Exportieren/Importieren von Modlisten nicht mehr zuverlässig zu klappen ?(


    Ich erstelle mir ein neues Spiel und aktiviere wild durcheinander beliebige Steam+UG+Webdisk Mods, von denen letztere halt jetzt in <userdata>\...\local\mods\ liegen.Die CommonAPI ist wie vorher auch die neueste Version von Steam. Dann exportiere ich die Modliste. In der Modlistendatei tauchen auch alle Mods auf. Wenn ich die jetzt im Spiel aber wieder importieren möchte, für zb einen neuen anderen Spielstand, dann werden nur die Steam+UG Mods aktiviert, nicht aber die Mods, die unter <userdata>\...\local\mods\ liegen?(


    Ist dir das Problem bekannt? Das wäre ja irgendwie kontraproduktiv: für das Updaten der Mods aus der Webdisk müssen die Mods idealerweise in <userdata>\...\local\mods\ liegen, werden dann aber nicht mehr von den Modlisten erkannt... Die dann nach jedem Update wieder in <gamedir>\mods\ zu verschieben ist ja sicherlich auch weder im Sinne von dir oder UG, denn laut denen sollten da ja eh nur "built-in mods" liegen.

    Wenn du noch ne stdout oder so brauchst, sag Bescheid!


    Vielen Dank für deine Mühen!

    Farnsworth