Merge 2c4096ff2c37a464e861462934b787d356df1ddf into 52fc1f6bbc9d20fcd52e3ac6fee86c2a85b628e5
This commit is contained in:
		
						commit
						42af920026
					
				@ -66,6 +66,9 @@
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="packages.config" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 | 
			
		||||
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
 | 
			
		||||
       Other similar extension points exist, see Microsoft.Common.targets.
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "SetBackgroundColor";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Background Color";
 | 
			
		||||
        public override int SortOrder => 18;
 | 
			
		||||
        public override int SortOrder => 22;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.MediumTurquoise;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.Black;
 | 
			
		||||
        public override int SortOrder => 16;
 | 
			
		||||
        public override int SortOrder => 19;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "SetBorderColor";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Border Color";
 | 
			
		||||
        public override int SortOrder => 19;
 | 
			
		||||
        public override int SortOrder => 23;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.MediumSeaGreen;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 15;
 | 
			
		||||
        public override int SortOrder => 18;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,23 @@
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
			
		||||
 | 
			
		||||
namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
{
 | 
			
		||||
    public sealed class DisableDropSoundBlockItem : BooleanBlockItem, IAudioVisualBlockItem
 | 
			
		||||
    {
 | 
			
		||||
        public DisableDropSoundBlockItem()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DisableDropSoundBlockItem(bool booleanValue) : base(booleanValue)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string PrefixText => "DisableDropSound";
 | 
			
		||||
        public override string DisplayHeading => "Disable Drop Sound";
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.Transparent;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.Transparent;
 | 
			
		||||
        public override int SortOrder => 27;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string SummaryText => "Drop Level " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.DodgerBlue;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 13;
 | 
			
		||||
        public override int SortOrder => 14;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 100;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
			
		||||
 | 
			
		||||
namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
{
 | 
			
		||||
    public sealed class ElderMapBlockItem : BooleanBlockItem
 | 
			
		||||
    {
 | 
			
		||||
        public ElderMapBlockItem()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ElderMapBlockItem(bool booleanValue) : base(booleanValue)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string PrefixText => "ElderMap";
 | 
			
		||||
        public override string DisplayHeading => "Elder Map";
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.DarkGoldenrod;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 9;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -16,7 +16,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "SetFontSize";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Font Size";
 | 
			
		||||
        public override int SortOrder => 20;
 | 
			
		||||
        public override int SortOrder => 24;
 | 
			
		||||
        public override int Minimum => 11;
 | 
			
		||||
        public override int Maximum => 45;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
			
		||||
using Filtration.ObjectModel.Enums;
 | 
			
		||||
 | 
			
		||||
namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
{
 | 
			
		||||
    public class GemLevelBlockItem : NumericFilterPredicateBlockItem
 | 
			
		||||
    {
 | 
			
		||||
        public GemLevelBlockItem()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public GemLevelBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand)
 | 
			
		||||
            : base(predicateOperator, predicateOperand)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string PrefixText => "GemLevel";
 | 
			
		||||
        public override int MaximumAllowed => 2;
 | 
			
		||||
        public override string DisplayHeading => "Gem Level";
 | 
			
		||||
        public override string SummaryText => "Gem Level " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 15;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 40;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,38 @@
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
			
		||||
 | 
			
		||||
namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
{
 | 
			
		||||
    public class HasExplicitModBlockItem : StringListBlockItem
 | 
			
		||||
    {
 | 
			
		||||
        public override string PrefixText => "HasExplicitMod";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Has Explicit Mod";
 | 
			
		||||
 | 
			
		||||
        public override string SummaryText
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (Items.Count > 0 && Items.Count < 4)
 | 
			
		||||
                {
 | 
			
		||||
                    return "Item Explicit Mods: " +
 | 
			
		||||
                           Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
 | 
			
		||||
                }
 | 
			
		||||
                if (Items.Count >= 4)
 | 
			
		||||
                {
 | 
			
		||||
                    var remaining = Items.Count - 3;
 | 
			
		||||
                    return "Item Explicit Mods: " + Items.Take(3)
 | 
			
		||||
                        .Aggregate(string.Empty, (current, i) => current + i + ", ")
 | 
			
		||||
                        .TrimEnd(' ')
 | 
			
		||||
                        .TrimEnd(',') + " (+" + remaining + " more)";
 | 
			
		||||
                }
 | 
			
		||||
                return "Item Explicit Mods: (none)";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.MidnightBlue;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 20;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string SummaryText => "Height " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.LightBlue;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.Black;
 | 
			
		||||
        public override int SortOrder => 10;
 | 
			
		||||
        public override int SortOrder => 11;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 6;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string SummaryText => "Item Level " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 12;
 | 
			
		||||
        public override int SortOrder => 13;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 100;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "PlayAlertSoundPositional";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Play Positional Alert Sound";
 | 
			
		||||
        public override int SortOrder => 22;
 | 
			
		||||
        public override int SortOrder => 26;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
                                              ((ItemRarity) FilterPredicate.PredicateOperand).GetAttributeDescription();
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.LightCoral;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 14;
 | 
			
		||||
        public override int SortOrder => 17;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => (int)ItemRarity.Unique;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.GhostWhite;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.Black;
 | 
			
		||||
        public override int SortOrder => 9;
 | 
			
		||||
        public override int SortOrder => 10;
 | 
			
		||||
 | 
			
		||||
        private SocketColor StringToSocketColor(char socketColorString)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "PlayAlertSound";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Play Alert Sound";
 | 
			
		||||
        public override int SortOrder => 21;
 | 
			
		||||
        public override int SortOrder => 25;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using Filtration.ObjectModel.BlockItemBaseTypes;
 | 
			
		||||
using Filtration.ObjectModel.Enums;
 | 
			
		||||
 | 
			
		||||
namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
{
 | 
			
		||||
    public class StackSizeBlockItem : NumericFilterPredicateBlockItem
 | 
			
		||||
    {
 | 
			
		||||
        public StackSizeBlockItem()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public StackSizeBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand)
 | 
			
		||||
            : base(predicateOperator, predicateOperand)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string PrefixText => "StackSize";
 | 
			
		||||
        public override int MaximumAllowed => 2;
 | 
			
		||||
        public override string DisplayHeading => "Stack Size";
 | 
			
		||||
        public override string SummaryText => "Stack Size " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 16;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 1000;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string PrefixText => "SetTextColor";
 | 
			
		||||
        public override int MaximumAllowed => 1;
 | 
			
		||||
        public override string DisplayHeading => "Text Color";
 | 
			
		||||
        public override int SortOrder => 17;
 | 
			
		||||
        public override int SortOrder => 21;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
 | 
			
		||||
        public override string SummaryText => "Width " + FilterPredicate;
 | 
			
		||||
        public override Color SummaryBackgroundColor => Colors.MediumPurple;
 | 
			
		||||
        public override Color SummaryTextColor => Colors.White;
 | 
			
		||||
        public override int SortOrder => 11;
 | 
			
		||||
        public override int SortOrder => 12;
 | 
			
		||||
        public override int Minimum => 0;
 | 
			
		||||
        public override int Maximum => 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -61,6 +61,10 @@
 | 
			
		||||
    <Compile Include="BlockItemTypes\BaseTypeBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\BorderColorBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\ClassBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\DisableDropSoundBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\ElderMapBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\GemLevelBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\HasExplicitModBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\ShapedMapBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\ShaperItemBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\ElderItemBlockItem.cs" />
 | 
			
		||||
@ -77,9 +81,10 @@
 | 
			
		||||
    <Compile Include="BlockItemTypes\SocketsBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\PositionalSoundBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\SoundBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\StackSizeBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\TextColorBlockItem.cs" />
 | 
			
		||||
    <Compile Include="BlockItemTypes\WidthBlockItem.cs" />
 | 
			
		||||
		<Compile Include="Commands\CommandManager.cs" />
 | 
			
		||||
    <Compile Include="Commands\CommandManager.cs" />
 | 
			
		||||
    <Compile Include="Commands\ICommand.cs" />
 | 
			
		||||
    <Compile Include="Commands\ItemFilterScript\PasteBlockCommand.cs" />
 | 
			
		||||
    <Compile Include="Commands\ItemFilterScript\MoveBlockToBottomCommand.cs" />
 | 
			
		||||
@ -100,7 +105,7 @@
 | 
			
		||||
    <Compile Include="Enums\ThemeComponentType.cs" />
 | 
			
		||||
    <Compile Include="Extensions\EnumHelper.cs" />
 | 
			
		||||
    <Compile Include="Extensions\ItemRarityExtensions.cs" />
 | 
			
		||||
		<Compile Include="Factories\IItemFilterScriptFactory.cs" />
 | 
			
		||||
    <Compile Include="Factories\IItemFilterScriptFactory.cs" />
 | 
			
		||||
    <Compile Include="FilteredItem.cs" />
 | 
			
		||||
    <Compile Include="IAudioVisualBlockItem.cs" />
 | 
			
		||||
    <Compile Include="IItemFilterBlockItem.cs" />
 | 
			
		||||
@ -108,7 +113,7 @@
 | 
			
		||||
    <Compile Include="ItemFilterBlock.cs" />
 | 
			
		||||
    <Compile Include="ItemFilterBlockGroup.cs" />
 | 
			
		||||
    <Compile Include="ItemFilterScript.cs" />
 | 
			
		||||
		<Compile Include="ItemFilterScriptSettings.cs" />
 | 
			
		||||
    <Compile Include="ItemFilterScriptSettings.cs" />
 | 
			
		||||
    <Compile Include="ItemSet.cs" />
 | 
			
		||||
    <Compile Include="NumericFilterPredicate.cs" />
 | 
			
		||||
    <Compile Include="PathOfExileNamedColors.cs" />
 | 
			
		||||
 | 
			
		||||
@ -318,6 +318,42 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.Equal, blockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_GemLevel_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var inputString = "Show" + Environment.NewLine +
 | 
			
		||||
                              "    GemLevel = 20";
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
 | 
			
		||||
            Assert.AreEqual(1, result.BlockItems.Count(b => b is GemLevelBlockItem));
 | 
			
		||||
            var blockItem = result.BlockItems.OfType<GemLevelBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(20, blockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.Equal, blockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_StackSize_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var inputString = "Show" + Environment.NewLine +
 | 
			
		||||
                              "    StackSize > 5";
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
 | 
			
		||||
            Assert.AreEqual(1, result.BlockItems.Count(b => b is StackSizeBlockItem));
 | 
			
		||||
            var blockItem = result.BlockItems.OfType<StackSizeBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(5, blockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.GreaterThan, blockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_Corrupted_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
@ -386,6 +422,23 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.IsFalse(blockItem.BooleanValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_ElderMap_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var inputString = "Show" + Environment.NewLine +
 | 
			
		||||
                              "    ElderMap false";
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
 | 
			
		||||
            Assert.AreEqual(1, result.BlockItems.Count(b => b is ElderMapBlockItem));
 | 
			
		||||
            var blockItem = result.BlockItems.OfType<ElderMapBlockItem>().First();
 | 
			
		||||
            Assert.IsFalse(blockItem.BooleanValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_Identified_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
@ -494,6 +547,25 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.Contains("Test BaseType 2", blockItem.Items);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_HasExplicitMod_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var inputString = "Show" + Environment.NewLine +
 | 
			
		||||
                              @"    HasExplicitMod ""Test Mod 1"" ""TestOneWordModInQuotes"" TestOneWordModNotInQuotes ""Test Mod 2""";
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
            Assert.AreEqual(1, result.BlockItems.Count(b => b is HasExplicitModBlockItem));
 | 
			
		||||
            var blockItem = result.BlockItems.OfType<HasExplicitModBlockItem>().First();
 | 
			
		||||
            Assert.Contains("Test Mod 1", blockItem.Items);
 | 
			
		||||
            Assert.Contains("TestOneWordModInQuotes", blockItem.Items);
 | 
			
		||||
            Assert.Contains("TestOneWordModNotInQuotes", blockItem.Items);
 | 
			
		||||
            Assert.Contains("Test Mod 2", blockItem.Items);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_Sockets_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
@ -802,7 +874,24 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.AreEqual("7", blockItem.Value);
 | 
			
		||||
            Assert.AreEqual(95, blockItem.SecondValue);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_DisableDropSound_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var inputString = "Show" + Environment.NewLine +
 | 
			
		||||
                              "    DisableDropSound True";
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
 | 
			
		||||
            Assert.AreEqual(1, result.BlockItems.Count(b => b is DisableDropSoundBlockItem));
 | 
			
		||||
            var blockItem = result.BlockItems.OfType<DisableDropSoundBlockItem>().First();
 | 
			
		||||
            Assert.IsTrue(blockItem.BooleanValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateStringToItemFilterBlock_Everything_ReturnsCorrectObject()
 | 
			
		||||
        {
 | 
			
		||||
@ -813,6 +902,8 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
                              "Show" + Environment.NewLine +
 | 
			
		||||
                              "    ItemLevel >= 50" + Environment.NewLine +
 | 
			
		||||
                              "    DropLevel < 70" + Environment.NewLine +
 | 
			
		||||
                              "    GemLevel = 20" + Environment.NewLine +
 | 
			
		||||
                              "    StackSize > 2" + Environment.NewLine +
 | 
			
		||||
                              "    Quality = 15" + Environment.NewLine +
 | 
			
		||||
                              "    Rarity <= Unique" + Environment.NewLine +
 | 
			
		||||
                              "    Identified True" + Environment.NewLine +
 | 
			
		||||
@ -820,8 +911,10 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
                              "    ElderItem true" + Environment.NewLine +
 | 
			
		||||
                              "    ShaperItem False" + Environment.NewLine +
 | 
			
		||||
                              "    ShapedMap TRUE" + Environment.NewLine +
 | 
			
		||||
                              "    ElderMap False" + Environment.NewLine +
 | 
			
		||||
                              @"    Class ""My Item Class"" AnotherClass ""AndAnotherClass""" + Environment.NewLine +
 | 
			
		||||
                              @"    BaseType MyBaseType ""Another BaseType""" + Environment.NewLine +
 | 
			
		||||
                              @"    HasExplicitMod MyMod ""Another Mod""" + Environment.NewLine +
 | 
			
		||||
                              "    JunkLine Let's ignore this one!" + Environment.NewLine +
 | 
			
		||||
                              "    #Quality Commented out quality line" + Environment.NewLine +
 | 
			
		||||
                              "    Sockets >= 3" + Environment.NewLine +
 | 
			
		||||
@ -831,7 +924,8 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
                              "    SetBackgroundColor 255 100 5" + Environment.NewLine +
 | 
			
		||||
                              "    SetBorderColor 0 0 0" + Environment.NewLine +
 | 
			
		||||
                              "    SetFontSize 50" + Environment.NewLine +
 | 
			
		||||
                              "    PlayAlertSound 3" + Environment.NewLine;
 | 
			
		||||
                              "    PlayAlertSound 3" + Environment.NewLine +
 | 
			
		||||
                              "    DisableDropSound False" + Environment.NewLine;
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
 | 
			
		||||
@ -857,10 +951,21 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            var shapedMapBlockItem = result.BlockItems.OfType<ShapedMapBlockItem>().First();
 | 
			
		||||
            Assert.IsTrue(shapedMapBlockItem.BooleanValue);
 | 
			
		||||
 | 
			
		||||
            var elderMapBlockItem = result.BlockItems.OfType<ElderMapBlockItem>().First();
 | 
			
		||||
            Assert.IsFalse(elderMapBlockItem.BooleanValue);
 | 
			
		||||
 | 
			
		||||
            var dropLevelblockItem = result.BlockItems.OfType<DropLevelBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.LessThan, dropLevelblockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
            Assert.AreEqual(70, dropLevelblockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
 | 
			
		||||
            var gemLevelBlockItem = result.BlockItems.OfType<GemLevelBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.Equal, gemLevelBlockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
            Assert.AreEqual(20, gemLevelBlockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
 | 
			
		||||
            var stackSizeBlockItem = result.BlockItems.OfType<StackSizeBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.GreaterThan, stackSizeBlockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
            Assert.AreEqual(2, stackSizeBlockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
 | 
			
		||||
            var qualityblockItem = result.BlockItems.OfType<QualityBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.Equal, qualityblockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
            Assert.AreEqual(15, qualityblockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
@ -880,6 +985,11 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.Contains("MyBaseType", baseTypeblockItem.Items);
 | 
			
		||||
            Assert.Contains("Another BaseType", baseTypeblockItem.Items);
 | 
			
		||||
 | 
			
		||||
            var hasExplicitModBlockItem = result.BlockItems.OfType<HasExplicitModBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(2, hasExplicitModBlockItem.Items.Count);
 | 
			
		||||
            Assert.Contains("MyMod", hasExplicitModBlockItem.Items);
 | 
			
		||||
            Assert.Contains("Another Mod", hasExplicitModBlockItem.Items);
 | 
			
		||||
 | 
			
		||||
            var socketsblockItem = result.BlockItems.OfType<SocketsBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, socketsblockItem.FilterPredicate.PredicateOperator);
 | 
			
		||||
            Assert.AreEqual(3, socketsblockItem.FilterPredicate.PredicateOperand);
 | 
			
		||||
@ -917,6 +1027,9 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            var soundblockItem = result.BlockItems.OfType<SoundBlockItem>().First();
 | 
			
		||||
            Assert.AreEqual("3", soundblockItem.Value);
 | 
			
		||||
            Assert.AreEqual(79, soundblockItem.SecondValue);
 | 
			
		||||
 | 
			
		||||
            var disableDropSoundBlockItem = result.BlockItems.OfType<DisableDropSoundBlockItem>().First();
 | 
			
		||||
            Assert.IsFalse(disableDropSoundBlockItem.BooleanValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
@ -1334,6 +1447,38 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.AreEqual(expectedResult, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateItemFilterBlockToString_GemLevel_ReturnsCorrectString()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var expectedResult = "Show" + Environment.NewLine +
 | 
			
		||||
                                 "    GemLevel <= 15";
 | 
			
		||||
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new GemLevelBlockItem(FilterPredicateOperator.LessThanOrEqual, 15));
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
            Assert.AreEqual(expectedResult, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateItemFilterBlockToString_StackSize_ReturnsCorrectString()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var expectedResult = "Show" + Environment.NewLine +
 | 
			
		||||
                                 "    StackSize = 5";
 | 
			
		||||
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new StackSizeBlockItem(FilterPredicateOperator.Equal, 5));
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
            Assert.AreEqual(expectedResult, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateItemFilterBlockToString_Quality_ReturnsCorrectString()
 | 
			
		||||
        {
 | 
			
		||||
@ -1425,6 +1570,26 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            Assert.AreEqual(expectedResult, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateItemFilterBlockToString_HasExplicitMod_ReturnsCorrectString()
 | 
			
		||||
        {
 | 
			
		||||
            // Arrange
 | 
			
		||||
            var expectedResult = "Show" + Environment.NewLine +
 | 
			
		||||
                                 "    HasExplicitMod \"Test Mod\" \"Another Mod\" \"Yet Another Mod\"";
 | 
			
		||||
 | 
			
		||||
            var hasExplicitModBlockItem = new HasExplicitModBlockItem();
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("Test Mod");
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("Another Mod");
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("Yet Another Mod");
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(hasExplicitModBlockItem);
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
 | 
			
		||||
 | 
			
		||||
            // Assert
 | 
			
		||||
            Assert.AreEqual(expectedResult, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Test]
 | 
			
		||||
        public void TranslateItemFilterBlockToString_Sockets_ReturnsCorrectString()
 | 
			
		||||
        {
 | 
			
		||||
@ -1700,20 +1865,25 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
                                 "    ElderItem True" + Environment.NewLine +
 | 
			
		||||
                                 "    ShaperItem False" + Environment.NewLine +
 | 
			
		||||
                                 "    ShapedMap True" + Environment.NewLine +
 | 
			
		||||
                                 "    ElderMap True" + Environment.NewLine +
 | 
			
		||||
                                 "    Height <= 6" + Environment.NewLine +
 | 
			
		||||
                                 "    Height >= 2" + Environment.NewLine +
 | 
			
		||||
                                 "    Width = 3" + Environment.NewLine +
 | 
			
		||||
                                 "    ItemLevel > 70" + Environment.NewLine +
 | 
			
		||||
                                 "    ItemLevel <= 85" + Environment.NewLine +
 | 
			
		||||
                                 "    DropLevel > 56" + Environment.NewLine +
 | 
			
		||||
                                 "    GemLevel < 15" + Environment.NewLine +
 | 
			
		||||
                                 "    StackSize >= 4" + Environment.NewLine +
 | 
			
		||||
                                 "    Rarity = Unique" + Environment.NewLine +
 | 
			
		||||
                                 "    Class \"Body Armour\" \"Gloves\" \"Belt\" \"Two Hand Axes\"" + Environment.NewLine +
 | 
			
		||||
                                 "    BaseType \"Greater Life Flask\" \"Simple Robe\" \"Full Wyrmscale\"" + Environment.NewLine +
 | 
			
		||||
                                 "    HasExplicitMod \"Guatelitzi's\" \"of Tacati\" \"Tyrannical\"" + Environment.NewLine +
 | 
			
		||||
                                 "    SetTextColor 255 89 0 56" + Environment.NewLine +
 | 
			
		||||
                                 "    SetBackgroundColor 0 0 0" + Environment.NewLine +
 | 
			
		||||
                                 "    SetBorderColor 255 1 254" + Environment.NewLine +
 | 
			
		||||
                                 "    SetFontSize 50" + Environment.NewLine +
 | 
			
		||||
                                 "    PlayAlertSound 6 90";
 | 
			
		||||
                                 "    PlayAlertSound 6 90" + Environment.NewLine +
 | 
			
		||||
                                 "    DisableDropSound True";
 | 
			
		||||
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true));
 | 
			
		||||
@ -1722,6 +1892,8 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 70));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.LessThanOrEqual, 85));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new DropLevelBlockItem(FilterPredicateOperator.GreaterThan, 56));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new GemLevelBlockItem(FilterPredicateOperator.LessThan, 15));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new StackSizeBlockItem(FilterPredicateOperator.GreaterThanOrEqual, 4));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new QualityBlockItem(FilterPredicateOperator.GreaterThan, 2));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new RarityBlockItem(FilterPredicateOperator.Equal, (int)ItemRarity.Unique));
 | 
			
		||||
            var classItemblockItem = new ClassBlockItem();
 | 
			
		||||
@ -1735,6 +1907,11 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            baseTypeItemblockItem.Items.Add("Simple Robe");
 | 
			
		||||
            baseTypeItemblockItem.Items.Add("Full Wyrmscale");
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(baseTypeItemblockItem);
 | 
			
		||||
            var hasExplicitModBlockItem = new HasExplicitModBlockItem();
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("Guatelitzi's");
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("of Tacati");
 | 
			
		||||
            hasExplicitModBlockItem.Items.Add("Tyrannical");
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(hasExplicitModBlockItem);
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new SocketsBlockItem(FilterPredicateOperator.LessThanOrEqual, 6));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new LinkedSocketsBlockItem(FilterPredicateOperator.GreaterThanOrEqual, 4));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 3));
 | 
			
		||||
@ -1748,6 +1925,8 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ElderItemBlockItem(true));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ShaperItemBlockItem(false));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ShapedMapBlockItem(true));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new ElderMapBlockItem(true));
 | 
			
		||||
            _testUtility.TestBlock.BlockItems.Add(new DisableDropSoundBlockItem(true));
 | 
			
		||||
 | 
			
		||||
            // Act
 | 
			
		||||
            var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
 | 
			
		||||
 | 
			
		||||
@ -155,7 +155,7 @@ namespace Filtration.Parser.Tests.Services
 | 
			
		||||
            script.ItemFilterBlocks.Add(block1);
 | 
			
		||||
            script.ItemFilterBlocks.Add(block2);
 | 
			
		||||
 | 
			
		||||
            var expectedOutput = "# Script edited with Filtration - https://github.com/ben-wallis/Filtration" + Environment.NewLine +
 | 
			
		||||
            var expectedOutput = "# Script edited with Filtration - https://github.com/ben-wallis/Filtration" + Environment.NewLine + Environment.NewLine +
 | 
			
		||||
                                 "# Test Filter 1" + Environment.NewLine +
 | 
			
		||||
                                 "Show" + Environment.NewLine +
 | 
			
		||||
                                 "    ItemLevel > 5" + Environment.NewLine +
 | 
			
		||||
 | 
			
		||||
@ -266,6 +266,34 @@ namespace Filtration.Parser.Services
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    case "GemLevel":
 | 
			
		||||
                    {
 | 
			
		||||
                        AddNumericFilterPredicateItemToBlockItems<GemLevelBlockItem>(block, trimmedLine);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    case "StackSize":
 | 
			
		||||
                    {
 | 
			
		||||
                        AddNumericFilterPredicateItemToBlockItems<StackSizeBlockItem>(block, trimmedLine);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    case "HasExplicitMod":
 | 
			
		||||
                    {
 | 
			
		||||
                        AddStringListItemToBlockItems<HasExplicitModBlockItem>(block, trimmedLine);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    case "ElderMap":
 | 
			
		||||
                    {
 | 
			
		||||
                        AddBooleanItemToBlockItems<ElderMapBlockItem>(block, trimmedLine);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    case "DisableDropSound":
 | 
			
		||||
                    {
 | 
			
		||||
                        // Only ever use the last DisableDropSound item encountered as multiples aren't valid.
 | 
			
		||||
                        RemoveExistingBlockItemsOfType<DisableDropSoundBlockItem>(block);
 | 
			
		||||
 | 
			
		||||
                        AddBooleanItemToBlockItems<DisableDropSoundBlockItem>(block, trimmedLine);
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -251,8 +251,8 @@ namespace Filtration.Parser.Services
 | 
			
		||||
                        outputString += "# " + line + Environment.NewLine;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                outputString += Environment.NewLine;
 | 
			
		||||
            }
 | 
			
		||||
            outputString += Environment.NewLine;
 | 
			
		||||
 | 
			
		||||
            // ReSharper disable once LoopCanBeConvertedToQuery
 | 
			
		||||
            foreach (var block in script.ItemFilterBlocks)
 | 
			
		||||
 | 
			
		||||
@ -107,6 +107,9 @@
 | 
			
		||||
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
 | 
			
		||||
    </EmbeddedResource>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 | 
			
		||||
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
 | 
			
		||||
       Other similar extension points exist, see Microsoft.Common.targets.
 | 
			
		||||
 | 
			
		||||
@ -73,6 +73,9 @@
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="packages.config" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 | 
			
		||||
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
 | 
			
		||||
       Other similar extension points exist, see Microsoft.Common.targets.
 | 
			
		||||
 | 
			
		||||
@ -114,6 +114,7 @@ Bear Trap
 | 
			
		||||
Behemoth Mace
 | 
			
		||||
Belfry Map
 | 
			
		||||
Bestel's Manuscript
 | 
			
		||||
Bestiary Orb
 | 
			
		||||
Beyond Leaguestone
 | 
			
		||||
Binding Shard
 | 
			
		||||
Birth of the Three
 | 
			
		||||
@ -131,6 +132,7 @@ Blast Rain
 | 
			
		||||
Blessed Orb
 | 
			
		||||
Blessing of Chayula
 | 
			
		||||
Blessing of Esh
 | 
			
		||||
Blessing of God
 | 
			
		||||
Blessing of Tul
 | 
			
		||||
Blessing of Uul-Netol
 | 
			
		||||
Blessing of Xoph
 | 
			
		||||
@ -244,6 +246,7 @@ Chaos Orb
 | 
			
		||||
Chaos Shard
 | 
			
		||||
Chaotic Disposition
 | 
			
		||||
Charged Dash
 | 
			
		||||
Charged Traps Support
 | 
			
		||||
Chateau Map
 | 
			
		||||
Chayula's Breachstone
 | 
			
		||||
Chest Splitter
 | 
			
		||||
@ -492,6 +495,7 @@ Exalted Orb
 | 
			
		||||
Exalted Shard
 | 
			
		||||
Excavation Map
 | 
			
		||||
Explosive Arrow
 | 
			
		||||
Explosive Trap
 | 
			
		||||
Exquisite Blade
 | 
			
		||||
Exquisite Leather
 | 
			
		||||
Eye Gouger
 | 
			
		||||
@ -531,8 +535,10 @@ Flame Dash
 | 
			
		||||
Flame Surge
 | 
			
		||||
Flame Totem
 | 
			
		||||
Flameblast
 | 
			
		||||
Flamethrower Trap
 | 
			
		||||
Flammability
 | 
			
		||||
Flanged Mace
 | 
			
		||||
Flashpowder Keg
 | 
			
		||||
Flaying Knife
 | 
			
		||||
Flesh Offering
 | 
			
		||||
Fleshripper
 | 
			
		||||
@ -540,6 +546,7 @@ Flicker Strike
 | 
			
		||||
Flooded Mine Map
 | 
			
		||||
Fluted Bascinet
 | 
			
		||||
Footman Sword
 | 
			
		||||
Forbidden Power
 | 
			
		||||
Forge of the Phoenix Map
 | 
			
		||||
Fork Support
 | 
			
		||||
Fortify Support
 | 
			
		||||
@ -654,6 +661,7 @@ Harbinger's Orb
 | 
			
		||||
Harbinger's Shard
 | 
			
		||||
Harlequin Mask
 | 
			
		||||
Harmonic Spirit Shield
 | 
			
		||||
Harmony of Souls
 | 
			
		||||
Harpy Rapier
 | 
			
		||||
Haste
 | 
			
		||||
Hatred
 | 
			
		||||
@ -705,6 +713,7 @@ Ignite Proliferation Support
 | 
			
		||||
Imbued Wand
 | 
			
		||||
Immolate Support
 | 
			
		||||
Immortal Call
 | 
			
		||||
Immortal Resolve
 | 
			
		||||
Imp Dagger
 | 
			
		||||
Imperial Bow
 | 
			
		||||
Imperial Buckler
 | 
			
		||||
@ -712,6 +721,7 @@ Imperial Claw
 | 
			
		||||
Imperial Maul
 | 
			
		||||
Imperial Skean
 | 
			
		||||
Imperial Staff
 | 
			
		||||
Imprinted Bestiary Orb
 | 
			
		||||
Incinerate
 | 
			
		||||
Increased Area of Effect Support
 | 
			
		||||
Increased Critical Damage Support
 | 
			
		||||
@ -813,6 +823,7 @@ Light Quiver
 | 
			
		||||
Lighthouse Map
 | 
			
		||||
Lightning Arrow
 | 
			
		||||
Lightning Penetration Support
 | 
			
		||||
Lightning Spire Trap
 | 
			
		||||
Lightning Strike
 | 
			
		||||
Lightning Tendrils
 | 
			
		||||
Lightning Trap
 | 
			
		||||
@ -923,6 +934,7 @@ Muttering Essence of Woe
 | 
			
		||||
Nailed Fist
 | 
			
		||||
Necromancer Circlet
 | 
			
		||||
Necromancer Silks
 | 
			
		||||
Necromancy Net
 | 
			
		||||
Necropolis Map
 | 
			
		||||
Nemesis Leaguestone
 | 
			
		||||
Nightmare Bascinet
 | 
			
		||||
@ -983,6 +995,7 @@ Penetrating Arrow Quiver
 | 
			
		||||
Peninsula Map
 | 
			
		||||
Perandus Coin
 | 
			
		||||
Perandus Leaguestone
 | 
			
		||||
Perfection
 | 
			
		||||
Pernarch
 | 
			
		||||
Petrified Club
 | 
			
		||||
Phantasmagoria Map
 | 
			
		||||
@ -1082,7 +1095,10 @@ Regal Orb
 | 
			
		||||
Regal Shard
 | 
			
		||||
Regicide Mask
 | 
			
		||||
Reinforced Greaves
 | 
			
		||||
Reinforced Iron Net
 | 
			
		||||
Reinforced Kite Shield
 | 
			
		||||
Reinforced Rope Net
 | 
			
		||||
Reinforced Steel Net
 | 
			
		||||
Reinforced Tower Shield
 | 
			
		||||
Rejuvenation Totem
 | 
			
		||||
Relic Chambers Map
 | 
			
		||||
@ -1185,6 +1201,7 @@ Scroll of Wisdom
 | 
			
		||||
Searching Eye Jewel
 | 
			
		||||
Searing Bond
 | 
			
		||||
Secutor Helm
 | 
			
		||||
Seismic Trap
 | 
			
		||||
Sekhem
 | 
			
		||||
Sekhema Feather
 | 
			
		||||
Sentinel Jacket
 | 
			
		||||
@ -1264,8 +1281,12 @@ Silver Coin
 | 
			
		||||
Silver Flask
 | 
			
		||||
Silver Key
 | 
			
		||||
Silver Locket
 | 
			
		||||
Simple Iron Net
 | 
			
		||||
Simple Robe
 | 
			
		||||
Simple Rope Net
 | 
			
		||||
Simple Steel Net
 | 
			
		||||
Sinner Tricorne
 | 
			
		||||
Siphoning Trap
 | 
			
		||||
Skean
 | 
			
		||||
Skinning Knife
 | 
			
		||||
Slaughter Knife
 | 
			
		||||
@ -1292,6 +1313,7 @@ Sovereign Spiked Shield
 | 
			
		||||
Spark
 | 
			
		||||
Sparkling Claw
 | 
			
		||||
Spectral Axe
 | 
			
		||||
Spectral Shield Throw
 | 
			
		||||
Spectral Sword
 | 
			
		||||
Spectral Throw
 | 
			
		||||
Spell Cascade Support
 | 
			
		||||
@ -1341,6 +1363,7 @@ Stibnite Flask
 | 
			
		||||
Stiletto
 | 
			
		||||
Stone Axe
 | 
			
		||||
Stone Hammer
 | 
			
		||||
Stone of Passage
 | 
			
		||||
Storm Barrier Support
 | 
			
		||||
Storm Blade
 | 
			
		||||
Storm Burst
 | 
			
		||||
@ -1349,6 +1372,9 @@ Strand Map
 | 
			
		||||
Strapped Boots
 | 
			
		||||
Strapped Leather
 | 
			
		||||
Strapped Mitts
 | 
			
		||||
Strong Iron Net
 | 
			
		||||
Strong Rope Net
 | 
			
		||||
Strong Steel Net
 | 
			
		||||
Struck by Lightning
 | 
			
		||||
Studded Belt
 | 
			
		||||
Studded Round Shield
 | 
			
		||||
@ -1361,6 +1387,7 @@ Summon Chaos Golem
 | 
			
		||||
Summon Flame Golem
 | 
			
		||||
Summon Ice Golem
 | 
			
		||||
Summon Lightning Golem
 | 
			
		||||
Summon Phantasm on Kill Support
 | 
			
		||||
Summon Raging Spirit
 | 
			
		||||
Summon Skeleton
 | 
			
		||||
Summon Stone Golem
 | 
			
		||||
@ -1377,6 +1404,7 @@ Talisman Leaguestone
 | 
			
		||||
Talon Axe
 | 
			
		||||
Tarnished Spirit Shield
 | 
			
		||||
Teak Round Shield
 | 
			
		||||
Tectonic Slam
 | 
			
		||||
Tempered Foil
 | 
			
		||||
Tempest Leaguestone
 | 
			
		||||
Tempest Shield
 | 
			
		||||
@ -1386,17 +1414,22 @@ Tenderizer
 | 
			
		||||
Terrace Map
 | 
			
		||||
Terror Claw
 | 
			
		||||
Terror Maul
 | 
			
		||||
Thaumaturgical Net
 | 
			
		||||
Thaumetic Emblem
 | 
			
		||||
Thaumetic Sulphite
 | 
			
		||||
The Admirer
 | 
			
		||||
The Aesthete
 | 
			
		||||
The Arena Champion
 | 
			
		||||
The Army of Blood
 | 
			
		||||
The Artist
 | 
			
		||||
The Avenger
 | 
			
		||||
The Battle Born
 | 
			
		||||
The Beast
 | 
			
		||||
The Betrayal
 | 
			
		||||
The Black Flag
 | 
			
		||||
The Blazing Fire
 | 
			
		||||
The Body
 | 
			
		||||
The Breach
 | 
			
		||||
The Brittle Emperor
 | 
			
		||||
The Calling
 | 
			
		||||
The Carrion Crow
 | 
			
		||||
@ -1404,18 +1437,23 @@ The Cartographer
 | 
			
		||||
The Cataclysm
 | 
			
		||||
The Catalyst
 | 
			
		||||
The Celestial Justicar
 | 
			
		||||
The Celestial Stone
 | 
			
		||||
The Chains that Bind
 | 
			
		||||
The Coming Storm
 | 
			
		||||
The Conduit
 | 
			
		||||
The Cursed King
 | 
			
		||||
The Dapper Prodigy
 | 
			
		||||
The Dark Mage
 | 
			
		||||
The Darkest Dream
 | 
			
		||||
The Deceiver
 | 
			
		||||
The Demoness
 | 
			
		||||
The Devastator
 | 
			
		||||
The Doctor
 | 
			
		||||
The Doppelganger
 | 
			
		||||
The Dragon
 | 
			
		||||
The Dragon's Heart
 | 
			
		||||
The Dreamer
 | 
			
		||||
The Dreamland
 | 
			
		||||
The Drunken Aristocrat
 | 
			
		||||
The Encroaching Darkness
 | 
			
		||||
The Endurance
 | 
			
		||||
@ -1425,6 +1463,7 @@ The Explorer
 | 
			
		||||
The Eye of Desire
 | 
			
		||||
The Eye of Fury
 | 
			
		||||
The Eye of the Dragon
 | 
			
		||||
The Fathomless Depths
 | 
			
		||||
The Feast
 | 
			
		||||
The Fiend
 | 
			
		||||
The Fletcher
 | 
			
		||||
@ -1437,6 +1476,7 @@ The Garish Power
 | 
			
		||||
The Gemcutter
 | 
			
		||||
The Gentleman
 | 
			
		||||
The Gladiator
 | 
			
		||||
The Hale Heart
 | 
			
		||||
The Harvester
 | 
			
		||||
The Hermit
 | 
			
		||||
The Hoarder
 | 
			
		||||
@ -1444,8 +1484,11 @@ The Hunger
 | 
			
		||||
The Immortal
 | 
			
		||||
The Incantation
 | 
			
		||||
The Inoculated
 | 
			
		||||
The Insatiable
 | 
			
		||||
The Inventor
 | 
			
		||||
The Iron Bard
 | 
			
		||||
The Jester
 | 
			
		||||
The Jeweller's Boon
 | 
			
		||||
The King's Blade
 | 
			
		||||
The King's Heart
 | 
			
		||||
The Last One Standing
 | 
			
		||||
@ -1454,9 +1497,12 @@ The Lion
 | 
			
		||||
The Lord in Black
 | 
			
		||||
The Lover
 | 
			
		||||
The Lunaris Priestess
 | 
			
		||||
The Master
 | 
			
		||||
The Mayor
 | 
			
		||||
The Mercenary
 | 
			
		||||
The Metalsmith's Gift
 | 
			
		||||
The Oath
 | 
			
		||||
The Obscured
 | 
			
		||||
The Offering
 | 
			
		||||
The One With All
 | 
			
		||||
The Opulent
 | 
			
		||||
@ -1466,17 +1512,22 @@ The Penitent
 | 
			
		||||
The Poet
 | 
			
		||||
The Polymath
 | 
			
		||||
The Porcupine
 | 
			
		||||
The Professor
 | 
			
		||||
The Puzzle
 | 
			
		||||
The Queen
 | 
			
		||||
The Rabid Rhoa
 | 
			
		||||
The Realm
 | 
			
		||||
The Risk
 | 
			
		||||
The Rite of Elements
 | 
			
		||||
The Road to Power
 | 
			
		||||
The Ruthless Ceinture
 | 
			
		||||
The Saint's Treasure
 | 
			
		||||
The Samurai's Eye
 | 
			
		||||
The Scarred Meadow
 | 
			
		||||
The Scavenger
 | 
			
		||||
The Scholar
 | 
			
		||||
The Sephirot
 | 
			
		||||
The Shaper's Key
 | 
			
		||||
The Sigil
 | 
			
		||||
The Siren
 | 
			
		||||
The Soul
 | 
			
		||||
@ -1490,6 +1541,7 @@ The Sun
 | 
			
		||||
The Surgeon
 | 
			
		||||
The Surveyor
 | 
			
		||||
The Survivalist
 | 
			
		||||
The Sword King's Salute
 | 
			
		||||
The Teardrop
 | 
			
		||||
The Thaumaturgist
 | 
			
		||||
The Throne
 | 
			
		||||
@ -1498,6 +1550,8 @@ The Traitor
 | 
			
		||||
The Trial
 | 
			
		||||
The Twins
 | 
			
		||||
The Tyrant
 | 
			
		||||
The Undaunted
 | 
			
		||||
The Undisputed
 | 
			
		||||
The Union
 | 
			
		||||
The Valkyrie
 | 
			
		||||
The Valley of Steel Boxes
 | 
			
		||||
@ -1509,10 +1563,12 @@ The Warlord
 | 
			
		||||
The Watcher
 | 
			
		||||
The Web
 | 
			
		||||
The Wind
 | 
			
		||||
The Witch
 | 
			
		||||
The Wolf
 | 
			
		||||
The Wolf's Shadow
 | 
			
		||||
The Wolven King's Bite
 | 
			
		||||
The Wolverine
 | 
			
		||||
The World Eater
 | 
			
		||||
The Wrath
 | 
			
		||||
The Wretched
 | 
			
		||||
Thicket Bow
 | 
			
		||||
@ -1523,6 +1579,7 @@ Thorn Rapier
 | 
			
		||||
Three Faces in the Dark
 | 
			
		||||
Three Hands Talisman
 | 
			
		||||
Three Rat Talisman
 | 
			
		||||
Three Voices
 | 
			
		||||
Thresher Claw
 | 
			
		||||
Throat Stabber
 | 
			
		||||
Thunderous Skies
 | 
			
		||||
@ -1590,6 +1647,8 @@ Uul-Netol's Breachstone
 | 
			
		||||
Vaal Arc
 | 
			
		||||
Vaal Axe
 | 
			
		||||
Vaal Blade
 | 
			
		||||
Vaal Blade Vortex
 | 
			
		||||
Vaal Blight
 | 
			
		||||
Vaal Breach
 | 
			
		||||
Vaal Buckler
 | 
			
		||||
Vaal Burning Arrow
 | 
			
		||||
@ -1600,6 +1659,7 @@ Vaal Cyclone
 | 
			
		||||
Vaal Detonate Dead
 | 
			
		||||
Vaal Discipline
 | 
			
		||||
Vaal Double Strike
 | 
			
		||||
Vaal Earthquake
 | 
			
		||||
Vaal Fireball
 | 
			
		||||
Vaal Flameblast
 | 
			
		||||
Vaal Gauntlets
 | 
			
		||||
@ -1612,6 +1672,9 @@ Vaal Haste
 | 
			
		||||
Vaal Hatchet
 | 
			
		||||
Vaal Ice Nova
 | 
			
		||||
Vaal Immortal Call
 | 
			
		||||
Vaal Impurity of Fire
 | 
			
		||||
Vaal Impurity of Ice
 | 
			
		||||
Vaal Impurity of Lightning
 | 
			
		||||
Vaal Lightning Strike
 | 
			
		||||
Vaal Lightning Trap
 | 
			
		||||
Vaal Lightning Warp
 | 
			
		||||
@ -1640,7 +1703,16 @@ Vault Map
 | 
			
		||||
Velvet Gloves
 | 
			
		||||
Velvet Slippers
 | 
			
		||||
Vengeance
 | 
			
		||||
Vial of Awakening
 | 
			
		||||
Vial of Consequence
 | 
			
		||||
Vial of Dominance
 | 
			
		||||
Vial of Fate
 | 
			
		||||
Vial Of Power
 | 
			
		||||
Vial of Sacrifice
 | 
			
		||||
Vial of Summoning
 | 
			
		||||
Vial of the Ghost
 | 
			
		||||
Vial of the Ritual
 | 
			
		||||
Vial of Transcendence
 | 
			
		||||
Vigilant Strike
 | 
			
		||||
Vile Staff
 | 
			
		||||
Vile Toxins Support
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ Gems
 | 
			
		||||
Gloves
 | 
			
		||||
Helmets
 | 
			
		||||
Hybrid Flasks
 | 
			
		||||
Incursion Item
 | 
			
		||||
Jewel
 | 
			
		||||
Labyrinth Item
 | 
			
		||||
Labyrinth Map Item
 | 
			
		||||
 | 
			
		||||
@ -75,7 +75,12 @@
 | 
			
		||||
                    <DataTemplate DataType="{x:Type blockItemTypes:BaseTypeBlockItem}">
 | 
			
		||||
                        <userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutoCompleteItemBaseTypes}" />
 | 
			
		||||
                    </DataTemplate>
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    <!-- Explicit Mods Template -->
 | 
			
		||||
                    <DataTemplate DataType="{x:Type blockItemTypes:HasExplicitModBlockItem}">
 | 
			
		||||
                        <userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" />
 | 
			
		||||
                    </DataTemplate>
 | 
			
		||||
 | 
			
		||||
                    <!-- Socket Groups Template -->
 | 
			
		||||
                    <DataTemplate DataType="{x:Type blockItemTypes:SocketGroupBlockItem}">
 | 
			
		||||
                        <userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" />
 | 
			
		||||
 | 
			
		||||
@ -159,7 +159,11 @@ namespace Filtration.ViewModels
 | 
			
		||||
            typeof (CorruptedBlockItem),
 | 
			
		||||
            typeof (ElderItemBlockItem),
 | 
			
		||||
            typeof (ShaperItemBlockItem),
 | 
			
		||||
            typeof (ShapedMapBlockItem)
 | 
			
		||||
            typeof (ShapedMapBlockItem),
 | 
			
		||||
            typeof (ElderMapBlockItem),
 | 
			
		||||
            typeof (GemLevelBlockItem),
 | 
			
		||||
            typeof (StackSizeBlockItem),
 | 
			
		||||
            typeof (HasExplicitModBlockItem)
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        public List<Type> AudioVisualBlockItemTypesAvailable => new List<Type>
 | 
			
		||||
@ -169,7 +173,8 @@ namespace Filtration.ViewModels
 | 
			
		||||
            typeof (BorderColorBlockItem),
 | 
			
		||||
            typeof (FontSizeBlockItem),
 | 
			
		||||
            typeof (SoundBlockItem),
 | 
			
		||||
            typeof (PositionalSoundBlockItem)
 | 
			
		||||
            typeof (PositionalSoundBlockItem),
 | 
			
		||||
            typeof (DisableDropSoundBlockItem)
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        public bool BlockEnabled
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user