diff --git a/Barotrauma/Content/Jobs.xml b/Barotrauma/Content/Jobs.xml
index 15abeb486..86b9ab96c 100644
--- a/Barotrauma/Content/Jobs.xml
+++ b/Barotrauma/Content/Jobs.xml
@@ -32,7 +32,7 @@
-
-
+
@@ -50,11 +50,11 @@
-
-
+
-
+
diff --git a/Barotrauma/Source/GameMain.cs b/Barotrauma/Source/GameMain.cs
index 9b3759882..6f291cd27 100644
--- a/Barotrauma/Source/GameMain.cs
+++ b/Barotrauma/Source/GameMain.cs
@@ -217,6 +217,11 @@ namespace Barotrauma
yield return CoroutineStatus.Running;
JobPrefab.LoadAll(SelectedPackage.GetFilesOfType(ContentType.Jobs));
+ // Add any missing jobs from the prefab into Config.JobNamePreferences.
+ foreach (JobPrefab job in JobPrefab.List)
+ {
+ if (!Config.JobNamePreferences.Contains(job.Name)) { Config.JobNamePreferences.Add(job.Name); }
+ }
StructurePrefab.LoadAll(SelectedPackage.GetFilesOfType(ContentType.Structure));
TitleScreen.LoadState = 20.0f;
yield return CoroutineStatus.Running;
diff --git a/Barotrauma/Source/GameSettings.cs b/Barotrauma/Source/GameSettings.cs
index 92031d217..7f969eb44 100644
--- a/Barotrauma/Source/GameSettings.cs
+++ b/Barotrauma/Source/GameSettings.cs
@@ -23,6 +23,8 @@ namespace Barotrauma
private WindowMode windowMode;
+ public List jobNamePreferences;
+
private KeyOrMouse[] keyMapping;
private bool unsavedSettings;
@@ -56,6 +58,12 @@ namespace Barotrauma
public ContentPackage SelectedContentPackage { get; set; }
+ public List JobNamePreferences
+ {
+ get { return jobNamePreferences; }
+ set { UnsavedSettings = true; jobNamePreferences = value; }
+ }
+
public string MasterServerUrl { get; set; }
public bool AutoCheckUpdates { get; set; }
public bool WasGameUpdated { get; set; }
@@ -73,6 +81,13 @@ namespace Barotrauma
private set
{
unsavedSettings = value;
+ // Beging saving coroutine. Remove any existing save coroutines if one is running.
+ if (CoroutineManager.IsCoroutineRunning("saveCoroutine")) { CoroutineManager.StopCoroutines("saveCoroutine"); }
+ if (unsavedSettings == true)
+ {
+ CoroutineManager.StartCoroutine(ApplyUnsavedChanges(), "saveCoroutine");
+ }
+
if (applyButton != null)
{
//applyButton.Selected = unsavedSettings;
@@ -124,6 +139,12 @@ namespace Barotrauma
SelectedContentPackage = ContentPackage.list.Any() ? ContentPackage.list[0] : new ContentPackage("");
+ JobNamePreferences = new List();
+ foreach (JobPrefab job in JobPrefab.List)
+ {
+ JobNamePreferences.Add(job.Name);
+ }
+
return;
}
@@ -208,6 +229,13 @@ namespace Barotrauma
}
}
break;
+ case "gameplay":
+ JobNamePreferences = new List();
+ foreach (XElement ele in subElement.Element("jobpreferences").Elements("job"))
+ {
+ JobNamePreferences.Add(ToolBox.GetAttributeString(ele, "name", ""));
+ }
+ break;
}
}
@@ -291,6 +319,17 @@ namespace Barotrauma
}
+ var gameplay = new XElement("gameplay");
+
+ var jobPreferences = new XElement("jobpreferences");
+ foreach (string jobName in JobNamePreferences)
+ {
+ jobPreferences.Add(new XElement("job", new XAttribute("name", jobName)));
+ }
+
+ gameplay.Add(jobPreferences);
+ doc.Root.Add(gameplay);
+
doc.Save(filePath);
}
@@ -500,6 +539,13 @@ namespace Barotrauma
yield return CoroutineStatus.Success;
}
+ private IEnumerable