Game Script => Save function, Unerklärliches verhalten

Willkommen in der Transport Fever Community

Welcome to the fan community of Transport Fever and Train Fever, the economic simulators of Urban Games. The community is free for you to share and inform yourself about the game. We cultivate a friendly and objective interaction with each other and our team will be happy to answer any questions you may have.

 

Registration and use is of course free for you.

 

We wish you a lot of fun and hope for active participation.

The Team of the 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
    1. local engineState = {
    2. LastLinesRefreshMonth = 0,
    3. }
    4. local guiState = {
    5. updList =0,
    6. }

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

    Code
    1. save = function ()
    2. -- save data to shareState
    3. return {engineState = engineState, guiState = guiState}
    4. end,

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

    Code
    1. save = function ()
    2. -- save data to shareState
    3. if not engineState["lineInfo"] then engineState.lineInfo = { } end
    4. if lineInfo then
    5. engineState["lineInfo"] = lineInfo
    6. end
    7. return {engineState = engineState, guiState = guiState}
    8. 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.