示例#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.AddMonster(joeTheVineBlight);
            game.EnteringCombat();
            merkin.Cast(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.DieRollStopped(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 TestAllFeatureExpressions()
        {
            void Expressions_ExceptionThrown(object sender, DndCoreExceptionEventArgs ea)
            {
                throw ea.Ex;
            }

            DndGame game = DndGame.Instance;

            game.GetReadyToPlay();
            Character merkin = AllPlayers.GetFromId(PlayerID.Merkin);
            Character ava    = AllPlayers.GetFromId(PlayerID.LilCutie);
            Character willy  = AllPlayers.GetFromId(PlayerID.Willy);
            Character lady   = AllPlayers.GetFromId(PlayerID.Lady);
            Character fred   = AllPlayers.GetFromId(PlayerID.Fred);

            game.AddPlayer(merkin);
            game.AddPlayer(ava);
            game.AddPlayer(willy);
            game.AddPlayer(lady);

            Expressions.ExceptionThrown += Expressions_ExceptionThrown;

            merkin.TestEvaluateAllExpressions();
            ava.TestEvaluateAllExpressions();
            willy.TestEvaluateAllExpressions();
            lady.TestEvaluateAllExpressions();
            fred.TestEvaluateAllExpressions();

            // TODO: Test shortcut AvailableWhen expression.
            // TODO: Test spell events.
            // TODO: Test all data-driven Properties and Functions.
        }
示例#3
0
        public void TestMods()
        {
            Character ava = AllPlayers.GetFromId(PlayerID.LilCutie);

            Assert.AreEqual(3, Expressions.GetInt("Mod(strength)", ava));
            Assert.AreEqual(0, Expressions.GetInt("Mod(dexterity)", ava));
            Assert.AreEqual(2, Expressions.GetInt("Mod(constitution)", ava));
            Assert.AreEqual(-1, Expressions.GetInt("Mod(intelligence)", ava));
            Assert.AreEqual(-1, Expressions.GetInt("Mod(wisdom)", ava));
            Assert.AreEqual(4, Expressions.GetInt("Mod(charisma)", ava));

            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            Assert.AreEqual(3, Expressions.GetInt("Mod(strength)", fred));
            Assert.AreEqual(3, Expressions.GetInt("Mod(dexterity)", fred));
            Assert.AreEqual(4, Expressions.GetInt("Mod(constitution)", fred));
            Assert.AreEqual(-1, Expressions.GetInt("Mod(intelligence)", fred));
            Assert.AreEqual(0, Expressions.GetInt("Mod(wisdom)", fred));
            Assert.AreEqual(-1, Expressions.GetInt("Mod(charisma)", fred));

            Character merkin = AllPlayers.GetFromId(PlayerID.Merkin);

            Assert.AreEqual(-1, Expressions.GetInt("Mod(strength)", merkin));
            Assert.AreEqual(2, Expressions.GetInt("Mod(dexterity)", merkin));
            Assert.AreEqual(2, Expressions.GetInt("Mod(constitution)", merkin));
            Assert.AreEqual(1, Expressions.GetInt("Mod(intelligence)", merkin));
            Assert.AreEqual(1, Expressions.GetInt("Mod(wisdom)", merkin));
            Assert.AreEqual(3, Expressions.GetInt("Mod(charisma)", merkin));
        }
示例#4
0
        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);
        }
示例#5
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.AddMonster(joeTheVineBlight);
            merkin.Cast(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);
        }
示例#6
0
        public void TestStateChangeEvents()
        {
            string lastAvaKey      = string.Empty;
            object lastAvaOldValue = null;
            object lastAvaNewValue = null;

            void Ava_StateChanged(object sender, StateChangedEventArgs ea)
            {
                lastAvaKey      = ea.Key;
                lastAvaOldValue = ea.OldValue;
                lastAvaNewValue = ea.NewValue;
            }

            Character ava = AllPlayers.GetFromId(PlayerID.Ava);

            ava.ClearStateVariables();
            ava.StateChanged += Ava_StateChanged;

            Expressions.Do("Set(Rage,true)", ava);
            Assert.AreEqual("Rage", lastAvaKey);
            Assert.IsTrue((bool)lastAvaNewValue);
            Assert.IsNull(lastAvaOldValue);

            Expressions.Do("Set(Rage,false)", ava);
            Assert.IsFalse((bool)lastAvaNewValue);
            Assert.IsTrue((bool)lastAvaOldValue);
        }
示例#7
0
        public void TestBarbarianMeleeDamageOffset()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            fred.StartTurnResetState();
            Assert.AreEqual(0, fred.damageOffsetThisRoll);
            fred.ActivateFeature("BarbarianMelee");
            Assert.AreEqual(2, fred.damageOffsetThisRoll);

            fred.DeactivateFeature("BarbarianMelee");

            CharacterClass barbarianClass = fred.Classes.FirstOrDefault(x => x.Name == "Barbarian");

            Assert.IsNotNull(barbarianClass);
            fred.ResetPlayerActionBasedState();
            barbarianClass.Level = 9;
            fred.ActivateFeature("BarbarianMelee");
            Assert.AreEqual(3, fred.damageOffsetThisRoll);

            fred.DeactivateFeature("BarbarianMelee");
            fred.ResetPlayerActionBasedState();
            barbarianClass.Level = 16;
            fred.ActivateFeature("BarbarianMelee");
            Assert.AreEqual(4, fred.damageOffsetThisRoll);
        }
示例#8
0
        public void TestGetSet()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            Character ava  = AllPlayers.GetFromId(PlayerID.Ava);

            Expressions.Do("Set(Rage,true)", ava);
            Expressions.Do("Set(Rage,false)", fred);
            Assert.IsTrue(Expressions.GetBool("Get(Rage)", ava));
            Assert.IsFalse(Expressions.GetBool("Get(Rage)", fred));

            // Now swap them...
            Expressions.Do("Set(Rage,false)", ava);
            Expressions.Do("Set(Rage,true)", fred);

            // And verify new results are written:
            Assert.IsTrue(Expressions.GetBool("Get(Rage)", fred));
            Assert.IsFalse(Expressions.GetBool("Get(Rage)", ava));

            // Now swap them with an expression...
            Expressions.Do("Set(Rage,!Get(Rage))", ava);
            Expressions.Do("Set(Rage,!Get(Rage))", fred);

            // Did the last expression swap work?
            Assert.IsTrue(Expressions.GetBool("Get(Rage)", ava));
            Assert.IsFalse(Expressions.GetBool("Get(Rage)", fred));

            // And finally, make sure the Expressions engine agrees:

            Assert.IsTrue(Expressions.GetBool("Get(Rage) == true", ava));
            Assert.IsTrue(Expressions.GetBool("Get(Rage) == false", fred));
        }
示例#9
0
        public void TestBarbarianMeleeConditionsWithVariousWeapons()
        {
            AllPlayers.Invalidate();
            History.TimeClock = new DndTimeClock();
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            DndGame   game = DndGame.Instance;

            game.GetReadyToPlay();
            game.AddPlayer(fred);
            game.Start();
            fred.StartTurnResetState();
            AssignedFeature barbarianMelee = fred.GetFeature("BarbarianMelee");

            Assert.IsFalse(barbarianMelee.ShouldActivateNow());

            fred.ActivateFeature("WildSurgeRage");
            Assert.IsFalse(barbarianMelee.ShouldActivateNow());              // Not yet. We need to be using the right weapon.

            PlayerActionShortcut greataxe = fred.GetShortcut("Greataxe");

            Assert.IsNotNull(greataxe);
            fred.PrepareWeaponAttack(greataxe);

            Assert.IsTrue(Expressions.GetBool("InRage", fred));
            Assert.IsTrue(Expressions.GetBool("AttackIsMelee", fred));
            Assert.IsTrue(Expressions.GetBool("AttackingWith(strength)", fred));
            Assert.IsTrue(barbarianMelee.ShouldActivateNow());

            PlayerActionShortcut longbow = fred.GetShortcut("Longbow");

            fred.PrepareWeaponAttack(longbow);
            Assert.IsFalse(barbarianMelee.ShouldActivateNow());
        }
示例#10
0
        public void TestBarbarianMeleeConditionsWithFinesseWeapons()
        {
            History.TimeClock = new DndTimeClock();
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            DndGame   game = DndGame.Instance;

            game.GetReadyToPlay();
            game.AddPlayer(fred);
            game.Start();
            fred.StartTurnResetState();
            AssignedFeature barbarianMelee = fred.GetFeature("BarbarianMelee");

            Assert.IsFalse(barbarianMelee.ShouldActivateNow());

            fred.ActivateFeature("WildSurgeRage");
            Assert.IsFalse(barbarianMelee.ShouldActivateNow());              // Not yet. We need to be using the right weapon.

            PlayerActionShortcut dagger = fred.GetShortcut("Dagger");

            Assert.IsNotNull(dagger);
            fred.PrepareWeaponAttack(dagger);
            Assert.IsTrue(barbarianMelee.ShouldActivateNow());

            fred.baseDexterity = 18;
            fred.baseStrength  = 10;
            dagger.UpdatePlayerAttackingAbility(fred, false);
            fred.PrepareWeaponAttack(dagger);
            Assert.IsFalse(barbarianMelee.ShouldActivateNow());              // Should not be satisfied because dexterity is now the ability of choice to use with this finesse weapon.
        }
示例#11
0
        public void TestBarbarianMeleeRageExpiration()
        {
            AllPlayers.Invalidate();
            AllFeatures.Invalidate();
            History.TimeClock = new DndTimeClock();
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            DndGame   game = DndGame.Instance;

            game.GetReadyToPlay();
            game.AddPlayer(fred);
            game.Start();

            fred.StartTurnResetState();
            AssignedFeature barbarianMelee = fred.GetFeature("BarbarianMelee");

            Assert.IsFalse(barbarianMelee.ShouldActivateNow());

            fred.ActivateFeature("WildSurgeRage");
            PlayerActionShortcut greataxe = fred.GetShortcut("Greataxe");

            fred.PrepareWeaponAttack(greataxe);

            Assert.IsTrue(barbarianMelee.ShouldActivateNow());

            // Now test alarm system to turn off rage after one minute....
            History.TimeClock.Advance(DndTimeSpan.FromSeconds(59));
            Assert.IsTrue(barbarianMelee.ShouldActivateNow());
            History.TimeClock.Advance(DndTimeSpan.FromSeconds(1));
            Assert.IsFalse(barbarianMelee.ShouldActivateNow());
        }
示例#12
0
        public void TestConditionsChanged()
        {
            Conditions oldConditions = Conditions.None;
            Conditions newConditions = Conditions.None;

            void Ava_ConditionsChanged(object sender, ConditionsChangedEventArgs ea)
            {
                oldConditions = ea.OldConditions;
                newConditions = ea.NewConditions;
            }

            Character ava = AllPlayers.GetFromId(PlayerID.LilCutie);

            ava.ConditionsChanged += Ava_ConditionsChanged;
            ava.ActiveConditions   = Conditions.None;
            Assert.AreEqual(Conditions.None, oldConditions);
            Assert.AreEqual(Conditions.None, newConditions);

            ava.ActiveConditions = Conditions.Paralyzed | Conditions.Petrified;

            Assert.AreEqual(Conditions.None, oldConditions);
            Assert.AreEqual(Conditions.Paralyzed | Conditions.Petrified, newConditions);

            ava.ActiveConditions = Conditions.Prone;

            Assert.AreEqual(Conditions.Paralyzed | Conditions.Petrified, oldConditions);
            Assert.AreEqual(Conditions.Prone, newConditions);
        }
示例#13
0
        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.AddMonster(joeVineBlight);
            game.EnteringCombat();
            merkin.Cast(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.WillAttack(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.DieRollStopped(hiddenThreshold, damage);
            Assert.AreEqual("onPlayerHitsTarget", Expressions.GetStr("Get(_spellState)", merkin));

            List <CastedSpell> activeSpells = merkin.GetActiveSpells();

            Assert.IsNotNull(activeSpells);
            game.ExitingCombat();
        }
示例#14
0
        public void TestTableAccess()
        {
            Character fred   = AllPlayers.GetFromId(PlayerID.Fred);
            Character merkin = AllPlayers.GetFromId(PlayerID.Merkin);

            Assert.AreEqual(4, Expressions.GetInt("Table(\"Barbarian\", \"Rages\", \"Level\", Level(\"Barbarian\"))", fred));
            Assert.AreEqual(1, Expressions.GetInt("Table(\"Sorcerer\", \"Slot5Spells\", \"Level\", 9)"));
            Assert.AreEqual(6, Expressions.GetInt("Table(\"Sorcerer\", \"SorceryPoints\", \"Level\", 6)", merkin));
        }
示例#15
0
        public void SetTests()
        {
            Character ava = AllPlayers.GetFromId(PlayerID.LilCutie);

            Expressions.Do("Set(proficiencyBonus, 4)", ava);
            Assert.AreEqual(4, ava.proficiencyBonus);
            Expressions.Do("Set(proficiencyBonus, 8)", ava);
            Assert.AreEqual(8, ava.proficiencyBonus);
            Expressions.Do("Set(ActiveConditions, Petrified | Prone)", ava);
            Assert.AreEqual(Conditions.Petrified | Conditions.Prone, ava.ActiveConditions);
        }
示例#16
0
        public void TestLevel()
        {
            AllPlayers.Invalidate();
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            Character ava  = AllPlayers.GetFromId(PlayerID.LilCutie);

            Assert.AreEqual(6, Expressions.Get("Level(\"Barbarian\")", fred));
            Assert.AreEqual(0, Expressions.Get("Level(\"Fighter\")", fred));
            Assert.AreEqual(0, Expressions.Get("Level(\"Fighter\")", ava));
            Assert.AreEqual(6, Expressions.Get("Level(\"Paladin\")", ava));
        }
示例#17
0
        public void TestUnarmoredDefense()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            fred.baseArmorClass = 0;
            Assert.AreEqual(0, fred.baseArmorClass);
            Expressions.Do("Set(baseArmorClass, 10 + Mod(dexterity) + Mod(constitution) + ShieldBonus)", fred);
            Assert.AreEqual(17, fred.baseArmorClass);
            fred.ShieldBonus = 2;
            Expressions.Do("Set(baseArmorClass, 10 + Mod(dexterity) + Mod(constitution) + ShieldBonus)", fred);
            Assert.AreEqual(19, fred.baseArmorClass);
        }
示例#18
0
        public void TestGetProperties()
        {
            Character fred   = AllPlayers.GetFromId(PlayerID.Fred);
            Character merkin = AllPlayers.GetFromId(PlayerID.Merkin);
            Character ava    = AllPlayers.GetFromId(PlayerID.LilCutie);

            Assert.AreEqual(3, Expressions.GetInt("Get(proficiencyBonus)", ava));
            Assert.AreEqual(Ability.charisma, Expressions.Get <Ability>("Get(spellCastingAbility)", ava));
            Assert.AreEqual(Ability.charisma, Expressions.Get <Ability>("Get(spellCastingAbility)", merkin));
            Assert.AreEqual(Ability.none, Expressions.Get <Ability>("Get(spellCastingAbility)", fred));
            Assert.AreEqual(4, Expressions.GetInt("Get(charismaMod)", ava));
        }
示例#19
0
        public void TestPropertyAccess()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            Character ava  = AllPlayers.GetFromId(PlayerID.LilCutie);

            Assert.AreEqual(0, Expressions.Get("leftMostPriority", fred));
            Assert.AreEqual(5, Expressions.Get("leftMostPriority", ava));
            Assert.AreEqual(52, Expressions.GetInt("hitPoints", ava));
            Assert.AreEqual(30, Expressions.GetInt("WalkingSpeed", ava));
            Assert.AreEqual(3, Expressions.GetInt("Max(dexterityMod,strengthMod)", ava));
            Assert.AreEqual(0, Expressions.GetInt("Min(dexterityMod,strengthMod)", ava));
            Assert.AreEqual("Ava Wolfhard", Expressions.Get("name", ava));
        }
示例#20
0
        public void TestOffset()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            fred.StartTurnResetState();
            Expressions.Do("Set(RageCount,0)", fred);
            Expressions.Do("Set(MyOffset,4)", fred);
            Assert.AreEqual(0, Expressions.GetInt("Get(RageCount)", fred));
            Expressions.Do("Offset(RageCount, 1)", fred);
            Assert.AreEqual(1, Expressions.GetInt("Get(RageCount)", fred));
            Expressions.Do("Offset(RageCount, MyOffset)", fred);
            Assert.AreEqual(5, Expressions.GetInt("Get(RageCount)", fred));
        }
示例#21
0
        public void TestBarbarianMeleeDeactivate()
        {
            AllPlayers.Invalidate();
            AllFeatures.Invalidate();
            DndGame game = DndGame.Instance;

            game.GetReadyToPlay();
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            game.AddPlayer(fred);
            game.Start();

            PlayerActionShortcut greataxe = fred.GetShortcut("Greataxe");

            fred.Use(greataxe);

            CharacterClass barbarianClass = fred.Classes.FirstOrDefault(x => x.Name == "Barbarian");

            Assert.IsNotNull(barbarianClass);
            barbarianClass.Level = 16;
            fred.ResetPlayerActionBasedState();

            Assert.AreEqual(0, fred.damageOffsetThisRoll);

            fred.ActivateFeature("WildSurgeRage");
            Assert.AreEqual(0, fred.damageOffsetThisRoll);
            fred.Use(greataxe);
            Assert.AreEqual(4, fred.damageOffsetThisRoll);

            AssignedFeature rageFeature = fred.GetFeature("WildSurgeRage");

            Assert.IsTrue(rageFeature.Feature.IsActive);

            Expressions.Do("Set(_rage,false)", fred);

            Assert.IsFalse(rageFeature.Feature.IsActive);
            Assert.IsFalse(fred.GetFeature("BarbarianMelee").Feature.IsActive);
            fred.Use(greataxe);
            Assert.IsFalse(fred.GetFeature("BarbarianMelee").Feature.IsActive);

            Assert.AreEqual(0, fred.damageOffsetThisRoll);


            fred.ActivateFeature("WildSurgeRage");
            Assert.IsTrue(fred.GetFeature("BarbarianMelee").Feature.IsActive);
            Assert.AreEqual(4, fred.damageOffsetThisRoll);

            fred.DeactivateFeature("WildSurgeRage");
            Assert.IsFalse(fred.GetFeature("BarbarianMelee").Feature.IsActive);
            Assert.AreEqual(0, fred.damageOffsetThisRoll);
        }
示例#22
0
        public Character GetSingleRollingPlayer()
        {
            if (multiplayerSummary == null)
            {
                return(AllPlayers.GetFromId(playerID));
            }

            if (multiplayerSummary.Count == 1)
            {
                return(AllPlayers.GetFromId(multiplayerSummary[0].playerId));
            }

            return(null);
        }
示例#23
0
        public void TestRaceClass()
        {
            Character oldFred = AllPlayers.Get("Old Fred");

            Assert.AreEqual("Lizardfolk Fighter 4 / Barbarian 1", oldFred.raceClass);

            Character fred = AllPlayers.GetFromId(PlayerID.Fred);

            Assert.AreEqual("Lizardfolk Barbarian 6", fred.raceClass);

            Character ava = AllPlayers.GetFromId(PlayerID.Ava);

            Assert.AreEqual("Human Paladin 6", ava.raceClass);
        }
示例#24
0
 public static void TargetAllPlayersInTaleSpire()
 {
     foreach (CreatureStats creatureStats in PlayerStatManager.Players)
     {
         if (creatureStats.IsTargeted)
         {
             Character player = AllPlayers.GetFromId(creatureStats.CreatureId);
             if (player != null)
             {
                 TaleSpireClient.SetTargeted(player.taleSpireId, true);
             }
         }
     }
 }
示例#25
0
 public static Creature GetCreatureFromId(int creatureId)
 {
     if (creatureId >= 0)
     {
         return(AllPlayers.GetFromId(creatureId));
     }
     else
     {
         InGameCreature inGameCreature = AllInGameCreatures.GetByIndex(-creatureId);
         if (inGameCreature != null)
         {
             return(inGameCreature.Creature);
         }
     }
     return(null);
 }
示例#26
0
        public void TestBarbarianMeleeConditions()
        {
            Character fred = AllPlayers.GetFromId(PlayerID.Fred);
            DndGame   game = DndGame.Instance;

            game.GetReadyToPlay();
            game.AddPlayer(fred);
            game.Start();
            fred.StartTurnResetState();
            AssignedFeature barbarianMelee = fred.GetFeature("BarbarianMelee");

            Assert.IsFalse(barbarianMelee.ShouldActivateNow());
            Expressions.Do("Set(_rage,true)", fred);
            fred.GetAttackingAbilityModifier(WeaponProperties.Melee, AttackType.Melee);
            Assert.IsTrue(barbarianMelee.ShouldActivateNow());
        }
示例#27
0
        public static List <Creature> GetTargets()
        {
            List <Creature> creatures = new List <Creature>();

            foreach (CreatureStats creatureStats in PlayerStatManager.Players)
            {
                if (creatureStats.IsTargeted)
                {
                    creatures.Add(AllPlayers.GetFromId(creatureStats.CreatureId));
                }
            }

            creatures.AddRange(AllInGameCreatures.GetTargeted());

            return(creatures);
        }
        private void AddConcentrationSaveForPlayer(DiceRoll diceRoll, int playerId)
        {
            string    backgroundColor, textColor;
            Character player = AllPlayers.GetFromId(playerId);

            GetPlayerDieColor(player, out backgroundColor, out textColor);
            string name = "";

            if (player != null)
            {
                name = player.name;
            }
            DiceDto diceDto = CreateDie(playerId, backgroundColor, textColor, name, 20, STR_ConcentrationSave);

            diceDto.Label = STR_ConcentrationSave;
            diceRoll.DiceDtos.Add(diceDto);
        }
示例#29
0
        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();
        }
示例#30
0
        private static void TargetCreaturesByTaleSpireId(List <string> targetCreatureIds)
        {
            foreach (CreatureStats creatureStats in PlayerStatManager.Players)
            {
                Character player = AllPlayers.GetFromId(creatureStats.CreatureId);
                if (player != null)
                {
                    creatureStats.IsTargeted = targetCreatureIds.Contains(player.taleSpireId);
                }
                else
                {
                    creatureStats.IsTargeted = false;
                }
            }

            foreach (InGameCreature creature in AllInGameCreatures.Creatures)
            {
                creature.IsTargeted = targetCreatureIds.Contains(creature.TaleSpireId);
            }
        }