public void TestChaosBoltDamageDieAndType() { AllPlayers.Invalidate(); DndGame game = DndGame.Instance; game.GetReadyToPlay(); Character merkin = AllPlayers.GetFromName("Merkin"); game.AddPlayer(merkin); List <PlayerActionShortcut> actionShortcuts = AllActionShortcuts.Get(merkin.playerID, "Chaos Bolt"); Assert.AreEqual(3, actionShortcuts.Count); // This will fail when Merkin levels up. DiceRoll chaosBoltLevel3 = DiceRoll.GetFrom(actionShortcuts[2]); Assert.IsTrue(chaosBoltLevel3.IsMagic); Assert.AreEqual(DiceRollType.ChaosBolt, chaosBoltLevel3.Type); Assert.AreEqual("2d8(),3d6()", chaosBoltLevel3.DamageHealthExtraDice); }
public void TestToHitBonusAndDamageDie() { List <PlayerActionShortcut> battleaxes = AllActionShortcuts.Get(PlayerID.Ava, "Battleaxe"); PlayerActionShortcut battleaxe2H = battleaxes.FirstOrDefault(x => x.Name.IndexOf("(2H)") > 0); PlayerActionShortcut battleaxe1H = battleaxes.FirstOrDefault(x => x.Name.IndexOf("(1H)") > 0); Assert.IsNotNull(battleaxe1H); Assert.IsNotNull(battleaxe2H); Assert.AreEqual("1d8+3(slashing)", battleaxe1H.Dice); Assert.AreEqual("1d10+3(slashing)", battleaxe2H.Dice); Assert.AreEqual(6, battleaxe1H.ToHitModifier); Assert.AreEqual(6, battleaxe2H.ToHitModifier); PlayerActionShortcut greatsword = AllActionShortcuts.Get(PlayerID.Ava, "Greatsword")[0]; Assert.AreEqual(1, greatsword.PlusModifier); Assert.IsNotNull(greatsword); Assert.AreEqual("2d6+4(slashing)", greatsword.Dice); Assert.AreEqual(7, greatsword.ToHitModifier); }
public void TestChaosBoltDamagePlusModifier() { Character player = AddSorcererToGame(level: 6, baseCharisma: 17, proficiencyBonus: 3, "Chaos Bolt"); player.proficiencyBonus = 3; List <PlayerActionShortcut> actionShortcuts = AllActionShortcuts.Get(player.playerID, "Chaos Bolt"); Assert.AreEqual(3, actionShortcuts.Count); Assert.AreEqual("2d8(),1d6()", DiceRoll.GetFrom(actionShortcuts[0], player).DamageHealthExtraDice); Assert.AreEqual("2d8(),2d6()", DiceRoll.GetFrom(actionShortcuts[1], player).DamageHealthExtraDice); Assert.AreEqual("2d8(),3d6()", DiceRoll.GetFrom(actionShortcuts[2], player).DamageHealthExtraDice); foreach (PlayerActionShortcut playerActionShortcut in actionShortcuts) { DiceRoll chaosBoltLevel3 = DiceRoll.GetFrom(playerActionShortcut); Assert.IsTrue(chaosBoltLevel3.IsMagic); Assert.AreEqual(DiceRollType.ChaosBolt, chaosBoltLevel3.Type); Assert.AreEqual(6, chaosBoltLevel3.Modifier); } }
public void TestWrathfulSmite() { AllPlayers.Invalidate(); AllSpells.Invalidate(); AllActionShortcuts.Invalidate(); Character ava = AllPlayers.GetFromId(PlayerID.LilCutie); PlayerActionShortcut greatsword = ava.GetShortcut("Greatsword"); Assert.IsNotNull(greatsword); Monster joeVineBlight = MonsterBuilder.BuildVineBlight("Joe"); List <PlayerActionShortcut> wrathfulSmites = AllActionShortcuts.Get(ava.playerID, SpellNames.WrathfulSmite); Assert.AreEqual(1, wrathfulSmites.Count); PlayerActionShortcut wrathfulSmite = wrathfulSmites[0]; Assert.IsNotNull(wrathfulSmite); DndGame game = DndGame.Instance; game.GetReadyToPlay(); game.AddPlayer(ava); game.AddCreature(joeVineBlight); DateTime gameStartTime = game.Time; game.EnteringCombat(); ava.Hits(joeVineBlight, greatsword); // Action. Ava is first to fight. ava.CastTest(wrathfulSmite.Spell); // Bonus Action - Wrathful Smite lasts for one minute. Assert.IsTrue(ava.SpellIsActive(SpellNames.WrathfulSmite)); joeVineBlight.Misses(ava, AttackNames.Constrict); AvaMeleeMissesJoe(); // Round 2 Assert.AreEqual(6, game.SecondsSince(gameStartTime)); joeVineBlight.Misses(ava, AttackNames.Constrict); Assert.AreEqual(6, game.SecondsSince(gameStartTime)); AvaMeleeMissesJoe(); // Round 3 Assert.AreEqual(12, game.SecondsSince(gameStartTime)); joeVineBlight.Misses(ava, AttackNames.Constrict); Assert.AreEqual(12, game.SecondsSince(gameStartTime)); AvaMeleeMissesJoe(); Assert.AreEqual(18, game.SecondsSince(gameStartTime)); joeVineBlight.Misses(ava, AttackNames.Constrict); Assert.AreEqual(18, game.SecondsSince(gameStartTime)); //`+++NOW THE HIT.... ava.Hits(joeVineBlight, greatsword); Assert.AreEqual(24, game.SecondsSince(gameStartTime)); Assert.IsTrue(ava.SpellIsActive(SpellNames.WrathfulSmite)); // Wrathful Smite spell is not yet dispelled, however its impact on attack rolls is done. Assert.AreEqual($"Target must make a Wisdom saving throw or be frightened of {ava.name} until the spell ends. As an action, the creature can make a Wisdom check against {ava.name}'s spell save DC ({ava.GetSpellSaveDC()}) to steel its resolve and end this {wrathfulSmite.Spell.Name} spell.", game.lastMessageSentToDungeonMaster); joeVineBlight.Misses(ava, AttackNames.Constrict); Assert.AreEqual(24, game.SecondsSince(gameStartTime)); ava.Misses(joeVineBlight, greatsword); // Advancing Round (Ava's turn again). Assert.AreEqual("", ava.additionalDiceThisRoll); // No more die roll effects. Assert.AreEqual("", ava.trailingEffectsThisRoll); Assert.AreEqual("", ava.dieRollEffectsThisRoll); Assert.AreEqual("", ava.dieRollMessageThisRoll); Assert.AreEqual(30, game.SecondsSince(gameStartTime)); game.AdvanceClock(DndTimeSpan.FromSeconds(30)); Assert.IsFalse(ava.SpellIsActive(SpellNames.WrathfulSmite)); // Wrathful Smite spell should finally be dispelled. void AvaMeleeMissesJoe() { Assert.AreEqual("", ava.additionalDiceThisRoll); Assert.AreEqual("", ava.trailingEffectsThisRoll); Assert.AreEqual("", ava.dieRollEffectsThisRoll); Assert.AreEqual("", ava.dieRollMessageThisRoll); ava.Misses(joeVineBlight, greatsword); // Advancing Round (Ava's turn again). Assert.AreEqual("1d6(psychic)", ava.additionalDiceThisRoll); Assert.AreEqual("Ravens;Spirals", ava.trailingEffectsThisRoll); Assert.AreEqual("PaladinSmite", ava.dieRollEffectsThisRoll); Assert.AreEqual("Wrathful Smite", ava.dieRollMessageThisRoll); Assert.IsTrue(ava.SpellIsActive(SpellNames.WrathfulSmite)); } }