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.