Frage zum Filtern von Modellen * GELÖST *

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


  • Gerade versuche ich, ein paar UG-Modelle aus dem Spiel herauszunehmen.


    Der Plan wäre, alle westlichen KI-Fahrzeuge je nach deren Betriebszeitraum entweder schon 1948 verschwinden oder sie erst nach 1990 auf die Straßen kommen zu lassen. Mein Ansatz dazu ist bisher, nach Dateinamen vorzugehen und den Modellen, die das brauchen, neue "yearFrom" und "yearTo" zu verpassen. Die andere Möglichkeit, die UG-Modelle komplett rauszuschießen, fände ich weniger elegant - sie können ja gerne nach 1990 wieder aktiv werden.


    Der Erfolg ist aber überschaubar, das Spiel wirft zwar keinen Fehler aus, aber läßt sich dadurch in der Fahrzeugwahl nicht beeindrucken. Die Käfer tauchen nach wie vor auf, auch wenn man das Spiel mal eine Weile laufen läßt, um vorher entstandene Modelle "durchspülen" zu lassen.


    Wo ist hier mein Denkfehler? Ich danke für jede Hilfe :)

  • Nachtrag: Prinzipiell ist der Skript funktionsfähig - er findet einfach nur die Strings in den Dateinamen nicht. Die letzte Version benutzt die relativ einmalige Kombination von yearFrom und yearTo zur Identifikation der Modelle, und schon sind die auszusortierenden Fahrzeuge weg.


    Das ist aber nur die zweitbeste Lösung, weil es durchaus sein kann, daß auch eventuelle Modfahrzeuge dieselben Zeitstempel aufweisen und von dem Skript irrtümlich erfaßt werden.


    Weitere Tests sind nötig...

  • Probiers mal so:

    Lua
      if not string.find(fileName, "beetle") == false then
        if data.metadata.car then
        print("TEST -- FOUND :",fileName)
        debugPrint(data.metadata)
        else
        print("car nicht gefunden")

    mit "false" statt nil bekomme ich das :


    Soundfiles für Feuerwehr / Rettungsdienst / Polizei für AT ,GB , NL, BE, SE gesucht.
    Sound files for fire brigade / rescue service / police for AT, GB, NL, BE, SE wanted.
    Geluidsbestanden voor brandweer / reddingsdienst / politie voor AT, GB, NL, BE, SE gezocht.

    Gruß
    KoA

  • So löse ich solche Aufgaben:

    Auch ein alter Fuchs schaut gern ein Huhn, selbst wenn er's nicht mehr Reißen kann. ^^

    163393-cpuz-ryzen9-5900-png

  • Danke euch beiden für die Lösungen. EAT, dein Code gefällt mir gut, denn er ist knapp und elegant (und obwohl ich ihn ungefähr zu verstehen glaube, ist er jenseits dessen, was ich selbst in LUA zustande brächte). Aber ich werde bei der längeren, umständlicheren Version mit einzelnen IF... THEN-Abfragen bleiben. Sie erlaubt, den westlichen Fahrzeugen nur die Ära 1950-1989 aus ihrem individuellen Verfügbarkeitszeitraum auszustanzen und sie trotzdem außerhalb dieses Zeitrahmens historisch passend auf die Straßen zu schicken anstelle sie komplett verschwinden zu lassen.


    Und das funktioniert jetzt sehr gut :)

  • Das wäre auch mit den 20 Zeilen von EAT1963 code problemlos möglich.


    Es muss da ja nicht 1849 stehen:

    Code
        data.metadata.availability.yearFrom = 1849
        data.metadata.availability.yearTo = 1849

    Einfach die table mit den Fahrzeugen füllen die betroffen sind, in den metadata 1989/2020 eingeben und fertig.

    Code
    localfiles = {
    "/vehicle/car/beetle_1948.mdl",
    }


  • So einfach ist das leider nicht. Es geht mir darum, das Vanillaspiel so weit wie möglich laufen zu lassen und nur während der etwa 40 Jahre, die die DDR historisch existierte, die unpassenden Fahrzeuge auszublenden. Bis in die 1960er oder so gab es bestimmt auch noch Vorkriegsfahrzeuge, nach 1989 kamen dann schnell westliche Modelle dazu.

    Der kollektive Ansatz mit den eigentlich sehr gelungenen Zeilen ergäbe für alle vom Skript bearbeiteten Modelle denselben Zeitraum, und das geht nicht. Es gibt unter den Vanillamodellen den alten Pickup, den ich nur bis 1949 haben möchte, den Traction Avant, der auch in den 1930ern aufkommt und irgendwann nach 1949 verschwinden muß, einige Fahrzeuge, die anstelle von 1965 bis 199x nur von 1990 bis 199x erscheinen sollen, den Golf 1 von 1980 1989 bis in alle Ewigkeit, und so weiter.

  • Ah das stimmt natürlich, wenn du jedem Fahrzeug einen individuellen Zeitraum zuweisen willst geht das mit der table so nicht.


    Da kannste höchstens die zusammenfassen die kollektiv den selben Zeitraum haben sollen.

  • Nun, eine Lösung Fahrzeuge von z.B. 1949...1989 auszublenden kenne ich leider so nicht.

    Einen Code die Verfügbarkeit individuell festzulegen allerdings schon:

    Btw., ich würde IMMER nach dem Ende des Dateinamen suchen, wie in meinem Beispiel, da hier eine gewisse Eindeutigkeit gewährleistet wird.

    Suche ich z.B. nur nach "corolla" so kann es z.B. auch eine Datei "dh-106_corolla_new.mdl" geben, falls das jemand in einem Mod so benannt hat. ;)


    Und noch eine Variante, welche die Möglichkeit gleicher Einstellungen ür mehrere Modelle berücksichtigt:

    Auch ein alter Fuchs schaut gern ein Huhn, selbst wenn er's nicht mehr Reißen kann. ^^

    163393-cpuz-ryzen9-5900-png

    Einmal editiert, zuletzt von EAT1963 () aus folgendem Grund: Weitere Code-Variante hinzugefügt.

  • Ja, aber wie häufig war der? Ich habe das immer so verstanden, daß der nur vereinzelt mal über Genex ins Land kam und im Straßenbild eher selten war.


    Leider ist die KFZ-Auswahl im Spiel relativ unflexibel. Das scheint so zu funktionieren:


    1. Das Spiel findet einen Zombie, der ein Auto braucht.

    2. Es sucht aus der Liste der zum Spieldatum verfügbaren KI-Autos eine .mdl aus. Das passiert wie beim Lotto rein nach Zufall ohne gewichtete Wahrscheinlichkeiten.

    3. Das gewählte Modell bekommt eine der ihm zur Verfügung stehenden Farben.

    4. Der Zombie macht sich auf den Weg.


    Punkt 2 ist hier das Problem. Wenn der Golf 1 mit derselben Wahrscheinlichkeit auftaucht wie ein Trabant oder Wartburg, dann ist er viel zu häufig im Spiel zu sehen. Elegant wäre es, wenn man in der .mdl einen Wahrscheinlichkeitsmodifikator einbauen könnte; die brutale Methode wäre, dem Spiel einfach 5 oder 10 T601-mdls, drei oder vier Wartburgs und nur einen Golf 1 zur zufälligen Auswahl anzubieten. Elegant ist das nicht und es kollidiert auch unter Umständen mit anderen Mods. Deswegen halte ich es für geschickter, den Golf 1 ganz zu streichen und erst ab 1990 freizugeben.

  • Hallo

    Ja, aber wie häufig war der? Ich habe das immer so verstanden, daß der nur vereinzelt mal über Genex ins Land kam und im Straßenbild eher selten war.

    Nee, der wurde gegen eine Bezahlung mit Werkzeugmaschinen und Zeugs direkt importiert. Wenn auch (laut Wikipedia-Eintrag) nur 10000 Fahrzeuge. Zusätzlich gab es ihn, wie du schon schriebst über Genex. In Berlin war der keineswegs "vereinzelt" zu sehen, draußen "in der Republik" wird dieses Adjektiv aber zutreffend.

    Mit diesem Argument kann man die Häufigkeit des Auftretens aller Fahrzeuge in Zweifel ziehen. Ist der Wartburg in Sachen Stückzahl im Spiel nicht auch überrepräsentiert, wenn es im Spiel (in etwa) soviele Wartburgs wie Trabants gibt oder auch Ladas (oder der hier), Skodas, Wolgas oder Moskwitschs (und was es da sonst noch gab (bei Verfügbarkeit eines Mods))? Oder -ganz ohne DDR-Bezug - sind im Spiel hochpreisige KFZ gegenüber den "Brot-Und-Butter"-Fahrzeugen wie dem VW Typ 1 (Käfer) nicht auch zu oft zu sehen? Und wenn ja, wie schlimm ist das, nur, weil es die Realität nicht (exakt) abbildet?


    Aber ja, eine Angabe für Häufigkeiten wäre wohl schön. Einen Wahrscheinlichkeitsmodifikator zu implementieren, halte ich aber für recht komplex. Der müsste, wenn überall eingebaut, bei jeder Auswahl alle vorhandenen KFZ zählen und verfügbaren KFZ abgleichen, um einen Fahrzeugtyp auszuwählen. Vielleicht könnte man die Wahrscheinlichkeit über den Preis regeln.


    Tschö, Auge

    2 Mal editiert, zuletzt von Auge ()

  • Ich stimme dir hier zu. Die statistische Verteilung der KI-Fahrzeuge im Spiel ist nicht realitätsgetreu; das habe ich exakt so gemeint wie es da oben stand und wie du es aufgefaßt hast - daß einige Modelle in der Realität häufiger auftreten als andere und daß das Spiel das nicht abbildet, ist unstrittig.


    Die Frage, wie schlimm das ist, ist dem nachgereiht. Natürlich, man kann damit leben, genau wie mit den englischsprachigen Schildern an allen Häusern und anderen Dingen, die vielleicht in der Realität nicht ganz genau so wie im Spiel anzutreffen sind - aber man kann auch einmal überlegen, ob auch das einem Mod zugänglich ist :) Daß das für das Spiel schwer abzubilden ist, um so mehr noch, wenn auch noch Mods wie die vorzüglichen KI-Fahrzeuge von dview dazu kommen, ist klar: jedes Modell, das in ein vorher ausgewogenes System eingebracht wird, verändert die Wahrscheinlichkeiten. Deswegen ist die Idee, die Wahrscheinlichkeit über den Preis zu regeln, gar nicht schlecht; die automatische Berechnung über "price = -1" in der .mdl ist hier aber eine Hürde.


    Das werde ich noch ein wenig überdenken müssen, den idealen Ansatz habe ich hier noch nicht gefunden.

  • Anekdote: Ein Bekannter wollte sich ein paar Jahre vor dem Ende einen Import-Mazda zulegen. Den hat er auch bekommen, musst dazu aber schummeln, dass er in Berlin wohnhaft wäre. Denn die gab es nur dort "zur Verschönerung des Hauptstadtbildes", wie man ihm wohl gesagt hatte.

  • Hallo

    ... die Idee, die Wahrscheinlichkeit über den Preis zu regeln, [ist] gar nicht schlecht; die automatische Berechnung über "price = -1" in der .mdl ist hier aber eine Hürde

    KI-Fahrzeuge haben einen automatisch zugewiesenen Preis? Oder ist der Preis mit -1 === false einfach nur ausgeschaltet?


    Tschö, Auge

  • Wenns schon darum geht, den kürzesten Code zu haben, hab ich noch ein Vorschlag ;)



    EAT1963 das require "stringutil" (stringutils finde ich nicht) braucht es nicht - es wird automatisch von der init.lua geladen.

  • Hi, mein Lieber.

    Wenns schon darum geht, den kürzesten Code zu haben

    Eigentlich ging es um Hilfestellung um ein Problem effizient zu lösen.

    if fileName:ends(carFName) then

    Bist du dir sicher, dass das so funktioniert?

    Evtl. irre ich mich, aber die Funktion ends ist, meines Wissens nach, nicht Bestandteil einer Instanz.


    stringutil lade ich immer, da ich mich hier nicht auf Andere, auch nicht auf UG, verlassen möchte.


    Ansonsten ist den Code äusserst effizient... :thumbup:

    Auch ein alter Fuchs schaut gern ein Huhn, selbst wenn er's nicht mehr Reißen kann. ^^

    163393-cpuz-ryzen9-5900-png

  • Bevor das hier noch eskaliert - ich danke euch allen für die Hilfestellung. Alleine schon durchs Lesen eures Codes und den Versuch, den nachzuvollziehen lernt man sehr viel :) Parallel dazu habe ich hier die Dokumentation von Lua zum Nachlesen offen - an den "for...do"-Schleifen und ipairs arbeite ich noch ein wenig, die leuchten mir noch nicht ganz ein. Das Prinzip ist zwar dasselbe wie beim alten Quickbasic, aber die Umsetzung ist es lange nicht und es bietet in Kombination mit den Tables (die sich auch von den Feldern im Quickbasic etwas unterscheiden) offensichtlich viel mehr Möglichkeiten.


    Mal sehen, vielleicht verstehe ich das ja irgendwann :)

BlueBrixx