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); } }
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."); } }
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); }