using System; using System.ComponentModel; using System.Xml.Serialization; using Barotrauma.LuaCs.Data; namespace Barotrauma; [Serializable] [Obsolete($"Use {nameof(IModConfigInfo)} instead. This class exists for legacy compatibility only.")] public sealed class RunConfig : IRunConfig { /// /// How should scripts be run on the server. /// [XmlElement(ElementName = "Server")] [DefaultValue("Standard")] public string Server { get; set; } /// /// How should scripts be run on the client. /// [XmlElement(ElementName = "Client")] [DefaultValue("Standard")] public string Client { get; set; } /// /// List of dependencies by either Steam Workshop ID or by Partial Inclusive Name (ie. "ModDep" will match a mod named "A ModDependency"). /// PIN Dependency checks if ContentPackage names contains the dependency string. /// [XmlArrayItem(ElementName = "Dependency", IsNullable = true, Type = typeof(Dependency))] [XmlArray] public Dependency[] Dependencies { get; set; } /// /// Compiles the mod using non-publicized assemblies. /// [XmlElement(ElementName = "UseNonPublicizedAssemblies")] public bool UseNonPublicizedAssemblies { get; set; } /// /// If the mod includes source files, the compiled assembly will be named "CompiledAssembly" and have the [InternalVisibleTo()] attribute applied to it. /// [XmlElement(ElementName = "UseInternalAssemblyName")] [DefaultValue(false)] public bool UseInternalAssemblyName { get; set; } [XmlElement(ElementName = "AutoGenerated")] public bool AutoGenerated { get; set; } public RunConfig(bool autoGenerated) { this.AutoGenerated = autoGenerated; if (autoGenerated) { (Client, Server) = ("Standard", "Standard"); UseNonPublicizedAssemblies = false; } } public RunConfig() { } // For serialization use [Serializable] public sealed class Dependency { /// /// Steam Workshop ID of the dependency. /// [XmlElement(ElementName = "SteamWorkshopId")] public ulong SteamWorkshopId; /// /// Package Name of the dependency. Not needed if SteamWorkshopId is set. /// [XmlElement(ElementName = "PackageName")] public string PackageName; } public RunConfig Sanitize() { try { Client = SanitizeRunSetting(Client); } catch (Exception) { Client = "Standard"; } try { Server = SanitizeRunSetting(Server); } catch (Exception) { Server = "Standard"; } Dependencies ??= new RunConfig.Dependency[] { }; static string SanitizeRunSetting(string str) => str switch { null => "Standard", "" => "Standard", " " => "Standard", _ => str[0].ToString().ToUpper() + str.Substring(1).ToLower() }; return this; } public bool IsForced() { #if CLIENT return this.Client == "Forced"; #elif SERVER return this.Server == "Forced"; #endif } public bool IsStandard() { #if CLIENT return this.Client == "Standard"; #elif SERVER return this.Server == "Standard"; #endif } public bool IsForcedOrStandard() => this.IsForced() || this.IsStandard(); }