public static void ShowInventory(Player player) { OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), "Your inventory contains:"); TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; foreach (IItem item in player.Inventory) { if (!(item is IEquipment equippableItem && equippableItem.Equipped)) { continue; } string itemName = GearHelper.GetItemDetails(item); StringBuilder itemInfo = new StringBuilder(itemName); if (itemName.Contains("Quiver")) { itemInfo.Append($" (Arrows: {player.PlayerQuiver.Quantity}/{player.PlayerQuiver.MaxQuantity})"); } itemInfo.Append(" <_Equipped>"); if (item is Armor || item is Weapon) { IRainbowGear playerItem = item as IRainbowGear; if (playerItem.IsRainbowGear) { GearHelper.StoreRainbowGearOutput(itemInfo.ToString()); continue; } } OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), itemInfo.ToString()); } foreach (IItem item in player.Inventory) { if (item is IEquipment equippableItem && equippableItem.Equipped) { continue; } string itemName = GearHelper.GetItemDetails(item); StringBuilder itemInfo = new StringBuilder(itemName); if (player.PlayerQuiver?.Name == itemName) { itemInfo.Append($"Arrows: {player.PlayerQuiver.Quantity}/{player.PlayerQuiver.MaxQuantity}"); } if (item is Armor || item is Weapon) { IRainbowGear playerItem = item as IRainbowGear; if (playerItem.IsRainbowGear) { GearHelper.StoreRainbowGearOutput(itemInfo.ToString()); continue; } } OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), itemInfo.ToString()); } Dictionary <string, int> consumableDict = new Dictionary <string, int>(); foreach (IItem item in player.Inventory) { StringBuilder itemInfo = new StringBuilder(); itemInfo.Append(item.Name); if (item.Name.Contains("potion")) { if (item is HealthPotion) { HealthPotion potion = item as HealthPotion; itemInfo.Append($" (+{potion.HealthAmount} health)"); } if (item is ManaPotion) { ManaPotion potion = item as ManaPotion; itemInfo.Append($" (+{potion.ManaAmount} mana)"); } if (item is StatPotion) { StatPotion potion = item as StatPotion; itemInfo.Append($" (+{potion.StatAmount} {potion.StatPotionType})"); } } if (item.GetType() == typeof(Arrows)) { Arrows arrows = item as Arrows; itemInfo.Append($" ({arrows.Quantity})"); } string itemName = textInfo.ToTitleCase(itemInfo.ToString()); if (!consumableDict.ContainsKey(itemName)) { consumableDict.Add(itemName, 1); continue; } int dictValue = consumableDict[itemName]; dictValue += 1; consumableDict[itemName] = dictValue; } foreach (KeyValuePair <string, int> consumable in consumableDict) { string Inventorytring = $"{consumable.Key} (Quantity: {consumable.Value})"; OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), Inventorytring); } string goldString = $"_Gold: {player.Gold} coins."; OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), goldString); string weightString = $"_Weight: {GetInventoryWeight(player)}/{player.MaxCarryWeight}"; OutputHelper.Display.StoreUserOutput( Settings.FormatInfoText(), Settings.FormatDefaultBackground(), weightString); }
public static void LevelUpCheck(Player player) { if (player.Experience < player.ExperienceToLevel || player.Level == 10) { return; } foreach (IEffect effect in player.Effects.ToList()) { effect.IsEffectExpired = true; } player.Level++; player.Experience -= player.ExperienceToLevel; player.ExperienceToLevel = Settings.GetBaseExperienceToLevel() * player.Level; string levelUpString = $"You have leveled! You are now level {player.Level}."; OutputHelper.Display.StoreUserOutput( Settings.FormatLevelUpText(), Settings.FormatDefaultBackground(), levelUpString); int statsToAssign = 5; while (statsToAssign > 0) { string levelUpStatString = $"Please choose {statsToAssign} stats to raise. Your choices are: str, dex, int, const."; const string levelUpStatInfo = "You may raise a stat more than once by putting a number after the stat, IE str 2."; const string levelUpStatStr = "Str will increase your max carrying weight and warrior abilities."; const string levelUpStatDex = "Dex will increase your dodge chance and archer abilities"; const string levelUpStatInt = "Int will increase your mana and decrease your training cost for spells and abilities."; const string levelUpStatConst = "Const will increase your max hit points."; DisplayPlayerStats(player); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatString); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatInfo); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatStr); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatDex); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatInt); OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), levelUpStatConst); OutputHelper.Display.RetrieveUserOutput(); OutputHelper.Display.ClearUserOutput(); int statNumber = 0; try { string[] input = InputHelper.GetFormattedInput(Console.ReadLine()); if (input.Length > 1) { if (GameHelper.IsWholeNumber(input[1]) == false) { continue; } statNumber = Convert.ToInt32(input[1]); } switch (input[0]) { case "str": if (statNumber > 0 && statNumber <= statsToAssign) { player.Strength += statNumber; statsToAssign -= statNumber; } else { player.Strength++; statsToAssign--; } break; case "dex": if (statNumber > 0 && statNumber <= statsToAssign) { player.Dexterity += statNumber; statsToAssign -= statNumber; } else { player.Dexterity++; statsToAssign--; } break; case "int": if (statNumber > 0 && statNumber <= statsToAssign) { player.Intelligence += statNumber; statsToAssign -= statNumber; } else { player.Intelligence++; statsToAssign--; } break; case "const": if (statNumber > 0 && statNumber <= statsToAssign) { player.Constitution += statNumber; statsToAssign -= statNumber; } else { player.Constitution++; statsToAssign--; } break; } } catch (IndexOutOfRangeException) { OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), "You did not select an appropriate stat!"); } } OutputHelper.Display.StoreUserOutput( Settings.FormatAnnounceText(), Settings.FormatDefaultBackground(), "All stats have been assigned!"); player.FireResistance += 5; player.FrostResistance += 5; player.ArcaneResistance += 5; CalculatePlayerStats(player); // Leveling sets player back to max stats player.HitPoints = player.MaxHitPoints; player.RagePoints = player.MaxRagePoints; player.ComboPoints = player.MaxComboPoints; player.ManaPoints = player.MaxManaPoints; // Update level for rainbow gear if any in player inventory foreach (IItem item in player.Inventory) { if (item is Armor || item is Weapon) { IRainbowGear rainbowItem = (IRainbowGear)item; if (rainbowItem != null && rainbowItem.IsRainbowGear) { rainbowItem.UpdateRainbowStats(player); } } } }