diff --git a/dat/start.xml b/dat/start.xml index fe33a39..7d459f1 100644 --- a/dat/start.xml +++ b/dat/start.xml @@ -8,8 +8,8 @@ KonoSys - 100 - 75 + 0 + 0 diff --git a/src/land.c b/src/land.c index d594208..a4f351e 100644 --- a/src/land.c +++ b/src/land.c @@ -158,6 +158,7 @@ static void commodity_exchange(void) { static void commodity_exchange_close(char* str) { if(strcmp(str, "btnCommodityClose")==0) window_destroy(secondary_wid); + secondary_wid = 0; } static void commodity_update(char* str) { @@ -292,6 +293,7 @@ static void outfits(void) { static void outfits_close(char* str) { if(strcmp(str, "btnCloseOutfits")==0) window_destroy(secondary_wid); + secondary_wid = 0; } static void outfits_update(char* str) { @@ -483,6 +485,7 @@ static void shipyard(void) { static void shipyard_close(char* str) { if(strcmp(str, "btnCloseShipyard")==0) window_destroy(secondary_wid); + secondary_wid = 0; } static void shipyard_update(char* str) { @@ -610,6 +613,7 @@ static void shipyard_yours(char* str) { static void shipyard_yoursClose(char* str) { (void)str; window_destroy(terciary_wid); + terciary_wid = 0; } static void shipyard_yoursUpdate(char* str) { @@ -768,6 +772,7 @@ static void spaceport_bar(void) { static void spaceport_bar_close(char* str) { if(strcmp(str, "btnCloseBar")==0) window_destroy(secondary_wid); + secondary_wid = 0; } // Planet news reports. @@ -788,6 +793,7 @@ static void news(void) { static void news_close(char* str) { if(strcmp(str, "btnCloseNews")==0) window_destroy(terciary_wid); + terciary_wid = 0; } // Mission computer, cos' missions rule! @@ -822,6 +828,7 @@ static void misn(void) { static void misn_close(char* str) { if(strcmp(str, "btnCloseMission")==0) window_destroy(secondary_wid); + secondary_wid = 0; } static void misn_accept(char* str) { @@ -837,6 +844,7 @@ static void misn_accept(char* str) { if(mission_computer[i].title && (strcmp(misn_name, mission_computer[i].title)==0)) { mission_accept(&mission_computer[i]); + misn_genList(0); return; } } @@ -856,8 +864,10 @@ static void misn_genList(int first) { for(i = 0; i < mission_ncomputer; i++) if(mission_computer[i].title) misn_names[j++] = strdup(mission_computer[i].title); - } else { + } + if((mission_ncomputer == 0) || (j == 0)) { // No missions. + if(j == 0) free(misn_names); misn_names = malloc(sizeof(char*)); misn_names[0] = strdup("No Missions"); } diff --git a/src/mission.c b/src/mission.c index ef2ad6c..f731122 100644 --- a/src/mission.c +++ b/src/mission.c @@ -101,11 +101,11 @@ void mission_accept(Mission* mission) { // Clean up a mission. void mission_cleanup(Mission* misn) { - hook_rmParent(misn->id); // Remove existing hooks. - if(misn->title) free(misn->title); - if(misn->desc) free(misn->desc); - if(misn->reward) free(misn->reward); - lua_close(misn->L); + if(misn->id) hook_rmParent(misn->id); // Remove existing hooks. + if(misn->title) free(misn->title); + if(misn->desc) free(misn->desc); + if(misn->reward) free(misn->reward); + if(misn->L) lua_close(misn->L); memset(misn, 0, sizeof(Mission)); } diff --git a/src/toolkit.c b/src/toolkit.c index 108a63e..dacb7b1 100644 --- a/src/toolkit.c +++ b/src/toolkit.c @@ -563,6 +563,11 @@ void window_destroyWidget(unsigned int wid, const char* wgtname) { Window* w = window_wget(wid); int i; + if(w == NULL) { + WARN("Window %d does not exist", wid); + return; + } + for(i = 0; i < w->nwidgets; i++) if(strcmp(wgtname, w->widgets[i].name)==0) break;