From fa7138f907361d8a2575ba576f5b53132b38ec45 Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Wed, 8 May 2013 20:11:38 +0100 Subject: [PATCH] [Fix] Couple bugs with saving. --- src/land.c | 2 ++ src/player.c | 10 +++++++--- src/save.c | 23 +++++++++++++++++++---- src/xml.h | 4 ++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/land.c b/src/land.c index d0c3fba..6cc167e 100644 --- a/src/land.c +++ b/src/land.c @@ -8,6 +8,7 @@ #include "hook.h" #include "mission.h" #include "ltime.h" +#include "save.h" #include "land.h" // Global/main window. @@ -969,6 +970,7 @@ void land(Planet* p) { // TODO: mission check. visited(VISITED_LAND); } + save_all(); } // Takeoff from the planet. diff --git a/src/player.c b/src/player.c index 86db909..5e5c483 100644 --- a/src/player.c +++ b/src/player.c @@ -1467,19 +1467,23 @@ static int player_saveShip(xmlTextWriterPtr writer, Pilot* ship, char* loc) { xmlw_attr(writer, "name", ship->name); xmlw_elem(writer, "shipname", ship->ship->name); - xmlw_elem(writer, "location", loc); + if(loc != NULL) xmlw_elem(writer, "location", loc); // Save the outfits. xmlw_startElem(writer, "outfits"); for(i = 0; i < ship->noutfits; i++) { - xmlw_elem(writer, "outfit", ship->outfits[i].outfit->name); + xmlw_startElem(writer, "outfit"); + xmlw_attr(writer, "quantity", "%d", ship->outfits[i].quantity); + xmlw_str(writer, ship->outfits[i].outfit->name); + + xmlw_endElem(writer); // Outfit. } xmlw_endElem(writer); // Outfits. // Save the commodities. xmlw_startElem(writer, "commodities"); - for(i = 0; i < ship->noutfits; i++) { + for(i = 0; i < ship->ncommodities; i++) { xmlw_elem(writer, "outfit", ship->commodities[i].commodity->name); xmlw_attr(writer, "quantity", "%d", ship->commodities[i].quantity); if(ship->commodities[i].id > 0) diff --git a/src/save.c b/src/save.c index cc4bd5d..d76f62c 100644 --- a/src/save.c +++ b/src/save.c @@ -6,6 +6,16 @@ // Externs. extern int player_save(xmlTextWriterPtr writer); extern int missions_save(xmlTextWriterPtr writer); +// Static. +static int save_data(xmlTextWriterPtr writer); + +static int save_data(xmlTextWriterPtr writer) { + // The data itself. + if(player_save(writer) < 0) return -1; + if(missions_save(writer) < 0) return -1; + + return 0; +} int save_all(void) { char* file; @@ -19,17 +29,22 @@ int save_all(void) { } xmlw_start(writer); + xmlw_startElem(writer, "lephisto_save"); - // The data itself. - player_save(writer); - missions_save(writer); + if(save_data(writer) < 0) { + ERR("Trying to save game data"); + xmlFreeTextWriter(writer); + xmlFreeDoc(doc); + return -1; + } + xmlw_endElem(writer); // lephisto_save. xmlw_done(writer); file = "test.xml"; xmlFreeTextWriter(writer); - xmlSaveFileEnc(file, doc, "UTF-8"); + //xmlSaveFileEnc(file, doc, "UTF-8"); xmlFreeDoc(doc); return 0; diff --git a/src/xml.h b/src/xml.h index 25ed913..dda3e05 100644 --- a/src/xml.h +++ b/src/xml.h @@ -49,6 +49,10 @@ if(xmlTextWriterWriteFormatAttribute(w, (xmlChar*)str, ## val) < 0) { \ ERR("xmlw: Unable to write element attribute"); return -1; } +#define xmlw_str(w, str, val...) \ + if(xmlTextWriterWriteFormatString(w, str, ## val) < 0) { \ + ERR("xmlw: Unable to write element data"); return -1; } + // Document level. #define xmlw_start(w) \ if(xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) { \