diff --git a/src/mission.c b/src/mission.c index 19b7623..45c15df 100644 --- a/src/mission.c +++ b/src/mission.c @@ -39,6 +39,7 @@ extern int misn_run(Mission* misn, char* func); // Static. static int mission_init(Mission* mission, MissionData* misn); static void mission_freeData(MissionData* mission); +static int mission_alreadyRunning(MissionData* misn); static int mission_matchFaction(MissionData* misn, int faction); static int mission_location(char* loc); static MissionData* mission_parse(const xmlNodePtr parent); @@ -101,6 +102,16 @@ void mission_accept(Mission* mission) { misn_run(mission, "accept"); } +// Check to see if mission is already running. +static int mission_alreadyRunning(MissionData* misn) { + int i; + for (i = 0; i < MISSION_MAX; i++) + if(player_missions[i].data == misn) + return 1; + + return 0; +} + // Runs bar missions, all lua side and one-shot. void missions_bar(int faction, char* planet, char* system) { MissionData* misn; @@ -115,8 +126,10 @@ void missions_bar(int faction, char* planet, char* system) { (misn->avail.system && (strcmp(misn->avail.system, system)==0)) || mission_matchFaction(misn, faction))) { - if(player_missionAlreadyDone(i)) continue; // Already done the mission. - + if(mis_isFlag(misn, MISSION_UNIQUE) && // Mission done or running. + (player_missionAlreadyDone(i) || + mission_alreadyRunning(misn))) continue; + chance = (double)(misn->avail.chance % 100)/100.; if(RNGF() < chance) {