Unstable 0.17.7.0
This commit is contained in:
+4
-4
@@ -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;
|
||||
|
||||
+9
-1
@@ -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))
|
||||
{
|
||||
|
||||
+22
-4
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
-4
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user