asm: add new config options

This commit is contained in:
Lacoi 2023-08-09 18:21:19 +02:00
parent 3e5ef04045
commit 6e3a6b9890
23 changed files with 1304 additions and 74 deletions

View file

@ -210,6 +210,8 @@ namespace ServerManagerTool.Lib
public static DinoTamable IsTameableForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.IsTameable ?? DinoTamable.True;
public static DinoBreedingable IsBreedingableForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.IsBreedingable ?? DinoBreedingable.True;
public static string NameTagForClass(string className, bool returnEmptyIfNotFound = false) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.NameTag ?? (returnEmptyIfNotFound ? string.Empty : className);
public static string FriendlyCreatureNameForClass(string className, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.Creatures?.FirstOrDefault(i => i.ClassName.Equals(className))?.Description ?? (returnEmptyIfNotFound ? string.Empty : className);

View file

@ -0,0 +1,105 @@
using ServerManagerTool.Common.Attibutes;
using ServerManagerTool.Common.Model;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Windows;
namespace ServerManagerTool.Lib
{
[DataContract]
public class ExcludeItemIndicesOverrideList : AggregateIniValueList<ExcludeItemIndicesOverride>
{
public ExcludeItemIndicesOverrideList(string aggregateValueName)
: base(aggregateValueName, null)
{
}
public IEnumerable<string> RenderToView()
{
Update();
return new List<string>();
}
public void RenderToModel()
{
}
public void Update()
{
IsEnabled = this.Count > 0;
foreach (var excludeItemIndices in this)
excludeItemIndices.Update();
}
}
[DataContract]
public class ExcludeItemIndicesOverride : AggregateIniValue
{
public static readonly DependencyProperty ItemIdProperty = DependencyProperty.Register(nameof(ItemId), typeof(Int64), typeof(ExcludeItemIndicesOverride), new PropertyMetadata(0L));
[DataMember]
[AggregateIniValueEntry(QuotedString = false, ExcludePropertyName = true)]
public Int64 ItemId
{
get { return (Int64)GetValue(ItemIdProperty); }
set { SetValue(ItemIdProperty, value); }
}
public override string GetSortKey()
{
return null;
}
public override bool IsEquivalent(AggregateIniValue other)
{
return false;
}
public override void InitializeFromINIValue(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
Update();
return;
}
var kvPair = value.Split(new[] { '=' }, 2);
Int64.TryParse(kvPair[1].Trim(' '), out Int64 kvValue);
if (kvValue <= 0)
{
Update();
return;
}
ItemId = kvValue;
}
public override string ToINIValue()
{
return base.ToComplexINIValue(false);
}
public bool IsValid => (ItemId > 0);
public override bool ShouldSave()
{
return IsValid;
}
public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(ExcludeItemIndicesOverride), new PropertyMetadata("N"));
public string ValidStatus
{
get { return (string)GetValue(ValidStatusProperty); }
set { SetValue(ValidStatusProperty, value); }
}
public void Update()
{
ValidStatus = IsValid ? "Y" : "W";
}
}
}

View file

@ -70,12 +70,13 @@ namespace ServerManagerTool.Lib
// initialise the complex properties
this.DinoSpawnWeightMultipliers = new AggregateIniValueList<DinoSpawn>(nameof(DinoSpawnWeightMultipliers), GameData.GetDinoSpawns);
this.PreventDinoTameClassNames = new StringIniValueList(nameof(PreventDinoTameClassNames), () => new string[0] );
this.PreventBreedingForClassNames = new StringIniValueList(nameof(PreventBreedingForClassNames), () => new string[0]);
this.NPCReplacements = new AggregateIniValueList<NPCReplacement>(nameof(NPCReplacements), GameData.GetNPCReplacements);
this.TamedDinoClassDamageMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(TamedDinoClassDamageMultipliers), GameData.GetDinoMultipliers);
this.TamedDinoClassResistanceMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(TamedDinoClassResistanceMultipliers), GameData.GetDinoMultipliers);
this.DinoClassDamageMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(DinoClassDamageMultipliers), GameData.GetDinoMultipliers);
this.DinoClassResistanceMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(DinoClassResistanceMultipliers), GameData.GetDinoMultipliers);
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.PreventBreedingForClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoLevels = new LevelList();
this.PlayerLevels = new LevelList();
@ -97,6 +98,7 @@ namespace ServerManagerTool.Lib
this.ConfigOverrideItemCraftingCosts = new CraftingOverrideList(nameof(ConfigOverrideItemCraftingCosts));
this.ConfigOverrideItemMaxQuantity = new StackSizeOverrideList(nameof(ConfigOverrideItemMaxQuantity));
this.ConfigOverrideSupplyCrateItems = new SupplyCrateOverrideList(nameof(ConfigOverrideSupplyCrateItems));
this.ExcludeItemIndices = new ExcludeItemIndicesOverrideList(nameof(ExcludeItemIndices));
this.PreventTransferForClassNames = new PreventTransferOverrideList(nameof(PreventTransferForClassNames));
this.ConfigAddNPCSpawnEntriesContainer = new NPCSpawnContainerList<NPCSpawnContainer>(nameof(ConfigAddNPCSpawnEntriesContainer), NPCSpawnContainerType.Add);
@ -315,6 +317,38 @@ namespace ServerManagerTool.Lib
set { SetValue(BanListURLProperty, value); }
}
public static readonly DependencyProperty EnableCustomDynamicConfigUrlProperty = DependencyProperty.Register(nameof(EnableCustomDynamicConfigUrl), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool EnableCustomDynamicConfigUrl
{
get { return (bool)GetValue(EnableCustomDynamicConfigUrlProperty); }
set { SetValue(EnableCustomDynamicConfigUrlProperty, value); }
}
public static readonly DependencyProperty CustomDynamicConfigUrlProperty = DependencyProperty.Register(nameof(CustomDynamicConfigUrl), typeof(string), typeof(ServerProfile), new PropertyMetadata(""));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, ConditionedOn = nameof(EnableCustomDynamicConfigUrl), QuotedString = QuotedStringType.True)]
public string CustomDynamicConfigUrl
{
get { return (string)GetValue(CustomDynamicConfigUrlProperty); }
set { SetValue(CustomDynamicConfigUrlProperty, value); }
}
public static readonly DependencyProperty EnableCustomLiveTuningUrlProperty = DependencyProperty.Register(nameof(EnableCustomLiveTuningUrl), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool EnableCustomLiveTuningUrl
{
get { return (bool)GetValue(EnableCustomLiveTuningUrlProperty); }
set { SetValue(EnableCustomLiveTuningUrlProperty, value); }
}
public static readonly DependencyProperty CustomLiveTuningUrlProperty = DependencyProperty.Register(nameof(CustomLiveTuningUrl), typeof(string), typeof(ServerProfile), new PropertyMetadata(""));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Administration, ConditionedOn = nameof(EnableCustomLiveTuningUrl), QuotedString = QuotedStringType.True)]
public string CustomLiveTuningUrl
{
get { return (string)GetValue(CustomLiveTuningUrlProperty); }
set { SetValue(CustomLiveTuningUrlProperty, value); }
}
public static readonly DependencyProperty MaxPlayersProperty = DependencyProperty.Register(nameof(MaxPlayers), typeof(int), typeof(ServerProfile), new PropertyMetadata(70));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_GameSession, ServerProfileCategory.Administration)]
public int MaxPlayers
@ -669,6 +703,14 @@ namespace ServerManagerTool.Lib
set { SetValue(StructureMemoryOptimizationsProperty, value); }
}
public static readonly DependencyProperty UseStructureStasisGridProperty = DependencyProperty.Register(nameof(UseStructureStasisGrid), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool UseStructureStasisGrid
{
get { return (bool)GetValue(UseStructureStasisGridProperty); }
set { SetValue(UseStructureStasisGridProperty, value); }
}
public static readonly DependencyProperty NoUnderMeshCheckingProperty = DependencyProperty.Register(nameof(NoUnderMeshChecking), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool NoUnderMeshChecking
@ -1115,6 +1157,14 @@ namespace ServerManagerTool.Lib
#endregion
#region Server Details
public static readonly DependencyProperty CultureProperty = DependencyProperty.Register(nameof(Culture), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
public string Culture
{
get { return (string)GetValue(CultureProperty); }
set { SetValue(CultureProperty, value); }
}
public static readonly DependencyProperty BranchNameProperty = DependencyProperty.Register(nameof(BranchName), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
public string BranchName
@ -1197,6 +1247,22 @@ namespace ServerManagerTool.Lib
set { SetValue(DisableFriendlyFirePvEProperty, value); }
}
public static readonly DependencyProperty AllowCaveBuildingPvPProperty = DependencyProperty.Register(nameof(AllowCaveBuildingPvP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Rules, "AllowCaveBuildingPvP")]
public bool AllowCaveBuildingPvP
{
get { return (bool)GetValue(AllowCaveBuildingPvPProperty); }
set { SetValue(AllowCaveBuildingPvPProperty, value); }
}
public static readonly DependencyProperty DisableRailgunPVPProperty = DependencyProperty.Register(nameof(DisableRailgunPVP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool DisableRailgunPVP
{
get { return (bool)GetValue(DisableRailgunPVPProperty); }
set { SetValue(DisableRailgunPVPProperty, value); }
}
public static readonly DependencyProperty DisableLootCratesProperty = DependencyProperty.Register(nameof(DisableLootCrates), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "bDisableLootCrates")]
public bool DisableLootCrates
@ -1221,6 +1287,14 @@ namespace ServerManagerTool.Lib
set { SetValue(EnableExtraStructurePreventionVolumesProperty, value); }
}
public static readonly DependencyProperty UseSingleplayerSettingsProperty = DependencyProperty.Register(nameof(UseSingleplayerSettings), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules, "bUseSingleplayerSettings", ConditionedOn = nameof(UseSingleplayerSettings))]
public bool UseSingleplayerSettings
{
get { return (bool)GetValue(UseSingleplayerSettingsProperty); }
set { SetValue(UseSingleplayerSettingsProperty, value); }
}
public static readonly DependencyProperty EnableDifficultyOverrideProperty = DependencyProperty.Register(nameof(EnableDifficultyOverride), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
public bool EnableDifficultyOverride
{
@ -1333,6 +1407,14 @@ namespace ServerManagerTool.Lib
set { SetValue(NoTransferFromFilteringProperty, value); }
}
public static readonly DependencyProperty DisableCustomFoldersInTributeInventoriesProperty = DependencyProperty.Register(nameof(DisableCustomFoldersInTributeInventories), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool DisableCustomFoldersInTributeInventories
{
get { return (bool)GetValue(DisableCustomFoldersInTributeInventoriesProperty); }
set { SetValue(DisableCustomFoldersInTributeInventoriesProperty, value); }
}
public static readonly DependencyProperty OverrideTributeCharacterExpirationSecondsProperty = DependencyProperty.Register(nameof(OverrideTributeCharacterExpirationSeconds), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
public bool OverrideTributeCharacterExpirationSeconds
@ -1868,6 +1950,14 @@ namespace ServerManagerTool.Lib
set { SetValue(WorldBuffScalingEfficacyProperty, value); }
}
public static readonly DependencyProperty AdjustableMutagenSpawnDelayMultiplierProperty = DependencyProperty.Register(nameof(AdjustableMutagenSpawnDelayMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Rules)]
public float AdjustableMutagenSpawnDelayMultiplier
{
get { return (float)GetValue(AdjustableMutagenSpawnDelayMultiplierProperty); }
set { SetValue(AdjustableMutagenSpawnDelayMultiplierProperty, value); }
}
public static readonly DependencyProperty EnableCryoSicknessPVEProperty = DependencyProperty.Register(nameof(EnableCryoSicknessPVE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Rules)]
public bool EnableCryoSicknessPVE
@ -2412,6 +2502,14 @@ namespace ServerManagerTool.Lib
set { SetValue(AutoDestroyDecayedDinosProperty, value); }
}
public static readonly DependencyProperty UseDinoLevelUpAnimationsProperty = DependencyProperty.Register(nameof(UseDinoLevelUpAnimations), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos, "bUseDinoLevelUpAnimations")]
public bool UseDinoLevelUpAnimations
{
get { return (bool)GetValue(UseDinoLevelUpAnimationsProperty); }
set { SetValue(UseDinoLevelUpAnimationsProperty, value); }
}
public static readonly DependencyProperty PvEDinoDecayPeriodMultiplierProperty = DependencyProperty.Register(nameof(PvEDinoDecayPeriodMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Dinos, WriteIfNotValue = 1.0f)]
public float PvEDinoDecayPeriodMultiplier
@ -2428,6 +2526,14 @@ namespace ServerManagerTool.Lib
set { SetValue(AllowMultipleAttachedC4Property, value); }
}
public static readonly DependencyProperty AllowUnclaimDinosProperty = DependencyProperty.Register(nameof(AllowUnclaimDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos, "bAllowUnclaimDinos")]
public bool AllowUnclaimDinos
{
get { return (bool)GetValue(AllowUnclaimDinosProperty); }
set { SetValue(AllowUnclaimDinosProperty, value); }
}
public static readonly DependencyProperty DisableDinoRidingProperty = DependencyProperty.Register(nameof(DisableDinoRiding), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos, "bDisableDinoRiding", ConditionedOn = nameof(DisableDinoRiding))]
public bool DisableDinoRiding
@ -2444,6 +2550,14 @@ namespace ServerManagerTool.Lib
set { SetValue(DisableDinoTamingProperty, value); }
}
public static readonly DependencyProperty DisableDinoBreedingProperty = DependencyProperty.Register(nameof(DisableDinoBreeding), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos, "bDisableDinoBreeding", ConditionedOn = nameof(DisableDinoBreeding))]
public bool DisableDinoBreeding
{
get { return (bool)GetValue(DisableDinoBreedingProperty); }
set { SetValue(DisableDinoBreedingProperty, value); }
}
public static readonly DependencyProperty MaxTamedDinosProperty = DependencyProperty.Register(nameof(MaxTamedDinos), typeof(int), typeof(ServerProfile), new PropertyMetadata(5000));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Dinos)]
public int MaxTamedDinos
@ -2739,6 +2853,14 @@ namespace ServerManagerTool.Lib
set { SetValue(PreventDinoTameClassNamesProperty, value); }
}
public static readonly DependencyProperty PreventBreedingForClassNamesProperty = DependencyProperty.Register(nameof(PreventBreedingForClassNames), typeof(StringIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Dinos)]
public StringIniValueList PreventBreedingForClassNames
{
get { return (StringIniValueList)GetValue(PreventBreedingForClassNamesProperty); }
set { SetValue(PreventBreedingForClassNamesProperty, value); }
}
public static readonly DependencyProperty DinoSettingsProperty = DependencyProperty.Register(nameof(DinoSettings), typeof(DinoSettingsList), typeof(ServerProfile), new PropertyMetadata(null));
public DinoSettingsList DinoSettings
{
@ -3158,6 +3280,14 @@ namespace ServerManagerTool.Lib
set { SetValue(DisableStructurePlacementCollisionProperty, value); }
}
public static readonly DependencyProperty IgnoreLimitMaxStructuresInRangeTypeFlagProperty = DependencyProperty.Register(nameof(IgnoreLimitMaxStructuresInRangeTypeFlag), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.Structures)]
public bool IgnoreLimitMaxStructuresInRangeTypeFlag
{
get { return (bool)GetValue(IgnoreLimitMaxStructuresInRangeTypeFlagProperty); }
set { SetValue(IgnoreLimitMaxStructuresInRangeTypeFlagProperty, value); }
}
public static readonly DependencyProperty EnableFastDecayIntervalProperty = DependencyProperty.Register(nameof(EnableFastDecayInterval), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
public bool EnableFastDecayInterval
{
@ -3237,6 +3367,14 @@ namespace ServerManagerTool.Lib
set { SetValue(AllowIntegratedSPlusStructuresProperty, value); }
}
public static readonly DependencyProperty IgnoreStructuresPreventionVolumesProperty = DependencyProperty.Register(nameof(IgnoreStructuresPreventionVolumes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Structures, "bIgnoreStructuresPreventionVolumes")]
public bool IgnoreStructuresPreventionVolumes
{
get { return (bool)GetValue(IgnoreStructuresPreventionVolumesProperty); }
set { SetValue(IgnoreStructuresPreventionVolumesProperty, value); }
}
public static readonly DependencyProperty GenesisUseStructuresPreventionVolumesProperty = DependencyProperty.Register(nameof(GenesisUseStructuresPreventionVolumes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.Structures, "bGenesisUseStructuresPreventionVolumes")]
public bool GenesisUseStructuresPreventionVolumes
@ -3472,6 +3610,16 @@ namespace ServerManagerTool.Lib
}
#endregion
#region Exclude Item Indices Overrides
public static readonly DependencyProperty ExcludeItemIndicesProperty = DependencyProperty.Register(nameof(ExcludeItemIndices), typeof(ExcludeItemIndicesOverrideList), typeof(ServerProfile), new PropertyMetadata(null));
[IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.ExcludeItemIndicesOverrides)]
public ExcludeItemIndicesOverrideList ExcludeItemIndices
{
get { return (ExcludeItemIndicesOverrideList)GetValue(ExcludeItemIndicesProperty); }
set { SetValue(ExcludeItemIndicesProperty, value); }
}
#endregion
#region Stacking Overrides
public static readonly DependencyProperty ItemStackSizeMultiplierProperty = DependencyProperty.Register(nameof(ItemStackSizeMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[IniFileEntry(IniFiles.GameUserSettings, IniSections.GUS_ServerSettings, ServerProfileCategory.StackSizeOverrides, WriteIfNotValue = 1.0f)]
@ -4021,6 +4169,11 @@ namespace ServerManagerTool.Lib
}
}
if (this.DisableCustomFoldersInTributeInventories)
{
serverArgs.Append(" -DisableCustomFoldersInTributeInventories");
}
if (this.EnableWebAlarm)
{
serverArgs.Append(" -webalarm");
@ -4130,6 +4283,11 @@ namespace ServerManagerTool.Lib
serverArgs.Append(" -structurememopts");
}
if (this.UseStructureStasisGrid)
{
serverArgs.Append(" -UseStructureStasisGrid");
}
if (this.SecureSendArKPayload)
{
serverArgs.Append(" -SecureSendArKPayload");
@ -4170,11 +4328,21 @@ namespace ServerManagerTool.Lib
serverArgs.Append(" -epiconly");
}
if (this.EnableCustomDynamicConfigUrl && !string.IsNullOrWhiteSpace(this.CustomDynamicConfigUrl))
{
serverArgs.Append(" -UseDynamicConfig ");
}
if ((this.Crossplay || this.EpicOnly) && this.EnablePublicIPForEpic)
{
serverArgs.Append($" -PublicIPForEpic={Config.Default.MachinePublicIP}");
}
if (this.DisableRailgunPVP)
{
serverArgs.Append(" -DisableRailgunPVP");
}
if (this.UseVivox)
{
serverArgs.Append(" -UseVivox");
@ -4198,6 +4366,11 @@ namespace ServerManagerTool.Lib
serverArgs.Append(" -imprintlimit=").Append(this.Imprintlimit);
}
if (!string.IsNullOrWhiteSpace(this.Culture))
{
serverArgs.Append(" -culture=").Append(this.Culture);
}
return serverArgs.ToString();
}
@ -4240,6 +4413,8 @@ namespace ServerManagerTool.Lib
profile.NPCSpawnSettings.RenderToView();
if (Config.Default.SectionSupplyCrateOverridesEnabled)
profile.ConfigOverrideSupplyCrateItems.RenderToView();
if (Config.Default.SectionExcludeItemIndicesOverridesEnabled)
profile.ExcludeItemIndices.RenderToView();
if (Config.Default.SectionCraftingOverridesEnabled)
profile.ConfigOverrideItemCraftingCosts.RenderToView();
if (Config.Default.SectionStackSizeOverridesEnabled)
@ -4320,6 +4495,8 @@ namespace ServerManagerTool.Lib
profile.NPCSpawnSettings.RenderToView();
if (Config.Default.SectionSupplyCrateOverridesEnabled)
profile.ConfigOverrideSupplyCrateItems.RenderToView();
if (Config.Default.SectionExcludeItemIndicesOverridesEnabled)
profile.ExcludeItemIndices.RenderToView();
if (Config.Default.SectionCraftingOverridesEnabled)
profile.ConfigOverrideItemCraftingCosts.RenderToView();
if (Config.Default.SectionStackSizeOverridesEnabled)
@ -4462,6 +4639,12 @@ namespace ServerManagerTool.Lib
this.ConfigOverrideSupplyCrateItems.RenderToModel();
}
if (Config.Default.SectionExcludeItemIndicesOverridesEnabled)
{
progressCallback?.Invoke(0, _globalizer.GetResourceString("ProfileSave_ConstructingExcludeItemIndicesInformation"));
this.ExcludeItemIndices.RenderToModel();
}
if (Config.Default.SectionCraftingOverridesEnabled)
{
progressCallback?.Invoke(0, _globalizer.GetResourceString("ProfileSave_ConstructingCraftingOverridesInformation"));
@ -5402,6 +5585,7 @@ namespace ServerManagerTool.Lib
public void ResetServerOptions()
{
this.ClearValue(CultureProperty);
this.ClearValue(DisableValveAntiCheatSystemProperty);
this.ClearValue(DisablePlayerMovePhysicsOptimizationProperty);
this.ClearValue(DisableAntiSpeedHackDetectionProperty);
@ -5421,6 +5605,7 @@ namespace ServerManagerTool.Lib
this.ClearValue(UseNoHangDetectionProperty);
this.ClearValue(ServerAllowAnselProperty);
this.ClearValue(StructureMemoryOptimizationsProperty);
this.ClearValue(UseStructureStasisGridProperty);
this.ClearValue(NoUnderMeshCheckingProperty);
this.ClearValue(NoUnderMeshKillingProperty);
this.ClearValue(NoDinosProperty);
@ -5477,6 +5662,10 @@ namespace ServerManagerTool.Lib
this.ClearValue(EnableBanListURLProperty);
this.ClearValue(BanListURLProperty);
this.ClearValue(EnableCustomDynamicConfigUrlProperty);
this.ClearValue(CustomDynamicConfigUrlProperty);
this.ClearValue(EnableCustomLiveTuningUrlProperty);
this.ClearValue(CustomLiveTuningUrlProperty);
this.ClearValue(MaxPlayersProperty);
this.ClearNullableValue(KickIdlePlayersPeriodProperty);
@ -5571,11 +5760,14 @@ namespace ServerManagerTool.Lib
this.ClearValue(DisableDinoDecayPvEProperty);
this.ClearValue(DisableDinoDecayPvPProperty);
this.ClearValue(AutoDestroyDecayedDinosProperty);
this.ClearValue(UseDinoLevelUpAnimationsProperty);
this.ClearValue(PvEDinoDecayPeriodMultiplierProperty);
this.ClearValue(AllowMultipleAttachedC4Property);
this.ClearValue(AllowUnclaimDinosProperty);
this.ClearValue(DisableDinoRidingProperty);
this.ClearValue(DisableDinoTamingProperty);
this.ClearValue(DisableDinoBreedingProperty);
this.ClearValue(MaxTamedDinosProperty);
this.ClearValue(MaxPersonalTamedDinosProperty);
this.ClearValue(PersonalTamedDinosSaddleStructureCostProperty);
@ -5613,13 +5805,14 @@ namespace ServerManagerTool.Lib
this.DinoSpawnWeightMultipliers = new AggregateIniValueList<DinoSpawn>(nameof(DinoSpawnWeightMultipliers), GameData.GetDinoSpawns);
this.PreventDinoTameClassNames = new StringIniValueList(nameof(PreventDinoTameClassNames), () => new string[0]);
this.PreventBreedingForClassNames = new StringIniValueList(nameof(PreventBreedingForClassNames), () => new string[0]);
this.NPCReplacements = new AggregateIniValueList<NPCReplacement>(nameof(NPCReplacements), GameData.GetNPCReplacements);
this.TamedDinoClassDamageMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(TamedDinoClassDamageMultipliers), GameData.GetDinoMultipliers);
this.TamedDinoClassResistanceMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(TamedDinoClassResistanceMultipliers), GameData.GetDinoMultipliers);
this.DinoClassDamageMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(DinoClassDamageMultipliers), GameData.GetDinoMultipliers);
this.DinoClassResistanceMultipliers = new AggregateIniValueList<ClassMultiplier>(nameof(DinoClassResistanceMultipliers), GameData.GetDinoMultipliers);
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.PreventBreedingForClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoSettings.RenderToView();
}
@ -5753,9 +5946,12 @@ namespace ServerManagerTool.Lib
this.ClearValue(AllowCaveBuildingPvEProperty);
this.ClearValue(DisableFriendlyFirePvPProperty);
this.ClearValue(DisableFriendlyFirePvEProperty);
this.ClearValue(AllowCaveBuildingPvPProperty);
this.ClearValue(DisableRailgunPVPProperty);
this.ClearValue(DisableLootCratesProperty);
this.ClearValue(AllowCrateSpawnsOnTopOfStructuresProperty);
this.ClearValue(EnableExtraStructurePreventionVolumesProperty);
this.ClearValue(UseSingleplayerSettingsProperty);
this.ClearValue(EnableDifficultyOverrideProperty);
this.ClearValue(OverrideOfficialDifficultyProperty);
@ -5773,6 +5969,7 @@ namespace ServerManagerTool.Lib
this.ClearNullableValue(MaxTributeItemsProperty);
this.ClearValue(NoTransferFromFilteringProperty);
this.ClearValue(DisableCustomFoldersInTributeInventoriesProperty);
this.ClearValue(OverrideTributeCharacterExpirationSecondsProperty);
this.ClearValue(OverrideTributeItemExpirationSecondsProperty);
this.ClearValue(OverrideTributeDinoExpirationSecondsProperty);
@ -5847,6 +6044,7 @@ namespace ServerManagerTool.Lib
this.ClearValue(DisableWorldBuffsProperty);
this.ClearValue(EnableWorldBuffScalingProperty);
this.ClearValue(WorldBuffScalingEfficacyProperty);
this.ClearValue(AdjustableMutagenSpawnDelayMultiplierProperty);
this.ClearValue(MaxHexagonsPerCharacterProperty);
this.ClearValue(DisableHexagonStoreProperty);
@ -5936,6 +6134,7 @@ namespace ServerManagerTool.Lib
this.ClearValue(FastDecayUnsnappedCoreStructuresProperty);
this.ClearValue(DestroyUnconnectedWaterPipesProperty);
this.ClearValue(DisableStructurePlacementCollisionProperty);
this.ClearValue(IgnoreLimitMaxStructuresInRangeTypeFlagProperty);
this.ClearValue(EnableFastDecayIntervalProperty);
this.ClearValue(FastDecayIntervalProperty);
this.ClearValue(LimitTurretsInRangeProperty);
@ -5946,6 +6145,7 @@ namespace ServerManagerTool.Lib
this.ClearValue(StructurePickupTimeAfterPlacementProperty);
this.ClearValue(StructurePickupHoldDurationProperty);
this.ClearValue(AllowIntegratedSPlusStructuresProperty);
this.ClearValue(IgnoreStructuresPreventionVolumesProperty);
this.ClearValue(GenesisUseStructuresPreventionVolumesProperty);
}
@ -5955,6 +6155,12 @@ namespace ServerManagerTool.Lib
this.ConfigOverrideSupplyCrateItems.Reset();
}
public void ResetExcludeItemIndicesOverridesSection()
{
this.ExcludeItemIndices = new ExcludeItemIndicesOverrideList(nameof(ExcludeItemIndices));
this.ExcludeItemIndices.Reset();
}
public void UpdateOverrideMaxExperiencePointsDino()
{
if (EnableLevelProgressions && EnableDinoLevelProgressions)
@ -6054,6 +6260,9 @@ namespace ServerManagerTool.Lib
case ServerProfileCategory.SupplyCrateOverrides:
SyncSupplyCrateOverridesSection(sourceProfile);
break;
case ServerProfileCategory.ExcludeItemIndicesOverrides:
SyncExcludeItemIndicesOverridesSection(sourceProfile);
break;
case ServerProfileCategory.StackSizeOverrides:
SyncStackSizeOverridesSection(sourceProfile);
break;
@ -6083,10 +6292,15 @@ namespace ServerManagerTool.Lib
this.SetValue(ExtinctionEventUTCProperty, sourceProfile.ExtinctionEventUTC);
// server options
this.SetValue(CultureProperty, sourceProfile.Culture);
this.SetValue(MaxPlayersProperty, sourceProfile.MaxPlayers);
this.SetNullableValue(KickIdlePlayersPeriodProperty, sourceProfile.KickIdlePlayersPeriod);
this.SetValue(EnableBanListURLProperty, sourceProfile.EnableBanListURL);
this.SetValue(BanListURLProperty, sourceProfile.BanListURL);
this.SetValue(EnableCustomDynamicConfigUrlProperty, sourceProfile.EnableCustomDynamicConfigUrl);
this.SetValue(CustomDynamicConfigUrlProperty, sourceProfile.CustomDynamicConfigUrl);
this.SetValue(EnableCustomLiveTuningUrlProperty, sourceProfile.EnableCustomLiveTuningUrl);
this.SetValue(CustomLiveTuningUrlProperty, sourceProfile.CustomLiveTuningUrl);
this.SetValue(DisableValveAntiCheatSystemProperty, sourceProfile.DisableValveAntiCheatSystem);
this.SetValue(UseBattlEyeProperty, sourceProfile.UseBattlEye);
this.SetValue(DisablePlayerMovePhysicsOptimizationProperty, sourceProfile.DisablePlayerMovePhysicsOptimization);
@ -6109,6 +6323,7 @@ namespace ServerManagerTool.Lib
this.SetValue(StasisKeepControllersProperty, sourceProfile.StasisKeepControllers);
this.SetValue(ServerAllowAnselProperty, sourceProfile.ServerAllowAnsel);
this.SetValue(StructureMemoryOptimizationsProperty, sourceProfile.StructureMemoryOptimizations);
this.SetValue(UseStructureStasisGridProperty, sourceProfile.UseStructureStasisGrid);
this.SetValue(CrossplayProperty, sourceProfile.Crossplay);
this.SetValue(EpicOnlyProperty, sourceProfile.EpicOnly);
this.SetValue(EnablePublicIPForEpicProperty, sourceProfile.EnablePublicIPForEpic);
@ -6260,11 +6475,14 @@ namespace ServerManagerTool.Lib
this.SetValue(DisableDinoDecayPvEProperty, sourceProfile.DisableDinoDecayPvE);
this.SetValue(DisableDinoDecayPvPProperty, sourceProfile.DisableDinoDecayPvP);
this.SetValue(AutoDestroyDecayedDinosProperty, sourceProfile.AutoDestroyDecayedDinos);
this.SetValue(UseDinoLevelUpAnimationsProperty, sourceProfile.UseDinoLevelUpAnimations);
this.SetValue(PvEDinoDecayPeriodMultiplierProperty, sourceProfile.PvEDinoDecayPeriodMultiplier);
this.SetValue(AllowMultipleAttachedC4Property, sourceProfile.AllowMultipleAttachedC4);
this.SetValue(AllowUnclaimDinosProperty, sourceProfile.AllowUnclaimDinos);
this.SetValue(DisableDinoRidingProperty, sourceProfile.DisableDinoRiding);
this.SetValue(DisableDinoTamingProperty, sourceProfile.DisableDinoTaming);
this.SetValue(DisableDinoBreedingProperty, sourceProfile.DisableDinoBreeding);
this.SetValue(MaxTamedDinosProperty, sourceProfile.MaxTamedDinos);
this.SetValue(MaxPersonalTamedDinosProperty, sourceProfile.MaxPersonalTamedDinos);
this.SetValue(PersonalTamedDinosSaddleStructureCostProperty, sourceProfile.PersonalTamedDinosSaddleStructureCost);
@ -6327,6 +6545,10 @@ namespace ServerManagerTool.Lib
this.PreventDinoTameClassNames.FromIniValues(sourceProfile.PreventDinoTameClassNames.ToIniValues());
this.PreventDinoTameClassNames.IsEnabled = sourceProfile.PreventDinoTameClassNames.IsEnabled;
this.PreventBreedingForClassNames.Clear();
this.PreventBreedingForClassNames.FromIniValues(sourceProfile.PreventBreedingForClassNames.ToIniValues());
this.PreventBreedingForClassNames.IsEnabled = sourceProfile.PreventBreedingForClassNames.IsEnabled;
this.NPCReplacements.Clear();
this.NPCReplacements.FromIniValues(sourceProfile.NPCReplacements.ToIniValues());
this.NPCReplacements.IsEnabled = sourceProfile.NPCReplacements.IsEnabled;
@ -6347,7 +6569,7 @@ namespace ServerManagerTool.Lib
this.DinoClassResistanceMultipliers.FromIniValues(sourceProfile.DinoClassResistanceMultipliers.ToIniValues());
this.DinoClassResistanceMultipliers.IsEnabled = sourceProfile.DinoClassResistanceMultipliers.IsEnabled;
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoSettings = new DinoSettingsList(this.DinoSpawnWeightMultipliers, this.PreventDinoTameClassNames, this.PreventBreedingForClassNames, this.NPCReplacements, this.TamedDinoClassDamageMultipliers, this.TamedDinoClassResistanceMultipliers, this.DinoClassDamageMultipliers, this.DinoClassResistanceMultipliers);
this.DinoSettings.RenderToView();
}
@ -6506,9 +6728,12 @@ namespace ServerManagerTool.Lib
this.SetValue(AllowCaveBuildingPvEProperty, sourceProfile.AllowCaveBuildingPvE);
this.SetValue(DisableFriendlyFirePvPProperty, sourceProfile.DisableFriendlyFirePvP);
this.SetValue(DisableFriendlyFirePvEProperty, sourceProfile.DisableFriendlyFirePvE);
this.SetValue(AllowCaveBuildingPvPProperty, sourceProfile.AllowCaveBuildingPvP);
this.SetValue(DisableRailgunPVPProperty, sourceProfile.DisableRailgunPVP);
this.SetValue(DisableLootCratesProperty, sourceProfile.DisableLootCrates);
this.SetValue(AllowCrateSpawnsOnTopOfStructuresProperty, sourceProfile.AllowCrateSpawnsOnTopOfStructures);
this.SetValue(EnableExtraStructurePreventionVolumesProperty, sourceProfile.EnableExtraStructurePreventionVolumes);
this.SetValue(UseSingleplayerSettingsProperty, sourceProfile.UseSingleplayerSettings);
this.SetValue(EnableDifficultyOverrideProperty, sourceProfile.EnableDifficultyOverride);
this.SetValue(OverrideOfficialDifficultyProperty, sourceProfile.OverrideOfficialDifficulty);
@ -6526,6 +6751,7 @@ namespace ServerManagerTool.Lib
this.SetNullableValue(MaxTributeItemsProperty, sourceProfile.MaxTributeItems);
this.SetValue(NoTransferFromFilteringProperty, sourceProfile.NoTransferFromFiltering);
this.SetValue(DisableCustomFoldersInTributeInventoriesProperty, sourceProfile.DisableCustomFoldersInTributeInventories);
this.SetValue(OverrideTributeCharacterExpirationSecondsProperty, sourceProfile.OverrideTributeCharacterExpirationSeconds);
this.SetValue(OverrideTributeItemExpirationSecondsProperty, sourceProfile.OverrideTributeItemExpirationSeconds);
this.SetValue(OverrideTributeDinoExpirationSecondsProperty, sourceProfile.OverrideTributeDinoExpirationSeconds);
@ -6600,6 +6826,7 @@ namespace ServerManagerTool.Lib
this.SetValue(DisableWorldBuffsProperty, sourceProfile.DisableWorldBuffs);
this.SetValue(EnableWorldBuffScalingProperty, sourceProfile.EnableWorldBuffScaling);
this.SetValue(WorldBuffScalingEfficacyProperty, sourceProfile.WorldBuffScalingEfficacy);
this.SetValue(AdjustableMutagenSpawnDelayMultiplierProperty, sourceProfile.AdjustableMutagenSpawnDelayMultiplier);
this.SetValue(MaxHexagonsPerCharacterProperty, sourceProfile.MaxHexagonsPerCharacter);
this.SetValue(DisableHexagonStoreProperty, sourceProfile.DisableHexagonStore);
@ -6705,6 +6932,7 @@ namespace ServerManagerTool.Lib
this.SetValue(FastDecayUnsnappedCoreStructuresProperty, sourceProfile.FastDecayUnsnappedCoreStructures);
this.SetValue(DestroyUnconnectedWaterPipesProperty, sourceProfile.DestroyUnconnectedWaterPipes);
this.SetValue(DisableStructurePlacementCollisionProperty, sourceProfile.DisableStructurePlacementCollision);
this.SetValue(IgnoreLimitMaxStructuresInRangeTypeFlagProperty, sourceProfile.IgnoreLimitMaxStructuresInRangeTypeFlag);
this.SetValue(EnableFastDecayIntervalProperty, sourceProfile.EnableFastDecayInterval);
this.SetValue(FastDecayIntervalProperty, sourceProfile.FastDecayInterval);
this.SetValue(LimitTurretsInRangeProperty, sourceProfile.LimitTurretsInRange);
@ -6715,6 +6943,7 @@ namespace ServerManagerTool.Lib
this.SetValue(StructurePickupTimeAfterPlacementProperty, sourceProfile.StructurePickupTimeAfterPlacement);
this.SetValue(StructurePickupHoldDurationProperty, sourceProfile.StructurePickupHoldDuration);
this.SetValue(AllowIntegratedSPlusStructuresProperty, sourceProfile.AllowIntegratedSPlusStructures);
this.SetValue(IgnoreStructuresPreventionVolumesProperty, sourceProfile.IgnoreStructuresPreventionVolumes);
this.SetValue(GenesisUseStructuresPreventionVolumesProperty, sourceProfile.GenesisUseStructuresPreventionVolumes);
}
@ -6727,6 +6956,16 @@ namespace ServerManagerTool.Lib
this.ConfigOverrideSupplyCrateItems.IsEnabled = this.ConfigOverrideSupplyCrateItems.Count > 0;
this.ConfigOverrideSupplyCrateItems.RenderToView();
}
private void SyncExcludeItemIndicesOverridesSection(ServerProfile sourceProfile)
{
sourceProfile.ExcludeItemIndices.RenderToModel();
this.ExcludeItemIndices.Clear();
this.ExcludeItemIndices.FromIniValues(sourceProfile.ExcludeItemIndices.ToIniValues());
this.ExcludeItemIndices.IsEnabled = this.ExcludeItemIndices.Count > 0;
this.ExcludeItemIndices.RenderToView();
}
#endregion
#region Server Files

View file

@ -13,6 +13,7 @@ namespace ServerManagerTool.Lib.ViewModel
public static readonly DependencyProperty ModProperty = DependencyProperty.Register(nameof(Mod), typeof(string), typeof(DinoSettings), new PropertyMetadata(String.Empty));
public static readonly DependencyProperty KnownDinoProperty = DependencyProperty.Register(nameof(KnownDino), typeof(bool), typeof(DinoSettings), new PropertyMetadata(false));
public static readonly DependencyProperty CanTameProperty = DependencyProperty.Register(nameof(CanTame), typeof(bool), typeof(DinoSettings), new PropertyMetadata(true));
public static readonly DependencyProperty CanBreedingProperty = DependencyProperty.Register(nameof(CanBreeding), typeof(bool), typeof(DinoSettings), new PropertyMetadata(true));
public static readonly DependencyProperty CanSpawnProperty = DependencyProperty.Register(nameof(CanSpawn), typeof(bool), typeof(DinoSettings), new PropertyMetadata(true));
public static readonly DependencyProperty ReplacementClassProperty = DependencyProperty.Register(nameof(ReplacementClass), typeof(string), typeof(DinoSettings), new PropertyMetadata(String.Empty));
public static readonly DependencyProperty SpawnWeightMultiplierProperty = DependencyProperty.Register(nameof(SpawnWeightMultiplier), typeof(float), typeof(DinoSettings), new PropertyMetadata(DinoSpawn.DEFAULT_SPAWN_WEIGHT_MULTIPLIER));
@ -47,6 +48,12 @@ namespace ServerManagerTool.Lib.ViewModel
set { SetValue(CanTameProperty, value); }
}
public bool CanBreeding
{
get { return (bool)GetValue(CanBreedingProperty); }
set { SetValue(CanBreedingProperty, value); }
}
public bool CanSpawn
{
get { return (bool)GetValue(CanSpawnProperty); }
@ -108,6 +115,7 @@ namespace ServerManagerTool.Lib.ViewModel
public bool HasClassName { get; internal set; }
public bool IsSpawnable { get; internal set; }
public DinoTamable IsTameable { get; internal set; }
public DinoBreedingable IsBreedingable { get; internal set; }
public string DisplayReplacementName => GameData.FriendlyCreatureNameForClass(ReplacementClass);
public float OriginalSpawnWeightMultiplier { get; internal set; }
@ -119,6 +127,7 @@ namespace ServerManagerTool.Lib.ViewModel
public string ModSort => $"{Mod}|{DisplayName}";
public string CanSpawnSort => $"{IsSpawnable}|{CanSpawn}|{DisplayName}|{Mod}";
public string CanTameSort => $"{IsTameable != DinoTamable.False}|{CanTame}|{DisplayName}|{Mod}";
public string CanBreedingSort => $"{IsBreedingable != DinoBreedingable.False}|{CanBreeding}|{DisplayName}|{Mod}";
public string ReplacementNameSort => $"{DisplayReplacementName}|{Mod}";
public string SpawnWeightMultiplierSort => $"{SpawnWeightMultiplier:0000000000.0000000000}|{DisplayName}|{Mod}";
public string OverrideSpawnLimitPercentageSort => $"{OverrideSpawnLimitPercentage}|{DisplayName}|{Mod}";

View file

@ -9,6 +9,7 @@ namespace ServerManagerTool.Lib.ViewModel
{
public AggregateIniValueList<DinoSpawn> DinoSpawnWeightMultipliers { get; }
public StringIniValueList PreventDinoTameClassNames { get; }
public StringIniValueList PreventBreedingForClassNames { get; }
public AggregateIniValueList<NPCReplacement> NpcReplacements { get; }
public AggregateIniValueList<ClassMultiplier> TamedDinoClassDamageMultipliers { get; }
public AggregateIniValueList<ClassMultiplier> TamedDinoClassResistanceMultipliers { get; }
@ -20,12 +21,13 @@ namespace ServerManagerTool.Lib.ViewModel
Reset();
}
public DinoSettingsList(AggregateIniValueList<DinoSpawn> dinoSpawnWeightMultipliers, StringIniValueList preventDinoTameClassNames, AggregateIniValueList<NPCReplacement> npcReplacements,
public DinoSettingsList(AggregateIniValueList<DinoSpawn> dinoSpawnWeightMultipliers, StringIniValueList preventDinoTameClassNames, StringIniValueList preventBreedingForClassNames, AggregateIniValueList<NPCReplacement> npcReplacements,
AggregateIniValueList<ClassMultiplier> tamedDinoClassDamageMultipliers, AggregateIniValueList<ClassMultiplier> tamedDinoClassResistanceMultipliers,
AggregateIniValueList<ClassMultiplier> dinoClassDamageMultipliers, AggregateIniValueList<ClassMultiplier> dinoClassResistanceMultipliers)
{
this.DinoSpawnWeightMultipliers = dinoSpawnWeightMultipliers;
this.PreventDinoTameClassNames = preventDinoTameClassNames;
this.PreventBreedingForClassNames = preventBreedingForClassNames;
this.NpcReplacements = npcReplacements;
this.TamedDinoClassDamageMultipliers = tamedDinoClassDamageMultipliers;
this.TamedDinoClassResistanceMultipliers = tamedDinoClassResistanceMultipliers;
@ -39,6 +41,7 @@ namespace ServerManagerTool.Lib.ViewModel
var nameTag = GameData.NameTagForClass(className);
var isSpawnable = GameData.IsSpawnableForClass(className);
var isTameable = GameData.IsTameableForClass(className);
var isBreedingable = GameData.IsBreedingableForClass(className);
return new DinoSettings()
{
@ -49,6 +52,7 @@ namespace ServerManagerTool.Lib.ViewModel
CanSpawn = true,
CanTame = isTameable != DinoTamable.False,
CanBreeding = isBreedingable != DinoBreedingable.False,
ReplacementClass = className,
SpawnWeightMultiplier = DinoSpawn.DEFAULT_SPAWN_WEIGHT_MULTIPLIER,
@ -67,6 +71,7 @@ namespace ServerManagerTool.Lib.ViewModel
HasNameTag = hasNameTag,
IsSpawnable = isSpawnable,
IsTameable = isTameable,
IsBreedingable = isBreedingable,
};
}
@ -135,7 +140,25 @@ namespace ServerManagerTool.Lib.ViewModel
}
}
foreach(var entry in this.NpcReplacements.Where(e => !string.IsNullOrWhiteSpace(e.FromClassName)))
foreach (var entry in this.PreventBreedingForClassNames.Where(e => !string.IsNullOrWhiteSpace(e)))
{
if (this.Any(d => d.ClassName == entry))
{
foreach (var dinoSetting in this.Where(d => d.ClassName == entry && d.CanBreeding))
{
dinoSetting.CanBreeding = false;
}
}
else
{
var dinoSetting = CreateDinoSetting(entry, GameData.MOD_UNKNOWN, false, false, true);
dinoSetting.CanBreeding = false;
this.Add(dinoSetting);
}
}
foreach (var entry in this.NpcReplacements.Where(e => !string.IsNullOrWhiteSpace(e.FromClassName)))
{
if (this.Any(d => d.ClassName == entry.FromClassName))
{
@ -235,6 +258,8 @@ namespace ServerManagerTool.Lib.ViewModel
this.DinoSpawnWeightMultipliers.Clear();
this.PreventDinoTameClassNames.Clear();
this.PreventDinoTameClassNames.IsEnabled = true;
this.PreventBreedingForClassNames.Clear();
this.PreventBreedingForClassNames.IsEnabled = true;
this.NpcReplacements.Clear();
this.NpcReplacements.IsEnabled = true;
this.TamedDinoClassDamageMultipliers.Clear();
@ -286,6 +311,11 @@ namespace ServerManagerTool.Lib.ViewModel
this.PreventDinoTameClassNames.Add(entry.ClassName);
}
if ((entry.IsBreedingable != DinoBreedingable.False) && !entry.CanBreeding)
{
this.PreventBreedingForClassNames.Add(entry.ClassName);
}
this.NpcReplacements.Add(new NPCReplacement() { FromClassName = entry.ClassName, ToClassName = entry.CanSpawn ? entry.ReplacementClass : string.Empty });
if (entry.IsTameable != DinoTamable.False)