コード例 #1
0
        /// <summary>
        /// Parses the yaml.
        /// </summary>
        /// <returns>The yaml.</returns>
        /// <param name="modifierNode">Modifier node.</param>
        /// <param name="source">Source of the modifier.</param>
        public static IList <BasicStatModifier> ParseYaml(YamlNodeWrapper modifierNode, string source)
        {
            IList <BasicStatModifier> modifiers = new List <BasicStatModifier>();

            foreach (var mod in modifierNode.Children())
            {
                var statName  = mod.GetString("stat");
                var amount    = mod.GetInteger("modifier");
                var type      = mod.GetString("type");
                var condition = mod.GetStringOptional("condition");
                BasicStatModifier modifier;

                if (!string.IsNullOrEmpty(condition))
                {
                    modifier = new ConditionalStatModifier(
                        condition,
                        statName,
                        amount,
                        type,
                        source);
                }
                else
                {
                    modifier = new BasicStatModifier(
                        statName,
                        amount,
                        type,
                        source);
                }

                modifiers.Add(modifier);
            }

            return(modifiers);
        }
コード例 #2
0
    public void FormatNiceStringVersionOfStat()
    {
        var stat = new BasicStat(20);
        BasicStatModifier mod = new ConditionalStatModifier("vs. Thor", "Attack Bonus", 3, "bonus", "Food");

        stat.AddModifier(mod);
        Assert.AreEqual("Fight +20 (+23 vs. Thor)", stat.ToString("Fight"));
    }
コード例 #3
0
        public void FormatNiceStringVersionOfStat()
        {
            var stat = new BasicStat("TestStat", 20);
            IValueStatModifier mod = new ConditionalStatModifier(new ValueStatModifier("Attack Bonus", 3, "bonus"), "vs. Thor");

            stat.AddModifier(mod);
            Assert.Equal("Fight +20 (+23 vs. Thor)", stat.ToString("Fight"));
        }
コード例 #4
0
        public void CastingDoesntBreakConditionalModifiers()
        {
            var stat = new BasicStat("TestStat", 10);
            IValueStatModifier mod = new ConditionalStatModifier(new ValueStatModifier("Attack Bonus", 3, "bonus"), "vs. Thor");

            stat.AddModifier(mod);
            Assert.Equal(1, stat.GetConditions().Count());
            Assert.Equal(10, stat.TotalValue);
            Assert.Equal(13, stat.GetConditionalValue("vs. Thor"));
        }
コード例 #5
0
    public void StatModifiersCanHaveConditionalModifiers()
    {
        var stat = new BasicStat(10);
        var mod  = new ConditionalStatModifier("vs. Giants", "Skill", 5, "bonus", "Feat");

        stat.AddModifier(mod);
        Assert.AreEqual(10, stat.TotalValue);
        Assert.AreEqual(15, stat.GetConditionalValue("vs. Giants"));
        Assert.AreEqual(1, stat.GetConditions().Count());
        Assert.AreEqual("vs. Giants", stat.GetConditions().First());
    }
コード例 #6
0
        public void SkillsCanHaveConditionalModifiers()
        {
            var skill     = new Skill("Eat", AbilityScoreTypes.Intelligence, false);
            var ability   = new AbilityScore(AbilityScoreTypes.Intelligence, 10);
            var charSkill = new CharacterSkill(skill, ability, false);
            var adj       = new ConditionalStatModifier(new ValueStatModifier("Eat", 3, "bonus"), "Celery");

            charSkill.AddModifier(adj);
            Assert.Equal(1, charSkill.ConditionalModifiers.Count());
            Assert.Equal(3, charSkill.GetConditionalValue("Celery"));
            Assert.Equal(0, charSkill.Score());
            Assert.Equal("Eat +0 (+3 Celery)", charSkill.ToString());
        }
コード例 #7
0
        public void Initialize(ComponentContainer components)
        {
            var level = components.Get <ClassLevel>();

            poisonResistance = new ConditionalStatModifier(new DelegateStatModifier("saves", "bonus", () => { return(level.Level >= 9 ? 4 : 2); }), "poison");
            damageResistance = new EnergyResistance(5, "electricity");
            var defense = components.Get <DefenseStats>();

            defense.FortitudeSave.AddModifier(poisonResistance);
            defense.ReflexSave.AddModifier(poisonResistance);
            defense.WillSave.AddModifier(poisonResistance);
            defense.AddDamageResistance(damageResistance);
        }
コード例 #8
0
        public void ConditionalModifiersAndRanksAreCountedOnlyOnce()
        {
            var skill     = new Skill("Eat", AbilityScoreTypes.Intelligence, false);
            var ability   = new AbilityScore(AbilityScoreTypes.Intelligence, 10);
            var charSkill = new CharacterSkill(skill, ability, false);

            charSkill.AddRank();
            var adj = new ConditionalStatModifier(new ValueStatModifier("Eat", 3, "bonus"), "Celery");

            charSkill.AddModifier(adj);
            Assert.Equal(1, charSkill.ConditionalModifiers.Count());
            Assert.Equal(4, charSkill.GetConditionalValue("Celery"));
            Assert.Equal(1, charSkill.Score());
            Assert.Equal("Eat +1 (+4 Celery)", charSkill.ToString());
        }
コード例 #9
0
        public void CanLoadsTheValueStatModifierIfJustBasicValuesAreSpecified()
        {
            var yaml = @"---
name: Will
modifier: 2
modifier-type: racial
condition: spells";

            var modifier = new ConditionalStatModifier(yaml.ParseYaml());

            Assert.Equal("Will", modifier.StatisticName);
            Assert.Equal(2, modifier.Modifier);
            Assert.Equal("racial", modifier.ModifierType);
            Assert.Equal("spells", modifier.Condition);
        }
コード例 #10
0
        public static IEnumerable <ConditionalStatModifier> GetConditionalMultipleAttackModifiers()
        {
            if (multipleAttackList == null)
            {
                multipleAttackList = new List <ConditionalStatModifier>();
                for (int i = 1; i < attacksToSupport; i++)
                {
                    var mod  = new MultipleAttackBonusModifier(i);
                    var cond = new ConditionalStatModifier(mod, "attack {0}".Formatted(i));
                    multipleAttackList.Add(cond);
                }
            }

            return(multipleAttackList);
        }
コード例 #11
0
        public void Initialize(ComponentContainer components)
        {
            var defense       = components.Get <DefenseStats>();
            var drElectricity = new EnergyResistance(10, "electricity");
            var drFire        = new EnergyResistance(10, "fire");

            defense.AddDamageResistance(drElectricity);
            defense.AddDamageResistance(drFire);
            defense.AddImmunity("acid");
            defense.AddImmunity("cold");
            defense.AddImmunity("petrification");
            var poisonResistance = new ConditionalStatModifier(new ValueStatModifier("saves", 4, "bonus"), "poison");

            defense.FortitudeSave.AddModifier(poisonResistance);
            defense.ReflexSave.AddModifier(poisonResistance);
            defense.WillSave.AddModifier(poisonResistance);
        }
コード例 #12
0
        public void Initialize(ComponentContainer components)
        {
            sorcererLevels = components.Get <ClassLevel>();
            fireResistance = new EnergyResistance(5, "fire");
            components.Get <DefenseStats>().AddDamageResistance(fireResistance);
            saveModifier = new ConditionalStatModifier
                           (
                new DelegateStatModifier("Saves",
                                         "bonus",
                                         () => { return(sorcererLevels.Level >= 9 ? 4 : 2); }
                                         ), "poison"
                           );
            var defense = components.Get <DefenseStats>();

            defense.FortitudeSave.AddModifier(saveModifier);
            defense.ReflexSave.AddModifier(saveModifier);
            defense.WillSave.AddModifier(saveModifier);
        }
コード例 #13
0
        public void Initialize(ComponentContainer components)
        {
            var defense = components.Get <DefenseStats>();

            defense.AddImmunity("cold");
            defense.AddImmunity("nonlethal");
            defense.AddImmunity("paralysis");
            defense.AddImmunity("sleep");
            components.Add(new DamageReduction("-", 5));

            var modifier = new ConditionalStatModifier(
                new ValueStatModifier(4),
                "undead spells/abilities"
                );

            defense.FortitudeSave.AddModifier(modifier);
            defense.ReflexSave.AddModifier(modifier);
            defense.WillSave.AddModifier(modifier);
        }
コード例 #14
0
        /// <summary>
        /// Parses the yaml.
        /// </summary>
        /// <returns>The yaml.</returns>
        /// <param name="modifierNode">Modifier node.</param>
        /// <param name="source">Source of the modifier.</param>
        public static IList <IValueStatModifier> ParseYaml(IEnumerable <IObjectStore> modifierNode, string source)
        {
            IList <IValueStatModifier> modifiers = new List <IValueStatModifier>();

            foreach (var mod in modifierNode)
            {
                var statName  = mod.GetString("stat");
                var amount    = mod.GetInteger("modifier");
                var type      = mod.GetString("type");
                var condition = mod.GetStringOptional("condition");
                var name      = mod.GetStringOptional("name");
                if (!string.IsNullOrEmpty(name))
                {
                    name = source + " " + name;
                }
                else
                {
                    name = source;
                }
                IValueStatModifier modifier;

                modifier = new ValueStatModifier(
                    statName,
                    amount,
                    type);
                if (!string.IsNullOrEmpty(condition))
                {
                    modifier = new ConditionalStatModifier(
                        modifier,
                        condition
                        );
                }

                modifiers.Add(modifier);
            }

            return(modifiers);
        }