Exemplo n.º 1
0
        public void UseAbility(string[] input)
        {
            StringBuilder inputName = new StringBuilder();

            for (int i = 1; i < input.Length; i++)
            {
                inputName.Append(input[i]);
            }
            int index = Abilities.FindIndex(
                f => f.Name == inputName.ToString() || f.Name.Contains(input[1]));

            if (index != -1 &&
                RagePoints >= Abilities[index].RageCost &&
                PlayerClass == PlayerClassType.Warrior)
            {
                switch (Abilities[index].WarAbilityCategory)
                {
                case WarriorAbility.Slash:
                case WarriorAbility.Rend:
                case WarriorAbility.Charge:
                case WarriorAbility.Block:
                case WarriorAbility.Berserk:
                case WarriorAbility.Disarm:
                case WarriorAbility.Onslaught:
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatAttackFailText(),
                        Settings.FormatDefaultBackground(),
                        "You cannot use that ability outside combat!");
                    return;

                case WarriorAbility.Bandage:
                    PlayerAbility.UseBandageAbility(this, index);
                    return;

                case WarriorAbility.PowerAura:
                    PlayerAbility.UsePowerAura(this, index);
                    return;

                case WarriorAbility.WarCry:
                    PlayerAbility.UseWarCry(this, index);
                    return;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            if (index != -1 &&
                ComboPoints >= Abilities[index].ComboCost &&
                PlayerClass == PlayerClassType.Archer)
            {
                switch (Abilities[index].ArcAbilityCategory)
                {
                case ArcherAbility.Distance:
                    if (PlayerWeapon?.WeaponGroup != WeaponType.Bow)
                    {
                        throw new InvalidOperationException();
                    }

                    string direction = input.Last();
                    PlayerAbility.UseDistanceAbility(this, index, direction);
                    return;

                case ArcherAbility.Gut:
                case ArcherAbility.Precise:
                case ArcherAbility.Stun:
                case ArcherAbility.Double:
                case ArcherAbility.Wound:
                case ArcherAbility.ImmolatingArrow:
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatAttackFailText(),
                        Settings.FormatDefaultBackground(),
                        "You cannot use that ability outside combat!");
                    return;

                case ArcherAbility.Bandage:
                    PlayerAbility.UseBandageAbility(this, index);
                    return;

                case ArcherAbility.SwiftAura:
                    PlayerAbility.UseSwiftAura(this, index);
                    return;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            if (index != -1)
            {
                throw new InvalidOperationException();
            }
            throw new IndexOutOfRangeException();
        }