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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+