Game Script => Save function, Unerklärliches verhalten

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 hab ein kleines, mir nicht verständliches Problem. Ich habe eine Tabelle die ich vom Engine State ins Savegame / GUI State kopieren möchte. Bisher hat das immer geklappt, am Wochenende hab ich jetzt meine Mod von einer anderen getrennt und ein paar Dinge von Grund auf neu gestaltet. Ich habe 2 separate Tabellen:

    Code
    local engineState = {
        LastLinesRefreshMonth = 0,
        }
    
    local guiState = {
        updList =0,
    }

    An sich kein Problem wenn ich die Tabellen speichere klappt das.

    Code
    save = function ()
            -- save data to shareState
            return {engineState = engineState, guiState = guiState}
        end,

    Füge ich jetzt allerdings meine Tabelle hinzu kommt die nachfolgende Meldung.

    Code
    save = function ()
            -- save data to shareState
            if not engineState["lineInfo"] then engineState.lineInfo = { } end
            if lineInfo then
                engineState["lineInfo"] = lineInfo
            end
            return {engineState = engineState, guiState = guiState}
        end,

    Dabei ist unerheblich ob ich die Tabelle jetzt erst im Save der übergeordneten Tabelle hinzufüge oder das beim erstellen direkt in den engineState reinschreib. Es kommt jedes mal die folgende Fehlermeldung.

    Assertion `m_data->gameStates[1]->ScriptSave() == m_data->gameStates[0]->ScriptSave()' failed.


    Interessant ist, wenn ich mir die Tabelle via debugPrint ausgeben lasse und aus der stdout in die savegame.lua kopiere ( oder einfach den Eintrag .lineInfo ={ } manuell erstelle) läd & speichert er die neuen Daten einwandfrei.


    Hat da jemand ne Idee woran das liegen kann?


    ...

    Während ich das hier schreibe, hat sich das Problem gelöst (vorerst). Savegame einmal ohne mod geladen und gespeichert (um zu schauen was im anderen mod gespeichert wird) und wieder zum aktuellen Projekt gewechselt. Jetzt klappts einwandfrei. Auch ein neues Spiel angefangen => klappt jetzt. Ging am WE nicht.

  • Das passiert, wenn die Daten, die per Save übergeben werden, aus Script und Gui Thread nicht übereinstimmen.

    Sehr nervig und eigentlich unnötig. Ich hatte deswegen auch schonmal Probleme.

    Daher hier einfach mal mein Problem und auch ein generelles Feedback zum Gamescript-System, was ich an UG schrieb:

    Aktuell habe ich es nur so lösen können, das state.settings = loadState.settings immer auszuführen, aber das Loggen nur im Script Thread ausführen.

  • ok "gut" zu wissen, dass andere das Problem auch haben. Hast du eine Antwort bekommen?
    Werde das mal bei mir beobachten.

    Im load Teil habe ich bei mir If api.gui then eingebaut. Der Engine Thread hat da ja keinen Zugriff drauf und führt den Teil also nicht aus.
    Finde es äusserst ungünstig dass sich gui & engine die load function teilen.

BlueBrixx