public void SelectWithQuantityOf0_Thrown(string weapon) { var thrown = WeaponConstants.GetAllThrown(false, false); var simple = WeaponConstants.GetAllSimple(false, false); var melee = WeaponConstants.GetAllMelee(false, false); var thrownRanged = thrown.Except(melee).Intersect(simple); Assert.That(thrownRanged, Contains.Item(weapon) .And.EquivalentTo(new[] { WeaponConstants.Javelin, WeaponConstants.Dart, })); var item = itemSelector.SelectFrom($"{weapon}[{ItemTypeConstants.Weapon}]"); Assert.That(item.Name, Is.EqualTo(weapon), weapon); Assert.That(item.ItemType, Is.EqualTo(ItemTypeConstants.Weapon), weapon); Assert.That(item.Traits, Is.Empty, weapon); Assert.That(item.Magic.SpecialAbilities, Is.Empty, weapon); Assert.That(item.Magic.Bonus, Is.Zero, weapon); Assert.That(item.IsMagical, Is.False, weapon); Assert.That(item.Quantity, Is.Zero, weapon); }
public void SimpleWeaponProficiencyFoci() { var foci = WeaponConstants.GetAllSimple(false, false); var ammunition = WeaponConstants.GetAllAmmunition(false, false); foci = foci.Except(ammunition); base.AssertDistinctCollection(FeatConstants.WeaponProficiency_Simple, foci.ToArray()); }
public Item SelectFrom(string source) { var template = new Item(); template.Name = source; template.Name = itemTypeRegex.Replace(template.Name, string.Empty); template.Name = itemBonusRegex.Replace(template.Name, string.Empty); template.Name = specialAbilityRegex.Replace(template.Name, string.Empty); template.Name = traitRegex.Replace(template.Name, string.Empty); template.Name = isMagicRegex.Replace(template.Name, string.Empty); template.ItemType = GetMatchValue(itemTypeRegex, source, "[", "]"); if (isMagicRegex.IsMatch(source)) { var rawIsMagic = GetMatchValue(isMagicRegex, source, "@", "@"); template.IsMagical = Convert.ToBoolean(rawIsMagic); } if (itemBonusRegex.IsMatch(source)) { var rawBonus = GetMatchValue(itemBonusRegex, source, "(", ")"); template.Magic.Bonus = Convert.ToInt32(rawBonus); } if (specialAbilityRegex.IsMatch(source)) { var rawSpecialAbilities = GetMatchValue(specialAbilityRegex, source, "{", "}"); var specialAbilities = rawSpecialAbilities.Split(','); template.Magic.SpecialAbilities = GetSpecialAbilities(specialAbilities); } if (traitRegex.IsMatch(source)) { var rawTraits = GetMatchValue(traitRegex, source, "#"); var traits = rawTraits.Split(','); foreach (var trait in traits) { template.Traits.Add(trait); } } var ammunition = WeaponConstants.GetAllAmmunition(false, false); var thrown = WeaponConstants.GetAllThrown(false, false); var simple = WeaponConstants.GetAllSimple(false, false); var melee = WeaponConstants.GetAllMelee(false, false); var thrownRanged = thrown.Except(melee).Intersect(simple); var needRandomQuantity = ammunition.Union(thrownRanged); if (needRandomQuantity.Contains(template.Name)) { template.Quantity = 0; } return(template); }
public void SelectWithQuantityOf1_AllOtherWeapons() { var allWeapons = WeaponConstants.GetAllWeapons(false, false); var ammos = WeaponConstants.GetAllAmmunition(false, false); var thrown = WeaponConstants.GetAllThrown(false, false); var simple = WeaponConstants.GetAllSimple(false, false); var melee = WeaponConstants.GetAllMelee(false, false); var thrownRanged = thrown.Except(melee).Intersect(simple); var weapons = allWeapons.Except(ammos).Except(thrownRanged); foreach (var weapon in weapons) { var item = itemSelector.SelectFrom($"{weapon}[{ItemTypeConstants.Weapon}]"); Assert.That(item.Name, Is.EqualTo(weapon), weapon); Assert.That(item.ItemType, Is.EqualTo(ItemTypeConstants.Weapon), weapon); Assert.That(item.Traits, Is.Empty, weapon); Assert.That(item.Magic.SpecialAbilities, Is.Empty, weapon); Assert.That(item.Magic.Bonus, Is.Zero, weapon); Assert.That(item.IsMagical, Is.False, weapon); Assert.That(item.Quantity, Is.EqualTo(1), weapon); } }
public void SimpleWeaponsMatchConstants() { var simple = WeaponConstants.GetAllSimple(false, false); VerifyAttribute(simple, AttributeConstants.Simple); }
private (IEnumerable <string> Common, IEnumerable <string> Uncommon) GetProficientWeaponNames( IEnumerable <Feat> feats, IEnumerable <Feat> proficiencyFeats, IEnumerable <string> baseWeapons, bool twoHandedAllowed) { var common = new List <string>(); var uncommon = new List <string>(); var nonProficiencyFoci = feats .Except(proficiencyFeats) .SelectMany(f => f.Foci); nonProficiencyFoci = SwapForTemplates(nonProficiencyFoci, WeaponConstants.CompositeShortbow, WeaponConstants.CompositeShortbow_StrengthPlus0, WeaponConstants.CompositeShortbow_StrengthPlus1, WeaponConstants.CompositeShortbow_StrengthPlus2); nonProficiencyFoci = SwapForTemplates(nonProficiencyFoci, WeaponConstants.CompositeLongbow, WeaponConstants.CompositeLongbow_StrengthPlus0, WeaponConstants.CompositeLongbow_StrengthPlus1, WeaponConstants.CompositeLongbow_StrengthPlus2, WeaponConstants.CompositeLongbow_StrengthPlus3, WeaponConstants.CompositeLongbow_StrengthPlus4); var nonProficiencyWeaponFoci = nonProficiencyFoci.Intersect(baseWeapons); if (nonProficiencyWeaponFoci.Any()) { common.AddRange(nonProficiencyWeaponFoci); } var proficiencyFoci = proficiencyFeats.SelectMany(f => f.Foci); proficiencyFoci = SwapForTemplates(proficiencyFoci, WeaponConstants.CompositeShortbow, WeaponConstants.CompositeShortbow_StrengthPlus0, WeaponConstants.CompositeShortbow_StrengthPlus1, WeaponConstants.CompositeShortbow_StrengthPlus2); proficiencyFoci = SwapForTemplates(proficiencyFoci, WeaponConstants.CompositeLongbow, WeaponConstants.CompositeLongbow_StrengthPlus0, WeaponConstants.CompositeLongbow_StrengthPlus1, WeaponConstants.CompositeLongbow_StrengthPlus2, WeaponConstants.CompositeLongbow_StrengthPlus3, WeaponConstants.CompositeLongbow_StrengthPlus4); var proficiencyWeaponFoci = proficiencyFoci.Intersect(baseWeapons); if (proficiencyWeaponFoci.Any()) { uncommon.AddRange(proficiencyWeaponFoci); } if (proficiencyFeats.Any(f => f.Name == FeatConstants.WeaponProficiency_Simple && f.Foci.Contains(GroupConstants.All))) { var simpleWeapons = WeaponConstants.GetAllSimple(false, false); simpleWeapons = simpleWeapons.Intersect(baseWeapons); uncommon.AddRange(simpleWeapons); } if (proficiencyFeats.Any(f => f.Name == FeatConstants.WeaponProficiency_Martial && f.Foci.Contains(GroupConstants.All))) { var martialWeapons = WeaponConstants.GetAllMartial(false, true); martialWeapons = martialWeapons.Intersect(baseWeapons); uncommon.AddRange(martialWeapons); } if (proficiencyFeats.Any(f => f.Name == FeatConstants.WeaponProficiency_Exotic && f.Foci.Contains(GroupConstants.All))) { var exoticWeapons = WeaponConstants.GetAllExotic(false, false); exoticWeapons = exoticWeapons.Intersect(baseWeapons); uncommon.AddRange(exoticWeapons); } var ammunition = WeaponConstants.GetAllAmmunition(false, false) .Except(new[] { WeaponConstants.Shuriken }); common = common.Except(ammunition).ToList(); uncommon = uncommon.Except(ammunition).ToList(); if (!twoHandedAllowed) { var twoHandedWeapons = WeaponConstants.GetAllTwoHandedMelee(false, false); common = common.Except(twoHandedWeapons).ToList(); uncommon = uncommon.Except(twoHandedWeapons).ToList(); } common = SwapForTemplates(common, WeaponConstants.CompositeShortbow, WeaponConstants.CompositeShortbow_StrengthPlus0, WeaponConstants.CompositeShortbow_StrengthPlus1, WeaponConstants.CompositeShortbow_StrengthPlus2); common = SwapForTemplates(common, WeaponConstants.CompositeLongbow, WeaponConstants.CompositeLongbow_StrengthPlus0, WeaponConstants.CompositeLongbow_StrengthPlus1, WeaponConstants.CompositeLongbow_StrengthPlus2, WeaponConstants.CompositeLongbow_StrengthPlus3, WeaponConstants.CompositeLongbow_StrengthPlus4); uncommon = SwapForTemplates(uncommon, WeaponConstants.CompositeShortbow, WeaponConstants.CompositeShortbow_StrengthPlus0, WeaponConstants.CompositeShortbow_StrengthPlus1, WeaponConstants.CompositeShortbow_StrengthPlus2); uncommon = SwapForTemplates(uncommon, WeaponConstants.CompositeLongbow, WeaponConstants.CompositeLongbow_StrengthPlus0, WeaponConstants.CompositeLongbow_StrengthPlus1, WeaponConstants.CompositeLongbow_StrengthPlus2, WeaponConstants.CompositeLongbow_StrengthPlus3, WeaponConstants.CompositeLongbow_StrengthPlus4); return(common, uncommon); }
public static IEnumerable <string> GetFeatsWithFoci() { var featsWithFoci = new List <string>(); var simpleWeapons = WeaponConstants.GetAllSimple(false, false); foreach (var weapon in simpleWeapons) { featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Simple}/{weapon}"); } var martialWeapons = WeaponConstants.GetAllMartial(false, false); foreach (var weapon in martialWeapons) { featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Martial}/{weapon}"); } //INFO: Adding in some exotic as martial, for weapon familiarity featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Martial}/{WeaponConstants.DwarvenUrgrosh}"); featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Martial}/{WeaponConstants.DwarvenWaraxe}"); featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Martial}/{WeaponConstants.OrcDoubleAxe}"); featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Martial}/{WeaponConstants.GnomeHookedHammer}"); var exoticWeapons = WeaponConstants.GetAllExotic(false, false); foreach (var weapon in exoticWeapons) { featsWithFoci.Add($"{FeatConstants.WeaponProficiency_Exotic}/{weapon}"); } featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Appraise}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Balance}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Bluff}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Climb}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Concentration}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Craft}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Alchemy)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Armorsmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Blacksmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Bookbinding)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Bowmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Brassmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Brewing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Candlemaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Cloth)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Coppersmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Dyemaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Gemcutting)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Glass)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Goldsmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Hatmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Hornworking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Jewelmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Leather)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Locksmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Mapmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Milling)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Painting)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Parchmentmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Pewtermaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Potterymaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Sculpting)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Shipmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Shoemaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Silversmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Skinning)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Soapmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Stonemasonry)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Tanning)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Trapmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Weaponsmithing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Weaving)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Wheelmaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Winemaking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Craft, SkillConstants.Foci.Craft.Woodworking)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.DecipherScript}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Diplomacy}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.DisableDevice}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Disguise}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.EscapeArtist}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Forgery}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.GatherInformation}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.HandleAnimal}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Heal}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Hide}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Intimidate}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Jump}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Knowledge}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Arcana)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.ArchitectureAndEngineering)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Dungeoneering)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Geography)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.History)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Local)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Nature)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.NobilityAndRoyalty)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.Religion)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Knowledge, SkillConstants.Foci.Knowledge.ThePlanes)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Listen}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.MoveSilently}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.OpenLock}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Perform}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.Act)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.Comedy)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.Dance)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.KeyboardInstruments)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.Oratory)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.PercussionInstruments)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.Sing)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.StringInstruments)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Perform, SkillConstants.Foci.Perform.WindInstruments)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Profession}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Adviser)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Alchemist)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.AnimalGroomer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.AnimalTrainer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Apothecary)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Appraiser)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Architect)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Armorer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Barrister)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Blacksmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Bookbinder)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Bowyer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Brazier)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Brewer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Butler)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Carpenter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Cartographer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Cartwright)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Chandler)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.CityGuide)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Clerk)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Cobbler)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Coffinmaker)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Coiffeur)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Cook)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Coppersmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Craftsman)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Dowser)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Dyer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Embalmer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Engineer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Entertainer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.ExoticAnimalTrainer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Farmer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Fletcher)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Footman)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Gemcutter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Goldsmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Governess)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Haberdasher)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Healer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Horner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Hunter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Interpreter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Jeweler)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Laborer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Launderer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Limner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.LocalCourier)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Locksmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Maid)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Masseuse)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Matchmaker)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Midwife)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Miller)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Miner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Navigator)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Nursemaid)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.OutOfTownCourier)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Painter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Parchmentmaker)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Pewterer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Polisher)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Porter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Potter)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Sage)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.SailorCrewmember)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.SailorMate)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Scribe)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Sculptor)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Shepherd)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Shipwright)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Silversmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Skinner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Soapmaker)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Soothsayer)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Tanner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Teacher)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Teamster)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Trader)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Trapper)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Valet)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Vintner)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Weaponsmith)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Weaver)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.Wheelwright)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Build(SkillConstants.Profession, SkillConstants.Foci.Profession.WildernessGuide)}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Ride}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Search}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.SenseMotive}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.SleightOfHand}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Spellcraft}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Spot}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Survival}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Swim}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.Tumble}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.UseMagicDevice}"); featsWithFoci.Add($"{FeatConstants.SkillFocus}/{SkillConstants.UseRope}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Boar}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Rat}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Raven}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Spider_Monstrous_Hunter_Small}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Spider_Monstrous_Hunter_Medium}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Spider_Monstrous_WebSpinner_Small}"); featsWithFoci.Add($"{FeatConstants.SpecialQualities.AlternateForm}/{CreatureConstants.Spider_Monstrous_WebSpinner_Medium}"); return(featsWithFoci); }