Alle Ressourcen zur Auswahl in Konstruktionsparametern

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

  • Hier erkläre ich, wie man eine dynamisch erstellte Auswahl von allen vorhandenen Ressourcen (Gleise, Straßen, Gütertypen) inklusive Mods als Parameter in einer Konstruktion ermöglicht.

    Mich hat es schon immer gestört, dass die Auswahl von Straßentypen in Konstruktionen zu gering war oder Bahnhöfe nur die 2 Vanilla-Gleise angeboten haben. Schöner wäre es, wenn man automatisch die Auswahl von allen im Spiel vorhandenen Typen hätte, was die Modkompatibilitäten erhöhen würde.


    In diesem Post habe ich gefragt, ob man dieses Problem nicht irgendwie lösen kann, worauf jemand von UG schrieb, dass das mit dem neuen dynamischen Ressourcensystem möglich sei, mit Verweis auf dieses Beispiel im Wiki. Umgesetzt habe ich es dann bei der Mod Advanced Person Magnet, welche hier auch als Beispiel dient. Dabei wird ein Parameter für alle Straßentypen implementiert, aber für Gleise oder Gütertypen ist das Vorgehen ähnlich.


    1 Parameter

    Der Parameter, um den es geht, wird zunächst wie gewöhnlich in der Konstruktion definiert. Als Typ bietet sich Combobox an.

    Code: res\construction\Advanced_Person_Magnet.con
    1. ...
    2. params = {
    3.     {
    4.         uiType = "COMBOBOX",
    5.         key = "APMstreetType",
    6.         name = _("Street Type"),
    7.         values = {"dummy","standard/town_medium_new.lua"}, -- wird später ersetzt
    8. },
    9. ...

    (In APM werden die Parameter eigentlich mithilfe von ParamBuilder definiert)

    2 Update-Funktion extern

    Die updateFn muss aus der Konstruktion genommen und in einer seperaten .script Datei definiert werden. In der .con Datei stehen dann nur noch die statischen Infos sowie die Parameter. Dazu muss man in der postRunFn die .script Datei benennen:

    Code: mod.lua
    1. postRunFn = function (settings, modparams)
    2. local APMcon = api.res.constructionRep.get(api.res.constructionRep.find("Advanced_Person_Magnet.con"))
    3. APMcon.updateScript.fileName = "construction/Advanced_Person_Magnet.updateFn"
    4. ...

    3 Ressourcen ermitteln

    Außerdem muss man alle Typen der entsprechenden Ressource mithilfe der API ermitteln. Der Übersicht halber kann man das in einer eigenen Datei machen:

    Es werden die Dateinamen (Typ), die später in der Update-Funktion gebraucht werden, und die Namen, zur Anzeige in der Liste, zurückgegeben. Dabei kann man die Typen eventuell filtern oder sortieren, um die Übersichtlichkeit im Konstruktions-UI zu bewahren. Ist das Spiel geladen, sind die Parameter fix und können nicht mehr geändert werden.

    4 Übergabe der Ressourcen

    In der postRunFn wird dann die obige Funktion aufgerufen und die Liste an die Script-Parameter (für die updateFn) übergeben sowie deren Bezeichnungen an den Konstruktions-Parameter:

    5 Verwendung in der Update-Funktion

    In der externen updateFn kann dann mithilfe der scriptParams auf die Ressourcenliste zugegriffen werden. Der Index wird wie gewöhnlich anhand von constrParams ermittelt.



    Ich hoffe, einigen damit geholfen zu haben und würde mich freuen, wenn die ein oder andere zukünftige Mod so eine Auswahl anbietet. Mein Script aus APM zur Ermittlung aller Straßentypen (inklusive Filter) stelle ich zur freien Verfügung.

Share

Comments 2

  • Hi, danke für den Eintrag, das ist sehr interessant.
    Denkst du, dass es so eine Ermittlung der Ressourcen auch für Fahrzeuge gibt? Zum Beispiel für alle Dampflokomotiven, die in einem Spiel zur Verfügung stehen?

    Mein Plan wäre es, diese Fahrzeuge als Asset für den Schönbau zu verwenden. Bisher musste ich jedoch jede Lok, die ich gerne hätte, manuell als Asset erstellen.