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


  • Eine Anmerkung zum Thema Effizienz:


    Wird die Tabelle länger, wird auch der Overhead für ein Regex/pattern relativ immer kleiner.


    Sprich man extrahiert erst mal den Dateinamen und schaut ob da überhaupt vehicle/car mit dran ist. Wenn nicht, braucht man sich nicht mehr durch die Liste arbeiten.


    Dann kann man den Dateinamen als Key in der Tabelle nehmen. (Intern erzeugt dann lua einen hashkey des strings), dann braucht man gar kein pairs schleife mehr. (und das ständig vehicle/car/ am Anfang des Keys braucht man dann auch nicht mehr)


    -edit- Beispiel (ungetestet)

    Code
    local sfilename = string.match(fileName, "vehicle/car/(.+%.mdl)$")
    if (sfilename == nil) then
       -- return early here, no car
       return data
    end
    local mynewdata = mytable{sfilename]
    if (mynewdata == nil) then
       return data
    end
    -- mynewdata nehmen um  data zu ändern...
  • Ja habe ich mir auch gedacht, aber da die Anzahl der Fahrzeuge begrenzt ist, wäre das wohl Overengineering.


    Bist du dir sicher, dass das so funktioniert?

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

    Klar, gib einfach mal ("qwer"):ends("r") in die Konsole ein. strings haben nämlich auch eine metatable die auf die globale variable string verweist. (ich glaube von Natur aus?)

    Ug fügt der über stringutil halt ein paar Funktionen hinzu.


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

    Du musst dich aber auf die init.lua verlassen, sonst funktioniert nämlich gar nichts mehr. Wenn die nicht geladen würde, würde es vorher eh schon crashen.


    an den "for...do"-Schleifen und ipairs arbeite ich noch ein wenig, die leuchten mir noch nicht ganz ein

    Der einzige Grund den ich für ipairs sehe ist, wenn man sichergehen will, dass man beim Iterieren einer Tabelle, die zusätzlich zu normalen Listenindizes (integer 1,2,3...) auch andere keys hat, nur über die Zahlen iteriert. Ansonsten macht pairs dasselbe.

  • Ich muß noch einmal blöde nachfragen.


    Das hier ist die momentane mod.lua nach ein wenig Bastelei und nach der Lektüre eurer Skripte. Ich habe eine weitere Abfrage eingebaut, um den Skript tatsächlich nur auf Fahrzeuge anbeißen zu lassen, ohne diese hat er auch verschiedene andere .mdl gefunden und einen Fehler fabriziert. Alles, was colorConfig und Availability in der .mdl hat, muß ein KI-Fahrzeug sein. Das Endjahr 100000 ist ausgenommen, um die "missing_vehicle.mdl" zu ignorieren. Der Skript schießt jetzt das Spiel nicht mehr ab - aber er ist auch den oben aufgelisteten Fahrzeugen völlig egal. Sie tauchen nach wie vor im Spiel auf.


    Darf ich ein weiteres Mal um Erklärung bitten, wo hier mein Fehler ist?

  • Statt

    Code
     if data.metadata.colorConfig and data.metadata.availability then

    versuche es mit

    Code
     if data.metadata.colorConfig ~= nil and data.metadata.availability ~= nil then

    weil das ja keine definierten Boolean sind.

  • if data.metadata.colorConfig ~= nil and data.metadata.availability ~= nil then

    Das ist so n icht nötig, da z.B. if data.metadata.colorConfig false zurückgibt, wenn data.metadata.colorConfig nil ist. Somit wäre die Bedingng nicht erfüllt und es geht nicht wieter.


    So sollte es funktionieren:

    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 ()

  • Danke für die wiederholte Hilfe, EAT1963. Ein kleines Problem habe ich aber immer noch: den Skript habe ich ein paar Mal ausprobiert, beim Laden hängt sich leider verläßlich das Spiel bei 2% auf. Die letzte Zeile in der stdout.txt ist "adding archive res/textures/ui/ui.zip", danach kommt nichts mehr.


    Ich habe auch einmal die brutale Methode mit dem alten, uneleganten Skript wieder angetestet:


    ..und den ein wenig ausgebaut, um auch die Legacyfahrzeuge mit zu erwischen, die das Spiel sonst immer wieder dazwischenmogelt. Das funktioniert, die erbetenen Ausdrucke stehen alle wunderschön am richtigen Ort in der stdout. Aber nach ein paar Sekunden bis Minuten kommt verläßlich, sobald eine Stadt im Blickfeld ist, die kleine Meldung "An error occurred" und die stdout.txt beklagt sich über "Heap corruption". An den Modellen sollte das nicht liegen: wenn probeweise einmal eine einfache, nicht filternde mod.lua gewählt wird, rennt das Spiel ohne jedes Problem. Und ob das jetzt daran liegt, daß nur eine Stadt mit Zombies gezeigt wird oder daß die Fahrzeuge zu sehen sind, weiß ich noch nicht.


    Ich muß im Moment davon ausgehen, daß das Spiel aus irgendeinem Grund auf das Ausfiltern von Vanilla-KI-Fahrzeugen sehr ungnädig reagiert, aber habe bis jetzt noch keine Ahnung, wieso das so ist. Kann es sein, daß der Overflow kommt, wenn das Spiel einem Zombie ein Auto umhängen möchte, aber das gewünschte (Vanilla-)-Modell nicht zur Verfügung steht?


    Für heute ist mal Feierabend, das wird aber weiter erforscht.

  • Ein kleines Problem habe ich aber immer noch: den Skript habe ich ein paar Mal ausprobiert, beim Laden hängt sich leider verläßlich das Spiel bei 2% auf.

    Ok, das Script hatte ich nicht getestet. ;(

    Ich muß im Moment davon ausgehen, daß das Spiel aus irgendeinem Grund auf das Ausfiltern von Vanilla-KI-Fahrzeugen sehr ungnädig reagiert

    Nicht wirklich. ;)


    Beim Testen konnte ich einen fehler im Script feststellen (ein Komma zuviel, ja ne...).


    Anbei die bereinigte lua.

    Dateien

    • dh-106_mod.lua

      (2,21 kB, 77 Mal heruntergeladen, zuletzt: )

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

    163393-cpuz-ryzen9-5900-png

  • Kann es sein, daß der Overflow kommt, wenn das Spiel einem Zombie ein Auto umhängen möchte, aber das gewünschte (Vanilla-)-Modell nicht zur Verfügung steht?

    Es kann sein dass es problematisch ist, die Autos bei einem bestehenden Spiel zu ändern.

    Hast du es mal bei einem neuen Spiel versucht?


    Die Personen haben nämlich bereits eine fest zugewiesene Modell ID von ihrem Fahrzeug und ihrem Character.

  • Ein paar graue Haare sind entstanden, aber es funktioniert jetzt :) ich danke euch allen für die Unterstützung.



    Wir sehen ein paar Trabanten, drei Versionen des Wartburg 311 und auch zwei IFA F9 - aber keine Fahrzeuge aus dem NSW mehr, das Ziel ist also erreicht. Als nächstes kommen also noch ein paar weitere Modelle dazu.


    Die Stapelkorruption ist auch geklärt. Sie lag daran, daß mir bei der Assetifizierung des Vanillatrabanten ein Fehler unterlaufen ist: wenn das Spiel Assets als KI-Fahrzeuge zu nehmen versucht, dann ist dieser Fehler offensichtlich die Konsequenz.

  • DH-106

    Hat den Titel des Themas von „Frage zum Filtern von Modellen“ zu „Frage zum Filtern von Modellen * GELÖST *“ geändert.
  • Eine kurze Frage zum Thema: "Legacyfahrzeuge".

    Ich komm da nicht schlau. Kann mir bitte jemand den Sinn und Zweck dieser Mod kurz erklären?

    Ich starte gerade eine neue Map und möchte diese Mod deaktivieren. Welche Auswirkungen hat das?


    Vielen Dank und lieben Gruss, Adrian

  • Legacyfahrzeuge sind die alten Modelle, welche vor dem letzten Update im Spiel waren.

    Die Auswirkungen sind davon Abhängig was für Mods installiert sind, es gibt einige Mods welche Meshes von den alten Vanilla Fahrzeugen verwenden

BlueBrixx