Unstable 0.17.7.0

This commit is contained in:
Markus Isberg
2022-04-08 00:34:17 +09:00
parent 95764d1fa8
commit 164d72ae3a
82 changed files with 852 additions and 385 deletions
@@ -71,8 +71,8 @@ namespace Barotrauma
public static Result<ContentFile, string> CreateFromXElement(ContentPackage contentPackage, XElement element)
{
static Result<ContentFile, string> fail(string error)
=> Result<ContentFile, string>.Failure(error);
static Result<ContentFile, string> fail(string error, string? stackTrace = null)
=> Result<ContentFile, string>.Failure(error, stackTrace);
Identifier elemName = element.NameAsIdentifier();
var type = Types.FirstOrDefault(t => t.Names.Contains(elemName));
@@ -99,10 +99,10 @@ namespace Barotrauma
}
catch (Exception e)
{
return fail($"Failed to load file \"{filePath}\" of type \"{elemName}\": {e.Message}\n{e.StackTrace.CleanupStackTrace()}");
return fail($"Failed to load file \"{filePath}\" of type \"{elemName}\": {e.Message}", e.StackTrace.CleanupStackTrace());
}
}
protected ContentFile(ContentPackage contentPackage, ContentPath path)
{
ContentPackage = contentPackage;
@@ -34,7 +34,15 @@ namespace Barotrauma
else if (MatchesSingular(elemName))
{
T prefab = CreatePrefab(parentElement);
prefabs.Add(prefab, overriding);
try
{
prefabs.Add(prefab, overriding);
}
catch
{
prefab.Dispose(); //clean up before rethrowing, since some prefab types might lock resources
throw;
}
}
else if (MatchesPlural(elemName))
{
@@ -1,6 +1,6 @@
#nullable enable
using Barotrauma.Extensions;
using Microsoft.Xna.Framework;
using Barotrauma.Steam;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -9,7 +9,6 @@ using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Barotrauma.Steam;
namespace Barotrauma
{
@@ -39,7 +38,7 @@ namespace Barotrauma
public readonly DateTime? InstallTime;
public readonly ImmutableArray<ContentFile> Files;
public readonly ImmutableArray<string> Errors;
public readonly ImmutableArray<(string error, string? stackTrace)> Errors;
public async Task<bool> IsUpToDate()
{
@@ -92,7 +91,7 @@ namespace Barotrauma
Errors = fileResults
.OfType<Failure<ContentFile, string>>()
.Select(f => f.Error)
.Select(f => (f.Error, f.StackTrace))
.ToImmutableArray();
HasMultiplayerSyncedContent = Files.Any(f => !f.NotSyncedInMultiplayer);
@@ -304,5 +303,24 @@ namespace Barotrauma
}
return path == LocalModsDir;
}
public void LogErrors()
{
if (Errors.Any())
{
DebugConsole.AddWarning(
$"The following errors occurred while loading the content package\"{Name}\". The package might not work correctly.\n" +
string.Join('\n', Errors.Select(e => errorToStr(e.error, e.stackTrace))));
static string errorToStr(string error, string? stackTrace)
{
string str = error;
if (stackTrace != null)
{
str += '\n' + stackTrace;
}
return str;
}
}
}
}
}
@@ -430,9 +430,9 @@ namespace Barotrauma
public static void LoadVanillaFileList()
{
VanillaCorePackage = new CorePackage(XDocument.Load(VanillaFileList), VanillaFileList);
foreach (string error in VanillaCorePackage.Errors)
foreach ((string error, string? stackTrace) in VanillaCorePackage.Errors)
{
DebugConsole.ThrowError(error);
DebugConsole.ThrowError(error + (stackTrace == null ? string.Empty : '\n' + stackTrace));
}
}
@@ -469,8 +469,17 @@ namespace Barotrauma
}
var corePackageElement = contentPackagesElement.GetChildElement(CorePackageElementName);
enabledCorePackage = findPackage(CorePackages, corePackageElement) ?? VanillaCorePackage!;
var configEnabledCorePackage = findPackage(CorePackages, corePackageElement);
if (configEnabledCorePackage == null)
{
string packageStr = corePackageElement.GetAttributeString("name", null) ?? corePackageElement.GetAttributeStringUnrestricted("path", "UNKNOWN");
DebugConsole.ThrowError($"Could not find the selected core package \"{packageStr}\". Switching to the \"{enabledCorePackage.Name}\" package.");
}
else
{
enabledCorePackage = configEnabledCorePackage;
}
var regularPackagesElement = contentPackagesElement.GetChildElement(RegularPackagesElementName);
if (regularPackagesElement != null)
{
@@ -499,5 +508,13 @@ namespace Barotrauma
yield return new LoadProgress(1.0f);
}
public static void LogEnabledRegularPackageErrors()
{
foreach (var p in EnabledPackages.Regular)
{
p.LogErrors();
}
}
}
}