From 3605571f711bfed12d101f4dfeeb9ac8a5131979 Mon Sep 17 00:00:00 2001 From: Maplewheels Date: Sat, 11 Apr 2026 21:00:32 -0400 Subject: [PATCH] Added fallback friendly name resolution for ModConfig assembly contents. --- .../_Services/ModConfigFileParserService.cs | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs index 980eac69f..1dd549ceb 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml.Linq; using Barotrauma.LuaCs.Data; @@ -78,11 +79,31 @@ public sealed partial class ModConfigFileParserService : RequiredPackages = src.Required, IncompatiblePackages = src.Incompatible, // Type Specific - FriendlyName = src.Element.GetAttributeString("FriendlyName", string.Empty), + FriendlyName = src.Element.GetAttributeString("FriendlyName", GetFallbackCompliantAssemblyName(src.Owner)), IsScript = src.Element.GetAttributeBool("IsScript", false), UseInternalAccessName = src.Element.GetAttributeBool("UseInternalAccessName", false), IsReferenceModeOnly = src.Element.GetAttributeBool("IsReferenceModeOnly", false) }; + + + // helper methods + string GetFallbackCompliantAssemblyName(ContentPackage package) + { + if (package.Name.IsNullOrWhiteSpace()) + { + return "FallbackAssemblyName"; + } + + // replace non az chars with '_' + var sanitizedPackageName = Regex.Replace(package.Name, @"[^a-zA-Z0-9_]", "_"); + if (char.IsDigit(sanitizedPackageName[0])) + { + sanitizedPackageName = "ASM" + sanitizedPackageName; + } + + // replace consecutive '_' + return Regex.Replace(sanitizedPackageName, @"[_.]{2,}", "_"); + } } async Task>> IParserServiceAsync.TryParseResourcesAsync(IEnumerable sources)