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); }