Probleme mit der townbuildingutil.lua

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


  • Hallo zusammen,

    Ich habe ein Problem beim laden meiner Spielstände, die ich mit KI spiele.

    Das Problem begann am Sonnabend immer mit dergleichen Fehlermeldung.


    Ich habe auch mehrere Alternativspielstände geladen, doch nach einiger Zeit stürzte das Spiel immer wieder mit obriger Fehlermeldung ab.
    Ein Überprüfen der Spieldateien auf Steam brachte keinerlei Änderung.

    Da ich die TownbuildingFilter verwende habe ich mich diesbezüglich an VacuumTube gewand, da ich zuerst ein Fehler in seiner Mod vermutete, dies scheint jedoch nicht der Fall zu sein.

    Die letzte Stdout von Samstag hab ich beigefügt.


    Ich hoffe auf eure Hilfe.

    Lg Tom

  • Das Problem ist auch nicht die Townbuilding.lua an sich, sondern das, was sie zu tun versucht und nicht schafft.


    Es scheint, daß in der Datei  res/construction/construction.zip/building/era_b/res_1_1x2_02.con eine Kapazität nicht definiert ist. Daß das ein globales Problem ist, glaube ich nicht, denn dann würde das Spiel irgendwo im Verzeichnis /era_a/ schon zu quengeln anfangen - immerhin ist das alphabetisch früher.


    Schau dir mal an, ob es die Datei gibt und ob sie im Originalzustand ist.

  • Das hat leider nicht geklappt.


    Und dazu die neue Stdout.


    Ich muss dazu nochmal sagen, davor nie an diesen Dateien Änderungen vorgenommen zu haben, auch wie ich schon schrieb findet Steam keine Probleme mit den installierten Dateien.

    Lg Tom

  • Das capacity field in den params wird vom Spiel der updateFn Funktion bei dem Update eines Gebäudes übergeben. D.h. die Infos sind in dem Spielstand enthalten. Die capacity ist nämlich variabel und nicht für ein Gebäude konstant. Es ist sehr komisch, dass das nil ist.


    Ich habe nichts auffälliges in der Modliste gefunden? War vorher eine Mod in diesem Bereich aktiv, die kürzlich entfernt wurde?


    Population Faktor ist eine der Mods, die die updateFn von Stadtgebäuden modifizieren. Darüber könnte man das/die problematischen Gebäude finden und abreißen oder den Fehler anders umgehen.

  • Hallo allerseits,

    Mir hat es keine ruhe gelassen, das ich nicht mehr weiterspielen konnte, also hab ich einen Spielstand 1 1/2 Wochen von vor dem Crash gestartet und diesen durchlaufen lassen ohne bauen ect.

    Dieser läuft bisher perfekt und es kommt kein Absturz.

    Alternativ hab ich einen Spielstand gestartet der 5 Tage vor dem Crash lag, dieser stürzte nach einiger Zeit immer wieder ab, auch mit oben beschriebener Fehlermeldung.

    Der unterschied zwischen diesen Spielständen ist eine winzige eingefügte Stadt.
    Da ich mit feststehendem Datum spiele kann ich nicht genau sagen, wie und ob es immer zur gleichen Zeit auftritt.


    Der Fehler ist weiter unbekannt.

    Lg Tom

  • Tom hat mir den Spielstand zur Analyse geschickt. Ich habe mal ein paar prints eingefügt, um zu schauen was falsch läuft.


    Ich kann es kaum glauben, was hier passiert:


    Normalerweise sieht ein Update eines Townbuildings so aus:


    Wenn dann der Fehler auftritt, weil das "capacity" feld der params fehlt, sieht es so aus:

    Code
    TownBuilding Update:  "res/construction/building/era_b/res_1_1x2_02.con"
    {
      capacidy = 1,
      cargoTypes = { },
      depth = 20,
      parcelFace = {


    Ja richtig, da steht "capacidy"


    Aber das komische ist die Frage, wann das auftritt und ob Tom offenbar der erste ist bei dem das auffällt. Eventuell kam der Bug durch das letzte Update rein. Keine Ahnung ob UG das bekannt ist.

  • Also ich hab mal die Analyse der Binärdateien für Linux Build 35915 und 35922 angeschaut, da ist kein capacidy drin.


    Mal Mod Dateien durchgeschaut, oder Mods die Konstruktionen verschieben können?


    C++ Code macht ungefähr das hier in BuildingTypeRep::ConstructProposal, und parcel_util::anonymous::Build, da kommt dann noch parcelFace später dazu.

    Also weiteren Code hab ich nicht für Stadtgebäude gefunden.


    "capacity" ist eine char Konstante, die wird auch beim Kompilieren zusammengefasst und zum Beispiel für die Kapazität von Fahrzeugen genutzt.


    Mir kann also nur einfallen, das auf der Karte eine (Industrie)Konstruktion erstellt wurde, mit der Nutzung der Gebäude con Datei und falsche Daten.

    Sonst würde jedes Bauen eines Stadtgebäudes einen Fehler triggern.


    Ich hab den Code ziemlich auseinander genommen um echte Stadthäuser zu bauen, aber die Parcels wollen nicht... (daher hat der Code da auch sehr viele von mir vergebene Namen)


    -edit-

    Du kannst ja mal jede Konstruktion der Karte per lua testen ob du irgendwo capacidy drin hast

  • Hier ist der Übeltäter


    frage mich trotzdem, wie sowas passieren kann... da muss ja eigentlich mal eine Mod in der Richtung aktiv gewesen sein


    Gebäude wurde vor ca 16h gebaut

  • Da es ja ein echtes Townbuilding ist, da gibt es in TPF2 eigentlich kein Möglichkeit dieses zu triggern, die Daten kommen von C++ Code Seite. Stadterweiterungen laufen im eigene Thread.


    Mir fällt da eigentlich nur ein Script Mod ein, das während der Verschiebens/Umbau von Straßen das Proposal der Konstruktion ändert. Wobei man ja da auf die Parcels auch keinen Einfluss hat.


    Da ja jetzt die Position bekannt ist. Wurde da irgendwas in der Nähe geändert in der letzten (Spiel)Zeit?



    Es kann dann ggf. auch ein Arbeitsspeicherfehler sein, der sich beim erstellen der Daten für dieses Gebäude gezeigt hat (bit flip),

    oder irgendwo ein fehlerhafter Pointer und Daten da geschrieben wurden. Nur so ein Pointerfehler verursacht in der Regel viel mehr Schaden im Speicher als ein Bit.