From e4f76c9b08c4b00ef410e338313935aff0e833a2 Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Thu, 23 May 2013 21:34:42 +0100 Subject: [PATCH] [Add] Be a little trickiar when generating mission id's. --- src/mission.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mission.c b/src/mission.c index e56ac2f..2e55968 100644 --- a/src/mission.c +++ b/src/mission.c @@ -39,6 +39,7 @@ static int mission_nstack = 0; extern int misn_run(Mission* misn, char* func); // Static. +static unsigned int mission_genID(void); static int mission_init(Mission* mission, MissionData* misn); static void mission_freeData(MissionData* mission); static int mission_alreadyRunning(MissionData* misn); @@ -47,6 +48,19 @@ static int mission_matchFaction(MissionData* misn, int faction); static int mission_location(char* loc); static MissionData* mission_parse(const xmlNodePtr parent); +// Generate a new id for the mission. +static unsigned int mission_genID(void) { + unsigned int id; + int i; + id = ++mission_id; // Default id, not safe if loading. + + // We save mission id's, so check for collisions with players missions. + for(i = 0; i < MISSION_MAX; i++) + if(id == player_missions[i].id) // Mission id was loaded from save. + return mission_genID(); // Recursive try again. + return id; +} + // Gets the ID from mission name. int mission_getID(char* name) { int i; @@ -69,7 +83,7 @@ static int mission_init(Mission* mission, MissionData* misn) { char* buf; uint32_t bufsize; - mission->id = ++mission_id; + mission->id = mission_genID(); mission->data = misn; // Sane defaults.