From 10ea68c5c3c64e5fbe034a7b7855b8e9efd84309 Mon Sep 17 00:00:00 2001 From: Allanis Date: Sat, 27 Jul 2013 15:14:55 +0100 Subject: [PATCH] [Change] Cleaned up XML loading somewhat. --- src/mission.c | 24 ++++++++++++++---------- src/mission.h | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/mission.c b/src/mission.c index 43fa2f2..044c834 100644 --- a/src/mission.c +++ b/src/mission.c @@ -221,6 +221,10 @@ static int mission_meetReq(int mission, int faction, char* planet, char* sysname !mission_meetCond(misn)) return 0; + if((misn->avail.done != NULL) && /* Mission does not meet previous mission requirements. */ + (player_missionAlreadyDone(mission_getID(misn->avail.done))==0)) + return 0; + return 1; } @@ -424,22 +428,22 @@ static MissionData* mission_parse(const xmlNodePtr parent) { else if(xml_isNode(node, "avail")) { /* Mission availability. */ cur = node->children; do { - if(xml_isNode(cur, "location")) + if(xml_isNode(cur, "location")) { tmp->avail.loc = mission_location(xml_get(cur)); - else if(xml_isNode(cur, "chance")) - tmp->avail.chance = xml_getInt(cur); - else if(xml_isNode(cur, "planet")) - tmp->avail.planet = strdup(xml_get(cur)); - else if(xml_isNode(cur, "system")) - tmp->avail.system = strdup(xml_get(cur)); - else if(xml_isNode(cur, "faction")) { + continue; + } + xmlr_int(cur, "chance", tmp->avail.chance); + xmlr_strd(cur, "planet", tmp->avail.planet); + xmlr_strd(cur, "system", tmp->avail.system); + if(xml_isNode(cur, "faction")) { tmp->avail.factions = realloc(tmp->avail.factions, sizeof(int) * ++tmp->avail.nfactions); tmp->avail.factions[tmp->avail.nfactions-1] = faction_get(xml_get(cur)); + continue; } - else if(xml_isNode(cur, "cond")) - tmp->avail.cond = strdup(xml_get(cur)); + xmlr_strd(cur, "cond", tmp->avail.cond); + xmlr_strd(cur, "done", tmp->avail.done); } while(xml_nextNode(cur)); } } while(xml_nextNode(node)); diff --git a/src/mission.h b/src/mission.h index a4f5513..a9f9d20 100644 --- a/src/mission.h +++ b/src/mission.h @@ -34,6 +34,7 @@ typedef struct MissionData_ { int nfactions; char* cond; /* Conditional that must be met. */ + char* done; /* Previous mission that must have been done. */ } avail; unsigned int flags; /* Flags to store binary properties. */