diff --git a/src/faction.c b/src/faction.c index a45a098..2ba1bcc 100644 --- a/src/faction.c +++ b/src/faction.c @@ -480,3 +480,45 @@ void factions_free(void) { nfactions = 0; } +int pfaction_save(xmlTextWriterPtr writer) { + int i; + + xmlw_startElem(writer, "factions"); + + // Player is faction 0. + for(i = 1; i < nfactions; i++) { + xmlw_startElem(writer, "faction"); + + xmlw_attr(writer, "name", "%s", faction_stack[i].name); + xmlw_str(writer, "%d", faction_stack[i].player); + + xmlw_endElem(writer); // Faction. + } + + xmlw_endElem(writer); // Faction. + + return 0; +} + +int pfaction_load(xmlNodePtr parent) { + xmlNodePtr node, cur; + char* str; + + node = parent->xmlChildrenNode; + + do { + if(xml_isNode(node, "factions")) { + cur = node->xmlChildrenNode; + do { + if(xml_isNode(cur, "factions")) { + xmlr_attr(cur, "name", str); + faction_stack[faction_get(str)].player = xml_getInt(cur); + free(str); + } + } while(xml_nextNode(cur)); + } + } while(xml_nextNode(node)); + + return 0; +} + diff --git a/src/save.c b/src/save.c index 3876a0c..d5173df 100644 --- a/src/save.c +++ b/src/save.c @@ -15,10 +15,12 @@ // Externs. extern int player_save(xmlTextWriterPtr writer); +extern int player_load(xmlNodePtr parent); extern int missions_save(xmlTextWriterPtr writer); extern int var_save(xmlTextWriterPtr writer); // misn var. -extern int player_load(xmlNodePtr parent); extern int var_load(xmlNodePtr parent); +extern int pfaction_save(xmlTextWriterPtr writer); +extern int pfaction_load(xmlNodePtr parent); extern void menu_main_close(void); // Static. static int save_data(xmlTextWriterPtr writer); @@ -32,6 +34,7 @@ static int save_data(xmlTextWriterPtr writer) { if(player_save(writer) < 0) return -1; if(missions_save(writer) < 0) return -1; if(var_save(writer) < 0) return -1; + if(pfaction_save(writer) < 0) return -1; return 0; } @@ -160,9 +163,14 @@ static int load_game(char* file) { doc = xmlParseFile(file); node = doc->xmlChildrenNode; // Base node. + if(node == NULL) { + WARN("Savegame '%s' invalid!", file); + return -1; + } player_load(node); var_load(node); + pfaction_load(node); xmlFreeDoc(doc);