(d9829ac) v0.9.4.0

This commit is contained in:
Regalis
2019-10-24 18:05:42 +02:00
parent 9aa12bcac2
commit b39922a074
319 changed files with 12516 additions and 6815 deletions
@@ -94,7 +94,7 @@ namespace Barotrauma
items.Add(item);
if (parent != null) parent.Combine(item);
if (parent != null) parent.Combine(item, user: null);
foreach (XElement subElement in element.Elements())
{
@@ -32,7 +32,7 @@ namespace Barotrauma
if (Winner == Character.TeamType.None || string.IsNullOrEmpty(base.SuccessMessage)) { return ""; }
//disable success message for now if it hasn't been translated
if (!TextManager.ContainsTag("MissionSuccess." + Prefab.Identifier)) { return ""; }
if (!TextManager.ContainsTag("MissionSuccess." + Prefab.TextIdentifier)) { return ""; }
var loser = Winner == Character.TeamType.Team1 ?
Character.TeamType.Team2 :
@@ -49,9 +49,9 @@ namespace Barotrauma
{
descriptions = new string[]
{
TextManager.Get("MissionDescriptionNeutral." + prefab.Identifier, true) ?? prefab.ConfigElement.GetAttributeString("descriptionneutral", ""),
TextManager.Get("MissionDescription1." + prefab.Identifier, true) ?? prefab.ConfigElement.GetAttributeString("description1", ""),
TextManager.Get("MissionDescription2." + prefab.Identifier, true) ?? prefab.ConfigElement.GetAttributeString("description2", "")
TextManager.Get("MissionDescriptionNeutral." + prefab.TextIdentifier, true) ?? prefab.ConfigElement.GetAttributeString("descriptionneutral", ""),
TextManager.Get("MissionDescription1." + prefab.TextIdentifier, true) ?? prefab.ConfigElement.GetAttributeString("description1", ""),
TextManager.Get("MissionDescription2." + prefab.TextIdentifier, true) ?? prefab.ConfigElement.GetAttributeString("description2", "")
};
for (int i = 0; i < descriptions.Length; i++)
@@ -64,8 +64,8 @@ namespace Barotrauma
teamNames = new string[]
{
TextManager.Get("MissionTeam1." + prefab.Identifier, true) ?? prefab.ConfigElement.GetAttributeString("teamname1", "Team A"),
TextManager.Get("MissionTeam2." + prefab.Identifier, true) ?? prefab.ConfigElement.GetAttributeString("teamname2", "Team B")
TextManager.Get("MissionTeam1." + prefab.TextIdentifier, true) ?? prefab.ConfigElement.GetAttributeString("teamname1", "Team A"),
TextManager.Get("MissionTeam2." + prefab.TextIdentifier, true) ?? prefab.ConfigElement.GetAttributeString("teamname2", "Team B")
};
}
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Reflection;
using System.Xml.Linq;
using Microsoft.Xna.Framework;
namespace Barotrauma
{
@@ -15,7 +16,7 @@ namespace Barotrauma
Combat
}
class MissionPrefab
partial class MissionPrefab
{
public static readonly List<MissionPrefab> List = new List<MissionPrefab>();
@@ -27,7 +28,7 @@ namespace Barotrauma
{ MissionType.Combat, typeof(CombatMission) },
};
private ConstructorInfo constructor;
private readonly ConstructorInfo constructor;
public readonly MissionType type;
@@ -35,6 +36,8 @@ namespace Barotrauma
public readonly string Identifier;
public readonly string TextIdentifier;
public readonly string Name;
public readonly string Description;
public readonly string SuccessMessage;
@@ -61,10 +64,34 @@ namespace Barotrauma
foreach (string file in files)
{
XDocument doc = XMLExtensions.TryLoadXml(file);
if (doc?.Root == null) continue;
foreach (XElement element in doc.Root.Elements())
if (doc == null) { continue; }
bool allowOverride = false;
var mainElement = doc.Root;
if (mainElement.IsOverride())
{
allowOverride = true;
mainElement = mainElement.FirstElement();
}
foreach (XElement sourceElement in mainElement.Elements())
{
var element = sourceElement.IsOverride() ? sourceElement.FirstElement() : sourceElement;
var identifier = element.GetAttributeString("identifier", string.Empty);
var duplicate = List.Find(m => m.Identifier == identifier);
if (duplicate != null)
{
if (allowOverride || sourceElement.IsOverride())
{
DebugConsole.NewMessage($"Overriding a mission with the identifier '{identifier}' using the file '{file}'", Color.Yellow);
List.Remove(duplicate);
}
else
{
DebugConsole.ThrowError($"Duplicate mission found with the identifier '{identifier}' in file '{file}'! Add <override></override> tags as the parent of the mission definition to allow overriding.");
// TODO: Don't allow adding duplicates when the issue with multiple missions is solved.
//continue;
}
}
List.Add(new MissionPrefab(element));
}
}
@@ -75,15 +102,16 @@ namespace Barotrauma
ConfigElement = element;
Identifier = element.GetAttributeString("identifier", "");
TextIdentifier = element.GetAttributeString("textidentifier", null) ?? Identifier;
Name = TextManager.Get("MissionName." + Identifier, true) ?? element.GetAttributeString("name", "");
Description = TextManager.Get("MissionDescription." + Identifier, true) ?? element.GetAttributeString("description", "");
Name = TextManager.Get("MissionName." + TextIdentifier, true) ?? element.GetAttributeString("name", "");
Description = TextManager.Get("MissionDescription." + TextIdentifier, true) ?? element.GetAttributeString("description", "");
Reward = element.GetAttributeInt("reward", 1);
Commonness = element.GetAttributeInt("commonness", 1);
SuccessMessage = TextManager.Get("MissionSuccess." + Identifier, true) ?? element.GetAttributeString("successmessage", "Mission completed successfully");
FailureMessage = TextManager.Get("MissionFailure." + Identifier, true) ?? "";
SuccessMessage = TextManager.Get("MissionSuccess." + TextIdentifier, true) ?? element.GetAttributeString("successmessage", "Mission completed successfully");
FailureMessage = TextManager.Get("MissionFailure." + TextIdentifier, true) ?? "";
if (string.IsNullOrEmpty(FailureMessage) && TextManager.ContainsTag("missionfailed"))
{
FailureMessage = TextManager.Get("missionfailed", returnNull: true) ?? "";
@@ -93,7 +121,7 @@ namespace Barotrauma
FailureMessage = element.GetAttributeString("failuremessage", "");
}
SonarLabel = TextManager.Get("MissionSonarLabel." + Identifier, true) ?? element.GetAttributeString("sonarlabel", "");
SonarLabel = TextManager.Get("MissionSonarLabel." + TextIdentifier, true) ?? element.GetAttributeString("sonarlabel", "");
MultiplayerOnly = element.GetAttributeBool("multiplayeronly", false);
SingleplayerOnly = element.GetAttributeBool("singleplayeronly", false);
@@ -110,8 +138,8 @@ namespace Barotrauma
case "message":
int index = Messages.Count;
Headers.Add(TextManager.Get("MissionHeader" + index + "." + Identifier, true) ?? subElement.GetAttributeString("header", ""));
Messages.Add(TextManager.Get("MissionMessage" + index + "." + Identifier, true) ?? subElement.GetAttributeString("text", ""));
Headers.Add(TextManager.Get("MissionHeader" + index + "." + TextIdentifier, true) ?? subElement.GetAttributeString("header", ""));
Messages.Add(TextManager.Get("MissionMessage" + index + "." + TextIdentifier, true) ?? subElement.GetAttributeString("text", ""));
break;
case "locationtype":
AllowedLocationTypes.Add(new Pair<string, string>(
@@ -139,7 +167,11 @@ namespace Barotrauma
}
constructor = missionClasses[type].GetConstructor(new[] { typeof(MissionPrefab), typeof(Location[]) });
InitProjSpecific(element);
}
partial void InitProjSpecific(XElement element);
public bool IsAllowed(Location from, Location to)
{
@@ -80,7 +80,7 @@ namespace Barotrauma
var itemContainer = it.GetComponent<Items.Components.ItemContainer>();
if (itemContainer == null) continue;
if (itemContainer.Combine(item)) break; // Placement successful
if (itemContainer.Combine(item, user: null)) break; // Placement successful
}
}
}