[Fix] Mission timers should save and load properly now.

This commit is contained in:
Allanis 2013-11-18 23:30:16 +00:00
parent 6ad8d75d2d
commit 4af334e5e4

View File

@ -681,11 +681,27 @@ int missions_saveActive(xmlTextWriterPtr writer) {
if(player_missions[i].sys_marker != NULL) if(player_missions[i].sys_marker != NULL)
xmlw_elem(writer, "marked", player_missions[i].sys_marker); xmlw_elem(writer, "marked", player_missions[i].sys_marker);
/* Cargo. */
xmlw_startElem(writer, "cargos"); xmlw_startElem(writer, "cargos");
for(j = 0; j < player_missions[i].ncargo; j++) for(j = 0; j < player_missions[i].ncargo; j++)
xmlw_elem(writer, "cargo", "%u", player_missions[i].cargo[j]); xmlw_elem(writer, "cargo", "%u", player_missions[i].cargo[j]);
xmlw_endElem(writer); /* Cargo. */ xmlw_endElem(writer); /* Cargo. */
/* Timers. */
xmlw_startElem(writer, "timers");
for(j = 0; j < MISSION_TIMER_MAX; j++) {
if(player_missions[i].timer[j] > 0.) {
xmlw_startElem(writer, "timer");
xmlw_attr(writer, "id", "%d", j);
xmlw_attr(writer, "func", "%s", player_missions[i].tfunc[j]);
xmlw_str(writer, "%f", player_missions[i].timer[j]);
xmlw_endElem(writer); /* "timers". */
}
}
xmlw_endElem(writer); /* "timers". */
/* Write lua magic. */ /* Write lua magic. */
xmlw_startElem(writer, "lua"); xmlw_startElem(writer, "lua");
@ -719,7 +735,7 @@ int missions_loadActive(xmlNodePtr parent) {
static int missions_parseActive(xmlNodePtr parent) { static int missions_parseActive(xmlNodePtr parent) {
Mission* misn; Mission* misn;
int m; int m, i;
char* buf; char* buf;
xmlNodePtr node, cur, nest; xmlNodePtr node, cur, nest;
@ -747,6 +763,7 @@ static int missions_parseActive(xmlNodePtr parent) {
xmlr_strd(cur, "reward", misn->reward); xmlr_strd(cur, "reward", misn->reward);
xmlr_strd(cur, "marker", misn->sys_marker); xmlr_strd(cur, "marker", misn->sys_marker);
/* Cargo. */
if(xml_isNode(cur, "cargos")) { if(xml_isNode(cur, "cargos")) {
nest = cur->xmlChildrenNode; nest = cur->xmlChildrenNode;
do { do {
@ -755,6 +772,23 @@ static int missions_parseActive(xmlNodePtr parent) {
} while(xml_nextNode(nest)); } while(xml_nextNode(nest));
} }
/* Timers. */
if(xml_isNode(cur, "timers")) {
nest = cur->xmlChildrenNode;
do {
if(xml_isNode(nest, "timer")) {
xmlr_attr(nest, "id", buf);
i = atoi(buf);
free(buf);
xmlr_attr(nest, "func", buf);
/* Set the timer. */
misn->timer[i] = xml_getFloat(nest);
misn->tfunc[i] = buf;
}
} while(xml_nextNode(nest));
}
if(xml_isNode(cur, "lua")) if(xml_isNode(cur, "lua"))
/* Start the unpersist routine. */ /* Start the unpersist routine. */
mission_unpersistData(misn->L, cur); mission_unpersistData(misn->L, cur);