From e536ab4da3d45060700458a4116a1dc74ce699ea Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Sun, 13 Apr 2014 23:26:07 +0100 Subject: [PATCH] [Fix] Too many missions without any "active missions". --- src/menu.c | 1 + src/misn_lua.c | 1 + src/mission.c | 42 +++++++++++++++++------------------------- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/menu.c b/src/menu.c index 935b8f4..cdac85c 100644 --- a/src/menu.c +++ b/src/menu.c @@ -628,6 +628,7 @@ static void mission_menu_abort(unsigned int wid, char* str) { mission_cleanup(misn); memmove(misn, &player_missions[pos+1], sizeof(Mission) * (MISSION_MAX-pos-1)); + memset(&player_missions[MISSION_MAX-1], 0, sizeof(Mission)); } /* Regenerate list. */ diff --git a/src/misn_lua.c b/src/misn_lua.c index 44707d2..470cbaf 100644 --- a/src/misn_lua.c +++ b/src/misn_lua.c @@ -297,6 +297,7 @@ static int misn_runTopStack(Mission* misn, char* func) { if(cur_mission == &player_missions[i]) { memmove(&player_missions[i], &player_missions[i+1], sizeof(Mission) * (MISSION_MAX-i-1)); + memset(&player_missions[MISSION_MAX-1], 0, sizeof(Mission)); break; } } diff --git a/src/mission.c b/src/mission.c index 1b146a0..46ff0c0 100644 --- a/src/mission.c +++ b/src/mission.c @@ -296,7 +296,8 @@ void mission_sysMark(void) { space_clearMarkers(); for(i = 0; i < MISSION_MAX; i++) { - if(player_missions[i].sys_marker != NULL) { + if((player_missions[i].id != 0) && + (player_missions[i].sys_marker != NULL)) { sys = system_get(player_missions[i].sys_marker); sys_setFlag(sys, SYSTEM_MARKED); } @@ -384,26 +385,21 @@ void missions_update(const double dt) { /* Clean up a mission. */ void mission_cleanup(Mission* misn) { int i; - if(misn->id != 0) { + if(misn->id != 0) hook_rmParent(misn->id); /* Remove existing hooks. */ - misn->id = 0; - } - if(misn->title != NULL) { + + if(misn->title != NULL) free(misn->title); - misn->title = NULL; - } - if(misn->desc != NULL) { + + if(misn->desc != NULL) free(misn->desc); - misn->desc = NULL; - } - if(misn->reward != NULL) { + + if(misn->reward != NULL) free(misn->reward); - misn->reward = NULL; - } - if(misn->sys_marker != NULL) { + + if(misn->sys_marker != NULL) free(misn->sys_marker); - misn->sys_marker = NULL; - } + if(misn->cargo != NULL) { for(i = 0; i < misn->ncargo; i++) { /* Must unlink all the cargo. */ if(player != NULL) /* Only remove if player exists. */ @@ -411,20 +407,16 @@ void mission_cleanup(Mission* misn) { mission_unlinkCargo(misn, misn->cargo[i]); } free(misn->cargo); - misn->cargo = NULL; - misn->ncargo = 0; } for(i = 0; i < MISSION_TIMER_MAX; i++) { - misn->timer[i] = 0.; - if(misn->tfunc[i] != NULL) { + if(misn->tfunc[i] != NULL) free(misn->tfunc[i]); - misn->tfunc[i] = NULL; - } } - if(misn->L) { + if(misn->L) lua_close(misn->L); - misn->L = NULL; - } + + /* Clear the memory. */ + memset(misn, 0, sizeof(Mission)); } /* Free a mission. */