Beiträge von eis_os

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


    UG hat leider keine Möglichkeit die UI Liste so anzuzeigen das Einträge fehlen.


    Und die Zuordnung von GleisID (Position in der values Liste) zu Konstruktion muss fest sein. Wenn man in einer neuen Epoche eine Konstruktion ändert, hat man sonst auf einmal ein anderes Gleis an der ID oder wenn die Liste kleiner wird ist die ID vielleicht auch ungültig.


    Mir gefällt das zurzeit auch nicht, und ich bin für Ideen dankbar.
    Bis dato hab ich aber noch keine. Am besten wäre wenn man 0 als Eintrag angeben könnte, das wäre dann nicht nil und würde bedeuten das man den Button nicht anzeigt.

    Hier mal bei den Brückentypen die Zeitabhängigkeit:



    Leider kann man in TPF einen Eintrag der Liste nicht verstecken. (Und die Listen IDs müssen ja stabil sein, also kann man auch nicht einfach Einträge weglassen)


    Zum Beispiel, die config.trackTypes werden durch selectionlist überschrieben:



    commonapi.uiparameter.modifyTrackCatenary(params, {
    selectionlist = config.trackTypes
    })


    Der Aufruf dieser Funktion verursacht grob:

    • Interne Erstellung eines TrackCatenarySelector mit den optionalen Parametern (grün)
    • Die Modifikation der config.trackTypes (orange)
    • Änderung der params (rot)
    • Rückgabe des Objekts (hier nicht genutzt)


    PS: Kann sein das die Zeitabhängigkeit noch Porbleme macht, deswegen ist es ja noch eine Alpha.


    Nochmalig der Wunsch: Liebe Mac Spieler, wollt Ihr eure Plattform nicht unterstützen, meldet euch doch mal...

    Hallo, es gibt eine neue Version 20170924:


    Was gibt es also neues:


    • Die erstellten UI Parameter berücksichtigen nun auch die Zeit.
      Dies bedeutet das Gleise, Brücken und co. ohne Namen dargestellt werden, solange Sie eigentlich nicht Aktiv im Spieljahr sind. Auch dieses ist eine Bewusste Entscheidung damit IDs nicht durcheinander geraten.
    • standard.lua und high_speed.lua werden nun intern vertauscht, damit sollte das Upgrade Tool wieder funktionieren. (Bedenkt, wenn es ein Mod Gleis ist, wird dann einfach standard.lua oder high_speed.lua als Gleis genutzt.
    • Weniger "Müll" in der stdout.txt bezüglich preloading.
    • Es können nun einfacher UI Parameter erstellt werden. (uiparameter.modifyTrackCatenary)


    Beispiel zu den einfachen UI Funktion(en):

    Eine Erklärung:


    Die lokale paramfn ändert ggf. die Parameter via commonapi.uiparameter.modifyTrackCatenary.


    Um den Code so wenig wie möglich zu ändern, wird dann einfach die config.trackTypes verändert. (dazu wird die Referenz per selectionlist übergeben)

    Hallo,
    technisch gesehen sollen ja nächsten alle Bahnhöfe, die CommonAPI benutzen, alle Gleise unterstützen.


    Mein Bahnhof sollte schon jetzt das 1000mm Gleis finden und anbieten und auch die Geschwindigkeit anzeigen.
    D.h. man braucht keine extra Pakete mehr für jeden Gleistyp mit der ganzen Infrastruktur und muss auch nicht irgendwie andere Bahnhöfe patchen.


    Die CommonAPI bietet auch Filter an. So könnte man ein Schmalspur Depot anbieten mit einem Filter, der Gleise per railTrackWidth größer 1000mm aussortiert.
    Ein Nebeneffekt: Man kann das Depot dann auch für 750mm nutzen. Sollte die CommonAPI nicht vorhanden sein, kann man ja immer noch nur sein "eigenes" Gleis unterstützen.


    Ich hoffe am Wochenende noch etwas Zeit zu finden, um die geplante einfache API fertig zu schreiben und auch ein Beispiel Script mit all den Programmiermöglichkeiten.
    Ich bitte die etwas zähe Entwicklung zu entschuldigen.

    Common API


    Geschätzte Transport Fever Spieler und Entwickler.


    Hiermit präsentiere ich euch mein Mod API Schnittstelle nun auch offiziell in einem eigenen Thema.


    Die Mod bietet die Grundlage übergreifende Nutzung von Spielelemente wie Gleise, Brücken, Strassen in anderen Mods zu nutzen.


    Es ist zwar über sogenannte „modifer“ möglich das Laden von Gleisen, Strassen und Brücken zu beobachten, dies hat aber den Nachteil das jedes Mod seine eigenen Funktionen dafür mitbringen musste. Des weiteren musste öfters eine Reihenfolge eingehalten werden oder eine Konfigurationsdatei geändert werden. Gerade bei mehrere Spielstände gibt es dann vielleicht Probleme. UG hat leider versäumt dafür geeignete Schnittstellen anzubieten.


    Was macht also Common API?


    Für Spieler:

    Sobald Ihr die Common API lädt, können Mod Autoren euch eine Auswahlliste mit allen Mod Gleisen, Brücken, Straßen anbieten.
    Des weiteren gibt es eine Liste mit allen Mods und deren Namen in der stdout.txt. Sinnvoll bei Steam Workshop Mods, die sonst nur als eine Nummer angezeigt werden.


    Beispiel: Ihr fügt einen Spielstand ein neues Schmalspurgleis hinzu. Habt Ihr einen Bahnhof der CommonAPI nutzt, könnt Ihr diesen neuen Gleistyp einfach nutzen.


    Hierfür müssen Gleise, Brücken und Straßen nicht angepasst werden, auch keine Änderungen an Konfigurationsdateien sind nötig.


    Technisch gesehen:
    Während des Laden eines Spielstandes werden intern die genutzten Moddateien ermittelt, diese werden vorgeladen und die Mod Autoren können dann Ihre Konstruktionen (Depots, Bahnhöfe) anpassen.

    Für Entwickler von Mods:


    Common API bietet Schnittstellen um herauszufinden welche anderen Gleistypen, Straßen, Brücken oder Tunnel noch geladen wurden. Dazu gibt es noch Funktionen um zum Beispiel die Daten per Name abzufragen, bzw. einer Liste. Warum also nicht selber einen Modifer benutzen?


    Jedes Mod hat dann eine andere Auswahlliste. Sollte eure Konstruktion vor einem anderen Mod geladen sein, hab Ihr keine Möglichkeit dessen Anzeigenamen herauszufinden, oder die Anzahl der Typen. Mit der Common API bleiben auch die ID Zuordnungen generell stabil. Darüber hinaus kümmert es sich bei der UI Erstellung auch darum, das die Modgleis Namen richtig übersetzt werden.


    Brücken, Straßen, Gleise:
    Bitte vergibt für eure Gleise, Strassen, Brücken eindeutige Namen, es ist sehr unschön wenn zig Gleise den gleichen Namen beinhalten – Standard Gleis - , außerdem ist X mal Stahlbrücke auch kein Vergnügen.


    Möchtet Ihr lieber einen sehr langen Namen nutzen ist dies auch kein Problem,
    Ihr könnt zusätzlich für die CommonAPI einen „shortUIName“ definieren,
    dieser wird dann in der Common API UI genutzt.


    Konstruktionen:
    Die API Beschreibung findet Ihr in doc Ordner der CommonAPI


    Ob die API verfügbar ist, könnt Ihr einfach herausfinden,
    CommonAPI darf nicht per require geladen werden, sobald der Nutzer es lädt ist commonapi global definiert.


    if (commonapi ~= nil) then


    end



    Auch weiteren Module kann man einfach abfragen:
    if (commonapi ~= nil and commonapi.uiparameter ~= nil) then


    end


    Wenn ein Modul nicht geladen werden kann, gibt es nil zurück.


    Ihr könnt die Präsenz der CommonAPI zwar in der runfn der mods.lua testen, aber Funktionen bezüglich der Daten zu den Mods oder UI Funktionen stehen euch dort noch nicht zur Verfügung! Diese sind erst während des Ladens einer Konstruktion nutzbar.


    Steam
    Eine Steam Veröffentlichung ist natürlich auch geplant sobald die API stabilisiert ist.



    VorabVersion
    In der Webdisk: Common API


    Wenn Ihr weitere Fragen zur Entwicklung, Nutzung habt, so könnt Ihr diese hier gerne hier zum besten geben ;)


    Links:
    Webdisk: Common API
    Zur Geschichte der Common API: Mod API Diskussion (weiterführung aus dem Beta News Beitrag)


    Neuste Informationen:


    MacOS
    Ich suche Nutzer mit MacOS, bitte meldet euch! MacOS ist nicht getestet.


    Fahrplan nächste Version:


    Zeitabhängige Anzeige von Typen (yearFrom, yearTo): Fertig.
    Einfache Erstellung von UI Parametern. Einfach die vorhandenen Parameter durch replaceParams für die Common API fit machen: In Entwicklung

    Habe ich auch im Mod API Thread erwähnt: Mod API Diskussion (weiterführung aus dem Beta News Beitrag)


    Das Depot sollte als Beispiel Referenz für das Anpassen einer Mod sein, aber so ist es mir das auch recht.


    Ich schreibe einfach ein CommonAPI Sample Mod das nur eine Bau UI zeigt. Also alles auf das nötigste reduziert, das kann ich dann auch zum Testen nutzen...


    Es wäre natürlich auch gut genügend Tester zu bekommen damit die Common API funktioniert. Geht euer Rechner hoch, gibt es einen Crash, keine Schienentypen oder ähnliches?
    Auch ein Mac OS X macOS Nutzer könnten sich vielleicht Melden, am besten mit Programmiererfahrung inwiefern es funktioniert :-)


    Werde Versuchen am Wochende dafür einen neues Thema zu erstellen, inkl. Anleitungen, für Bug Reports, Wünsche und co.

    Mehr Gleise als 9 kann man schon über ein Layout erstellen. Sollte der Bahnhof aber zu Groß werden wird das Spiel keine Wege mehr finden. Und fragt mich dann nicht warum euer Spiel wieder ohne Grund im Jahr X abschmiert.


    Es gibt für den Radius jetzt keine weiteren Einstellungen, wenn jemand einen Screenshot macht wo er/sie es wirklich braucht dann kann ich mir vorstellen das ich das auch noch per Layout in feinen Abstufungen einstellbar mache.


    Zurzeit ist es nicht möglich den Radius an einer bestimmten Stelle innerhalb meiner Translation Matrix Objekt zu ändern. D.h. die Krümmung ist immer Konstant. Das mit einer Art Bezier Matrix umzubauen die auch die Neigung ermöglicht, dafür sehe ich jetzt keine Zeit. Auch das Feedback ist dafür ist mau.


    Natürlich würde ich am liebsten den Nutzer x Raumkoodinaten Anbieten, die er Beeinflussen kann um auch einen Bahnhof in einer Senke zu ermöglichen, oder die Enden zu beeinflussen. Nur wie soll man das dann alles noch Einstellen?


    Die Testversion des jetzigen Bahnhofs und der Common API lag 3 Wochen unberührt auf dem Datenträger, da ich keine Motivation hatte irgendetwas für TPF zu machen. Ein Depot für alle Schienentypen ist zwar auch auf der Todoliste aber wie Angekündigt wird das diesen Monat eher nichts mehr. Eine Brückenrampen Version liegt schon bestimmt 5 Wochen herum.


    Wenn @GamingPotatoes darüber schon mit Enzojz spricht, warum soll ich da noch darauf Antworten?


    Ich habe keine Lust Arbeit doppelt zu machen. Wenn ich dann hier über Ideen schreibe, diese dann Ausprobiere wird es von jemanden anderen umgesetzt. Warum soll ich mir dann da noch irgendwelche Gedanken machen? Dafür ist mir meine Zeit zu schade.


    Generell lese ich eure Beitrage alle. Zu sehr vielen Sachen möchte ich einfach keinen Kommentar mehr abgeben.


    PS: Wenn jemand meint die Ideen der CommonAPI zu kopieren bzw. die Arbeit darin zunichte Macht indem wieder eine Konkurrenz Mod angeboten wird, werde ich definitiv gar keine Mods mehr anbieten.

    Technisch gesehen kann UG nur das Oberleitungssystem ändern, mein Common API hat auch eine Variante des Schienen UI mit Oberleitung. Dort könnte man das theoretisch Versuchen umzusetzen wenn UG die UI zur "laufzeit" änderbar macht.
    Sonst kann man die UI nicht anpassen um die Oberleitungsarten anzuzeigen. Oder es gäbe dann nur Alternative 1,2,3...

    Neue Version 20170912

    • Common API unterstützung.

    Einfach ein Dump meiner Entwickler Version. Um Mod Gleise zu nutzen muss auch Common API geladen werden. (Reihenfolge ist hierbei egal)


    Die Common API findet ihr hier:
    Common API




    -edit-


    PS: Ohne Common API hat man nur die Einträge für die Standard Gleise als Failback.
    Wenn Ihr doppelte Gleise sieht, kann es daran liegen, das der Gleis Mod Author leider den Gleisnamen nicht geändert hat...


    Also liebe Gleismodder, immer schön den Namen ändern! (Das gilt auch für Brücken und Strassen)


    -edit2-
    @KarlCharlson
    Zurzeit sind es nur die Gleise, das liegt aber daran das dieser Teil noch nicht Variabel ist, das liegt aber weniger an eis_os_advrailstation_streettypes.lua, das wäre recht einfach zu ändern, aber das Treppen Teil nutzt noch feste Wege, das möchte ich aber in Zukunft auch ändern.

    Well _() is defined in the TransportFever binary. To be exact it's runtime set quite early when loading a ressource of this mod.
    You could say it does a loadstring call.


    'function _(s) return translate("eis_os_commonapi_1", "en", s) end',



    Hmm, I must try again getTextRes directly, it's odd that the language is set to en. Hmm...


    -edit-
    Yep, getTextRes works. While adding a Mod in Main Menu -> Load Game, the language is en, when loading it gets "de".


    So if you have the modid and language it is possible to use the function translate2 of res/scripts/mod.lua


    -edit2-
    Language:
    local language = string.match(debug.getinfo(_, "S").source, '%"([%w_]+)%", s%) end$') or "en"

    Neues Status Update:


    Bilder kann ich immer noch nicht anbieten, aber die Listen für Gleise und Brücken funktionieren soweit.
    Die Übersetzungen machen mir Kopfschmerzen, ich würde gerne die Geschwindigkeit mit Anzeigen.
    Da UG aber ja unterschiedlich übersetzt (mod<->ug content) bekomme ich per Script ja die Übersetzungen der .mo Dateien nicht.


    Beim Preloading muss ich auch noch "_()" besser emulieren, dafür muss ich aber wiederum die Spiel Sprache auslesen,
    das wird dann auch wieder mit viel Umwegen gehen.


    Ich hab ein Update der Schnittstellen Beschreibung hochgeladen. LDoc kennt weder InheritDoc noch Subclass für Klassen.
    Mit der Dokumentation ist der UIParameter Code nur noch unübersichtlich, bin mir drauf und dran ein eigenes Programm für die Docs zu schreiben, dieses aber nur am Rande.


    http://www.bytetransfer.de/pro…f/eis_os_commonapi_1/doc/

    @Freahk


    Hmm, ich kann hierbei falsch liegen, aber publicApi.parseUiValues sieht verdächtig aus.
    Du scheinst davon auszugehen, das eine Konstruktion immer genau die in der UI definierten Parameter per updateFn erhält, dies ist aber nicht immer der Fall.


    Sobald man einer Station/Konstruktion ein Upgrade verpassen, kann man alle möglichen alten Parametern enthalten und die aus der UI sind dann überhaupt nicht definiert oder außerhalb des Index.
    Ich hab definitiv ein altes Savegame für meine Station bei diesem dieses reproduzierbar der Fall ist


    local index = params[keyFn(key)] <- dies kann nil sein, weil der Index nicht vorhanden ist, obwohl es in der UI definiert wurde.