diff --git a/src/ARKServerManager/Globalization/en-US/en-US.xaml b/src/ARKServerManager/Globalization/en-US/en-US.xaml index 33695cc3..f7e6b550 100644 --- a/src/ARKServerManager/Globalization/en-US/en-US.xaml +++ b/src/ARKServerManager/Globalization/en-US/en-US.xaml @@ -1310,6 +1310,17 @@ Specifies the multiplier for damage done by creatures, after they have been released from a cryopod. Lower values means the damage done by the creature will be lower (eg. 0.01 means 99% of the damage is removed). Incoming Damage Multiplier Percent Specifies the percentage increase to the incoming damage multiplier of a creature, after they have been released from a cryopod. Higher values means more incoming damage done to the creature (eg. 0.25 = 25% more damage). + + Item Stat Clamps + WARNING: This will permanently change the stats of any existing items so make sure to backup your current save before modifying and playing with the clamping values. + Generic Quality + Armor + Max Durability + Weapon Damage Percent + Weapon Clip Ammo + Hypo Insulation + Weight + Hyper Insulation diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index ccbc64fa..99cbc3bb 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -1666,6 +1666,85 @@ namespace ServerManagerTool.Lib get { return (float)GetValue(HexagonCostMultiplierProperty); } set { SetValue(HexagonCostMultiplierProperty, value); } } + + public bool ClampItemStats + { + get + { + return ItemStatClamps_GenericQuality.HasValue + || ItemStatClamps_Armor.HasValue + || ItemStatClamps_MaxDurability.HasValue + || ItemStatClamps_WeaponDamagePercent.HasValue + || ItemStatClamps_WeaponClipAmmo.HasValue + || ItemStatClamps_HypothermalInsulation.HasValue + || ItemStatClamps_Weight.HasValue + || ItemStatClamps_HyperthermalInsulation.HasValue; + } + } + + public static readonly DependencyProperty ItemStatClamps_GenericQualityProperty = DependencyProperty.Register(nameof(ItemStatClamps_GenericQuality), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[0]")] + public NullableValue ItemStatClamps_GenericQuality + { + get { return (NullableValue)GetValue(ItemStatClamps_GenericQualityProperty); } + set { SetValue(ItemStatClamps_GenericQualityProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_ArmorProperty = DependencyProperty.Register(nameof(ItemStatClamps_Armor), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[1]")] + public NullableValue ItemStatClamps_Armor + { + get { return (NullableValue)GetValue(ItemStatClamps_ArmorProperty); } + set { SetValue(ItemStatClamps_ArmorProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_MaxDurabilityProperty = DependencyProperty.Register(nameof(ItemStatClamps_MaxDurability), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[2]")] + public NullableValue ItemStatClamps_MaxDurability + { + get { return (NullableValue)GetValue(ItemStatClamps_MaxDurabilityProperty); } + set { SetValue(ItemStatClamps_MaxDurabilityProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_WeaponDamagePercentProperty = DependencyProperty.Register(nameof(ItemStatClamps_WeaponDamagePercent), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[3]")] + public NullableValue ItemStatClamps_WeaponDamagePercent + { + get { return (NullableValue)GetValue(ItemStatClamps_WeaponDamagePercentProperty); } + set { SetValue(ItemStatClamps_WeaponDamagePercentProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_WeaponClipAmmoProperty = DependencyProperty.Register(nameof(ItemStatClamps_WeaponClipAmmo), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[4]")] + public NullableValue ItemStatClamps_WeaponClipAmmo + { + get { return (NullableValue)GetValue(ItemStatClamps_WeaponClipAmmoProperty); } + set { SetValue(ItemStatClamps_WeaponClipAmmoProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_HypothermalInsulationProperty = DependencyProperty.Register(nameof(ItemStatClamps_HypothermalInsulation), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[5]")] + public NullableValue ItemStatClamps_HypothermalInsulation + { + get { return (NullableValue)GetValue(ItemStatClamps_HypothermalInsulationProperty); } + set { SetValue(ItemStatClamps_HypothermalInsulationProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_WeightProperty = DependencyProperty.Register(nameof(ItemStatClamps_Weight), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[6]")] + public NullableValue ItemStatClamps_Weight + { + get { return (NullableValue)GetValue(ItemStatClamps_WeightProperty); } + set { SetValue(ItemStatClamps_WeightProperty, value); } + } + + public static readonly DependencyProperty ItemStatClamps_HyperthermalInsulationProperty = DependencyProperty.Register(nameof(ItemStatClamps_HyperthermalInsulation), typeof(NullableValue), typeof(ServerProfile), new PropertyMetadata(new NullableValue(false, 0))); + [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "ItemStatClamps[7]")] + public NullableValue ItemStatClamps_HyperthermalInsulation + { + get { return (NullableValue)GetValue(ItemStatClamps_HyperthermalInsulationProperty); } + set { SetValue(ItemStatClamps_HyperthermalInsulationProperty, value); } + } #endregion #region Chat and Notifications @@ -3499,6 +3578,11 @@ namespace ServerManagerTool.Lib serverArgs.Append($"?AllowCrateSpawnsOnTopOfStructures={this.AllowCrateSpawnsOnTopOfStructures}"); + if (this.ClampItemStats) + { + serverArgs.Append("?ClampItemStats=true"); + } + if (Config.Default.SectionSOTFEnabled && this.SOTF_Enabled) { serverArgs.Append("?EvoEventInterval=").Append(this.SOTF_EvoEventInterval); @@ -5314,6 +5398,15 @@ namespace ServerManagerTool.Lib this.ClearValue(HexStoreAllowOnlyEngramTradeOptionProperty); this.ClearValue(HexagonRewardMultiplierProperty); this.ClearValue(HexagonCostMultiplierProperty); + + this.ClearNullableValue(ItemStatClamps_GenericQualityProperty); + this.ClearNullableValue(ItemStatClamps_ArmorProperty); + this.ClearNullableValue(ItemStatClamps_MaxDurabilityProperty); + this.ClearNullableValue(ItemStatClamps_WeaponDamagePercentProperty); + this.ClearNullableValue(ItemStatClamps_WeaponClipAmmoProperty); + this.ClearNullableValue(ItemStatClamps_HypothermalInsulationProperty); + this.ClearNullableValue(ItemStatClamps_WeightProperty); + this.ClearNullableValue(ItemStatClamps_HyperthermalInsulationProperty); } public void ResetSOTFSection() @@ -5970,6 +6063,15 @@ namespace ServerManagerTool.Lib this.SetValue(HexStoreAllowOnlyEngramTradeOptionProperty, sourceProfile.HexStoreAllowOnlyEngramTradeOption); this.SetValue(HexagonRewardMultiplierProperty, sourceProfile.HexagonRewardMultiplier); this.SetValue(HexagonCostMultiplierProperty, sourceProfile.HexagonCostMultiplier); + + this.SetNullableValue(ItemStatClamps_GenericQualityProperty, sourceProfile.ItemStatClamps_GenericQuality); + this.SetNullableValue(ItemStatClamps_ArmorProperty, sourceProfile.ItemStatClamps_Armor); + this.SetNullableValue(ItemStatClamps_MaxDurabilityProperty, sourceProfile.ItemStatClamps_MaxDurability); + this.SetNullableValue(ItemStatClamps_WeaponDamagePercentProperty, sourceProfile.ItemStatClamps_WeaponDamagePercent); + this.SetNullableValue(ItemStatClamps_WeaponClipAmmoProperty, sourceProfile.ItemStatClamps_WeaponClipAmmo); + this.SetNullableValue(ItemStatClamps_HypothermalInsulationProperty, sourceProfile.ItemStatClamps_HypothermalInsulation); + this.SetNullableValue(ItemStatClamps_WeightProperty, sourceProfile.ItemStatClamps_Weight); + this.SetNullableValue(ItemStatClamps_HyperthermalInsulationProperty, sourceProfile.ItemStatClamps_HyperthermalInsulation); } private void SyncServerFiles(ServerProfile sourceProfile) diff --git a/src/ARKServerManager/Windows/ServerSettingsControl.xaml b/src/ARKServerManager/Windows/ServerSettingsControl.xaml index 8a75121b..3f72e0dd 100644 --- a/src/ARKServerManager/Windows/ServerSettingsControl.xaml +++ b/src/ARKServerManager/Windows/ServerSettingsControl.xaml @@ -2357,6 +2357,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +