Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }