+ Antworten
Ergebnis 1 bis 12 von 12
  1. #1
    Holzfäller Avatar von Noigi
    Registriert seit
    31.12.2007
    Beiträge
    118

    Frage Von Riesentables und Speicherbarkeit

    Ich arbeite zurzeit an der ItM-Version 2, zu deren Code unter Anderem ein gut 2000 Zeilen großer globaler Table gehört.
    Nun habe ich das Phänomen festgestellt, dass sich Karten mit diesem ItM-Skript zwar speichern lassen, beim Laden aber einen Spielabsturz hervorrufen - das Phänomen tritt NICHT auf, wenn ich den dicken table auskommentiere.

    Verdacht also: Das Spiel verträgt diese Datenmengen nicht.
    Hat jemand Ahnung in dem Bereich?
    Ich hoffe ja, dass sich das Problem durch zB Aufsplitten in mehrere tables lösen lässt, sonst muss ich wohl irgendwie abspecken.

    Danke schonmal


    Nachtrag: Die kritische Masse scheint bei ~2400 Zeilen zu liegen (am konkreten Inhalt liegt es definitiv nicht).
    Ich versuch jetzt mal eine Aufteilung in mehrere tables.
    Geändert von Noigi (13.10.2009 um 13:12 Uhr)

  2. #2
    Schwertkämpfer Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,439

    Standard AW: Von Riesentables und Speicherbarkeit

    Bindest Du das gesamte Script nicht mit "TinyScript" ein ?
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  3. #3
    Holzfäller Avatar von Noigi
    Registriert seit
    31.12.2007
    Beiträge
    118

    Standard AW: Von Riesentables und Speicherbarkeit

    Zitat Zitat von trabbi Beitrag anzeigen
    Bindest Du das gesamte Script nicht mit "TinyScript" ein ?
    Im Moment wird alles über Script.Load importiert, sonst schon.
    Aber das Problem scheint nicht bei den reinen Kilobytes zu liegen; ich habe noch einige Mapskripte rumliegen, die größer sind als mein Gesamtpaket.
    Die Testkarte lässt sich problemlos spielen und der Riesentable lässt sich auch ansprechen, nur beim Speichern oder Laden geht da scheinbar etwas verloren.

    Stand der Dinge: Ich habe Teile aus dem table ausgegliedert, und Speichern & Laden funktioniert seitdem.
    Allerdings sind jetzt beim geladenen Spielstand im F1-menü die Buttons für Speichern, Laden und Neustarten "disabled". Schnellspeichern mit F6 führt wiederum zum Absturz.

  4. #4
    Schwertkämpfer Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,439

    Standard AW: Von Riesentables und Speicherbarkeit

    Da ist wohl Flodder gefragt.
    Der kennt sich ja mittlerweile besonders gut aus bei S5.
    Schreib ihn doch mal per Mail direkt an, denke, er ist nicht so oft hier
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  5. #5
    Holzfäller Avatar von Noigi
    Registriert seit
    31.12.2007
    Beiträge
    118

    Standard AW: Von Riesentables und Speicherbarkeit

    So, es liegt definitiv an dem/den table(s), nicht am Kilobyte-Aufkommen.
    Ich habe testweise den größten Teil-table auskommentiert und stattdessen aus einem anderen Mapskript zusätzliche Funktionen als Ballast in das Skript kopiert, so dass die gesamte Skriptgröße sogar noch über der Normalvariante liegt - und siehe da, alles funktioniert.

  6. #6
    Holzfäller Avatar von Noigi
    Registriert seit
    31.12.2007
    Beiträge
    118

    Standard AW: Von Riesentables und Speicherbarkeit

    Problem gelöst!
    Sämtliche tables werden nicht mehr in einer Initialisierungs-Funktion deklariert, sondern direkt im Skript. So klappt Speichern & Laden problemlos. Was dabei der wesentliche Unterschied ist, weiß wohl nur BlueByte...

    Zitat Zitat von trabbi Beitrag anzeigen
    Da ist wohl Flodder gefragt.
    Der kennt sich ja mittlerweile besonders gut aus bei S5.
    Schreib ihn doch mal per Mail direkt an, denke, er ist nicht so oft hier
    Jau, danke für den Tipp - hat sich ja zum Glück erledigt.

  7. #7
    Schwertkämpfer Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,439

    Standard AW: Von Riesentables und Speicherbarkeit

    Zitat Zitat von Noigi Beitrag anzeigen
    Problem gelöst!
    Sämtliche tables werden nicht mehr in einer Initialisierungs-Funktion deklariert, sondern direkt im Skript. So klappt Speichern & Laden problemlos. Was dabei der wesentliche Unterschied ist, weiß wohl nur BlueByte...
    Oder die Macher von Lua
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  8. #8
    Holzfäller Avatar von nevermind
    Registriert seit
    16.01.2005
    Beiträge
    123

    Standard AW: Von Riesentables und Speicherbarkeit

    Funktionen dürfen nur eine bestimmte Größe haben, sonst wird beim Laden irgendwo was kritisches überschrieben. Das Problem gab es früher schon mal (finde es nicht wieder) und wurde von Chromix aufgeklärt. Um zu große Funktionen zu entdecken hat er diese Funktion geschrieben, aufzurufen mit checkfuncsize(_G) in der FMA:

    Code:
    function checkfuncsize( t )
        table.foreach( t, function( k, v )
            if type(v) == "function" then
                local res, dmp = xpcall( function() return string.dump(v) end, function() end )
                if res and dmp then
                    local size = string.len( dmp )
                    if size > 16000 then
                        Message( k .. " -> " .. size )
                    end
                end
            end
            if type(v) == "table" and not tonumber(k) and v ~= _G then
                checkfuncsize( v )
            end
        end)
    end
    LUA_ERRSYNTAX: [string "?"]:1: `=' expected near `<eof>'
    www.siedler-maps.de | maps@siedler-maps.de

  9. #9
    Holzfäller Avatar von Noigi
    Registriert seit
    31.12.2007
    Beiträge
    118

    Standard AW: Von Riesentables und Speicherbarkeit

    Zitat Zitat von nevermind Beitrag anzeigen
    Funktionen dürfen nur eine bestimmte Größe haben, sonst wird beim Laden irgendwo was kritisches überschrieben. Das Problem gab es früher schon mal (finde es nicht wieder) und wurde von Chromix aufgeklärt. Um zu große Funktionen zu entdecken hat er diese Funktion geschrieben, aufzurufen mit checkfuncsize(_G) in der FMA:

    Code:
    function checkfuncsize( t )
        table.foreach( t, function( k, v )
            if type(v) == "function" then
                local res, dmp = xpcall( function() return string.dump(v) end, function() end )
                if res and dmp then
                    local size = string.len( dmp )
                    if size > 16000 then
                        Message( k .. " -> " .. size )
                    end
                end
            end
            if type(v) == "table" and not tonumber(k) and v ~= _G then
                checkfuncsize( v )
            end
        end)
    end


    Es ist ja doch alles schonmal dagewesen.

  10. #10
    Serf
    Registriert seit
    04.10.2007
    Beiträge
    78

    Standard AW: Von Riesentables und Speicherbarkeit

    Zitat Zitat von trabbi Beitrag anzeigen
    Oder die Macher von Lua
    Mit Lua hat das nichts zu tun, eher mit der S5 Speicherfunktion.

    Ich konnte mich als ich diesen Thread gelesen habe noch dunkel erinnern, dass da schon mal was mit großen Tables war, nur nicht mehr wo oder was.
    Gut, dass du es noch gefunden hast nevermind.

  11. #11
    Schwertkämpfer Avatar von trabbi
    Registriert seit
    09.03.2006
    Beiträge
    4,439

    Standard AW: Von Riesentables und Speicherbarkeit

    Zitat Zitat von Chromix Beitrag anzeigen
    Mit Lua hat das nichts zu tun, eher mit der S5 Speicherfunktion.

    Ich konnte mich als ich diesen Thread gelesen habe noch dunkel erinnern, dass da schon mal was mit großen Tables war, nur nicht mehr wo oder was.
    Gut, dass du es noch gefunden hast nevermind.
    Gedanklich beschäftigen wir uns ja auch schon mit "Die Siedler 7"; jedenfalls ich
    trabbi
    Was ist Theorie, - Wenns klappen soll und es klappt nie
    Was ist Praxis, - Frag nicht so dumm, wenns klappt und Du weißt nicht warum

  12. #12
    Planierer Avatar von Pirat92
    Registriert seit
    30.08.2009
    Ort
    Bremen
    Beiträge
    37

    Standard AW: Von Riesentables und Speicherbarkeit

    Mit Lua hat das nichts zu tun, eher mit der S5 Speicherfunktion
    Ja die Speicherfunktionnen können schon nerven (Automatische Savegames)

    @Noigi cool das du noch weiter am ITM code arbeitest

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein