From 32adddc8d0f3c816b129c36af7984ebfc9f2e9f4 Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Sat, 11 May 2013 16:27:35 +0100
Subject: [PATCH] [Add] Save the completed missions.

---
 src/mission.c | 6 ++++++
 src/mission.h | 1 +
 src/player.c  | 8 +++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/mission.c b/src/mission.c
index 7b312ed..af0188b 100644
--- a/src/mission.c
+++ b/src/mission.c
@@ -56,6 +56,12 @@ int mission_getID(MissionData* misn) {
   return -1;
 }
 
+// Get a MissionData based on ID.
+MissionData* mission_get(int id) {
+  if((id <= 0) || (mission_nstack < id)) return NULL;
+  return &mission_stack[id];
+}
+
 // Initialize a mission.
 static int mission_init(Mission* mission, MissionData* misn) {
   char* buf;
diff --git a/src/mission.h b/src/mission.h
index f41073e..02b1454 100644
--- a/src/mission.h
+++ b/src/mission.h
@@ -69,6 +69,7 @@ void missions_bar(int faction, char* planet, char* system);
 
 // Misc.
 int mission_getID(MissionData* misn);
+MissionData* mission_get(int id);
 
 // Cargo stuff.
 void mission_linkCargo(Mission* misn, unsigned int cargo_id);
diff --git a/src/player.c b/src/player.c
index 928a8d5..c40d1a7 100644
--- a/src/player.c
+++ b/src/player.c
@@ -1447,10 +1447,16 @@ int player_save(xmlTextWriterPtr writer) {
   xmlw_startElem(writer, "ships");
   for(i = 0; i < player_nstack; i++)
     player_saveShip(writer, player_stack[i], player_lstack[i]);
-  xmlw_endElem(writer); // Ships.
 
   xmlw_endElem(writer); // Player.
 
+  xmlw_startElem(writer, "missions_done");
+
+  for(i = 0; i < missions_ndone; i++)
+    xmlw_elem(writer, "done", mission_get(missions_done[i])->name);
+
+  xmlw_endElem(writer); // missions_done.
+
   return 0;
 }