[Add] Player faction standings are now saved and loaded.
This commit is contained in:
parent
ce0bb15446
commit
26354ff28f
@ -480,3 +480,45 @@ void factions_free(void) {
|
|||||||
nfactions = 0;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
10
src/save.c
10
src/save.c
@ -15,10 +15,12 @@
|
|||||||
|
|
||||||
// Externs.
|
// Externs.
|
||||||
extern int player_save(xmlTextWriterPtr writer);
|
extern int player_save(xmlTextWriterPtr writer);
|
||||||
|
extern int player_load(xmlNodePtr parent);
|
||||||
extern int missions_save(xmlTextWriterPtr writer);
|
extern int missions_save(xmlTextWriterPtr writer);
|
||||||
extern int var_save(xmlTextWriterPtr writer); // misn var.
|
extern int var_save(xmlTextWriterPtr writer); // misn var.
|
||||||
extern int player_load(xmlNodePtr parent);
|
|
||||||
extern int var_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);
|
extern void menu_main_close(void);
|
||||||
// Static.
|
// Static.
|
||||||
static int save_data(xmlTextWriterPtr writer);
|
static int save_data(xmlTextWriterPtr writer);
|
||||||
@ -32,6 +34,7 @@ static int save_data(xmlTextWriterPtr writer) {
|
|||||||
if(player_save(writer) < 0) return -1;
|
if(player_save(writer) < 0) return -1;
|
||||||
if(missions_save(writer) < 0) return -1;
|
if(missions_save(writer) < 0) return -1;
|
||||||
if(var_save(writer) < 0) return -1;
|
if(var_save(writer) < 0) return -1;
|
||||||
|
if(pfaction_save(writer) < 0) return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -160,9 +163,14 @@ static int load_game(char* file) {
|
|||||||
|
|
||||||
doc = xmlParseFile(file);
|
doc = xmlParseFile(file);
|
||||||
node = doc->xmlChildrenNode; // Base node.
|
node = doc->xmlChildrenNode; // Base node.
|
||||||
|
if(node == NULL) {
|
||||||
|
WARN("Savegame '%s' invalid!", file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
player_load(node);
|
player_load(node);
|
||||||
var_load(node);
|
var_load(node);
|
||||||
|
pfaction_load(node);
|
||||||
|
|
||||||
xmlFreeDoc(doc);
|
xmlFreeDoc(doc);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user