/// <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); }
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")); }
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")); }
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")); }
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()); }
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()); }
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); }
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()); }
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); }
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); }
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); }
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); }
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); }
/// <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); }