private void RollSpecialAbilities()
        {
            var abilitiesToRoll =
                from ability in appliedAbilities
                where ability.Name.ToLower().Contains("special abilities")
                select ability;


            var abilitiesToAdd = new List <Component>();

            foreach (Component ability in abilitiesToRoll)
            {
                var typeToRoll = Types & ~(ItemTypes.Magic | ItemTypes.Magic_Major | ItemTypes.Magic_Medium | ItemTypes.Magic_Minor);
                var typeString = typeToRoll.ToString().ToLower() + " special abilities";
                var rollTable  = TableRepository.GetTypeSortedTableFromString(typeString, Types);

                if (rollTable != null)
                {
                    var abilities = new GetLootVisitor();
                    rollTable.Accept(abilities);
                    abilitiesToAdd.AddRange(abilities.GetLootBag());
                }
            }
            appliedAbilities.AddRange(abilitiesToAdd);
            appliedAbilities.RemoveAll(k => k.Name.ToLower().Contains("special abilities"));
        }
        private void RollAllAbilities()
        {
            var buildTable = TableRepository.GetTypeSortedTableFromString("magic base", Types);

            if (buildTable.Name != "Table Not Found" && buildTable != null)
            {
                var abilitiesVisitor = new GetLootVisitor();
                buildTable.Accept(abilitiesVisitor);

                buildTable.RollCount = 1;
                appliedAbilities.AddRange(abilitiesVisitor.GetLootBag());
            }
        }