コード例 #1
0
        public void BasicYamlConfiguration()
        {
            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";

            var bite = new Bite(yaml.ParseYaml());

            Assert.Equal("Bite", bite.Name);
            Assert.Equal(AttackTypes.Melee, bite.AttackType);
            Assert.Equal("1d4", bite.Damage.ToString());
            Assert.Equal("Bite +0 (1d4)", bite.DisplayString());

            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(bite);
            Assert.NotNull(bob.FindStat("Bite Attack Bonus"));
            Assert.NotNull(bob.FindStat("Bite Damage"));
        }
コード例 #2
0
        public PurchaseMeleeWeaponTests()
        {
            var weapons = new List <Weapon> ();
            var wpn1    = new Weapon("Mace", 0f, "1d6",
                                     DamageTypes.Bludgeoning, 20, 2, 0,
                                     WeaponType.OneHanded, WeaponGroup.Hammers,
                                     WeaponTrainingLevel.Simple);

            wpn1.Value = 3000;
            var wpn2 = new Weapon("Bow", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Martial);
            var wpn3 = new Weapon("Never Pick", 0, "1d6",
                                  DamageTypes.Piercing, 20, 2, 0,
                                  WeaponType.Ranged, WeaponGroup.Bows,
                                  WeaponTrainingLevel.Exotic);

            weapons.Add(wpn1);
            weapons.Add(wpn2);
            weapons.Add(wpn3);
            shop    = new WeaponShop(weapons);
            subject = new PurchaseMeleeWeapon(shop);

            var proficiencies = new string[] { "simple" };

            character = CharacterTestTemplates.AverageBob();
            character.Inventory.CoinPurse.SetValue(30000);
            character.Offense.AddWeaponProficiencies(proficiencies);
        }
コード例 #3
0
        public void CanGetTheCharacterSheet()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal(bob, context.GetValue <CharacterSheet>("charactersheet"));
        }
コード例 #4
0
        public void ConvertsDamageBasedOnCharacterSize()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Size.SetSize(CharacterSize.Small, 4, 120);

            var yaml = @"
name: Bite
attack-type: Melee
damage: 
  name: Bite Damage
  dice: 1d4
attack-bonus:
  name: Bite Attack Bonus
  base-value: 0";
            var bite = new Bite(yaml.ParseYaml());

            bob.Add(bite);

            var modYaml = @"
name: Bite Damage";
            var sizeMod = new ConvertDamageDiceOnSizeModifier(modYaml.ParseYaml());

            bob.Add(sizeMod);

            Assert.Equal("1d3", bite.Damage.ToString());
        }
コード例 #5
0
        public void HasAttributesLoadedThatSpecifySpecialAbilities()
        {
            var c = CharacterTestTemplates.AverageBob();

            c.Add(dwarf);
            AssertCharacter.ContainsFeature("Darkvision", c);
        }
コード例 #6
0
        public void AddsToTheLanguageList()
        {
            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(new TongueOfSunAndMoon());
            Assert.Contains("Tongue of Sun and Moon", bob.Languages.Select(x => x.Name));
        }
コード例 #7
0
        public void SometimesWantToDoForEveryFourInStatAddTwoSomewhereElse()
        {
            var character = CharacterTestTemplates.AverageBob();
            var yaml      = @"---
name: power attack
modifier: base attack bonus
modifier-type: circumstance
every: 4
add: 2";
            var statMod   = new StatisticStatModifier(yaml.ParseYaml());

            character.Add(statMod);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(3);
            Assert.Equal(0, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(4);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(7);
            Assert.Equal(2, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(8);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(11);
            Assert.Equal(4, statMod.Modifier);
            character.Offense.BaseAttackBonus.SetValue(12);
            Assert.Equal(6, statMod.Modifier);
        }
コード例 #8
0
        public void SelectsTenSkillsForClassSkills()
        {
            //Add twelve skills
            var skills = new Skill[] {
                new Skill("Skill 1", AbilityScoreTypes.Strength, false),
                new Skill("Skill 2", AbilityScoreTypes.Strength, false),
                new Skill("Skill 3", AbilityScoreTypes.Strength, false),
                new Skill("Skill 4", AbilityScoreTypes.Strength, false),
                new Skill("Skill 5", AbilityScoreTypes.Strength, false),
                new Skill("Skill 6", AbilityScoreTypes.Strength, false),
                new Skill("Skill 7", AbilityScoreTypes.Strength, false),
                new Skill("Skill 9", AbilityScoreTypes.Strength, false),
                new Skill("Skill 10", AbilityScoreTypes.Strength, false),
                new Skill("Skill 11", AbilityScoreTypes.Strength, false),
                new Skill("Skill 12", AbilityScoreTypes.Strength, false)
            };
            var character = CharacterTestTemplates.AverageBob();

            character.SkillRanks.FillSkills(skills);

            var subject = new ExpertCustomSteps();

            subject.Execute(character.Components);
            Assert.Equal(character.SkillRanks.GetClassSkills().Count(), 10);
        }
コード例 #9
0
        public void AuraOfCourageEnablesImmunityToFear()
        {
            var character = CharacterTestTemplates.AverageBob();

            character.Add(new AuraOfCourage());
            AssertCharacter.IsImmuneTo("Fear", character);
        }
コード例 #10
0
        public void AddingToCharacterGrantsNewClassSkill()
        {
            var character = CharacterTestTemplates.AverageBob().WithSkills(new string[] { "Knowledge Dungeoneering" });

            character.Add(aberrant);
            Assert.True(character.SkillRanks.GetSkill("Knowledge Dungeoneering").ClassSkill);
        }
コード例 #11
0
        public void MeleeAttackUsesTheBaseAttackBonusForTheCharacterAsABase()
        {
            var bob        = CharacterTestTemplates.AverageBob();
            var calculator = bob.Get <MeleeAttackBonus>();

            bob.Offense.BaseAttackBonus.SetValue(10);
            Assert.Equal(10, calculator.TotalValue);
        }
コード例 #12
0
        public void SupportsParentNames()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal("Bob's Father", context.GetValue <string>("character-father-name"));
            Assert.Equal("Bob's Mother", context.GetValue <string>("character-mother-name"));
        }
コード例 #13
0
        public void SupportsPronounsForCharacter()
        {
            var bob     = CharacterTestTemplates.AverageBob();
            var context = new CharacterContext(bob);

            Assert.Equal("he", context.GetValue <string>("pronoun"));
            Assert.Equal("his", context.GetValue <string>("possessivepronoun"));
        }
コード例 #14
0
        public void EnergyResistanceOverTenThousandIsEqualToImmunity()
        {
            var dr        = new EnergyResistance(10000, "fire");
            var character = CharacterTestTemplates.AverageBob();

            character.Defense.AddDamageResistance(dr);
            AssertCharacter.IsImmuneTo("fire", character);
        }
コード例 #15
0
        public void AssignsBloodlineToCharacter()
        {
            var selector  = new SelectBloodline();
            var character = CharacterTestTemplates.AverageBob().WithSkills();

            selector.ExecuteStep(character);
            Assert.NotNull(character.Get <Bloodline>());
        }
コード例 #16
0
        public void AbilityIsNotQualifiedIfNotExceedingScore()
        {
            var pre = new AbilityPrerequisite(AbilityScoreTypes.Intelligence, 13);
            var c   = CharacterTestTemplates.AverageBob();

            c.AbilityScores.SetScore(AbilityScoreTypes.Intelligence, 11);
            Assert.False(pre.IsQualified(c.Components));
        }
コード例 #17
0
        public void LevelsCanModifyStats()
        {
            var level     = new Level(fighter);
            var character = CharacterTestTemplates.AverageBob();

            character.Add(level);
            AssertCharacter.HasWillSave(1, "fear", character);
        }
コード例 #18
0
        public void AddsDiceStatisticForHealingDice()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat("Lay On Hands Dice"));
        }
コード例 #19
0
        public void CreatesAStatForTrackingUsesPerDay()
        {
            var character = CharacterTestTemplates.AverageBob();
            var lay       = new LayOnHands();

            character.Add(lay);
            Assert.NotNull(character.FindStat(lay.UsesPerDayStatName()));
        }
コード例 #20
0
        public void AddsWeaponCriticalDamageModifierToOffenseStats()
        {
            var character = CharacterTestTemplates.AverageBob();
            var offStats  = character.Get <OffenseStats>();
            var master    = new WeaponMastery();

            character.Add(master);
            Assert.Contains(master.WeaponCriticalDamageBonus, offStats.WeaponModifiers);
        }
コード例 #21
0
        public void UsesBaseAttackBonusAsAFoundation()
        {
            var bob         = CharacterTestTemplates.AverageBob();
            var rangeAttack = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, rangeAttack.TotalValue);
            bob.Offense.BaseAttackBonus.SetValue(10);
            Assert.Equal(10, rangeAttack.TotalValue);
        }
コード例 #22
0
        public void IgnoringPrerequisitesStillRequiresUniqueFeats()
        {
            var feat      = Feat.Named("Testing");
            var copy      = feat.Copy();
            var character = CharacterTestTemplates.AverageBob();

            character.Add(feat);
            Assert.False(copy.IsQualifiedIgnorePrerequisites(character));
        }
コード例 #23
0
        public void SizeModifiesAttackBonus()
        {
            var bob         = CharacterTestTemplates.AverageBob();
            var rangeAttack = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, rangeAttack.TotalValue);
            bob.Size.SetSize(CharacterSize.Small, 10, 10);
            Assert.Equal(1, rangeAttack.TotalValue);
        }
コード例 #24
0
        public void DexterityModifiesAttackBonus()
        {
            var bob   = CharacterTestTemplates.AverageBob();
            var range = bob.Get <RangeAttackBonus>();

            Assert.Equal(0, range.TotalValue);
            bob.AbilityScores.SetScore(AbilityScoreTypes.Dexterity, 8);
            Assert.Equal(-1, range.TotalValue);
        }
コード例 #25
0
        public void EnablesImmunityToDisease()
        {
            var character = CharacterTestTemplates.AverageBob();

            character.Add(new DivineHealth());
            var defense = character.Get <DefenseStats>();

            AssertCharacter.IsImmuneTo("Disease", character);
        }
コード例 #26
0
        public void IfNoAppropriateItemsAreFoundAssignNothing()
        {
            var action    = new PurchaseMeleeWeapon(shop);
            var character = CharacterTestTemplates.AverageBob();

            //With no specification nothing should match
            action.ExecuteStep(character);
            Assert.Empty(character.Inventory.Weapons);
        }
コード例 #27
0
        public void ChecksAgainstCharactersToDetermineIfHasEnoughAttackBonus()
        {
            var bob    = CharacterTestTemplates.AverageBob();
            var prereq = new BaseAttackBonusPrerequisite("2");

            Assert.False(prereq.IsQualified(bob.Components));
            bob.Offense.BaseAttackBonus.SetValue(2);
            Assert.True(prereq.IsQualified(bob.Components));
        }
コード例 #28
0
        public void SelectsASingleSimpleWeaponProficiency()
        {
            var character = CharacterTestTemplates.AverageBob();

            var subject = new CommonerCustomSteps();

            subject.Execute(character.Components);
            Assert.Equal(character.Offense.WeaponProficiencies.Count(), 1);
        }
コード例 #29
0
        public void IgnorePrerequisitesIfTokenSaysSo()
        {
            Assert.True(cleave.Prerequisites.Count > 0);
            var bob = CharacterTestTemplates.AverageBob();

            bob.Add(new FeatToken(new string[] { "cleave" }, true));
            selector.ExecuteStep(bob);
            Assert.Contains(cleave, bob.Feats);
        }
コード例 #30
0
        public void IfCharacterDoesNotHaveFavoriteColorsJustUseBlack()
        {
            var bob = CharacterTestTemplates.AverageBob();

            SelectCharacterFavoriteColors.CreateAndRegister();
            var handleBarsTemplate = Handlebars.Compile("{{choose-favorite-color}}");
            var result             = handleBarsTemplate(new CharacterContext(bob).CreateObject());

            Assert.Equal("black", result);
        }