Beiträge von VacuumTube

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


    Is there no possibility to access game.interface in a addModifier function? I have another mod where I need a function from game.interface in the updateFn of a construction... also nil there.


    I haven't fully understand the new thread concept yet. In TPF1 this was no problem, there was just one thread and everything was available everywhere. Maybe they did it for performance reasons, but I don't think the lua part is the critical part regarding performance. At the moment, I think it caused more problems than it helps.


    So does anyone know if it is possible to switch threads somehow? Or is there a interface we don't know?

    Maybe it's somehow possible to pass the game variable to addModifier via parameters?


    SpaceCossaX: nice idea, your mod. But keep in mind that the modding tools for UI are very limited.

    Ich hätte jetzt vermutet, dass das Betriebssystem die Kerne so intelligent verwaltet, dass die Programme ideal laufen. Klappt bei vielen anderen ja auch. Alternativ könnte man auch die Priorität des Prozesses erhöhen, aber keine Ahnung ob das was bringt.


    Ich vermute eher, dass die Mikroruckler von TPF einfach auftreten, wenn gerade sehr viel berechnet werden muss und daher die FPS nicht gehalten werden können.

    Hast du eine Erklärung was die Mikroruckler verursacht?


    Ich habe einen Dual-Core wo TPF wahrscheinlich nur einen Kern wirklich belastet. Aber ich bin keinswegs verschont von Mikrorucklern obwohl bei mir denk ich nicht viel geschoben wird.

    viele der Missionen stecken m.E. voller Seitenhiebe auf die eine oder andere "politische" Situation. Da haben die Entwickler schon ein recht feines Gespür für den allgemeinen Wahnsinn gezeigt, der sich in dieser Welt abspielt. Das geht bei der japanischen Effizienzzwangsneurose los, leitet weiter über die Klopfer die im China der Mao-Zeit verordnet wurden, macht einen Abstecher über den Personenkult in Rumänien während der Zeit von Ceaucescu, und endet noch lange nicht bei den Auswüchsen des Neoliberalismus mit denen sich deutsche Unternehmensführer hervortun. Selbst vor der Schweizer Gründlichkeit im Angesicht einer existentiellen Bedrohung haben die Entwickler nicht halt gemacht.


    Insgesamt sehr amüsant - was habe ich gelacht...

    Amüsant beschreibt die Kampagne finde ich sehr treffend.


    Ja einige Aufgaben waren sehr nervig. Die Bahnsteige, die man eigentlich benutzen will, muss man abreißen. Oder in Japan, wo man sehr umständlich mit wenigen Weichen auskommen muss.


    Am besten fand ich aber die Mallorca Mission mit den ganzen Klischees....

    Also der Youtuber hat auf jeden Fall Schwachsinn gelabert.


    Wie in der Realität sind manche Stationen, die mehr Gebäude umfassen, stärker besucht. Oft macht dann eben eine kleine Linie (zB zwischen Zentrum und Bahnhof) Sinn oder mehrere Linien, die sich die Hauptstrecke teilen.


    8 Linien pro Stadt ist auf jeden Fall zu viel. Ich würde Kreislinien eher selten einsetzen, sondern lange Durchgangslinien (oder Hundeknochenlinien).


    Was meinst du mit "nur eine Richtung augelastet"? Angenommen, die Linie führt zum Bahnhof wo die meisten hinwollen oder herkommen: Ist ja klar, dass sie in der einer Richtung warten. Auf der anderen Seite steigen sie ja dann aus. Wenn mans genauer sehen will, kann auf die Station und Diagramme gehen.

    Ich setze auch ungern Personenlinien mit nur 2 Stops ein, einfach weil es unschön ist. Kreisverkehr passt finde ich aber eher zu Bus/Tramlinien. In der Regel würde ich daher auf die "klassische Linie" setzen, also einfach hin und zurück mit vielen Zwischenhalten. Hat bei mir immer zu guten Ergebnissen geführt, möglich jedoch, dass der Pendelverkehr profitabler wäre.


    Zum Personenmodell und Profit wären folgende Fragen interessant:

    • Ist der Umsatz von der Fahrtdauer abhängig? Oder nur von der Personeneigenschaft schnell/billig? (Bei Güterverkehr definitiv nicht, was auch sinn macht)
    • Der Umsatz hängt wahrscheinlich proportional von der Luftliniendistanz ab. Wie ist das jedoch bei Umstiegen? Bezahlen die Passagiere für jeden Zwischenhalt entsprechend der Teildistanz? Das wäre dann je nach Lage der Stationen deutlich mehr und würde das Verhalten erklären.
    • Daraus ergibt sich dass man bei Linien möglichst darauf achten sollte, dass die Längen nah bei der Luftdistanz liegen (möglichst gerade verlaufen). So wird man gut bezahlt. Das ist denk ich das Problem beim Kreisverkehr. Passagiere sind länger unterwegs (nicht gerader Gesamtstrecke), klauen anderen die Plätze und man wird weniger gut bezahlt.
    • Man sollte bedenken, dass man Passagiere ohne große Konsequenzen lange warten lassen kann (keine Entschädigungszahlungen bei Verspätung oder Ausfällen). Scheinbar wird das bei ihrer Präferenz nicht berücksichtigt. Etwas unrealistisch, aber somit zieht man halt Passagieren, die oft Umsteigen viel Geld aus der Tasche obwohl sie eine lange Fahrtdauer haben.

    Thats in average 1,74 persons/building. Are you using any mods? Or are the buildings in average smaller than in TPF1? I remember many skyscrapers in most cities with capacites up to 500 per building on my TPF1 map.

    I would like to reiterate that you found how to get only the production facilities to be listed, by using type = "SIM_BUILDING" instead of the broader type = "CONSTRUCTION"

    Why don't you just take the code you posted earlier and replace CONSTRUCTION by SIM_BUILDING?

    Code
    local CId = (game.interface.getEntities({ radius = 1e100 }, { type = "SIM_BUILDING" }))
    for j = 1, #CId do
     local id = CId[j]
     print(commonapi.dmp (game.interface.getEntity (id)))
    end


    I just simplified that code a bit. Doesn't it work? I think it should but didn't test it. Is there an error message?

    Code
    local IDs = game.interface.getEntities({ radius = 1e100 }, { type = "SIM_BUILDING" })
    for _,id in pairs(IDs) do
        commonapi.dmp (game.interface.getEntity(id))
    end

    You are seperating commands with ,

    commonapi.dmp(), commonapi.dmp(), ...

    this doesnt work


    the following should work:

    Code
    for j = 1, #TownsId do
        local id = TownsId[j]
        commonapi.dmp(game.interface.getEntity(id))
        commonapi.dmp(game.interface.getTownCapacities(id))
        commonapi.dmp(game.interface.getTownCargoSupplyAndLimit(id))
    end


    did you try out getCargoType (id) yet?

    Do you know what "includeData=true" does exactly?

    It just includes the entity data (you get with getEntity) rather than returning only ids.


    If you use a for each loop, you don't need a counter variable j and it's the same like:

    Code
    local IDs = game.interface.getEntities({ radius = 1e100 }, { type = "CONSTRUCTION" })
    for _,id in pairs(IDs) do  -- _ for unneeded variable 
     commonapi.dmp (game.interface.getEntity (id))
    end

    for i,j in pairs(table) iterates over a table with i as index (1,2,3...) and j=table[i]


    Another advice: if you print commonapi.dmp () is always nil. dmp prints automatically to console.


    What industries on your test map "didn't produce anything and didn't have any entries of Cargotype in their simbuilding table."?
    Would you have an stdout or even a savegame?

    I tested on a very small map with 3 industries only. That industry was a building materials factory and hasn't been deliverd, so it didn't produce. There are no entries in the list, so it's not possible to determine input/output cargo type.


    Hallo liebe Community,


    ich suche zum einen Beta-Tester für meine Mod, zum anderen habe ich mir gedacht, es wäre spannend eine Art Wettbewerb zur Auswahl der Screenshots zu haben, die auf dem Titelbild der Mod veröffentlicht werden.


    Es geht um eine Mod, die allen Fahrzeugen angepasste Kamerapositionen hinzufügt. Die Advanced Camera Views gab es schon für TPF1: Advanced Camera Views


    Man kann sich nun fragen, warum brauchen wir das für TPF2, wenn es doch jetzt die freie First-Person-Kamera gibt?

    Naja, die ist in der Bewegung noch etwas eingeschränkt, das Umschauen geht zwar schnell, aber die translatorische Bewegung ist sehr langsam. Außerdem wäre es praktisch, durch einfaches Umschalten direkt zu einer passenden Ansicht zu gelangen. Die Mod wurde daher entsprechend angepasst und erweitert:

    • Ansichten jeweils optimiert für Züge, Straßenbahnen, Busse, Lastwagen, Autos, Schiffe, Flugzeuge, Personen und Tiere
    • Die Ansichten sind jetzt model-abhängig (passen sich der Größe des Fahrzeugs an)
    • Enthält Ansichten von Passagieren und Fahrzeugpersonal


    Ich habe bereits ausführlich getestet, bin aber natürlich dankbar für Feedback/Vorschläge. Vor allem geht es mir aber um die Screenshots. Da ich selber noch nicht viel zum Spielen kam, dachte ich mir wäre es einfacher, die Bilder anderen zu überlassen. Das Titelbild soll wieder aus 4 aussagekräftigen Einzelbildern bestehen, weitere Screenshots werde ich eventuell in der Mod als Bilder anhängen. Bei den Screenshots solltet ihr auf Folgendes achten:

    • möglichst gut ausgefülltes Bild
    • Positionen, in denen der Sinn der Mod deutlich wird
    • Auflösung mindestens 1920x1080
    • möglichst hohe Grafikeinstellungen zum Zeitpunkt des Screenshot verwenden
    • möglichst in den Positionen bleiben, leichtes "Nachjustieren" ist erlaubt
    • Bilder hier reinposten oder mir als Nachricht schicken

    Die Beta Version ist hier hochgeladen: Advanced Camera Views

    Allerdings noch geheim, muss euch einzeln hinzufügen. Passwort ist ACV.

    Der Einfachheit halber auch nochmal als Dateianhang.


    Viel Spaß und ich freu mich auf schöne Bilder:)

    Hi Claude, I am currently figuring out how the entity system is working. I also replied to the other post about getting information about input/output of industries. However, it's different because that was about editing the construction via loadConstruction where you have information about the construction file. The entities work different and have other variables.


    So, I get all entities of a specific type with

    Code
     local constructions = game.interface.getEntities( {radius = 999999}, {type = "CONSTRUCTION", includeData=true} )

    It includes many entries, all constructions of the current game: town buildings, industries, assets.


    Example:

    Now what you could do, is filtering the entities via

    Code
    entity.fileName == "industry/*"

    But that entry does not contain information about the industry itself, I think it contents just information about the model. So I became aware of simBuildings = { 16513 }:

    This might be more interesting for you because it contains information about the production. type = "SIM_BUILDING" seems to be the industries, although I wouldn't have guessed that by the name.

    There is still an issue, I had industries on my test map that didn't produce anything and didn't have any entries of Cargotype in their simbuilding table.


    I don't know a better solution yet. Maybe there are possibilities with game.interface.getIndustryProduction but my tries with that resulted in a crash.

    The problem is, that the production rule is not included in the construction itself, only in the updateFn.


    For example the Quarry (construction file in industry/quarry.con) sets

    Code
    rule = { input = { { } }, output = { STONE = 1 }, capacity = 400 }

    and passes this to industryutil.addIndustryData, which adds a generic updateFn that writes these params to the result:

    Code
    constr.updateFn = function(params)
    ...
    result.rule = {
                input = inputRule,
                output = ...,
                capacity = ...
    }
    ...


    In WolfZ script he replaces updateFn with another function and in line 54 he calls the original:

    Code
    local result = originalUpdateFn(params)

    You could now investigate that result.rule and check for input and outputs, to determine the type of industry.

    Also die eigentliche Frage ist ja, warum die Städte nicht wachsen, obwohl sie wollen. Denn es sind ja alle Bedingungen erfüllt und unten steht ja, um wie viel die Städte wachsen wollen.


    Daher denke ich, dass das Problem eher beim Bauen der KI liegt. Sind in dem Spiel Mods aktiviert? Irgendwelche, die was an den Straßen oder so ändern? Ansonsten einfach mal die Städte mit Straßen erweitern und schauen ob da gebaut wird.

    Bei mir wollten die 200 Arbeiter auch nicht auftauchen. Lag vor allem an dem chaotischen Verkehr und meine Busse standen im Stau. Hat dann einfach etwas länger gedauert.


    Dummerweise war ich danach im Minus, weil keiner meine Züge benutzen wollte. Den Company Score hab ich dann trotzdem erreicht, indem ich alles was ich hatte verkauft habe und dann Flughäfen/Flugzeuge und Schiffe gekauft habe. Die Punkte sind zwischendrin nicht nachvollziehbar hin- und hergesprungen, aber am Ende hats geklappt. Gibt auch eine Liste im Lexikon, wie die Punkte berechnet werden.

    Ok, nice to know.


    However, the problem with my mod is, that I'm calling that function in addModifier in runFn and in this mod thread game==false, so game.interface is not available.

    Maybe I need to combine that with the new GameScript, but dont know how yet.

    this worked in TPF1.

    I dont know how to get it working in TPF2.