Beispiel #1
0
        public int PhysicalAttack(Monster monster)
        {
            int attackAmount = 0;

            try {
                if (PlayerWeapon.Equipped && PlayerWeapon.WeaponGroup != WeaponType.Bow)
                {
                    attackAmount = PlayerWeapon.Attack();
                }
                if (PlayerWeapon.Equipped &&
                    PlayerWeapon.WeaponGroup == WeaponType.Bow &&
                    PlayerQuiver.HaveArrows())
                {
                    PlayerQuiver.UseArrow();
                    attackAmount = PlayerWeapon.Attack();
                }
                if (PlayerWeapon.Equipped &&
                    PlayerWeapon.WeaponGroup == WeaponType.Bow &&
                    !PlayerQuiver.HaveArrows())
                {
                    Quiver.DisplayOutOfArrowsMessage();
                    attackAmount = 5;
                }
            } catch (NullReferenceException) {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatFailureOutputText(),
                    Settings.FormatDefaultBackground(),
                    "Your weapon is not equipped! Going hand to hand!");
                attackAmount = 5;
            }

            foreach (IEffect effect in Effects)
            {
                if (effect is ChangePlayerDamageEffect changeEffect)
                {
                    attackAmount = changeEffect.GetUpdatedDamageFromChange(attackAmount);
                }
            }

            foreach (IEffect effect in monster.Effects)
            {
                if (effect is FrozenEffect frozenEffect)
                {
                    attackAmount = frozenEffect.GetIncreasedDamageFromFrozen(attackAmount);
                }
            }

            return(attackAmount);
        }