Ejemplo n.º 1
0
        public static void LookAtObject(Player player, string[] input)
        {
            string parsedInput = InputHelper.ParseInput(input);
            IRoom  playerRoom  = RoomHelper.Rooms[player.PlayerLocation];
            int    roomMatch   = playerRoom.RoomObjects.FindIndex(f =>
                                                                  f.Name.Contains(parsedInput));

            if (roomMatch != -1)
            {
                playerRoom.LookNpc(input, player);
                return;
            }
            int playerInvIndex = player.Inventory.FindIndex(f => f.Name.Contains(input[1]) ||
                                                            f.Name == parsedInput);

            if (playerInvIndex != -1)
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    player.Inventory[playerInvIndex].Desc);
                return;
            }
            int playerConsIndex = player.Inventory.FindIndex(f => f.Name.Contains(input[1]) ||
                                                             f.Name == parsedInput);

            if (playerConsIndex != -1)
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    player.Inventory[playerConsIndex].Desc);
            }
        }
Ejemplo n.º 2
0
        public static void AbilityInfo(Player player, string[] input)
        {
            string inputName = InputHelper.ParseInput(input);
            int    index     = player.Abilities.FindIndex(
                f => f.Name == inputName || f.Name.Contains(inputName));
            TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

            if (index != -1 && player.PlayerClass == PlayerClassType.Warrior)
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    textInfo.ToTitleCase(player.Abilities[index].Name));
                string rankString = $"Rank: {player.Abilities[index].Rank}";
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    rankString);
                string rageCostString = $"Rage Cost: {player.Abilities[index].RageCost}";
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    rageCostString);
                switch (player.Abilities[index].WarAbilityCategory)
                {
                case WarriorAbility.Slash:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case WarriorAbility.Rend:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case WarriorAbility.Charge:
                    PlayerAbility.StunAbilityInfo(player, index);
                    break;

                case WarriorAbility.Block:
                    PlayerAbility.DefenseAbilityInfo(player, index);
                    break;

                case WarriorAbility.Berserk:
                    PlayerAbility.BerserkAbilityInfo(player, index);
                    break;

                case WarriorAbility.Disarm:
                    PlayerAbility.DisarmAbilityInfo(player, index);
                    break;

                case WarriorAbility.Bandage:
                    PlayerAbility.BandageAbilityInfo(player, index);
                    break;

                case WarriorAbility.PowerAura:
                    PlayerAbility.PowerAuraAbilityInfo(player, index);
                    break;

                case WarriorAbility.WarCry:
                    PlayerAbility.WarCryAbilityInfo(player, index);
                    break;

                case WarriorAbility.Onslaught:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else if (index != -1 && player.PlayerClass == PlayerClassType.Archer)
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    textInfo.ToTitleCase(player.Abilities[index].Name));
                string rankString = $"Rank: {player.Abilities[index].Rank}";
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    rankString);
                string comboCostString = $"Combo Cost: {player.Abilities[index].ComboCost}";
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatInfoText(),
                    Settings.FormatDefaultBackground(),
                    comboCostString);
                switch (player.Abilities[index].ArcAbilityCategory)
                {
                case ArcherAbility.Distance:
                    PlayerAbility.DistanceAbilityInfo(player, index);
                    break;

                case ArcherAbility.Gut:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case ArcherAbility.Precise:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case ArcherAbility.Stun:
                    PlayerAbility.StunAbilityInfo(player, index);
                    break;

                case ArcherAbility.Double:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case ArcherAbility.Wound:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case ArcherAbility.Bandage:
                    PlayerAbility.BandageAbilityInfo(player, index);
                    break;

                case ArcherAbility.SwiftAura:
                    PlayerAbility.SwiftAuraAbilityInfo(player, index);
                    break;

                case ArcherAbility.ImmolatingArrow:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                case ArcherAbility.Ambush:
                    PlayerAbility.OffenseDamageAbilityInfo(player, index);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else if (index != -1 && player.PlayerClass == PlayerClassType.Mage)
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatFailureOutputText(),
                    Settings.FormatDefaultBackground(),
                    "You're not a warrior or archer!");
            }
            else
            {
                OutputHelper.Display.StoreUserOutput(
                    Settings.FormatFailureOutputText(),
                    Settings.FormatDefaultBackground(),
                    "You don't have that ability.");
            }
        }
Ejemplo n.º 3
0
        private static bool ProcessPlayerInput(Player player, Monster monster)
        {
            switch (_input[0])
            {
            case "f":
            case "fight":
                int attackDamage = player.PhysicalAttack(monster);
                if (attackDamage - monster.ArmorRating(player) <= 0)
                {
                    string armorAbsorbString = $"The {monster.Name}'s armor absorbed all of your attack!";
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatAttackFailText(),
                        Settings.FormatDefaultBackground(),
                        armorAbsorbString);
                }
                else if (attackDamage == 0)
                {
                    string attackFailString = $"You missed {monster.Name}!";
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatAttackFailText(),
                        Settings.FormatDefaultBackground(),
                        attackFailString);
                }
                else
                {
                    int    attackAmount        = attackDamage - monster.ArmorRating(player);
                    string attackSucceedString = $"You hit the {monster.Name} for {attackAmount} physical damage.";
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatAttackSuccessText(),
                        Settings.FormatDefaultBackground(),
                        attackSucceedString);
                    monster.HitPoints -= attackAmount;
                }
                break;

            case "cast":
                try {
                    if (_input[1] != null)
                    {
                        string spellName = InputHelper.ParseInput(_input);
                        player.CastSpell(monster, spellName);
                    }
                } catch (IndexOutOfRangeException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "You don't have that spell.");
                    return(false);
                } catch (NullReferenceException) {
                    if (player.PlayerClass != PlayerClassType.Mage)
                    {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You can't cast spells. You're not a mage!");
                        return(false);
                    }
                } catch (InvalidOperationException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        player.PlayerClass != PlayerClassType.Mage
                                                                ? "You can't cast spells. You're not a mage!"
                                                                : "You do not have enough mana to cast that spell!");
                    return(false);
                }
                break;

            case "use":
                try {
                    if (_input[1] != null && _input[1] != "bandage")
                    {
                        player.UseAbility(monster, _input);
                    }
                    if (_input[1] != null && _input[1] == "bandage")
                    {
                        player.UseAbility(_input);
                    }
                } catch (IndexOutOfRangeException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "You don't have that ability.");
                    return(false);
                } catch (ArgumentOutOfRangeException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "You don't have that ability.");
                    return(false);
                } catch (NullReferenceException) {
                    if (player.PlayerClass == PlayerClassType.Mage)
                    {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You can't use abilities. You're not a warrior or archer!");
                        return(false);
                    }
                } catch (InvalidOperationException) {
                    switch (player.PlayerClass)
                    {
                    case PlayerClassType.Mage:
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You can't use abilities. You're not a warrior or archer!");
                        break;

                    case PlayerClassType.Warrior:
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You do not have enough rage to use that ability!");
                        break;

                    case PlayerClassType.Archer:
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            player.PlayerWeapon.WeaponGroup != WeaponType.Bow
                                                                                ? "You do not have a bow equipped!"
                                                                                : "You do not have enough combo points to use that ability!");
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                    return(false);
                }
                break;

            case "equip":
            case "unequip":
                GearHelper.EquipItem(player, _input);
                break;

            case "flee":
                FleeCombat(player, monster);
                break;

            case "drink":
                if (_input.Last() == "potion")
                {
                    player.AttemptDrinkPotion(InputHelper.ParseInput(_input));
                }
                else
                {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "You can't drink that!");
                    return(false);
                }
                break;

            case "reload":
                player.ReloadQuiver();
                break;

            case "i":
            case "inventory":
                PlayerHelper.ShowInventory(player);
                return(false);

            case "list":
                switch (_input[1])
                {
                case "abilities":
                    try {
                        PlayerHelper.ListAbilities(player);
                    } catch (IndexOutOfRangeException) {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "List what?");
                        return(false);
                    }
                    break;

                case "spells":
                    try {
                        PlayerHelper.ListSpells(player);
                    } catch (IndexOutOfRangeException) {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "List what?");
                        return(false);
                    }
                    break;
                }
                return(false);

            case "ability":
                try {
                    PlayerHelper.AbilityInfo(player, _input);
                } catch (IndexOutOfRangeException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "What ability did you want to know about?");
                } catch (NullReferenceException) {
                    if (player.PlayerClass == PlayerClassType.Mage)
                    {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You can't use abilities. You're not a warrior or archer!");
                    }
                }
                return(false);

            case "spell":
                try {
                    PlayerHelper.SpellInfo(player, _input);
                } catch (IndexOutOfRangeException) {
                    OutputHelper.Display.StoreUserOutput(
                        Settings.FormatFailureOutputText(),
                        Settings.FormatDefaultBackground(),
                        "What spell did you want to know about?");
                } catch (NullReferenceException) {
                    if (player.PlayerClass != PlayerClassType.Mage)
                    {
                        OutputHelper.Display.StoreUserOutput(
                            Settings.FormatFailureOutputText(),
                            Settings.FormatDefaultBackground(),
                            "You can't use spells. You're not a mage!");
                    }
                }
                return(false);

            default:
                Messages.InvalidCommand();
                return(false);
            }
            return(true);
        }