public void TestAttackSpellEventsOnPlayerAttacks() { AllPlayers.Invalidate(); Character merkin = AllPlayers.GetFromId(PlayerID.Merkin); Monster joeVineBlight = MonsterBuilder.BuildVineBlight("Joe"); Spell zzzSaveSpell = AllSpells.Get("ZZZ Test Save Spell", merkin, 3); DndGame game = DndGame.Instance; game.GetReadyToPlay(); game.AddPlayer(merkin); game.AddCreature(joeVineBlight); game.EnteringCombat(); merkin.CastTest(zzzSaveSpell, joeVineBlight); const int hiddenThreshold = 12; const int damage = 7; Assert.AreEqual("onCasting", Expressions.GetStr("Get(_spellState)", merkin)); merkin.ReadyRollDice(DiceRollType.DamageOnly, "1d6(fire)"); Assert.AreEqual("onCast", Expressions.GetStr("Get(_spellState)", merkin)); merkin.PrepareAttack(joeVineBlight, Attack.Melee("Unarmed Strike", 5, 5)); Assert.AreEqual("onPlayerAttacks", Expressions.GetStr("Get(_spellState)", merkin)); merkin.ReadyRollDice(DiceRollType.Attack, "1d20(:score),2d8(:damage),1d6(:damage)", hiddenThreshold); merkin.DieRollStoppedForTestCases(hiddenThreshold, damage); Assert.AreEqual("onPlayerHitsTarget", Expressions.GetStr("Get(_spellState)", merkin)); List <CastedSpell> activeSpells = merkin.GetActiveSpells(); Assert.IsNotNull(activeSpells); game.ExitingCombat(); }
public void TestAttackSpellEventsTimeout() { AllPlayers.Invalidate(); Character merkin = AllPlayers.GetFromId(PlayerID.Merkin); Monster joeTheVineBlight = MonsterBuilder.BuildVineBlight("Joe"); Spell zzzRangeSpell = AllSpells.Get("ZZZ Test Range Spell", merkin, 3); DndGame game = DndGame.Instance; game.GetReadyToPlay(); game.AddPlayer(merkin); game.AddCreature(joeTheVineBlight); game.EnteringCombat(); merkin.CastTest(zzzRangeSpell, joeTheVineBlight); List <CastedSpell> activeSpells = merkin.GetActiveSpells(); Assert.IsNotNull(activeSpells); Assert.AreEqual(0, activeSpells.Count); Assert.AreEqual("onCasting", Expressions.GetStr("Get(_spellState)", merkin)); const int hiddenThreshold = 12; merkin.ReadyRollDice(DiceRollType.Attack, "1d20(:score),2d8(:damage),1d6(:damage)", hiddenThreshold); Assert.AreEqual("onCast", Expressions.GetStr("Get(_spellState)", merkin)); const int damage = 7; merkin.DieRollStoppedForTestCases(hiddenThreshold, damage); game.AdvanceClock(DndTimeSpan.FromMinutes(1)); Assert.AreEqual("onDispel", Expressions.GetStr("Get(_spellState)", merkin)); activeSpells = merkin.GetActiveSpells(); Assert.IsNotNull(activeSpells); Assert.AreEqual(0, activeSpells.Count); game.ExitingCombat(); }
public void TestAutoAdvanceRound() { DndGame game = DndGame.Instance; game.GetReadyToPlay(); Character merkin = AllPlayers.GetFromId(PlayerID.Merkin); Monster joeTheVineBlight = MonsterBuilder.BuildVineBlight("Joe"); game.AddPlayer(merkin); game.AddMonster(joeTheVineBlight); game.EnteringCombat(); DateTime enterCombatTime = game.Time; Assert.AreEqual(1, game.RoundNumber); Spell zzzSaveSpell = AllSpells.Get("ZZZ Test Save Spell", merkin, 3); merkin.CastTest(zzzSaveSpell, joeTheVineBlight); joeTheVineBlight.PrepareAttack(merkin, joeTheVineBlight.GetAttack(AttackNames.Constrict)); merkin.CastTest(zzzSaveSpell, joeTheVineBlight); Assert.AreEqual(2, game.RoundNumber); DateTime exitCombatTime = game.Time; TimeSpan totalCombatTime = exitCombatTime - enterCombatTime; Assert.AreEqual((game.RoundNumber - 1) * 6 /*seconds*/, totalCombatTime.TotalSeconds); game.ExitingCombat(); Assert.AreEqual(1, game.RoundNumber); }
public void TestTurnEvents() { AllPlayers.Invalidate(); DndGame game = DndGame.Instance; game.GetReadyToPlay(); Character ava = game.AddPlayer(AllPlayers.GetFromId(PlayerID.LilCutie)); Creature joe = game.AddCreature(MonsterBuilder.BuildVineBlight("Joe")); PlayerActionShortcut greatsword = ava.GetShortcut("Greatsword"); game.EnteringCombat(); Assert.IsNull(game.ActiveCreature); ava.TestStartTurn(); Assert.AreEqual(ava, game.ActiveCreature); ava.PrepareAttack(joe, greatsword); game.SetHiddenThreshold(ava, 12, DiceRollType.Attack); //DiceRoll diceRoll = ava.GetRoll(); game.ExitingCombat(); }