diff --git a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsSetup.cs index 672dc2f7a..fea455064 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/LuaCs/LuaCsSetup.cs @@ -20,7 +20,7 @@ namespace Barotrauma { public void PromptCSharpMods(Action onSelection, bool joiningServer) { - ImmutableArray contentPackages = PackageManagementService.GetLoadedAssemblyPackages() + ImmutableArray contentPackages = PackageManagementService.GetLoadedUnrestrictedPackages() .Where(p => p.Name != PackageName) .ToImmutableArray(); @@ -56,7 +56,7 @@ namespace Barotrauma Stretch = true }; - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), msgBoxLayout.RectTransform), "The following mods contain CSharp code", + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), msgBoxLayout.RectTransform), "The following mods contain CSharp code OR Unsandboxed Lua Code", font: GUIStyle.SubHeadingFont, wrap: true, textAlignment: Alignment.Center); GUIListBox packageListBox = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.4f), msgBoxLayout.RectTransform)) @@ -84,8 +84,8 @@ namespace Barotrauma string bodyText = joiningServer ? - "You are joining a server that includes mods with C# code. These mods are not sandboxed and may access your computer without restrictions. If you trust these mods, select 'Enable C# for this session'. Otherwise, select 'Cancel' to run only Lua mods." - : "You have enabled mods that include C# code. These mods are not sandboxed and may access your computer without restrictions. If you trust these mods, select 'Enable C# for this session'. Otherwise, select 'Cancel' to run only Lua mods."; + "You are joining a server that includes mods with C# code OR unrestricted Lua code. These mods are not sandboxed and may access your computer without restrictions. If you trust these mods, select 'Enable C# for this session'. Otherwise, select 'Cancel' to run only Lua mods." + : "You have enabled mods that include C# code. These mods are not sandboxed and may access your computer without restrictions. If you trust these mods, select 'Enable C# for this session'. Otherwise, select 'Cancel' to run only Sandboxed Lua mods."; new GUITextBlock(new RectTransform(new Vector2(1.0f, 0f), msgBoxLayout.RectTransform), bodyText, wrap: true) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs index 79c30579b..b6186231d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/DataInterfaceImplementations.cs @@ -56,6 +56,7 @@ public record ConfigResourceInfo : BaseResourceInfo, IConfigResourceInfo {} public record LuaScriptsResourceInfo : BaseResourceInfo, ILuaScriptResourceInfo { public bool IsAutorun { get; init; } + public bool RunUnrestricted { get; init; } } #endregion diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs index 32d17a16e..ba315464f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Data/IResourceInfoDeclarations.cs @@ -21,6 +21,12 @@ public interface ILuaScriptResourceInfo : IBaseResourceInfo /// [XmlAttribute("IsAutorun")] public bool IsAutorun { get; } + + /// + /// Indicates that this lua resources needs to run outside sandbox/requires unrestricted access. + /// + [XmlAttribute("RunUnrestricted")] + public bool RunUnrestricted { get; } } public interface IAssemblyResourceInfo : IBaseResourceInfo diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs index dbd83df4a..e1dc53c7a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigFileParserService.cs @@ -174,7 +174,8 @@ public sealed partial class ModConfigFileParserService : RequiredPackages = src.Required, IncompatiblePackages = src.Incompatible, // Type Specific - IsAutorun = src.Element.GetAttributeBool("IsAutorun", false) + IsAutorun = src.Element.GetAttributeBool("IsAutorun", false), + RunUnrestricted = src.Element.GetAttributeBool("RunUnrestricted", false) }; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigService.cs index 2802d4957..4d9ee66c2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/ModConfigService.cs @@ -405,6 +405,7 @@ public sealed class ModConfigService : IModConfigService IncompatiblePackages = ImmutableArray.Empty, RequiredPackages = ImmutableArray.Empty, IsAutorun = true, + RunUnrestricted = false }); builder.Add(new LuaScriptsResourceInfo() @@ -418,6 +419,7 @@ public sealed class ModConfigService : IModConfigService IncompatiblePackages = ImmutableArray.Empty, RequiredPackages = ImmutableArray.Empty, IsAutorun = false, + RunUnrestricted = false }); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PackageManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PackageManagementService.cs index e30a4458b..6dfe834db 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PackageManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/PackageManagementService.cs @@ -345,6 +345,8 @@ public sealed class PackageManagementService : IPackageManagementService //lua scripts var luaScripts = SelectCompatible(loadingOrderedPackages + .Where(pkg => executeCsAssemblies + || !pkg.Value.LuaScripts.Any(scr => scr.RunUnrestricted)) .SelectMany(pkg => pkg.Value.LuaScripts) .ToImmutableArray(), toLoadPackagesIndents, loadOrderByPackage); @@ -513,14 +515,14 @@ public sealed class PackageManagementService : IPackageManagementService return !_runningPackages.IsEmpty; } - public ImmutableArray GetLoadedAssemblyPackages() + public ImmutableArray GetLoadedUnrestrictedPackages() { using var lck = _operationsLock.AcquireReaderLock().ConfigureAwait(false).GetAwaiter().GetResult(); IService.CheckDisposed(this); if (_loadedPackages.IsEmpty) return ImmutableArray.Empty; return [.._loadedPackages.Values - .Where(cfg => !cfg.Assemblies.IsDefaultOrEmpty) + .Where(cfg => !cfg.Assemblies.IsDefaultOrEmpty || cfg.LuaScripts.Any(scr => scr.RunUnrestricted)) .Select(cfg => cfg.Package)]; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Interfaces/IPackageManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Interfaces/IPackageManagementService.cs index 8d050b3e0..f3aa64159 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Interfaces/IPackageManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Interfaces/IPackageManagementService.cs @@ -22,7 +22,7 @@ public interface IPackageManagementService : IReusableService public FluentResults.Result UnloadPackages(ImmutableArray packages); public FluentResults.Result UnloadAllPackages(); public ImmutableArray GetAllLoadedPackages(); - public ImmutableArray GetLoadedAssemblyPackages(); + public ImmutableArray GetLoadedUnrestrictedPackages(); public bool IsPackageRunning(ContentPackage package); public bool IsAnyPackageLoaded(); public bool IsAnyPackageRunning();