示例#1
0
        private static byte GetHitPointsPerInchOfThicknessForMaterial(TowerShieldMaterial material)
        {
            switch (material)
            {
            case TowerShieldMaterial.Darkwood: return(Darkwood.HitPointsPerInch);

            case TowerShieldMaterial.Wood:     return(Wood.HitPointsPerInch);

            default:
                throw new InvalidEnumArgumentException(nameof(material), (int)material, material.GetType());
            }
        }
示例#2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Core.Domain.Items.Shields.Paizo.CoreRulebook.TowerShield"/> class.
        /// </summary>
        /// <param name="size">The size of character this shield is intended to be used by.</param>
        /// <param name="material">The dominant material the shield is crafted from.</param>
        /// <exception cref="System.ComponentModel.InvalidEnumArgumentException">Thrown when an argument is a nonstandard enum.</exception>
        public TowerShield(SizeCategory size, TowerShieldMaterial material)
            : base(armorClassBonus:           ARMOR_BONUS,
                   materialInchesOfThickness: InchesOfThicknessScaledBySize(size, INCHES_OF_THICKNESS),
                   materialHitPointsPerInch:  GetHitPointsPerInchOfThicknessForMaterial(material),
                   materialHardness:          GetHardnessForMaterial(material))
        {
            switch (material)
            {
            case TowerShieldMaterial.Darkwood:
                this.IsMasterwork           = true;
                this.MasterworkIsToggleable = false;
                this.ArmorCheckPenalty      = () => Darkwood.GetShieldArmorCheckPenalty(BASE_ARMOR_CHECK_PENALTY);
                this.MundaneMarketPrice     = () => Darkwood.GetShieldBaseMarketValue(MarketValueScaledBySize(size, WOOD_PRICE), this.GetWeight());
                this.Weight      = () => Darkwood.GetWeight(WeightScaledBySize(size, WOOD_WEIGHT));
                this.MundaneName = () => new INameFragment[] {
                    new NameFragment("Darkwood", Darkwood.WebAddress),
                    StandardShieldName
                };
                break;

            case TowerShieldMaterial.Wood:
                this.ArmorCheckPenalty  = () => this.StandardArmorCheckPenaltyCalculation(BASE_ARMOR_CHECK_PENALTY);
                this.MundaneMarketPrice = () => StandardMundaneMarketPriceCalculation(MarketValueScaledBySize(size, WOOD_PRICE));
                this.Weight             = () => WeightScaledBySize(size, WOOD_WEIGHT);
                this.MundaneName        = () => new INameFragment[] {
                    StandardShieldName
                };
                break;

            default:
                throw new InvalidEnumArgumentException(nameof(material), (int)material, material.GetType());
            }
            // Tower shields apply a maximum dexterity bonus to AC
            this.OnApplied += (sender, e) => {
                e.Character?.ArmorClass?.MaxKeyAbilityScore?.Add(this.GetMaximumDexterityBonus);
            };
            // Tower shields inflict a -2 penalty to melee attack rolls
            this.OnApplied += (sender, e) => {
                e.Character?.AttackBonuses?.GenericMeleeAttackBonus?.Penalties?.Add(() => 2);
            };
        }