Beispiel #1
0
        public static int CheckArmorRating(Player player)
        {
            int totalArmorRating = 0;

            if (player.PlayerChestArmor != null && player.PlayerChestArmor.Equipped)
            {
                totalArmorRating += (int)player.PlayerChestArmor.GetArmorRating();
            }

            if (player.PlayerHeadArmor != null && player.PlayerHeadArmor.Equipped)
            {
                totalArmorRating += (int)player.PlayerHeadArmor.GetArmorRating();
            }

            if (player.PlayerLegsArmor != null && player.PlayerLegsArmor.Equipped)
            {
                totalArmorRating += (int)player.PlayerLegsArmor.GetArmorRating();
            }

            if (!player.InCombat)
            {
                return(totalArmorRating);
            }

            foreach (IEffect effect in player.Effects.Where(effect => effect is ChangeArmorEffect))
            {
                ChangeArmorEffect changeArmorEffect = effect as ChangeArmorEffect;
                totalArmorRating += changeArmorEffect.ChangeArmorAmount;
            }

            return(totalArmorRating < 0 ? 0 : totalArmorRating);
        }
Beispiel #2
0
        public void DiamondskinSpellUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Mage)
            {
                MaxManaPoints = 100, ManaPoints = 100
            };

            GearHelper.EquipInitialGear(player);
            OutputHelper.Display.ClearUserOutput();
            string[] inputInfo  = new[] { "spell", "diamondskin" };
            int      spellIndex = player.Spellbook.FindIndex(
                f => f.SpellCategory == SpellType.Diamondskin);

            PlayerHelper.SpellInfo(player, inputInfo);
            Assert.AreEqual("Diamondskin", OutputHelper.Display.Output[0][2]);
            Assert.AreEqual("Rank: 1", OutputHelper.Display.Output[1][2]);
            Assert.AreEqual("Mana Cost: 25", OutputHelper.Display.Output[2][2]);
            Assert.AreEqual("Augment Armor Amount: 25", OutputHelper.Display.Output[3][2]);
            string augmentInfoString = $"Armor will be augmented for {player.Spellbook[spellIndex].ChangeAmount.ChangeMaxRound} rounds.";

            Assert.AreEqual(augmentInfoString, OutputHelper.Display.Output[4][2]);
            string[] input     = new[] { "cast", "diamondskin" };
            string   spellName = InputHelper.ParseInput(input);

            Assert.AreEqual("diamondskin", spellName);
            int baseArmor = GearHelper.CheckArmorRating(player);

            player.InCombat = true;
            player.CastSpell(spellName);
            Assert.AreEqual(player.MaxManaPoints - player.Spellbook[spellIndex].ManaCost, player.ManaPoints);
            string augmentString = $"You augmented your armor by {player.Spellbook[spellIndex].ChangeAmount.Amount} with {player.Spellbook[spellIndex].Name}.";

            Assert.AreEqual(augmentString, OutputHelper.Display.Output[5][2]);
            OutputHelper.Display.ClearUserOutput();
            Assert.AreEqual(true, player.Effects.Any());
            Assert.AreEqual(true, player.Effects[0] is ChangeArmorEffect);
            ChangeArmorEffect changeArmorEffect = player.Effects[0] as ChangeArmorEffect;

            for (int i = 2; i < 5; i++)
            {
                int augmentedArmor = GearHelper.CheckArmorRating(player);
                Assert.AreEqual(baseArmor + 25, augmentedArmor);
                changeArmorEffect.ProcessChangeArmorRound();
                string augmentRoundString = $"Your armor is increased by {changeArmorEffect.ChangeArmorAmount}.";
                Assert.AreEqual(augmentRoundString, OutputHelper.Display.Output[i - 2][2]);
            }
            GameHelper.RemovedExpiredEffectsAsync(player);
            Thread.Sleep(1000);
            Assert.AreEqual(false, player.Effects.Any());
        }
Beispiel #3
0
        public void BerserkAbilityUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Warrior)
            {
                MaxRagePoints = 100,
                RagePoints    = 100,
                InCombat      = true,
                MaxHitPoints  = 100,
                HitPoints     = 100,
                DodgeChance   = 0
            };

            GearHelper.EquipInitialGear(player);
            OutputHelper.Display.ClearUserOutput();
            Monster monster = new Monster(3, MonsterType.Demon)
            {
                HitPoints = 100, MaxHitPoints = 100, InCombat = true
            };

            MonsterBuilder.BuildMonster(monster);
            foreach (IItem item in monster.MonsterItems.Where(item => item is IEquipment eItem && eItem.Equipped))
            {
                IEquipment eItem = item as IEquipment;
                eItem.Equipped = false;
            }
            int abilityIndex = player.Abilities.FindIndex(
                f => f.WarAbilityCategory == WarriorAbility.Berserk);

            string[] inputInfo = new[] { "ability", "berserk" };
            PlayerHelper.AbilityInfo(player, inputInfo);
            Assert.AreEqual("Berserk", OutputHelper.Display.Output[0][2]);
            Assert.AreEqual("Rank: 1", OutputHelper.Display.Output[1][2]);
            Assert.AreEqual("Rage Cost: 40", OutputHelper.Display.Output[2][2]);
            string dmgIncreaseString = $"Damage Increase: {player.Abilities[abilityIndex].Offensive.Amount}";

            Assert.AreEqual(dmgIncreaseString, OutputHelper.Display.Output[3][2]);
            string armDecreaseString = $"Armor Decrease: {player.Abilities[abilityIndex].ChangeAmount.Amount}";

            Assert.AreEqual(armDecreaseString, OutputHelper.Display.Output[4][2]);
            string dmgInfoString = $"Damage increased at cost of armor decrease for {player.Abilities[abilityIndex].ChangeAmount.ChangeMaxRound} rounds";

            Assert.AreEqual(dmgInfoString, OutputHelper.Display.Output[5][2]);
            string[] input       = new[] { "use", "berserk" };
            string   abilityName = InputHelper.ParseInput(input);

            Assert.AreEqual("berserk", abilityName);
            int baseArmorRating = GearHelper.CheckArmorRating(player);
            int baseDamage      = player.PhysicalAttack(monster);

            player.UseAbility(monster, input);
            int?rageCost = player.Abilities[abilityIndex].RageCost;

            Assert.AreEqual(player.MaxRagePoints - rageCost, player.RagePoints);
            Assert.AreEqual(2, player.Effects.Count);
            Assert.AreEqual(true, player.Effects[0] is ChangePlayerDamageEffect);
            Assert.AreEqual(true, player.Effects[1] is ChangeArmorEffect);
            ChangePlayerDamageEffect changePlayerDmgEffect = player.Effects[0] as ChangePlayerDamageEffect;
            ChangeArmorEffect        changeArmorEffect     = player.Effects[1] as ChangeArmorEffect;
            const string             berserkString         = "You go into a berserk rage!";

            Assert.AreEqual(berserkString, OutputHelper.Display.Output[6][2]);
            for (int i = 2; i < 6; i++)
            {
                OutputHelper.Display.ClearUserOutput();
                int berserkArmorAmount  = player.Abilities[abilityIndex].ChangeAmount.Amount;
                int berserkDamageAmount = player.Abilities[abilityIndex].Offensive.Amount;
                int berserkArmorRating  = GearHelper.CheckArmorRating(player);
                int berserkDamage       = player.PhysicalAttack(monster);
                Assert.AreEqual(berserkArmorRating, baseArmorRating + berserkArmorAmount);
                Assert.AreEqual(berserkDamage, baseDamage + berserkDamageAmount, 5);
                changePlayerDmgEffect.ProcessChangePlayerDamageRound(player);
                string changeDmgString = $"Your damage is increased by {berserkDamageAmount}.";
                Assert.AreEqual(changeDmgString, OutputHelper.Display.Output[0][2]);
                changeArmorEffect.ProcessChangeArmorRound();
                string changeArmorString = $"Your armor is decreased by {berserkArmorAmount * -1}.";
                Assert.AreEqual(changeArmorString, OutputHelper.Display.Output[1][2]);
                GameHelper.RemovedExpiredEffectsAsync(player);
                Thread.Sleep(1000);
            }
            Assert.AreEqual(false, player.Effects.Any());
        }