From 1f9a1c519616ad424ce98a9952403a0aac91f92d Mon Sep 17 00:00:00 2001 From: azakhi Date: Mon, 18 Mar 2019 20:27:21 +0300 Subject: [PATCH] Support for Path of Exile 3.6 and Synthesis League (#131) * Add new block types * Add new base types --- .../BlockItemTypes/AnyEnchantmentBlockItem.cs | 23 +++++++++++ .../BlockItemTypes/FracturedItemBlockItem.cs | 23 +++++++++++ .../BlockItemTypes/HasEnchantmentBlockItem.cs | 39 +++++++++++++++++++ .../SynthesisedItemBlockItem.cs | 23 +++++++++++ .../Enums/BlockItemOrdering.cs | 4 ++ .../Filtration.ObjectModel.csproj | 4 ++ .../Services/ItemFilterBlockTranslator.cs | 20 ++++++++++ Filtration/Filtration.csproj | 1 + Filtration/Properties/Resources.Designer.cs | 13 ++++++- Filtration/Properties/Resources.resx | 3 ++ Filtration/Resources/Enchantments.txt | 1 + Filtration/Resources/ItemBaseTypes.txt | 25 ++++++++++++ Filtration/Services/StaticDataService.cs | 4 ++ Filtration/UserControls/BlockItemControl.xaml | 5 +++ .../DesignTimeItemFilterBlockViewModel.cs | 6 ++- .../ViewModels/ItemFilterBlockViewModel.cs | 8 +++- 16 files changed, 199 insertions(+), 3 deletions(-) create mode 100644 Filtration.ObjectModel/BlockItemTypes/AnyEnchantmentBlockItem.cs create mode 100644 Filtration.ObjectModel/BlockItemTypes/FracturedItemBlockItem.cs create mode 100644 Filtration.ObjectModel/BlockItemTypes/HasEnchantmentBlockItem.cs create mode 100644 Filtration.ObjectModel/BlockItemTypes/SynthesisedItemBlockItem.cs create mode 100644 Filtration/Resources/Enchantments.txt diff --git a/Filtration.ObjectModel/BlockItemTypes/AnyEnchantmentBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/AnyEnchantmentBlockItem.cs new file mode 100644 index 0000000..cf3659d --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/AnyEnchantmentBlockItem.cs @@ -0,0 +1,23 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public sealed class AnyEnchantmentBlockItem : BooleanBlockItem + { + public AnyEnchantmentBlockItem() + { + } + + public AnyEnchantmentBlockItem(bool booleanValue) : base(booleanValue) + { + } + + public override string PrefixText => "AnyEnchantment"; + public override string DisplayHeading => "Any Enchantment"; + public override Color SummaryBackgroundColor => Colors.YellowGreen; + public override Color SummaryTextColor => Colors.Black; + public override BlockItemOrdering SortOrder => BlockItemOrdering.AnyEnchantment; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/FracturedItemBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/FracturedItemBlockItem.cs new file mode 100644 index 0000000..b64bba6 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/FracturedItemBlockItem.cs @@ -0,0 +1,23 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public sealed class FracturedItemBlockItem : BooleanBlockItem + { + public FracturedItemBlockItem() + { + } + + public FracturedItemBlockItem(bool booleanValue) : base(booleanValue) + { + } + + public override string PrefixText => "FracturedItem"; + public override string DisplayHeading => "Fractured Item"; + public override Color SummaryBackgroundColor => Colors.Salmon; + public override Color SummaryTextColor => Colors.Black; + public override BlockItemOrdering SortOrder => BlockItemOrdering.FracturedItem; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/HasEnchantmentBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HasEnchantmentBlockItem.cs new file mode 100644 index 0000000..3f4a897 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/HasEnchantmentBlockItem.cs @@ -0,0 +1,39 @@ +using System.Linq; +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public class HasEnchantmentBlockItem : StringListBlockItem + { + public override string PrefixText => "HasEnchantment"; + public override int MaximumAllowed => 1; + public override string DisplayHeading => "Has Enchantment"; + + public override string SummaryText + { + get + { + if (Items.Count > 0 && Items.Count < 4) + { + return "Enchantments: " + + Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(','); + } + if (Items.Count >= 4) + { + var remaining = Items.Count - 3; + return "Enchantments: " + Items.Take(3) + .Aggregate(string.Empty, (current, i) => current + i + ", ") + .TrimEnd(' ') + .TrimEnd(',') + " (+" + remaining + " more)"; + } + return "Enchantments: (none)"; + } + } + + public override Color SummaryBackgroundColor => Colors.PaleGreen; + public override Color SummaryTextColor => Colors.Black; + public override BlockItemOrdering SortOrder => BlockItemOrdering.HasEnchantment; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/SynthesisedItemBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SynthesisedItemBlockItem.cs new file mode 100644 index 0000000..4407a93 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/SynthesisedItemBlockItem.cs @@ -0,0 +1,23 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public sealed class SynthesisedItemBlockItem : BooleanBlockItem + { + public SynthesisedItemBlockItem() + { + } + + public SynthesisedItemBlockItem(bool booleanValue) : base(booleanValue) + { + } + + public override string PrefixText => "SynthesisedItem"; + public override string DisplayHeading => "Synthesised Item"; + public override Color SummaryBackgroundColor => Colors.Salmon; + public override Color SummaryTextColor => Colors.Black; + public override BlockItemOrdering SortOrder => BlockItemOrdering.SynthesisedItem; + } +} diff --git a/Filtration.ObjectModel/Enums/BlockItemOrdering.cs b/Filtration.ObjectModel/Enums/BlockItemOrdering.cs index a9fcd08..a9ec310 100644 --- a/Filtration.ObjectModel/Enums/BlockItemOrdering.cs +++ b/Filtration.ObjectModel/Enums/BlockItemOrdering.cs @@ -12,6 +12,9 @@ namespace Filtration.ObjectModel.Enums Corrupted, ElderItem, ShaperItem, + SynthesisedItem, + FracturedItem, + AnyEnchantment, MapTier, ShapedMap, ElderMap, @@ -27,6 +30,7 @@ namespace Filtration.ObjectModel.Enums BaseType, Prophecy, HasExplicitMod, + HasEnchantment, SetTextColor, SetBackgroundColor, SetBorderColor, diff --git a/Filtration.ObjectModel/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj index 04b58ef..b6fd981 100644 --- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj +++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj @@ -81,8 +81,11 @@ + + + @@ -95,6 +98,7 @@ + diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index 21d8d8c..372e766 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -184,6 +184,21 @@ namespace Filtration.Parser.Services AddBooleanItemToBlockItems(block, trimmedLine); break; } + case "SynthesisedItem": + { + AddBooleanItemToBlockItems(block, trimmedLine); + break; + } + case "FracturedItem": + { + AddBooleanItemToBlockItems(block, trimmedLine); + break; + } + case "AnyEnchantment": + { + AddBooleanItemToBlockItems(block, trimmedLine); + break; + } case "ShapedMap": { AddBooleanItemToBlockItems(block, trimmedLine); @@ -317,6 +332,11 @@ namespace Filtration.Parser.Services AddStringListItemToBlockItems(block, trimmedLine); break; } + case "HasEnchantment": + { + AddStringListItemToBlockItems(block, trimmedLine); + break; + } case "ElderMap": { AddBooleanItemToBlockItems(block, trimmedLine); diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index cd85216..24ea0ba 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -463,6 +463,7 @@ Settings.settings True + diff --git a/Filtration/Properties/Resources.Designer.cs b/Filtration/Properties/Resources.Designer.cs index 2ac594b..013aaa0 100644 --- a/Filtration/Properties/Resources.Designer.cs +++ b/Filtration/Properties/Resources.Designer.cs @@ -388,7 +388,18 @@ namespace Filtration.Properties { return ResourceManager.GetString("Prophecies", resourceCulture); } } - + + /// + /// Looks up a localized string similar to Enchantment Decree of Force. + /// + internal static string Enchantments + { + get + { + return ResourceManager.GetString("Enchantments", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream. /// diff --git a/Filtration/Properties/Resources.resx b/Filtration/Properties/Resources.resx index 89e5bc4..87f7089 100644 --- a/Filtration/Properties/Resources.resx +++ b/Filtration/Properties/Resources.resx @@ -214,4 +214,7 @@ ..\Resources\Prophecies.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + ..\Resources\Enchantments.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + \ No newline at end of file diff --git a/Filtration/Resources/Enchantments.txt b/Filtration/Resources/Enchantments.txt new file mode 100644 index 0000000..c9e3ed4 --- /dev/null +++ b/Filtration/Resources/Enchantments.txt @@ -0,0 +1 @@ +Enchantment Decree of Force \ No newline at end of file diff --git a/Filtration/Resources/ItemBaseTypes.txt b/Filtration/Resources/ItemBaseTypes.txt index adf0281..018f155 100644 --- a/Filtration/Resources/ItemBaseTypes.txt +++ b/Filtration/Resources/ItemBaseTypes.txt @@ -22,6 +22,7 @@ Alira's Amulet Alleyways Map Allflame Alloyed Spiked Shield +Alone in the Darkness Alteration Shard Amber Amulet Ambush Boots @@ -76,6 +77,7 @@ Armageddon Brand Arming Axe Armourer's Scrap Armoury Map +Arrogance of the Vaal Arsenal Map Ashen Wood Map Ashscale Talisman @@ -96,6 +98,7 @@ Avian Twins Talisman Awl Baleful Gem Ball Lightning +Bane Bane of the Loyal Barbed Club Barbute Helmet @@ -172,6 +175,7 @@ Bone Offering Bone Spirit Shield Bonechill Support Bonespire Talisman +Boon of Justice Boon of the First Ones Boot Blade Boot Knife @@ -389,6 +393,7 @@ Dagger Axe Damage on Full Life Support Dark Forest Map Dark Pact +Dark Temptation Darkwood Sceptre Deadhand Talisman Deadly Ailments Support @@ -450,6 +455,7 @@ Diamond Ring Dig Map Discharge Discipline +Divine Ire Divine Life Flask Divine Mana Flask Divine Orb @@ -510,6 +516,7 @@ Enchanted Fossil Encrusted Fossil Endurance Charge on Melee Stun Support Enduring Cry +Energy Leech Support Enfeeble Engineer's Orb Engineer's Shard @@ -820,7 +827,9 @@ Infernal Axe Infernal Blow Infernal Sword Infested Valley Map +Infused Channelling Support Innervate Support +Intensify Support Invasion Leaguestone Inya's Key Iron Circlet @@ -949,6 +958,7 @@ Majestic Plate Malachai's Entrails Malachai's Heart Malachai's Lungs +Malevolence Malformation Map Maligaro's Map Maligaro's Spike @@ -1009,6 +1019,7 @@ Molten Shell Molten Strike Monkey Paw Talisman Monkey Twins Talisman +Monochrome Moon Orb Moon Staff Moon Temple Map @@ -1183,6 +1194,7 @@ Prophet Crown Prosperity Puncture Punishment +Purifying Flame Purity of Elements Purity of Fire Purity of Ice @@ -1295,6 +1307,7 @@ Saint's Hauberk Saintly Chainmail Sallet Sambar Sceptre +Sambodhi's Vow Samite Gloves Samite Helmet Samite Slippers @@ -1357,6 +1370,7 @@ Serpentscale Gauntlets Serrated Arrow Quiver Serrated Foil Serrated Fossil +Seven Years Bad Luck Shabby Jerkin Shackled Boots Shadow Axe @@ -1457,6 +1471,7 @@ Soldier Helmet Soldier's Brigandine Sorcerer Boots Sorcerer Gloves +Soulrend Sovereign Spiked Shield Spark Sparkling Claw @@ -1628,6 +1643,7 @@ The Garish Power The Gemcutter The Gentleman The Gladiator +The Golden Era The Hale Heart The Harvester The Hermit @@ -1642,19 +1658,24 @@ The Inventor The Iron Bard The Jester The Jeweller's Boon +The Journey The King's Blade The King's Heart +The Landing The Last One Standing The Lich The Life Thief The Lion The Lord in Black +The Lord of Celebration The Lover The Lunaris Priestess +The Mad King The Master The Master Artisan The Mayor The Mercenary +The Messenger The Metalsmith's Gift The Nurse The Oath @@ -1684,6 +1705,7 @@ The Samurai's Eye The Scarred Meadow The Scavenger The Scholar +The Seeker The Sephirot The Shaper's Key The Shaper's Realm @@ -1800,6 +1822,7 @@ Underground River Map Underground Sea Map Undying Flesh Talisman Unearth +Unleash Support Unset Ring Unshaping Orb Ursine Pelt @@ -1924,6 +1947,7 @@ Warlord's Mark Waste Pool Map Wasteland Map Waterways Map +Wave of Conviction Waxed Garb Wealth and Power Weeping Essence @@ -1978,4 +2002,5 @@ Yriel's Key Zealot Boots Zealot Gloves Zealot Helmet +Zealotry Zodiac Leather \ No newline at end of file diff --git a/Filtration/Services/StaticDataService.cs b/Filtration/Services/StaticDataService.cs index 5591306..1e73f42 100644 --- a/Filtration/Services/StaticDataService.cs +++ b/Filtration/Services/StaticDataService.cs @@ -12,6 +12,7 @@ namespace Filtration.Services IEnumerable ItemClasses { get; } IEnumerable ItemMods { get; } IEnumerable Prophecies { get; } + IEnumerable Enchantments { get; } } internal class StaticDataService : IStaticDataService @@ -29,12 +30,15 @@ namespace Filtration.Services public IEnumerable Prophecies { get; private set; } + public IEnumerable Enchantments { get; private set; } + private void PopulateStaticData() { ItemBaseTypes = new LineReader(() => new StringReader(Resources.ItemBaseTypes)).ToList(); ItemClasses = new LineReader(() => new StringReader(Resources.ItemClasses)).ToList(); ItemMods = new LineReader(() => new StringReader(Resources.ItemMods)).ToList(); Prophecies = new LineReader(() => new StringReader(Resources.Prophecies)).ToList(); + Enchantments = new LineReader(() => new StringReader(Resources.Enchantments)).ToList(); } } } diff --git a/Filtration/UserControls/BlockItemControl.xaml b/Filtration/UserControls/BlockItemControl.xaml index 5be1988..f6d77e6 100644 --- a/Filtration/UserControls/BlockItemControl.xaml +++ b/Filtration/UserControls/BlockItemControl.xaml @@ -87,6 +87,11 @@ + + + + + diff --git a/Filtration/ViewModels/DesignTime/DesignTimeItemFilterBlockViewModel.cs b/Filtration/ViewModels/DesignTime/DesignTimeItemFilterBlockViewModel.cs index 817a01d..47f9c90 100644 --- a/Filtration/ViewModels/DesignTime/DesignTimeItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/DesignTime/DesignTimeItemFilterBlockViewModel.cs @@ -131,12 +131,16 @@ namespace Filtration.ViewModels.DesignTime typeof (CorruptedBlockItem), typeof (ElderItemBlockItem), typeof (ShaperItemBlockItem), + typeof (SynthesisedItemBlockItem), + typeof (FracturedItemBlockItem), + typeof (AnyEnchantmentBlockItem), typeof (MapTierBlockItem), typeof (ShapedMapBlockItem), typeof (ElderMapBlockItem), typeof (GemLevelBlockItem), typeof (StackSizeBlockItem), - typeof (HasExplicitModBlockItem) + typeof (HasExplicitModBlockItem), + typeof (HasEnchantmentBlockItem) }; public List AudioVisualBlockItemTypesAvailable { get; } public Color DisplayTextColor => Colors.Red; diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs index 7c8053b..32fc0de 100644 --- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs @@ -208,6 +208,8 @@ namespace Filtration.ViewModels public IEnumerable AutocompleteItemMods => _staticDataService.ItemMods; + public IEnumerable AutocompleteEnchantments => _staticDataService.Enchantments; + public List BlockItemTypesAvailable => new List { typeof (ItemLevelBlockItem), @@ -226,12 +228,16 @@ namespace Filtration.ViewModels typeof (CorruptedBlockItem), typeof (ElderItemBlockItem), typeof (ShaperItemBlockItem), + typeof (SynthesisedItemBlockItem), + typeof (FracturedItemBlockItem), + typeof (AnyEnchantmentBlockItem), typeof (MapTierBlockItem), typeof (ShapedMapBlockItem), typeof (ElderMapBlockItem), typeof (GemLevelBlockItem), typeof (StackSizeBlockItem), - typeof (HasExplicitModBlockItem) + typeof (HasExplicitModBlockItem), + typeof (HasEnchantmentBlockItem) }; public List AudioVisualBlockItemTypesAvailable => new List