예제 #1
0
        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();
        }
예제 #2
0
        public void TestInit()
        {
            DndTimeClock dndTimeClock = new DndTimeClock();
            DateTime     now          = DateTime.Now;

            dndTimeClock.SetTime(now);
            dndTimeClock.Advance(DndTimeSpan.FromRounds(1));
            TimeSpan difference = dndTimeClock.Time - now;

            Assert.AreEqual(6, difference.TotalSeconds);


            dndTimeClock.SetTime(now);
            dndTimeClock.Advance(new DndTimeSpan(TimeMeasure.instant, 5));
            difference = dndTimeClock.Time - now;
            Assert.AreEqual(0, difference.TotalSeconds);


            dndTimeClock.SetTime(now);
            dndTimeClock.Advance(DndTimeSpan.FromMinutes(5));
            difference = dndTimeClock.Time - now;
            Assert.AreEqual(5, difference.TotalMinutes);

            dndTimeClock.SetTime(now);
            dndTimeClock.Advance(DndTimeSpan.FromHours(3));
            difference = dndTimeClock.Time - now;
            Assert.AreEqual(3, difference.TotalHours);

            dndTimeClock.SetTime(now);
            dndTimeClock.Advance(DndTimeSpan.FromDays(2));
            difference = dndTimeClock.Time - now;
            Assert.AreEqual(2, difference.TotalDays);
        }
예제 #3
0
        public void TestSaveSpellEvents()
        {
            AllPlayers.Invalidate();
            History.TimeClock = new DndTimeClock();

            Character merkin           = AllPlayers.GetFromId(PlayerID.Merkin);
            Monster   joeTheVineBlight = MonsterBuilder.BuildVineBlight("Joe");

            Spell zzzSaveSpell = AllSpells.Get("ZZZ Test Save Spell", merkin, 3);

            DndGame game = DndGame.Instance;

            game.GetReadyToPlay();
            game.AddPlayer(merkin);
            game.AddCreature(joeTheVineBlight);
            merkin.CastTest(zzzSaveSpell, joeTheVineBlight);
            merkin.ReadyRollDice(DiceRollType.DamageOnly, "3d6(fire)", 12);
            List <CastedSpell> activeSpells = merkin.GetActiveSpells();

            Assert.IsNotNull(activeSpells);
            Assert.AreEqual(1, activeSpells.Count);
            Assert.AreEqual("onCast", Expressions.GetStr("Get(_spellState)", merkin));
            game.AdvanceClock(DndTimeSpan.FromMinutes(1));
            Assert.AreEqual("onDispel", Expressions.GetStr("Get(_spellState)", merkin));
            activeSpells = merkin.GetActiveSpells();
            Assert.IsNotNull(activeSpells);
            Assert.AreEqual(0, activeSpells.Count);
        }
예제 #4
0
 private void BtnAdd10Minutes_Click(object sender, RoutedEventArgs e)
 {
     dndTimeClock.Advance(DndTimeSpan.FromMinutes(10), ShiftKeyDown);
 }