[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);
memmove(misn, &player_missions[pos+1],
sizeof(Mission) * (MISSION_MAX-pos-1));
memset(&player_missions[MISSION_MAX-1], 0, sizeof(Mission));
}
/* Regenerate list. */

View File

@ -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;
}
}

View File

@ -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. */