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); }
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()); }
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()); }