diff --git a/src/lua_script.c b/src/lua_script.c index b0b6eeec7..8f769dbee 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -1443,8 +1443,11 @@ static void ArchiveTables(void) { // Write key e = ArchiveValue(TABLESINDEX, -2); // key should be either a number or a string, ArchiveValue can handle this. - if (e == 2) // invalid key type (function, thread, lightuserdata, or anything we don't recognise) + if (e == 1) + n++; // the table contained a new table we'll have to archive. :( + else if (e == 2) // invalid key type (function, thread, lightuserdata, or anything we don't recognise) CONS_Alert(CONS_ERROR, "Index '%s' (%s) of table %d could not be archived!\n", lua_tostring(gL, -2), luaL_typename(gL, -2), i); + // Write value e = ArchiveValue(TABLESINDEX, -1); if (e == 1) @@ -1659,10 +1662,15 @@ static void UnArchiveTables(void) lua_rawgeti(gL, TABLESINDEX, i); while (true) { - if (UnArchiveValue(TABLESINDEX) == 1) // read key + UINT8 e = UnArchiveValue(TABLESINDEX); // read key + if (e == 1) // End of table break; + else if (e == 2) // Key contains a new table + n++; + if (UnArchiveValue(TABLESINDEX) == 2) // read value n++; + if (lua_isnil(gL, -2)) // if key is nil (if a function etc was accidentally saved) { CONS_Alert(CONS_ERROR, "A nil key in table %d was found! (Invalid key type or corrupted save?)\n", i);