diff --git a/src/ARKServerManager/Lib/Model/CraftingOverride.cs b/src/ARKServerManager/Lib/Model/CraftingOverride.cs index fb86af30..3c093888 100644 --- a/src/ARKServerManager/Lib/Model/CraftingOverride.cs +++ b/src/ARKServerManager/Lib/Model/CraftingOverride.cs @@ -1,10 +1,46 @@ using ServerManagerTool.Common.Attibutes; using ServerManagerTool.Common.Model; +using System.Collections.Generic; +using System.Linq; using System.Runtime.Serialization; using System.Windows; namespace ServerManagerTool.Lib { + [DataContract] + public class CraftingOverrideList : AggregateIniValueList + { + public CraftingOverrideList(string aggregateValueName) + : base(aggregateValueName, null) + { + } + + public IEnumerable RenderToView() + { + List errors = new List(); + + Update(); + + return errors; + } + + public void RenderToModel() + { + } + + public void UpdateForLocalization() + { + } + + public void Update(bool recursive = true) + { + IsEnabled = this.Count > 0; + + foreach (var craftingOverride in this) + craftingOverride.Update(recursive); + } + } + [DataContract] public class CraftingOverride : AggregateIniValue { @@ -44,7 +80,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(' '); @@ -64,6 +103,25 @@ namespace ServerManagerTool.Lib public string DisplayName => GameData.FriendlyItemNameForClass(ItemClassString); public bool IsValid => !string.IsNullOrWhiteSpace(ItemClassString) && BaseCraftingResourceRequirements.Count > 0; + + public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(CraftingOverride), new PropertyMetadata("N")); + + public string ValidStatus + { + get { return (string)GetValue(ValidStatusProperty); } + set { SetValue(ValidStatusProperty, value); } + } + + public void Update(bool recursive = true) + { + if (recursive && BaseCraftingResourceRequirements != null) + { + foreach (var resource in BaseCraftingResourceRequirements) + resource.Update(); + } + + ValidStatus = IsValid ? (BaseCraftingResourceRequirements.Any(i => i.ValidStatus == "N") ? "N" : (BaseCraftingResourceRequirements.Any(i => i.ValidStatus == "W") ? "W" : "Y")) : "N"; + } } [DataContract] @@ -119,5 +177,18 @@ namespace ServerManagerTool.Lib public string DisplayName => GameData.FriendlyItemNameForClass(ResourceItemTypeString); public bool IsValid => !string.IsNullOrWhiteSpace(ResourceItemTypeString); + + public static readonly DependencyProperty ValidStatusProperty = DependencyProperty.Register(nameof(ValidStatus), typeof(string), typeof(CraftingResourceRequirement), new PropertyMetadata("N")); + + public string ValidStatus + { + get { return (string)GetValue(ValidStatusProperty); } + set { SetValue(ValidStatusProperty, value); } + } + + public void Update() + { + ValidStatus = IsValid ? (GameData.HasItemForClass(ResourceItemTypeString) ? "Y" : "W") : "N"; + } } } diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs index d4ce105c..60af1fc2 100644 --- a/src/ARKServerManager/Lib/ServerProfile.cs +++ b/src/ARKServerManager/Lib/ServerProfile.cs @@ -93,7 +93,7 @@ namespace ServerManagerTool.Lib this.EngramEntryAutoUnlocks = new EngramAutoUnlockList(nameof(EngramEntryAutoUnlocks)); this.EngramSettings = new EngramSettingsList(this.OverrideNamedEngramEntries, this.EngramEntryAutoUnlocks); - this.ConfigOverrideItemCraftingCosts = new AggregateIniValueList(nameof(ConfigOverrideItemCraftingCosts), null); + this.ConfigOverrideItemCraftingCosts = new CraftingOverrideList(nameof(ConfigOverrideItemCraftingCosts)); this.ConfigOverrideItemMaxQuantity = new StackSizeOverrideList(nameof(ConfigOverrideItemMaxQuantity)); this.ConfigOverrideSupplyCrateItems = new SupplyCrateOverrideList(nameof(ConfigOverrideSupplyCrateItems)); this.PreventTransferForClassNames = new PreventTransferOverrideList(nameof(PreventTransferForClassNames)); @@ -3128,11 +3128,11 @@ namespace ServerManagerTool.Lib #endregion #region Crafting Overrides - public static readonly DependencyProperty ConfigOverrideItemCraftingCostsProperty = DependencyProperty.Register(nameof(ConfigOverrideItemCraftingCosts), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null)); + public static readonly DependencyProperty ConfigOverrideItemCraftingCostsProperty = DependencyProperty.Register(nameof(ConfigOverrideItemCraftingCosts), typeof(CraftingOverrideList), typeof(ServerProfile), new PropertyMetadata(null)); [IniFileEntry(IniFiles.Game, IniSections.Game_ShooterGameMode, ServerProfileCategory.CraftingOverrides)] - public AggregateIniValueList ConfigOverrideItemCraftingCosts + public CraftingOverrideList ConfigOverrideItemCraftingCosts { - get { return (AggregateIniValueList)GetValue(ConfigOverrideItemCraftingCostsProperty); } + get { return (CraftingOverrideList)GetValue(ConfigOverrideItemCraftingCostsProperty); } set { SetValue(ConfigOverrideItemCraftingCostsProperty, value); } } #endregion @@ -4057,6 +4057,8 @@ namespace ServerManagerTool.Lib profile.NPCSpawnSettings.RenderToView(); if (Config.Default.SectionSupplyCrateOverridesEnabled) profile.ConfigOverrideSupplyCrateItems.RenderToView(); + if (Config.Default.SectionCraftingOverridesEnabled) + profile.ConfigOverrideItemCraftingCosts.RenderToView(); if (Config.Default.SectionStackSizeOverridesEnabled) profile.ConfigOverrideItemMaxQuantity.RenderToView(); if (Config.Default.SectionPreventTransferOverridesEnabled) @@ -4135,6 +4137,8 @@ namespace ServerManagerTool.Lib profile.NPCSpawnSettings.RenderToView(); if (Config.Default.SectionSupplyCrateOverridesEnabled) profile.ConfigOverrideSupplyCrateItems.RenderToView(); + if (Config.Default.SectionCraftingOverridesEnabled) + profile.ConfigOverrideItemCraftingCosts.RenderToView(); if (Config.Default.SectionStackSizeOverridesEnabled) profile.ConfigOverrideItemMaxQuantity.RenderToView(); if (Config.Default.SectionPreventTransferOverridesEnabled) @@ -4274,6 +4278,12 @@ namespace ServerManagerTool.Lib this.ConfigOverrideSupplyCrateItems.RenderToModel(); } + if (Config.Default.SectionCraftingOverridesEnabled) + { + progressCallback?.Invoke(0, _globalizer.GetResourceString("ProfileSave_ConstructingCraftingOverridesInformation")); + this.ConfigOverrideItemCraftingCosts.RenderToModel(); + } + if (Config.Default.SectionStackSizeOverridesEnabled) { progressCallback?.Invoke(0, _globalizer.GetResourceString("ProfileSave_ConstructingStackSizeInformation")); @@ -5312,7 +5322,7 @@ namespace ServerManagerTool.Lib public void ResetCraftingOverridesSection() { - this.ConfigOverrideItemCraftingCosts = new AggregateIniValueList(nameof(ConfigOverrideItemCraftingCosts), null); + this.ConfigOverrideItemCraftingCosts = new CraftingOverrideList(nameof(ConfigOverrideItemCraftingCosts)); this.ConfigOverrideItemCraftingCosts.Reset(); } @@ -5939,9 +5949,12 @@ namespace ServerManagerTool.Lib private void SyncCraftingOverridesSection(ServerProfile sourceProfile) { + sourceProfile.ConfigOverrideItemCraftingCosts.RenderToModel(); + this.ConfigOverrideItemCraftingCosts.Clear(); this.ConfigOverrideItemCraftingCosts.FromIniValues(sourceProfile.ConfigOverrideItemCraftingCosts.ToIniValues()); this.ConfigOverrideItemCraftingCosts.IsEnabled = this.ConfigOverrideItemCraftingCosts.Count > 0; + this.ConfigOverrideItemCraftingCosts.RenderToView(); } private void SyncCustomEngineSettingsSection(ServerProfile sourceProfile) diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml index f06d4737..9aebe110 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml @@ -4836,7 +4836,7 @@ - + + + + + + @@ -4860,7 +4882,7 @@ - + @@ -4901,7 +4923,7 @@ - + + + + + + @@ -4925,12 +4969,12 @@ - + - - + + diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs index ab66689c..c8331182 100644 --- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml.cs @@ -1314,6 +1314,11 @@ namespace ServerManagerTool Settings.ConfigOverrideSupplyCrateItems.Update(); } + private void CraftingOverrideGrids_SourceUpdated(object sender, DataTransferEventArgs e) + { + Settings.ConfigOverrideItemCraftingCosts.Update(); + } + #region Dinos private void DinoCustomization_Reset(object sender, RoutedEventArgs e) { @@ -1749,7 +1754,7 @@ namespace ServerManagerTool private void AddCraftingOverride_Click(object sender, RoutedEventArgs e) { Settings.ConfigOverrideItemCraftingCosts.Add(new CraftingOverride()); - Settings.ConfigOverrideItemCraftingCosts.IsEnabled = true; + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void AddCraftingOverrideResource_Click(object sender, RoutedEventArgs e) @@ -1761,6 +1766,7 @@ namespace ServerManagerTool } SelectedCraftingOverride.BaseCraftingResourceRequirements.Add(new CraftingResourceRequirement()); + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void ClearCraftingOverrides_Click(object sender, RoutedEventArgs e) @@ -1770,7 +1776,7 @@ namespace ServerManagerTool SelectedCraftingOverride = null; Settings.ConfigOverrideItemCraftingCosts.Clear(); - Settings.ConfigOverrideItemCraftingCosts.IsEnabled = false; + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void ClearCraftingOverrideResources_Click(object sender, RoutedEventArgs e) @@ -1779,6 +1785,7 @@ namespace ServerManagerTool return; SelectedCraftingOverride?.BaseCraftingResourceRequirements.Clear(); + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void PasteCraftingOverride_Click(object sender, RoutedEventArgs e) @@ -1794,6 +1801,8 @@ namespace ServerManagerTool // read the pasted data into an ini file. var iniFile = IniFileUtils.ReadString(window.ConfigData.Replace(" ", "")); + Server.Profile.ConfigOverrideItemCraftingCosts.RenderToModel(); + // cycle through the sections, adding them to the engrams list. Will bypass any sections that are named as per the ARK default sections. foreach (var section in iniFile.Sections.Where(s => s.SectionName != null && !SystemIniFile.IniSectionNames.ContainsValue(s.SectionName))) { @@ -1803,6 +1812,8 @@ namespace ServerManagerTool Server.Profile.ConfigOverrideItemCraftingCosts.IsEnabled |= configOverrideItemCraftingCosts.IsEnabled; } + var errors = Server.Profile.ConfigOverrideItemCraftingCosts.RenderToView(); + RefreshBasePrimalItemList(); } @@ -1813,7 +1824,7 @@ namespace ServerManagerTool var item = ((CraftingOverride)((Button)e.Source).DataContext); Settings.ConfigOverrideItemCraftingCosts.Remove(item); - Settings.ConfigOverrideItemCraftingCosts.IsEnabled = Settings.ConfigOverrideItemCraftingCosts.Count > 0; + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void RemoveCraftingOverrideResource_Click(object sender, RoutedEventArgs e) @@ -1826,10 +1837,13 @@ namespace ServerManagerTool var item = ((CraftingResourceRequirement)((Button)e.Source).DataContext); SelectedCraftingOverride.BaseCraftingResourceRequirements.Remove(item); + Settings.ConfigOverrideItemCraftingCosts.Update(); } private void SaveCraftingOverride_Click(object sender, RoutedEventArgs e) { + Settings.ConfigOverrideItemCraftingCosts.RenderToModel(); + var iniValues = new List(); iniValues.AddRange(Settings.ConfigOverrideItemCraftingCosts.ToIniValues()); var iniValue = string.Join("\r\n", iniValues); @@ -1848,6 +1862,8 @@ namespace ServerManagerTool if (item == null) return; + Settings.ConfigOverrideItemCraftingCosts.RenderToModel(); + var iniName = Settings.ConfigOverrideItemCraftingCosts.IniCollectionKey; var iniValue = $"{iniName}={item.ToINIValue()}"; diff --git a/src/ARKServerManager/VersionFeed.xml b/src/ARKServerManager/VersionFeed.xml index 7dd2f5cf..29c6971a 100644 --- a/src/ARKServerManager/VersionFeed.xml +++ b/src/ARKServerManager/VersionFeed.xml @@ -9,8 +9,8 @@ urn:uuid:93A04A12-C632-4C2B-AC76-42D9E476431C - 1.1.432 (1.1.432.1) - 1.1.432.1 + 1.1.432 (1.1.432.3) + 1.1.432.3 2022-06-13T00:00:00Z @@ -25,6 +25,7 @@
  • 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.

diff --git a/src/ARKServerManager/VersionFeedBeta.xml b/src/ARKServerManager/VersionFeedBeta.xml index 5c1ea0e5..6e880f73 100644 --- a/src/ARKServerManager/VersionFeedBeta.xml +++ b/src/ARKServerManager/VersionFeedBeta.xml @@ -7,6 +7,29 @@ 2022-06-16T00:00:00Z + + urn:uuid:93A04A12-C632-4C2B-AC76-42D9E476431C + 1.1.432 (1.1.432.3) + 1.1.432.3 + + 2022-06-16T00:00:00Z + +
+

+ 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.
  • +
+

+
+
+ + bletch + bletch1971@hotmail.com + +
+ urn:uuid:93A04A12-C632-4C2B-AC76-42D9E476431C 1.1.432 (1.1.432.2)