[Add] Save player variables.

This commit is contained in:
Allanis 2013-05-11 16:23:45 +01:00
parent bc935960f8
commit 9c1a094f36
2 changed files with 38 additions and 0 deletions

View File

@ -12,6 +12,7 @@
#include "pilot.h" #include "pilot.h"
#include "player.h" #include "player.h"
#include "ltime.h" #include "ltime.h"
#include "xml.h"
#include "misn_lua.h" #include "misn_lua.h"
#define MISN_DEBUG(str, args...) (fprintf(stdout, "Mission '%s': "str"\n", \ #define MISN_DEBUG(str, args...) (fprintf(stdout, "Mission '%s': "str"\n", \
@ -222,6 +223,41 @@ int misn_run(Mission* misn, char* func) {
return ret; return ret;
} }
// Save the mission variables.
int var_save(xmlTextWriterPtr writer) {
int i;
xmlw_startElem(writer, "vars");
for(i = 0; i < var_nstack; i++) {
xmlw_startElem(writer, "vars");
xmlw_attr(writer, "name", var_stack[i].name);
switch(var_stack[i].type) {
case MISN_VAR_NIL:
xmlw_attr(writer, "type", "nil");
break;
case MISN_VAR_NUM:
xmlw_attr(writer, "type", "num");
xmlw_str(writer, "%d", var_stack[i].d.num);
break;
case MISN_VAR_BOOL:
xmlw_attr(writer, "type", "bool");
xmlw_str(writer, "%d", var_stack[i].d.b);
break;
case MISN_VAR_STR:
xmlw_attr(writer, "type", "str");
xmlw_str(writer, var_stack[i].d.str);
break;
}
xmlw_endElem(writer); // var.
}
xmlw_endElem(writer); // vars.
return 0;
}
// -- Lephisto. -- // -- Lephisto. --
static int lephisto_lang(lua_State* L) { static int lephisto_lang(lua_State* L) {
// TODO: multilanguage stuff. // TODO: multilanguage stuff.

View File

@ -6,6 +6,7 @@
// Externs. // Externs.
extern int player_save(xmlTextWriterPtr writer); extern int player_save(xmlTextWriterPtr writer);
extern int missions_save(xmlTextWriterPtr writer); extern int missions_save(xmlTextWriterPtr writer);
extern int var_save(xmlTextWriterPtr writer); // misn var.
// Static. // Static.
static int save_data(xmlTextWriterPtr writer); static int save_data(xmlTextWriterPtr writer);
@ -13,6 +14,7 @@ static int save_data(xmlTextWriterPtr writer) {
// The data itself. // The data itself.
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;
return 0; return 0;
} }