[Fix] Mission var stuff.

This commit is contained in:
Allanis 2013-04-20 14:58:14 +01:00
parent a6bca29fa1
commit 209e75bda1
4 changed files with 40 additions and 15 deletions

View File

@ -31,9 +31,7 @@
</mission> </mission>
<mission name = "Empire Shipping"> <mission name = "Empire Shipping">
<lua>es_cargo</lua> <lua>es_cargo</lua>
<req> <req>es_cargo</req>
<flag>req_esd</flag>
</req>
<avail> <avail>
<chance>350</chance> <chance>350</chance>
<location>Computer</location> <location>Computer</location>

View File

@ -46,6 +46,8 @@ static int var_mstack = 0;
static Mission* cur_mission = NULL; static Mission* cur_mission = NULL;
static int misn_delete = 0; // If 1 delete current mission. static int misn_delete = 0; // If 1 delete current mission.
static void var_free(misn_var* var);
// -- Libraries. -- // -- Libraries. --
// Lephisto. // Lephisto.
@ -329,18 +331,7 @@ static int var_pop(lua_State* L) {
for(i = 0; i < var_nstack; i++) for(i = 0; i < var_nstack; i++)
if(strcmp(str, var_stack[i].name)==0) { if(strcmp(str, var_stack[i].name)==0) {
switch(var_stack[i].type) { var_free(&var_stack[i]);
case MISN_VAR_STR:
if(var_stack[i].d.str != NULL) {
free(var_stack[i].d.str);
var_stack[i].d.str = NULL;
}
break;
case MISN_VAR_NIL:
case MISN_VAR_NUM:
case MISN_VAR_BOOL:
break;
}
memmove(&var_stack[i], &var_stack[i+1], sizeof(misn_var)*(var_nstack-i-1)); memmove(&var_stack[i], &var_stack[i+1], sizeof(misn_var)*(var_nstack-i-1));
var_stack--; var_stack--;
return 0; return 0;
@ -408,6 +399,37 @@ static int var_push(lua_State* L) {
return 0; return 0;
} }
static void var_free(misn_var* var) {
switch(var->type) {
case MISN_VAR_STR:
if(var->d.str != NULL) {
free(var->d.str);
var->d.str = NULL;
}
break;
case MISN_VAR_NIL:
case MISN_VAR_NUM:
case MISN_VAR_BOOL:
break;
}
if(var->name != NULL) {
free(var->name);
var->name = NULL;
}
}
void var_cleanup(void) {
int i;
for(i = 0; i < var_nstack; i++)
var_free(&var_stack[i]);
if(var_stack != NULL) free(var_stack);
var_stack = NULL;
var_nstack = 0;
var_mstack = 0;
}
// -- Space. --
static int space_getPlanet(lua_State* L) { static int space_getPlanet(lua_State* L) {
int i; int i;
int *factions; int *factions;

View File

@ -4,6 +4,7 @@
// Check if a flag exists on the variable stack. // Check if a flag exists on the variable stack.
int var_checkflag(char* str); int var_checkflag(char* str);
void var_cleanup(void);
// Load the libraries for a lua state. // Load the libraries for a lua state.
int misn_loadLibs(lua_State* L); int misn_loadLibs(lua_State* L);

View File

@ -16,6 +16,7 @@
#include "menu.h" #include "menu.h"
#include "toolkit.h" #include "toolkit.h"
#include "mission.h" #include "mission.h"
#include "misn_lua.h"
#include "player.h" #include "player.h"
#define XML_GUI_ID "GUIs" // XML section identifier. #define XML_GUI_ID "GUIs" // XML section identifier.
@ -152,6 +153,9 @@ void player_new(void) {
// Cleanup player stuff if we'll be re-creating. // Cleanup player stuff if we'll be re-creating.
player_cleanup(); player_cleanup();
// Cleanup stacks.
var_cleanup();
player_name = dialogue_input("Player Name", 3, 20, player_name = dialogue_input("Player Name", 3, 20,
"Please tell me your name:"); "Please tell me your name:");
player_newMake(); player_newMake();