public Item Generate(string power, string itemName, params string[] traits)
        {
            if (curseGenerator.IsSpecificCursedItem(itemName))
            {
                return(curseGenerator.Generate(itemName, traits));
            }

            var item = innerGenerator.Generate(power, itemName, traits);

            if (curseGenerator.HasCurse(item))
            {
                var canBeSpecific = curseGenerator.CanBeSpecificCursedItem(itemName);

                do
                {
                    item.Magic.Curse = curseGenerator.GenerateCurse();
                }while (item.Magic.Curse == TableNameConstants.Percentiles.Set.SpecificCursedItems && !canBeSpecific);

                if (item.Magic.Curse == TableNameConstants.Percentiles.Set.SpecificCursedItems && canBeSpecific)
                {
                    var cursedItem = curseGenerator.Generate(itemName, traits);
                    return(cursedItem);
                }
            }

            return(item);
        }