diff --git a/src/ARKServerManager/Lib/GameData.cs b/src/ARKServerManager/Lib/GameData.cs index 64904487..3e7c01d9 100644 --- a/src/ARKServerManager/Lib/GameData.cs +++ b/src/ARKServerManager/Lib/GameData.cs @@ -183,6 +183,8 @@ namespace ServerManagerTool.Lib public static IEnumerable GetNPCReplacements() => dinoSpawns.Select(d => new NPCReplacement() { FromClassName = d.ClassName, ToClassName = d.ClassName }); + public static bool HasCreatureForClass(string className) => !string.IsNullOrWhiteSpace(className) && dinoSpawns.Any(e => e.ClassName.Equals(className)); + public static bool IsSpawnableForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.IsSpawnable ?? true; public static DinoTamable IsTameableForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.IsTameable ?? DinoTamable.True; diff --git a/src/ARKServerManager/Lib/Model/CraftingOverride.cs b/src/ARKServerManager/Lib/Model/CraftingOverride.cs index 3c093888..a24daf7c 100644 --- a/src/ARKServerManager/Lib/Model/CraftingOverride.cs +++ b/src/ARKServerManager/Lib/Model/CraftingOverride.cs @@ -17,11 +17,9 @@ namespace ServerManagerTool.Lib public IEnumerable RenderToView() { - List errors = new List(); - Update(); - return errors; + return new List(); } public void RenderToModel() diff --git a/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs b/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs index ef151823..c24d416f 100644 --- a/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs +++ b/src/ARKServerManager/Lib/Model/PreventTransferOverride.cs @@ -16,6 +16,8 @@ namespace ServerManagerTool.Lib public IEnumerable RenderToView() { + Update(); + return new List(); } @@ -26,6 +28,14 @@ namespace ServerManagerTool.Lib public void UpdateForLocalization() { } + + public void Update() + { + IsEnabled = this.Count > 0; + + foreach (var preventTransfer in this) + preventTransfer.Update(); + } } [DataContract] @@ -53,7 +63,10 @@ namespace ServerManagerTool.Lib public override void InitializeFromINIValue(string value) { if (string.IsNullOrWhiteSpace(value)) + { + Update(); return; + } var kvPair = value.Split(new[] { '=' }, 2); var kvValue = kvPair[1].Trim(' '); @@ -74,5 +87,18 @@ namespace ServerManagerTool.Lib { return IsValid; } + + public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(PreventTransferOverride), new PropertyMetadata("N")); + + public string ValidStatus + { + get { return (string)GetValue(ValidStatusProperty); } + set { SetValue(ValidStatusProperty, value); } + } + + public void Update() + { + ValidStatus = IsValid ? (GameData.HasCreatureForClass(DinoClassString) ? "Y" : "W") : "N"; + } } } diff --git a/src/ARKServerManager/Lib/ViewModel/NPCSpawnSettings.cs b/src/ARKServerManager/Lib/ViewModel/NPCSpawnSettings.cs index d19e5263..acdadecc 100644 --- a/src/ARKServerManager/Lib/ViewModel/NPCSpawnSettings.cs +++ b/src/ARKServerManager/Lib/ViewModel/NPCSpawnSettings.cs @@ -20,7 +20,8 @@ namespace ServerManagerTool.Lib.ViewModel Reset(); } - public NPCSpawnSettingsList(NPCSpawnContainerList configAddNPCSpawnEntriesContainer, + public NPCSpawnSettingsList( + NPCSpawnContainerList configAddNPCSpawnEntriesContainer, NPCSpawnContainerList configSubtractNPCSpawnEntriesContainer, NPCSpawnContainerList configOverrideNPCSpawnEntriesContainer) { @@ -138,6 +139,8 @@ namespace ServerManagerTool.Lib.ViewModel this.Add(spawnSettings); } + + Update(); } public void RenderToModel() @@ -195,6 +198,12 @@ namespace ServerManagerTool.Lib.ViewModel public void UpdateForLocalization() { } + + public void Update(bool recursive = true) + { + foreach (var npcSpawn in this) + npcSpawn.Update(recursive); + } } public class NPCSpawnSettings : DependencyObject, IEnumerable @@ -280,6 +289,26 @@ namespace ServerManagerTool.Lib.ViewModel { return NPCSpawnEntrySettings.GetEnumerator(); } + + public bool IsViewValid => !string.IsNullOrWhiteSpace(NPCSpawnEntriesContainerClassString) && (NPCSpawnEntrySettings?.Count ?? 0) > 0; + + public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(NPCSpawnSettings), new PropertyMetadata("N")); + public string ValidStatus + { + get { return (string)GetValue(ValidStatusProperty); } + set { SetValue(ValidStatusProperty, value); } + } + + public void Update(bool recursive = true) + { + if (recursive && NPCSpawnEntrySettings != null) + { + foreach (var itemSet in NPCSpawnEntrySettings) + itemSet.Update(); + } + + ValidStatus = IsViewValid ? (NPCSpawnEntrySettings.Any(i => i.ValidStatus == "N") ? "N" : (NPCSpawnEntrySettings.Any(i => i.ValidStatus == "W") ? "W" : "Y")) : "N"; + } } public class NPCSpawnEntrySettings : DependencyObject @@ -315,5 +344,17 @@ namespace ServerManagerTool.Lib.ViewModel public string DisplayName => GameData.FriendlyCreatureNameForClass(NPCClassString); public bool IsValid => !string.IsNullOrWhiteSpace(NPCClassString); + + public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(NPCSpawnEntrySettings), new PropertyMetadata("N")); + public string ValidStatus + { + get { return (string)GetValue(ValidStatusProperty); } + set { SetValue(ValidStatusProperty, value); } + } + + public void Update() + { + ValidStatus = IsValid ? (GameData.HasCreatureForClass(NPCClassString) ? "Y" : "W") : "N"; + } } } diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml index 9aebe110..6b9b2991 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml @@ -5212,7 +5212,7 @@ - + + + + + + @@ -5236,7 +5258,7 @@ - + @@ -5246,7 +5268,7 @@ - + @@ -5287,7 +5309,7 @@ - + + + + + + @@ -5318,7 +5362,7 @@ - + @@ -5947,7 +5991,7 @@ - + + + + + + @@ -5971,7 +6037,7 @@ - + diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index c8331182..ec94bcd0 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -1319,6 +1319,16 @@ namespace ServerManagerTool Settings.ConfigOverrideItemCraftingCosts.Update(); } + private void PreventTransferOverrideGrids_SourceUpdated(object sender, DataTransferEventArgs e) + { + Settings.PreventTransferForClassNames.Update(); + } + + private void NPCSpawnSettingsGrids_SourceUpdated(object sender, DataTransferEventArgs e) + { + Settings.NPCSpawnSettings.Update(); + } + #region Dinos private void DinoCustomization_Reset(object sender, RoutedEventArgs e) { @@ -2895,6 +2905,7 @@ namespace ServerManagerTool private void AddNPCSpawn_Click(object sender, RoutedEventArgs e) { Settings.NPCSpawnSettings.Add(new NPCSpawnSettings()); + Settings.NPCSpawnSettings.Update(); } private void AddNPCSpawnEntry_Click(object sender, RoutedEventArgs e) @@ -2906,6 +2917,7 @@ namespace ServerManagerTool } SelectedNPCSpawnSetting.NPCSpawnEntrySettings.Add(new NPCSpawnEntrySettings()); + Settings.NPCSpawnSettings.Update(); } private void ClearNPCSpawn_Click(object sender, RoutedEventArgs e) @@ -2915,6 +2927,7 @@ namespace ServerManagerTool SelectedNPCSpawnSetting = null; Settings.NPCSpawnSettings.Clear(); + Settings.NPCSpawnSettings.Update(); } private void ClearNPCSpawnEntry_Click(object sender, RoutedEventArgs e) @@ -2923,6 +2936,7 @@ namespace ServerManagerTool return; SelectedNPCSpawnSetting?.NPCSpawnEntrySettings.Clear(); + Settings.NPCSpawnSettings.Update(); } private void PasteNPCSpawn_Click(object sender, RoutedEventArgs e) @@ -2973,6 +2987,7 @@ namespace ServerManagerTool var item = ((NPCSpawnSettings)((Button)e.Source).DataContext); Settings.NPCSpawnSettings.Remove(item); + Settings.NPCSpawnSettings.Update(); } private void RemoveNPCSpawnEntry_Click(object sender, RoutedEventArgs e) @@ -2985,6 +3000,7 @@ namespace ServerManagerTool var item = ((NPCSpawnEntrySettings)((Button)e.Source).DataContext); SelectedNPCSpawnSetting.NPCSpawnEntrySettings.Remove(item); + Settings.NPCSpawnSettings.Update(); } private void SaveNPCSpawns_Click(object sender, RoutedEventArgs e) @@ -3007,12 +3023,12 @@ namespace ServerManagerTool private void SaveNPCSpawn_Click(object sender, RoutedEventArgs e) { - Settings.NPCSpawnSettings.RenderToModel(); - var item = ((NPCSpawnSettings)((Button)e.Source).DataContext); if (item == null) return; + Settings.NPCSpawnSettings.RenderToModel(); + string iniName = null; string iniValue = null; switch (item.ContainerType) @@ -3362,7 +3378,7 @@ namespace ServerManagerTool private void AddPreventTransferOverride_Click(object sender, RoutedEventArgs e) { Settings.PreventTransferForClassNames.Add(new PreventTransferOverride()); - Settings.PreventTransferForClassNames.IsEnabled = true; + Settings.PreventTransferForClassNames.Update(); } private void ClearPreventTransferOverrides_Click(object sender, RoutedEventArgs e) @@ -3371,7 +3387,7 @@ namespace ServerManagerTool return; Settings.PreventTransferForClassNames.Clear(); - Settings.PreventTransferForClassNames.IsEnabled = false; + Settings.PreventTransferForClassNames.Update(); } private void PastePreventTransferOverride_Click(object sender, RoutedEventArgs e) @@ -3422,7 +3438,7 @@ namespace ServerManagerTool var item = ((PreventTransferOverride)((Button)e.Source).DataContext); Settings.PreventTransferForClassNames.Remove(item); - Settings.PreventTransferForClassNames.IsEnabled = Settings.PreventTransferForClassNames.Count > 0; + Settings.PreventTransferForClassNames.Update(); } private void SavePreventTransferOverride_Click(object sender, RoutedEventArgs e) @@ -3447,6 +3463,8 @@ namespace ServerManagerTool if (item == null) return; + Settings.PreventTransferForClassNames.RenderToModel(); + var iniName = Settings.PreventTransferForClassNames.IniCollectionKey; var iniValue = $"{iniName}={item.ToINIValue()}"; diff --git a/src/ARKServerManager/VersionFeed.xml b/src/ARKServerManager/VersionFeed.xml index 29c6971a..4456527a 100644 --- a/src/ARKServerManager/VersionFeed.xml +++ b/src/ARKServerManager/VersionFeed.xml @@ -26,6 +26,8 @@
  • Gamedata Files - changed the Fjordur official mod to the correct mod id.
  • Crafting Override Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for resources not familiar with (raw class names, not loaded via gamedata files), Errors will show for empty resources.
  • +
  • Prevent Transfer Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for creatures not familiar with (raw class names, not loaded via gamedata files), Errors will show for missing creatures.
  • +
  • Map Spawner Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for spawners/creatures not familiar with (raw class names, not loaded via gamedata files), Errors will show for missing spawners/creatures.

diff --git a/src/ARKServerManager/VersionFeedBeta.xml b/src/ARKServerManager/VersionFeedBeta.xml index 6e880f73..cc9eae86 100644 --- a/src/ARKServerManager/VersionFeedBeta.xml +++ b/src/ARKServerManager/VersionFeedBeta.xml @@ -19,7 +19,9 @@ CHANGE
    -
  • Crafting Override Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for resources not familiar with (raw class names, not loaded via gamedata files), Errors will show for empty resources.
  • +
  • Crafting Override Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for resources not familiar with (raw class names, not loaded via gamedata files), Errors will show for missing resources.
  • +
  • Prevent Transfer Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for creatures not familiar with (raw class names, not loaded via gamedata files), Errors will show for missing creatures.
  • +
  • Map Spawner Grids - Added new icons to show Good (green), Warning (orange) or Bad (red). Warnings will show for spawners/creatures not familiar with (raw class names, not loaded via gamedata files), Errors will show for missing spawners/creatures.