public void CreaturesWithCasterHaveSpellAttack(string creature) { var attacks = attackSelector.Select(creature, SizeConstants.Medium, SizeConstants.Medium); var hasCaster = table[creature].Any(); Assert.That(attacks.Any(a => a.Name == "Spells"), Is.EqualTo(hasCaster)); }
public IEnumerable <Attack> GenerateAttacks(string creatureName, string originalSize, string size, int baseAttackBonus, Dictionary <string, Ability> abilities, int hitDiceQuantity) { var attackSelections = attackSelector.Select(creatureName, originalSize, size); var sizeModifier = adjustmentsSelector.SelectFrom <int>(TableNameConstants.Adjustments.SizeModifiers, size); var attacks = new List <Attack>(); foreach (var attackSelection in attackSelections) { var attack = new Attack(); attacks.Add(attack); attack.Damages = attackSelection.Damages; attack.DamageEffect = attackSelection.DamageEffect; attack.DamageBonus = GetDamageBonus(abilities, attackSelection.DamageBonusMultiplier); attack.Name = attackSelection.Name; attack.IsMelee = attackSelection.IsMelee; attack.IsNatural = attackSelection.IsNatural; attack.IsPrimary = attackSelection.IsPrimary; attack.IsSpecial = attackSelection.IsSpecial; attack.AttackType = attackSelection.AttackType; attack.Frequency = new Frequency(); attack.Frequency.Quantity = attackSelection.FrequencyQuantity; attack.Frequency.TimePeriod = attackSelection.FrequencyTimePeriod; if (!string.IsNullOrEmpty(attackSelection.SaveAbility) || !string.IsNullOrEmpty(attackSelection.Save)) { attack.Save = new SaveDieCheck(); attack.Save.BaseValue = 10 + attackSelection.SaveDcBonus; attack.Save.Save = attackSelection.Save; //if (attack.IsNatural) if (attack.IsNatural && !string.IsNullOrEmpty(attackSelection.SaveAbility)) { attack.Save.BaseAbility = abilities[attackSelection.SaveAbility]; attack.Save.BaseValue += hitDiceQuantity / 2; } } attack.BaseAttackBonus = baseAttackBonus; attack.SizeModifier = sizeModifier; attack.BaseAbility = GetAbilityForAttack(abilities, attackSelection); } return(attacks); }