diff --git a/src/ARKServerManager/App.config b/src/ARKServerManager/App.config index 6ad5213c..d4defe46 100644 --- a/src/ARKServerManager/App.config +++ b/src/ARKServerManager/App.config @@ -906,6 +906,12 @@ + + False + + + 10 + diff --git a/src/ARKServerManager/Config.Designer.cs b/src/ARKServerManager/Config.Designer.cs index eccdf644..75c138ee 100644 --- a/src/ARKServerManager/Config.Designer.cs +++ b/src/ARKServerManager/Config.Designer.cs @@ -1402,7 +1402,37 @@ namespace ServerManagerTool { this["AutoBackup_BackupPeriod"] = value; } } - + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool AutoBackup_ParallelBackup + { + get + { + return ((bool)(this["AutoBackup_ParallelBackup"])); + } + set + { + this["AutoBackup_ParallelBackup"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("10")] + public int AutoBackup_SequencialDelayPeriod + { + get + { + return ((int)(this["AutoBackup_SequencialDelayPeriod"])); + } + set + { + this["AutoBackup_SequencialDelayPeriod"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] diff --git a/src/ARKServerManager/Enums/ServerSettingsResetAction.cs b/src/ARKServerManager/Enums/ServerSettingsResetAction.cs index f3a86bac..cba7329b 100644 --- a/src/ARKServerManager/Enums/ServerSettingsResetAction.cs +++ b/src/ARKServerManager/Enums/ServerSettingsResetAction.cs @@ -41,5 +41,6 @@ RCONWindowExtents, ServerOptions, ServerLogOptions, + ServerBadWordFilterOptions, } } diff --git a/src/ARKServerManager/GameData/SurvivalEvolved.gamedata b/src/ARKServerManager/GameData/SurvivalEvolved.gamedata index 0ae9e6d2..c3fe3769 100644 --- a/src/ARKServerManager/GameData/SurvivalEvolved.gamedata +++ b/src/ARKServerManager/GameData/SurvivalEvolved.gamedata @@ -942,7 +942,7 @@ { "NameTag": "Rhyniognatha", "IsSpawnable": true, - "IsTameable": "false", + "IsTameable": "true", "ClassName": "Rhynio_Character_BP_C", "Description": "Rhyniognatha", "Mod": "ArkPrime" @@ -13537,6 +13537,31 @@ "IsSotF": false, "EventName": "WinterWonderland", "Description": "Winter Wonderland" + }, + { + "IsSotF": false, + "EventName": "Arkaeology", + "Description": "Arkaeology" + }, + { + "IsSotF": false, + "EventName": "ExtinctionChronicles", + "Description": "Extinction Chronicles" + }, + { + "IsSotF": false, + "EventName": "Summer", + "Description": "Summer Bash" + }, + { + "IsSotF": false, + "EventName": "ark7th", + "Description": "7th Anniversary" + }, + { + "IsSotF": false, + "EventName": "PAX", + "Description": "PAX Party" } ], "OfficialMods": [ diff --git a/src/ARKServerManager/Globalization/en-US/en-US.xaml b/src/ARKServerManager/Globalization/en-US/en-US.xaml index 5823f3d0..1021ff73 100644 --- a/src/ARKServerManager/Globalization/en-US/en-US.xaml +++ b/src/ARKServerManager/Globalization/en-US/en-US.xaml @@ -657,6 +657,10 @@ If enabled, when the auto-update is performed all servers will be updated at the same time, otherwise each server will be updated one after the other (this will take more time to complete). Delay between each server update The amount of time to wait in between each server update, only available if Parallel Update is disabled. + Backup servers in parallel + If enabled, when the auto-backup is performed all servers will be backup at the same time, otherwise each server will be backup one after the other (this could produce less server lags). + Delay between each server backup + The amount of time to wait in between each server backup, only available if Parallel Backup is disabled. Auto Restart Options The grace period does not prevent auto-updates from restarting your server. @@ -1255,12 +1259,26 @@ The interval between the forced auto dino respawn. Alternate Save Directory Name: (Optional) + NOTE: Set "Alternate Save Directory Name" only in advanced setups! Research before enabling! Sets the directory name (underneath the servers Saved folder) to store the world, player and tribe files. Cross-ARK Data Transfer ClusterId: Sets a cluster id for this server that will group the servers together via Cross-ARK Data Transfer. Cluster Directory Override If enabled, allows you to use a common cross-server storage location that functions between multiple servers running on the same machine. Uses the clusters directory in the server manager Data directory. + Bad Word Filter + Reset all bad word filter options to defaults. + Bad Word Filter URL: + Add the url to hosting your own bad words list. + Bad Word Whitelist URL: + Add the url to hosting your own good words list . + Filter Tribe Names + Filters out tribe names based on the bad words/good words list. + Filter Character Names + Filters out character names based on the bad words/good words list. + Filter Chat + Filters chat messages based on the bad word/good words list. + Server Log Options Reset all server log options to defaults. Enable Server Admin Logs @@ -1844,6 +1862,8 @@ A multiplier on how long after delaying cuddling with the baby before imprinting quality starts to decrease. Higher values increase the grace period. Cuddle Lose Imprint Quality Speed: A multiplier on how fast imprinting quality decreases after the grace period if you haven't yet cuddled with the baby. Lower values slow the imprint quality loss. + Max Imprint Limit: + Automatically destroys creatures exceeding the imprinting bonus limit specified, in %. It is recommended going 1% higher to catch potential floating point errors, especially when working with custom imprinting rates. Confirm Reset Action Click 'Yes' to confirm you want to reset the Max XP. diff --git a/src/ARKServerManager/Lib/ServerApp.cs b/src/ARKServerManager/Lib/ServerApp.cs index f572b02a..42fc3536 100644 --- a/src/ARKServerManager/Lib/ServerApp.cs +++ b/src/ARKServerManager/Lib/ServerApp.cs @@ -3391,18 +3391,43 @@ namespace ServerManagerTool.Lib var profiles = _profiles.Keys.Where(p => p.EnableAutoBackup); var exitCodes = new ConcurrentDictionary(); - Parallel.ForEach(profiles, profile => { - var app = new ServerApp + + if (Config.Default.AutoBackup_ParallelBackup) + { + Parallel.ForEach(profiles, profile => { + var app = new ServerApp + { + DeleteOldBackupFiles = Config.Default.AutoBackup_DeleteOldFiles, + OutputLogs = true, + SendAlerts = true, + SendEmails = true, + ServerProcess = ServerProcessType.AutoBackup + }; + app.PerformProfileBackup(profile, CancellationToken.None); + exitCodes.TryAdd(profile, app.ExitCode); + }); + } + else + { + var delay = 0; + foreach (ServerProfileSnapshot profile in profiles) { - DeleteOldBackupFiles = Config.Default.AutoBackup_DeleteOldFiles, - OutputLogs = true, - SendAlerts = true, - SendEmails = true, - ServerProcess = ServerProcessType.AutoBackup - }; - app.PerformProfileBackup(profile, CancellationToken.None); - exitCodes.TryAdd(profile, app.ExitCode); - }); + if (delay > 0) + Task.Delay(delay * 1000).Wait(); + delay = Math.Max(0, Config.Default.AutoBackup_SequencialDelayPeriod); + + var app = new ServerApp + { + DeleteOldBackupFiles = Config.Default.AutoBackup_DeleteOldFiles, + OutputLogs = true, + SendAlerts = true, + SendEmails = true, + ServerProcess = ServerProcessType.AutoBackup + }; + app.PerformProfileBackup(profile, CancellationToken.None); + exitCodes.TryAdd(profile, app.ExitCode); + } + } foreach (var profile in _profiles.Keys) { diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index 34d2a7b4..038a98e4 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -620,22 +620,6 @@ namespace ServerManagerTool.Lib set { SetValue(ForceNoManSkyProperty, value); } } - public static readonly DependencyProperty UseAllAvailableCoresProperty = DependencyProperty.Register(nameof(UseAllAvailableCores), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); - [DataMember] - public bool UseAllAvailableCores - { - get { return (bool)GetValue(UseAllAvailableCoresProperty); } - set { SetValue(UseAllAvailableCoresProperty, value); } - } - - public static readonly DependencyProperty UseCacheProperty = DependencyProperty.Register(nameof(UseCache), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); - [DataMember] - public bool UseCache - { - get { return (bool)GetValue(UseCacheProperty); } - set { SetValue(UseCacheProperty, value); } - } - public static readonly DependencyProperty UseNoMemoryBiasProperty = DependencyProperty.Register(nameof(UseNoMemoryBias), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); [DataMember] public bool UseNoMemoryBias @@ -740,6 +724,62 @@ namespace ServerManagerTool.Lib set { SetValue(UseVivoxProperty, value); } } + public static readonly DependencyProperty EnableBadWordListURLProperty = DependencyProperty.Register(nameof(EnableBadWordListURL), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); + [DataMember] + public bool EnableBadWordListURL + { + get { return (bool)GetValue(EnableBadWordListURLProperty); } + set { SetValue(EnableBadWordListURLProperty, value); } + } + + public static readonly DependencyProperty BadWordListURLProperty = DependencyProperty.Register(nameof(BadWordListURL), typeof(string), typeof(ServerProfile), new PropertyMetadata("")); + [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, ConditionedOn = nameof(EnableBadWordListURL), QuotedString = QuotedStringType.True)] + public string BadWordListURL + { + get { return (string)GetValue(BadWordListURLProperty); } + set { SetValue(BadWordListURLProperty, value); } + } + + public static readonly DependencyProperty EnableBadWordWhiteListURLProperty = DependencyProperty.Register(nameof(EnableBadWordWhiteListURL), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); + [DataMember] + public bool EnableBadWordWhiteListURL + { + get { return (bool)GetValue(EnableBadWordWhiteListURLProperty); } + set { SetValue(EnableBadWordWhiteListURLProperty, value); } + } + + public static readonly DependencyProperty BadWordWhiteListURLProperty = DependencyProperty.Register(nameof(BadWordWhiteListURL), typeof(string), typeof(ServerProfile), new PropertyMetadata("")); + [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, ConditionedOn = nameof(EnableBadWordWhiteListURL), QuotedString = QuotedStringType.True)] + public string BadWordWhiteListURL + { + get { return (string)GetValue(BadWordWhiteListURLProperty); } + set { SetValue(BadWordWhiteListURLProperty, value); } + } + + public static readonly DependencyProperty FilterTribeNamesProperty = DependencyProperty.Register(nameof(FilterTribeNames), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); + [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, "bFilterTribeNames")] + public bool FilterTribeNames + { + get { return (bool)GetValue(FilterTribeNamesProperty); } + set { SetValue(FilterTribeNamesProperty, value); } + } + + public static readonly DependencyProperty FilterCharacterNamesProperty = DependencyProperty.Register(nameof(FilterCharacterNames), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); + [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, "bFilterCharacterNames")] + public bool FilterCharacterNames + { + get { return (bool)GetValue(FilterCharacterNamesProperty); } + set { SetValue(FilterCharacterNamesProperty, value); } + } + + public static readonly DependencyProperty FilterChatProperty = DependencyProperty.Register(nameof(FilterChat), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false)); + [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, "bFilterChat")] + public bool FilterChat + { + get { return (bool)GetValue(FilterChatProperty); } + set { SetValue(FilterChatProperty, value); } + } + public static readonly DependencyProperty OutputServerLogProperty = DependencyProperty.Register(nameof(OutputServerLog), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true)); [DataMember] public bool OutputServerLog @@ -1914,11 +1954,11 @@ namespace ServerManagerTool.Lib set { SetValue(Ragnarok_EnableVolcanoProperty, value); } } - public static readonly DependencyProperty Ragnarok_VolcanoIntervalProperty = DependencyProperty.Register(nameof(Ragnarok_VolcanoInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(0)); + public static readonly DependencyProperty Ragnarok_VolcanoIntervalProperty = DependencyProperty.Register(nameof(Ragnarok_VolcanoInterval), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f)); [IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_Ragnarok, ServerProfileCategory.Rules, "VolcanoInterval", ConditionedOn = nameof(Ragnarok_EnableSettings), ClearSectionIfEmpty = true)] - public int Ragnarok_VolcanoInterval + public float Ragnarok_VolcanoInterval { - get { return (int)GetValue(Ragnarok_VolcanoIntervalProperty); } + get { return (float)GetValue(Ragnarok_VolcanoIntervalProperty); } set { SetValue(Ragnarok_VolcanoIntervalProperty, value); } } @@ -2562,6 +2602,14 @@ namespace ServerManagerTool.Lib set { SetValue(BabyCuddleLoseImprintQualitySpeedMultiplierProperty, value); } } + public static readonly DependencyProperty ImprintlimitProperty = DependencyProperty.Register(nameof(Imprintlimit), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 101))); + [DataMember] + public NullableValue Imprintlimit + { + get { return (NullableValue)GetValue(ImprintlimitProperty); } + set { SetValue(ImprintlimitProperty, value); } + } + public static readonly DependencyProperty WildDinoCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(WildDinoCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f)); [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos, WriteIfNotValue = 1.0f)] public float WildDinoCharacterFoodDrainMultiplier @@ -4085,17 +4133,6 @@ namespace ServerManagerTool.Lib serverArgs.Append(" -nomansky"); } - if (this.UseAllAvailableCores) - { - serverArgs.Append(" -useallavailablecores"); - } - - if (this.UseCache) - { - serverArgs.Append(" -usecache"); - } - - if (this.UseNoMemoryBias) { serverArgs.Append(" -nomemorybias"); @@ -4189,6 +4226,11 @@ namespace ServerManagerTool.Lib serverArgs.Append(" -MinimumTimeBetweenInventoryRetrieval=").Append(this.MinimumTimeBetweenInventoryRetrieval); } + if (this.Imprintlimit.HasValue) + { + serverArgs.Append(" -imprintlimit=").Append(this.Imprintlimit); + } + return serverArgs.ToString(); } @@ -5398,8 +5440,6 @@ namespace ServerManagerTool.Lib this.ClearValue(DisableAntiSpeedHackDetectionProperty); this.ClearValue(SpeedHackBiasProperty); this.ClearValue(UseBattlEyeProperty); - this.ClearValue(UseAllAvailableCoresProperty); - this.ClearValue(UseCacheProperty); this.ClearValue(ForceRespawnDinosProperty); this.ClearValue(EnableServerAutoForceRespawnWildDinosIntervalProperty); @@ -5432,6 +5472,17 @@ namespace ServerManagerTool.Lib this.ClearValue(ClusterDirOverrideProperty); } + public void ResetServerBadWordFilterOptions() + { + this.ClearValue(EnableBadWordListURLProperty); + this.ClearValue(EnableBadWordWhiteListURLProperty); + this.ClearValue(BadWordListURLProperty); + this.ClearValue(BadWordWhiteListURLProperty); + this.ClearValue(FilterTribeNamesProperty); + this.ClearValue(FilterCharacterNamesProperty); + this.ClearValue(FilterChatProperty); + } + public void ResetServerLogOptions() { this.ClearValue(EnableServerAdminLogsProperty); @@ -5482,6 +5533,7 @@ namespace ServerManagerTool.Lib this.ClearNullableValue(MOTDIntervalProperty); ResetServerOptions(); + ResetServerBadWordFilterOptions(); ResetServerLogOptions(); this.ClearValue(EnableWebAlarmProperty); @@ -5578,6 +5630,7 @@ namespace ServerManagerTool.Lib this.ClearValue(BabyCuddleIntervalMultiplierProperty); this.ClearValue(BabyCuddleGracePeriodMultiplierProperty); this.ClearValue(BabyCuddleLoseImprintQualitySpeedMultiplierProperty); + this.ClearValue(ImprintlimitProperty); this.ClearValue(WildDinoCharacterFoodDrainMultiplierProperty); this.ClearValue(TamedDinoCharacterFoodDrainMultiplierProperty); @@ -6072,8 +6125,6 @@ namespace ServerManagerTool.Lib this.SetValue(DisablePlayerMovePhysicsOptimizationProperty, sourceProfile.DisablePlayerMovePhysicsOptimization); this.SetValue(DisableAntiSpeedHackDetectionProperty, sourceProfile.DisableAntiSpeedHackDetection); this.SetValue(SpeedHackBiasProperty, sourceProfile.SpeedHackBias); - this.SetValue(UseAllAvailableCoresProperty, sourceProfile.UseAllAvailableCores); - this.SetValue(UseCacheProperty, sourceProfile.UseCache); this.SetValue(UseNoHangDetectionProperty, sourceProfile.UseNoHangDetection); this.SetValue(NoDinosProperty, sourceProfile.NoDinos); this.SetValue(NoUnderMeshCheckingProperty, sourceProfile.NoUnderMeshChecking); @@ -6102,6 +6153,15 @@ namespace ServerManagerTool.Lib this.SetValue(UseItemDupeCheckProperty, sourceProfile.UseItemDupeCheck); this.SetValue(UseSecureSpawnRulesProperty, sourceProfile.UseSecureSpawnRules); + // server filter options + this.SetValue(EnableBadWordListURLProperty, sourceProfile.EnableBadWordListURL); + this.SetValue(EnableBadWordWhiteListURLProperty, sourceProfile.EnableBadWordWhiteListURL); + this.SetValue(BadWordListURLProperty, sourceProfile.BadWordListURL); + this.SetValue(BadWordWhiteListURLProperty, sourceProfile.BadWordWhiteListURL); + this.SetValue(FilterTribeNamesProperty, sourceProfile.FilterTribeNames); + this.SetValue(FilterCharacterNamesProperty, sourceProfile.FilterCharacterNames); + this.SetValue(FilterChatProperty, sourceProfile.FilterChat); + // server log options this.SetValue(EnableServerAdminLogsProperty, sourceProfile.EnableServerAdminLogs); this.SetValue(ServerAdminLogsIncludeTribeLogsProperty, sourceProfile.ServerAdminLogsIncludeTribeLogs); @@ -6249,6 +6309,7 @@ namespace ServerManagerTool.Lib this.SetValue(BabyCuddleIntervalMultiplierProperty, sourceProfile.BabyCuddleIntervalMultiplier); this.SetValue(BabyCuddleGracePeriodMultiplierProperty, sourceProfile.BabyCuddleGracePeriodMultiplier); this.SetValue(BabyCuddleLoseImprintQualitySpeedMultiplierProperty, sourceProfile.BabyCuddleLoseImprintQualitySpeedMultiplier); + this.SetValue(ImprintlimitProperty, sourceProfile.Imprintlimit); this.SetValue(WildDinoCharacterFoodDrainMultiplierProperty, sourceProfile.WildDinoCharacterFoodDrainMultiplier); this.SetValue(TamedDinoCharacterFoodDrainMultiplierProperty, sourceProfile.TamedDinoCharacterFoodDrainMultiplier); diff --git a/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml b/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml index ff550d39..9cdd1ace 100644 --- a/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml +++ b/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml @@ -419,6 +419,9 @@ + + + diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml index b1df4789..3bba2dd9 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml @@ -1040,6 +1040,7 @@ + @@ -1065,25 +1066,23 @@ - - - - - - - - - - - + + + + + + + + + - - + + - + - -