[Fix] Too many missions without any "active missions".

This commit is contained in:
Allanis 2014-04-13 23:26:07 +01:00
parent 8f7776217b
commit e536ab4da3
3 changed files with 19 additions and 25 deletions

View File

@ -628,6 +628,7 @@ static void mission_menu_abort(unsigned int wid, char* str) {
mission_cleanup(misn); mission_cleanup(misn);
memmove(misn, &player_missions[pos+1], memmove(misn, &player_missions[pos+1],
sizeof(Mission) * (MISSION_MAX-pos-1)); sizeof(Mission) * (MISSION_MAX-pos-1));
memset(&player_missions[MISSION_MAX-1], 0, sizeof(Mission));
} }
/* Regenerate list. */ /* Regenerate list. */

View File

@ -297,6 +297,7 @@ static int misn_runTopStack(Mission* misn, char* func) {
if(cur_mission == &player_missions[i]) { if(cur_mission == &player_missions[i]) {
memmove(&player_missions[i], &player_missions[i+1], memmove(&player_missions[i], &player_missions[i+1],
sizeof(Mission) * (MISSION_MAX-i-1)); sizeof(Mission) * (MISSION_MAX-i-1));
memset(&player_missions[MISSION_MAX-1], 0, sizeof(Mission));
break; break;
} }
} }

View File

@ -296,7 +296,8 @@ void mission_sysMark(void) {
space_clearMarkers(); space_clearMarkers();
for(i = 0; i < MISSION_MAX; i++) { 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 = system_get(player_missions[i].sys_marker);
sys_setFlag(sys, SYSTEM_MARKED); sys_setFlag(sys, SYSTEM_MARKED);
} }
@ -384,26 +385,21 @@ void missions_update(const double dt) {
/* Clean up a mission. */ /* Clean up a mission. */
void mission_cleanup(Mission* misn) { void mission_cleanup(Mission* misn) {
int i; int i;
if(misn->id != 0) { if(misn->id != 0)
hook_rmParent(misn->id); /* Remove existing hooks. */ hook_rmParent(misn->id); /* Remove existing hooks. */
misn->id = 0;
} if(misn->title != NULL)
if(misn->title != NULL) {
free(misn->title); free(misn->title);
misn->title = NULL;
} if(misn->desc != NULL)
if(misn->desc != NULL) {
free(misn->desc); free(misn->desc);
misn->desc = NULL;
} if(misn->reward != NULL)
if(misn->reward != NULL) {
free(misn->reward); free(misn->reward);
misn->reward = NULL;
} if(misn->sys_marker != NULL)
if(misn->sys_marker != NULL) {
free(misn->sys_marker); free(misn->sys_marker);
misn->sys_marker = NULL;
}
if(misn->cargo != NULL) { if(misn->cargo != NULL) {
for(i = 0; i < misn->ncargo; i++) { /* Must unlink all the cargo. */ for(i = 0; i < misn->ncargo; i++) { /* Must unlink all the cargo. */
if(player != NULL) /* Only remove if player exists. */ if(player != NULL) /* Only remove if player exists. */
@ -411,20 +407,16 @@ void mission_cleanup(Mission* misn) {
mission_unlinkCargo(misn, misn->cargo[i]); mission_unlinkCargo(misn, misn->cargo[i]);
} }
free(misn->cargo); free(misn->cargo);
misn->cargo = NULL;
misn->ncargo = 0;
} }
for(i = 0; i < MISSION_TIMER_MAX; i++) { 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]); free(misn->tfunc[i]);
misn->tfunc[i] = NULL;
}
} }
if(misn->L) { if(misn->L)
lua_close(misn->L); lua_close(misn->L);
misn->L = NULL;
} /* Clear the memory. */
memset(misn, 0, sizeof(Mission));
} }
/* Free a mission. */ /* Free a mission. */