Dynamisch erstellte Parameter (Ressourcen)

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


  • Wie macht man alle verfügbaren Ressourcen (Gleise, Straßen, Gütertypen) als Parameter in einer Konstruktion zugänglich? Ich vermute, selbst mit dem neuen Ressourcensystem ist das nicht möglich. Ich kann doch nicht der erste sein, der auf diese Idee kommt.


    In meinem Fall möchte ich alle Güter als Auswahl zum Import/Export ermöglichen. Ich könnte mich jetzt hinsetzen und anfangen mit {"COAL", "IRON_ORE" , ...} aber dann würden keine gemoddeten Güter erscheinen.

    Code
    params = {
        {
            uiType = "COMBOBOX",
            key = "cargotype",
            name = _("Cargo Type"),
            values = getCargoTypes()
        },
    ...

    Ich kenne game.interface.getCargoTypes() und auch die api.res Funktionen. Keines davon ist innerhalb der .con existent.

    Nun habe ich auch versucht, die Konstruktion mithilfe des neuen dynamischen Ressourcensystems zu verändern.

    Das funktioniert sogar! Alle Werte werden angezeigt.

    Aber: Das bringt noch nichts, denn ich muss ja an die Werte kommen. Wie kriege ich die CargoTypes in die updateFn der Konstruktion?

  • Dynamische Werte in die upadteFn Funktion kriegen würde mich auch interessiere. Da die Modifier aber in einem eigenen Thread laufen ist es bisher unmöglich, da Informationen hin zu schleußen. Ich hätte gern die Preise dynamisch in nem GameScript berechnet und dann dorthin weiter geleitet.


    Es bräuchte nun so was wie eine SendEvent funktion ähnlich wie die zur kommunikation von der GUI- zum Game-Thread, damit das möglich wird.


    MFG PMV

  • It should be possible to write custom metadata but using "updateScript" instead of "updateFn". The metadata is passed to the function in "updateScript" whenever it is called. Is the equivalent of saving to file and reading it in "updateFn". You should be able to put almost anything in this metadata.


    Check out the example here:

    https://transportfever2.com/wi…uction_postRunFn.lua.html


    Zitat

    Da die Modifier aber in einem eigenen Thread laufen ist es bisher unmöglich, da Informationen hin zu schleußen.


    The "postRunFn" should allow you to change the resources, and has all resources visible. It also runs on a single thread after all modifiers have been applied. You have to manually loop or find the resources you need, but in turn it offers more flexibility.

  • PMV oh like that, well then is trickier. The best option is probably to pass custom params or custom modules using the buildProposal APIs. How well this works, depends on what you actually want to do.

  • R3DKn16h7

    I want to get the amount of income that a player has for the last few months or years ... and pass it to a modifier to change the costs of modules for stations.

    But I can't break the thread-barrier ... a modifier doesn't get information about what has changed in a gamescript.


    if you have any clue what could work, i would really love it if you could try out your thoughts and get us a working example. For now, the only way i see is to have a new "SendEvent"-function that sends data to the modifier, but that's something the API does not provide right now.


    MFG PMV

  • Does game.interface.getPlayerJournal not work?

  • Hab den Post erst jetzt gesehen.
    Eine halbe Lösung hab ich schon für das Problem. Ich habe es geschafft, Sachen aus dem Repo in die createTemplateFn() meiner .con zu bekommen (updateFn sollte genauso funktionieren).

    Du kannst diese in eine .script-Datei auslagern und diese in der postRunFn() deiner Konstruktion zuweisen. (Den Aufbau der .script-Datei kannst du dir im Spiel bei den Gleismodulen anschauen, eigentlich selbsterklärend).

    Scriptmäßig sieht es dann so aus

    Code
                local styleList = {'style1', 'style2'} -- Ist im meinem Script etwas komplexer .-)
    
                local motrasStation = api.res.constructionRep.get(api.res.constructionRep.find('station/rail/motras.con'))
                motrasStation.createTemplateScript.fileName = "construction/station/rail/motras.createTemplateFn"
                motrasStation.createTemplateScript.params = {themes = styleList}

    In der createTemplateFn oder updateFn kommst du so an den Parameter:

    Code
    createTemplateFn = function(params)
                local themes = params.capturedParams.themes
    ...
    end


    Was ich noch nicht rausgefunden habe, ist wie ich dann ein dynamische UI-Element hinkriege. Momentan hab ich eine Auswahl mit Mengen an Zahlen wo man Raten muss was man auswählen will.

  • I guess my question was, can't you call game.interface.getPlayerJournal from within the modifier?

    thats from the old (deprecated) API ;) so thats no option


    EISFEUER
    Ich kann in der postRunFn keine Engine-API aufrufen, falscher LUA-State. Damit fällt das übergeben der Daten per Parameter weg. Im extra Script dann direkt aufrufen der Engine-API sollte den gleichen LUA-State benutzten, wie wenn mans einfach per Modifier macht. Da ist die Engine-API also voraussichtlich auch nicht vorhanden, aber da du ja schon nen funktionierende Variante hast, könntest das mal für mich kurz testen? Einfach irgend nen Aufruf an die Engine-API machen bzw. schauen ob api.engine ungleich null ist in der createTemplateFn, bitte? danke :*


    MFG PMV

BlueBrixx