CommonAPI2 Entwicklungsdiskussion, Fragen & Antworten

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • You can't use the commonapi that way. It always needs to be loaded by the internal loader.


    But you don't need to worry much, if commonapi is loaded, you simple can use it's global public api:

    Code
    local myvariable
    if (commonapi ~= nil and commonapi.mods ~= nil) then    
        myvariable = commonapi.mods.getById("modname_1")
    else
        -- CommonAPI1/2 not loaded, do some failback
    end
    
       -- sample to see what is inside:
       commonapi.dmp(myvariable)

    Never ever try to load commonapi parts by yourself. All public interfaces are reachable by the commonapi global interface.

    Note: To get a proper Modlist in TPF2, CommonAPI2, it's native component must be loaded and CommonAPI2 must be active in the savegame (otherwise commonapi console works, but other mods have no access to the global interface)

  • Depending where you need it, the best option would be

    game.interface.getCargoTypes() and game.interface.getCargoType()


    Simple select script thread in the console. Then write game.interface.<tab> (then you get auto completion) and see what UGs script system offers...


    If it's available depends on UG, if not, the usually way would be modifiers





    01.03.2020:


    Ein paar Neuigkeiten:

    Die nächste Linux Version wird auch Modlisten unterstützen(funktioniert mit Steam Testing als auch mit der GOG Version, also bin ich ziemlich zuversichtlich),

    darüber hinaus testet ich gerade die Anbindung an die Webdisk hier.


    Das bedeutet es gibt bald keine Ausrede mehr, Steam für Mods zu nutzen, weil man Updates von Mods verpassen würde.


    Dafür werden die Webdisk Dateien nach einer mod.lua durchsucht, daraus wird dann die minorVersion ausgelesen. Der Webdisk Titel wird als Name genutzt, weil das Parsen der Lua Dateien bezüglich strings.lua nicht zufriedenstellend funktioniert. Es gibt da leider sehr komische Mods.


    Inwiefern ich auch einen kompletten Ingame Modmanager baue, bin ich mir noch unsicher.

  • Ja, ich entwickele noch weiter und hier kann man einen Ausblick auf die weiteren Mod Einstellungen sehen:


    Zum Download der Update Informationen wird curl benutzt, das bei Windows 10 auch mitgeliefert wird. (Wer Windows 7/8 nutzt muss sich es leider selbst herunterladen)

  • The current source is the transportfever.net download database.

    So technical here on transportfever.net is a php script creating a json file out of download links to entries with modid, version, download_url.

    The json file has a different format then TPFMM, as entries here could hold more then one modid. So there is no mapping of entries.


    My CommonAPI2 dev version provides a button to download this info:

    • Runs curl to get a newer file then on hdd
    • LUA DKJson parses the whole file
    • Transformation to modid -> download entries and stored, so searching for mod upgrades is faster
    • For every entry, all possible versions downloadable can be seen. (yellow color in list)

    If you click on upgrade on such an entry:

    • Run curl to download archive file to <userdir>/commonapi/downloads/
    • Extract modid folder from archive (uses 7zip so rar/tar/zip/7z works)
    • Move <userdir>/mods/<modid> to <userdir>/commonapi/modstorage/<modid>-saved-<timestamp> (technical should be atomic on Windows and Linux as it's the same filesystem)
    • Move <userdir>/commonapi/downloads/<temporary extract dir> to <userdir>/mods/<modid>

    Technical works only for manually installed mods into <userdir>/mods.


    As currently I can't refresh transportfever2.exe modlist it's not possible to release this now.

  • Und es gibt eine Testversion nun mit Mod Management.


    1.1.20200309-dev

    - tweak ui perfomance, don't scan all elements for events, record events in table

    - replace flat rendering method with tree rendering for certain ui elements

    - Add repository download code for transportfever.net mods (requires installed curl, included in windows 10 >=1803, Linux: apt install curl)

    - Add mod upgrade code by using download (Requires 7z in C:\Program Files\7-Zip, see 7-zip.org for install, Linux: apt install p7zip-full)

    - Bundle lua library dkjson

    - Use marshal to convert json to .m file for faster load speed

    - Upgrade imgui bindings


    In der Linux Version sollte nun die Modlisten auch funktionieren, musste die so lib aber neu kompilieren. (War 10MB Groß) und ist nicht weiter getestet.


    Ich übernehme keine Gewähr ob alles funktioniert. Dies ist Ausdrücklich eine Testversion, bitte Backups der Mod Ordner machen!

    Es gibt noch keinen Refresh der Modliste in der UI, nach einem Upgrade bitte auf ein anderes Savegame klicken, dann sollte TPF2 alles neuladen und die CommonAPI2 UI sollte die Änderungen dann auch mitbekommen.

  • stdout.txt anhängen wenn das Entfernen von settings.lua im Verzeichnis eis_os_commonapi2_1 nicht hilft... (Tastenkombination zum Aus und Einblenden ist Alt-Gr + C, aber normalerweise wird das Menü bei jedem Start des Spiels wieder angezeigt)

  • Da steht immer noch disabled by setting.lua drin. Aber ich habe die setting.lua bereis auf eine ander Festplatte verschoben. ( ich nehme an du meist die setting.lua in .../content/1066780/1947572332/res/scripts/commonapi2 )

    Dateien

    • stdout.txt

      (1,08 kB, 194 Mal heruntergeladen, zuletzt: )
  • Feedback zur Autovervollständigung:

    • momentan gibt es eine groß/klein Unterscheidung, welche mM aufgehoben werden könnte
    • das Verhalten bei tables ist nicht optimal. Die Vervollständigung schlägt einem vor: tab, table, table.1, ... (wenn es nur ein Element gibt). Diese Schreibweise führt aber zu einem Syntaxerror. Korrigiert man es, funktioniert die Vervollständigung aber nicht mehr: table[1]. schlägt einem nur allgemeine funtionen vor.

    Vorschlag zu den Mod Settings:

    Ideal wäre es natürlich, wenn Mods Änderungen von Einstellungen, die im laufenden Spiel vorgenommen werden, auch direkt mitbekommen. Momentan ist es aber so, dass die Werte über merk_modutil[1].userSettings.get("mod_1") die alten Werte vom Spielstart enthalten, auch wenn in der Datei schon neue Werte stehen.

    Weiß aber nicht inwieweit da bei dir der Einfluss liegt.


    Getestet wurde mit der neusten Version

  • Hallo


    Das mit der Schreibweise werde ich nicht ändern, da lua auch unterscheidet.

    Mein neuer Tokenizer kann es schon besser, aber ist noch nicht stabil:

    Sprich bla[1].blub sollte funktionieren. Zurzeit wird aber nach ] via Tab der Punkt nicht erweitert.


    Mein Bahnhof Adapter lädt die settings.lua immer neu, dann funktioniert es. Inwiefern ich callbacks ermöglichen kann, bin mir nicht sicher. UG hat den Teil wie LUA in TPF2 funktioniert nicht beantwortet.

  • Hallo,

    es wieder mal Zeit für eine Development Version:


    1.1.20200325-dev

    - console, new tab complete code, should fix numeric key problems

    - add luasocket (note: needs activation by settings)

    - add local mod install

    - fix UI FileDialog folder level can't be changed when path ends with slash


    1.1.20200313-dev

    - remove railroadCrossings code hotpatch (fixed by UG)

    - update windows build to use SDL 2.0.8


    Das größte Highlight der Release ist ein minimal Version von LuaSocket. (socket.core), diese muss via Einstellungen eingeschaltet werden (speichern und neu starten nicht vergessen)

    Damit ist es nun als erstes möglich, LUA Dateien zu debuggen. Breakpoints, Watches, :)



    Ihr benötigt hierfür https://github.com/pkulchenko/…b/master/src/mobdebug.lua , dies muss in eis_os_commonapi_2/res/scripts

    Als IDE funktioniert https://studio.zerobrane.com/ Technisch können auch andere Debug Lösungen funktionieren, ich bin gespannt was Ihr so anstellt :)


    Nach Installation (ich hab die Portable Version genutzt), wählt Ihr unter Project -> Project Directory -> Choose das Verzeichnis eures Mods: meinmod_1

    Unter Project -> Start Debug Server einschalten.


    In der updateFn einer Konstruktion:

    require("mobdebug").start() nutzen.


    Ja, manchmal funktioniert es nicht so tolle. Wenn man die Console nutzt um require("mobdebug").start() zu nutzen, kann man schon mal zwei dreimal versuchen bis es geht.

    Bedenkt, ich ermögliche den ganzen Kram von Außen ohne Infos von UG.


  • Hallo zusammen kann mir da jemanden vielleicht helfen,was ich da machen soll?

    Hab auch den Mod 100 x 100 Module aktiviert auf Steam ( Atlits Lager Stations 100x100)

    Aber irgendwie kann ich nur bis zu 25 module auf der Y achse bauen also senkrecht


  • Mehrere Stationsmods kann man nicht laden und ist hier auch am Thema vorbei.


    Die letzte Version ist mit GOG Windows und Steam Version getestet. Irgendeine Software verbiegt OpenGL. Welche das ist, kann ich bis heute nicht sagen, da bis jetzt kein Nutzer da hilfreiche Infos geben konnte.

BlueBrixx