private void WriteModifier(XmlWriter writer, ModifierDescriptor modifier)
 {
     writer.WriteStartElement("SimulationModifierDescriptor");
     writer.WriteAttributeString("TargetProperty", modifier.TargetProperty.ToString());
     writer.WriteAttributeString("Operation", modifier.Operation.ToString());
     writer.WriteAttributeString("Value", FormatModifierValue(modifier.Value));
     writer.WriteEndElement();
 }
Esempio n. 2
0
 public void Enhance(int rarityLevel, ModifierDescriptor modifier)
 {
     if (modifier.Operation == Operation.Force)
     {
         return;
     }
     modifier.Value += modifier.Value * rarityLevel * _bonus;
 }
Esempio n. 3
0
 private void BalanceAttribute(ModifierDescriptor modifier)
 {
     if (IsNotMaxHealth(modifier))
     {
         return;
     }
     modifier.Value = (float)Math.Round(modifier.Value * (1f / 1.2f), 0);
 }
Esempio n. 4
0
        public static BuffSkillBonus CreateBuffSkillBonus(int value, StatType stat, ModifierDescriptor descriptor)
        {
            BuffSkillBonus bsb = Helpers.Create <BuffSkillBonus>();

            bsb.Value      = value;
            bsb.Stat       = stat;
            bsb.Descriptor = descriptor;
            return(bsb);
        }
        public static AddStatBonus CreateAddStatBonus(this StatType stat, int value, ModifierDescriptor descriptor)
        {
            var addStat = Create <AddStatBonus>();

            addStat.Stat       = stat;
            addStat.Value      = value;
            addStat.Descriptor = descriptor;
            return(addStat);
        }
Esempio n. 6
0
        private void BalanceAttribute(ModifierDescriptor modifier)
        {
            if (IsNotPowerOrCooldown(modifier))
            {
                return;
            }
            var decimalPoints = modifier.TargetProperty == TargetProperty.AttackPower ? 0 : 2;

            modifier.Value = (float)Math.Round(modifier.Value * (1f / 1.75f), decimalPoints);
        }
Esempio n. 7
0
 private void WriteModifier(XmlWriter writer, ModifierDescriptor modifier)
 {
     writer.WriteStartElement("SimulationModifierDescriptor");
     writer.WriteAttributeString("TargetProperty", modifier.TargetProperty.ToString());
     writer.WriteAttributeString("Operation", modifier.Operation.ToString());
     writer.WriteAttributeString("Value", Formatter.FormatNumericValue(modifier.Value));
     if (modifier.Path != null)
     {
         writer.WriteAttributeString("Path", XmlTranslation.AsText(modifier.Path));
     }
     writer.WriteEndElement();
 }
        public static void mod_AddArmorClassModifiers([NotNull] ModifiableValueArmorClass acStat, bool flatfooted, bool touch, bool ignoreDexterityBonus = false)
        {
            foreach (ModifiableValue.Modifier displayModifier in acStat.GetDisplayModifiers())
            {
                if (displayModifier.ModValue == 0 || flatfooted && !ModifiableValueArmorClass.AllowedForFlatFooted(displayModifier) || touch && !ModifiableValueArmorClass.AllowedForTouch(displayModifier) || ignoreDexterityBonus && displayModifier.ModDescriptor == ModifierDescriptor.DexterityBonus)
                {
                    continue;
                }

                ModifierDescriptor descriptor = displayModifier.ModDescriptor == ModifierDescriptor.None ? ModifierDescriptor.Other : displayModifier.ModDescriptor;

                var bonusSource = (IUIDataProvider)(displayModifier.Source ?? (object)displayModifier.ItemSource);

                StatModifiersBreakdown.AddBonus(displayModifier.ModValue, bonusSource, descriptor);
            }
        }
        public static void mod_AddStatModifiers([NotNull] ModifiableValue stat)
        {
            foreach (ModifiableValue.Modifier displayModifier in stat.GetDisplayModifiers())
            {
                if (displayModifier.ModValue == 0)
                {
                    continue;
                }

                ModifierDescriptor descriptor = displayModifier.ModDescriptor == ModifierDescriptor.None ? ModifierDescriptor.Other : displayModifier.ModDescriptor;

                var bonusSource = (IUIDataProvider)(displayModifier.Source ?? (object)displayModifier.ItemSource);

                StatModifiersBreakdown.AddBonus(displayModifier.ModValue, bonusSource, descriptor);
            }
        }
Esempio n. 10
0
        public float GetNextLevelOf(ModifierDescriptor modifier)
        {
            if (!knownProperties.ContainsKey(modifier.TargetProperty))
            {
                return(0f);
            }

            var knownProperty  = knownProperties[modifier.TargetProperty];
            var nextLevelValue = knownProperty.NextValue();

            if (IsGreatRoll())
            {
                nextLevelValue += knownProperty.Min;
            }
            return(nextLevelValue);
        }
Esempio n. 11
0
 private static bool IsNotPowerOrCooldown(ModifierDescriptor modifier)
 {
     return(modifier.TargetProperty != TargetProperty.AttackPower &&
            modifier.TargetProperty != TargetProperty.AttackCooldown);
 }
Esempio n. 12
0
        private static void ReworkBadCompany(EntitiesManager manager)
        {
            var badCompany = manager.SkillManager.Find("Bad Company");

            var descriptor = badCompany.Levels.First().Descriptors.First();

            descriptor.AppliesToTarget = false;

            var modifiers = descriptor.Modifiers;

            modifiers.Clear();

            var powerPerAllyBuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPowerBonusPerHeroInRoomMinusOne,
                Operation      = Operation.Addition,
                Value          = 20,
                Path           = Path.CurrentHero
            };

            var alliesPowerDebuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPower,
                Operation      = Operation.Subtraction,
                Value          = 15,
                Path           = Path.HeroesInRoom
            };

            var selfPowerBuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPower,
                Operation      = Operation.Addition,
                Value          = 15,
                Path           = Path.CurrentHero
            };

            var powerPerEnemyBuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPowerBonusPerMobInRoom,
                Operation      = Operation.Addition,
                Value          = 3,
                Path           = Path.CurrentHero
            };

            var maxPowerPerEnemyBuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPowerBonusFromMobsMax,
                Operation      = Operation.Addition,
                Value          = 60,
                Path           = Path.CurrentHero
            };

            var powerBuff = new ModifierDescriptor
            {
                TargetProperty = TargetProperty.AttackPower,
                Operation      = Operation.Percent,
                Value          = .15f,
                Path           = Path.CurrentHero,
            };

            modifiers.Add(powerPerAllyBuff);
            modifiers.Add(alliesPowerDebuff);
            modifiers.Add(selfPowerBuff);
            modifiers.Add(powerPerEnemyBuff);
            modifiers.Add(maxPowerPerEnemyBuff);
            modifiers.Add(powerBuff);

            badCompany.Description.English = "Draws power from all living sources, willing or not";
            badCompany.Description.French  = "Tire son pouvoir de toutes les sources vivantes, qu'il le veuille ou non";
            badCompany.Description.German  = "Zieht Kraft aus allen lebenden Quellen, ob gewollt oder nicht";
        }
Esempio n. 13
0
        static void createStigmata()
        {
            ModifierDescriptor[] bonus_descriptors = new ModifierDescriptor[] { ModifierDescriptor.Sacred, ModifierDescriptor.Profane };
            StatType[]           stats             = new StatType[] { StatType.AC, StatType.AdditionalAttackBonus, StatType.AdditionalDamage };
            string []            stats_description = new string[] { "Armor Class Bonus", "Attack Bonus", "Damage Bonus" };

            var icon_profane = library.Get <BlueprintAbility>("a6e59e74cba46a44093babf6aec250fc").Icon; //slay living
            var icon_sacred  = library.Get <BlueprintAbility>("f6f95242abdfac346befd6f4f6222140").Icon; //slay living

            stigmata = Helpers.CreateFeature("HolyVindicatorStigmata",
                                             "Stigmata",
                                             "A vindicator willingly gives his blood in service to his faith, and is marked by scarified wounds appropriate to his deity. At 2nd level, he may stop or start the flow of blood by force of will as a standard action; at 6th level it becomes a move action, and at 10th level it becomes a swift action. Activating stigmata causes holy or unholy damage equal to half the vindicator’s class level every round. While the stigmata are bleeding, the vindicator gains a sacred bonus (if he channels positive energy) or profane bonus (if he channels negative energy) equal to half his class level. Each time he activates his stigmata, the vindicator decides if the bonus applies to attack rolls, weapon damage rolls, Armor Class, saving throws or spell penetration checks; to change what the bonus applies to, the vindicator must deactivate and reactivate his stigmata. While his stigmata are burning, the vindicator ignores blood drain and bleed damage from any other source.",
                                             "",
                                             icon_sacred,
                                             FeatureGroup.None);

            stigmata_move = library.CopyAndAdd <BlueprintFeature>(stigmata.AssetGuid, "HolyVindicatorStigmataMove", "");
            stigmata_move.SetName("Stigmata: Move Action");
            stigmata_move.AddComponent(Helpers.Create <ActivatableAbilityActionTypeModierMechanics.ModifyActivatableAbilityGroupActionType>(m =>
                                                                                                                                            { m.group = ActivatableAbilityGroupExtension.Stigmata.ToActivatableAbilityGroup();
                                                                                                                                              m.action = CommandType.Move; }
                                                                                                                                            )
                                       );

            stigmata_swift = library.CopyAndAdd <BlueprintFeature>(stigmata.AssetGuid, "HolyVindicatorStigmataSwift", "");
            stigmata_swift.AddComponent(Common.createRemoveFeatureOnApply(stigmata_move));
            stigmata_swift.SetName("Stigmata: Swift Action");
            stigmata_swift.AddComponent(Helpers.Create <ActivatableAbilityActionTypeModierMechanics.ModifyActivatableAbilityGroupActionType>(m =>
            {
                m.group  = ActivatableAbilityGroupExtension.Stigmata.ToActivatableAbilityGroup();
                m.action = CommandType.Swift;
            }
                                                                                                                                             )
                                        );



            var bleed_immunity = Common.createBuffDescriptorImmunity(SpellDescriptor.Bleed);

            foreach (var bonus_descriptor in bonus_descriptors)
            {
                var icon                = bonus_descriptor == ModifierDescriptor.Sacred ? icon_sacred : icon_profane;
                var buffs               = new List <BlueprintBuff>();
                var dmg_type            = bonus_descriptor == ModifierDescriptor.Sacred ? DamageEnergyType.Holy : DamageEnergyType.Unholy;
                var add_context_actions = Helpers.CreateAddFactContextActions(Common.createContextActionRemoveBuffsByDescriptor(SpellDescriptor.Bleed),
                                                                              null,
                                                                              Helpers.CreateActionDealDamage(dmg_type,
                                                                                                             Helpers.CreateContextDiceValue(DiceType.Zero, bonus: Helpers.CreateContextValue(AbilityRankType.StatBonus))
                                                                                                             )
                                                                              );
                var context_rank_config = Helpers.CreateContextRankConfig(baseValueType: ContextRankBaseValueType.ClassLevel, classes: getHolyVindicatorArray(),
                                                                          type: AbilityRankType.StatBonus, progression: ContextRankProgression.Div2);

                for (int i = 0; i < stats.Length; i++)
                {
                    var buff = Helpers.CreateBuff(bonus_descriptor.ToString() + "Stigmata" + stats[i].ToString() + "Buff",
                                                  $"{bonus_descriptor.ToString()} Stigmata: {stats_description[i]}",
                                                  stigmata.Description,
                                                  "",
                                                  icon,
                                                  null,
                                                  add_context_actions,
                                                  bleed_immunity,
                                                  Helpers.CreateAddContextStatBonus(stats[i], bonus_descriptor, rankType: AbilityRankType.StatBonus),
                                                  context_rank_config
                                                  );
                    buffs.Add(buff);
                }

                var saves_buff = Helpers.CreateBuff(bonus_descriptor.ToString() + "Stigmata" + "SavesBuff",
                                                    $"{bonus_descriptor.ToString()} Stigmata: Saving Throws Bonus",
                                                    buffs[0].Description,
                                                    "",
                                                    icon,
                                                    null,
                                                    Helpers.CreateAddContextStatBonus(StatType.SaveFortitude, bonus_descriptor, rankType: AbilityRankType.StatBonus),
                                                    Helpers.CreateAddContextStatBonus(StatType.SaveReflex, bonus_descriptor, rankType: AbilityRankType.StatBonus),
                                                    Helpers.CreateAddContextStatBonus(StatType.SaveWill, bonus_descriptor, rankType: AbilityRankType.StatBonus),
                                                    context_rank_config
                                                    );
                buffs.Add(saves_buff);
                var spell_penetration_buff = Helpers.CreateBuff(bonus_descriptor.ToString() + "Stigmata" + "SpellPenetrationBuff",
                                                                $"{bonus_descriptor.ToString()} Stigmata: Caster Level Check Bonus",
                                                                buffs[0].Description,
                                                                "",
                                                                icon,
                                                                null,
                                                                Helpers.Create <NewMechanics.CasterLevelCheckBonus>(s => s.Value = Helpers.CreateContextValue(AbilityRankType.StatBonus)),
                                                                context_rank_config
                                                                );
                buffs.Add(spell_penetration_buff);

                stigmata_buffs.Add(bonus_descriptor, buffs);

                stigmata_abilities.Add(bonus_descriptor, new List <BlueprintActivatableAbility>());
                foreach (var b in buffs)
                {
                    var ability = Helpers.CreateActivatableAbility(b.name.Replace("Buff", "ActivatableAbility"),
                                                                   b.Name,
                                                                   b.Description,
                                                                   "",
                                                                   icon,
                                                                   b,
                                                                   AbilityActivationType.Immediately,
                                                                   CommandType.Standard,
                                                                   null
                                                                   );

                    ability.Group = ActivatableAbilityGroupExtension.Stigmata.ToActivatableAbilityGroup();
                    ability.DeactivateIfCombatEnded      = !test_mode;
                    ability.DeactivateIfOwnerDisabled    = true;
                    ability.DeactivateIfOwnerUnconscious = true;
                    stigmata_abilities[bonus_descriptor].Add(ability);
                }

                var add_stigmata = Helpers.CreateFeature($"HolyVindicator{bonus_descriptor.ToString()}StigmataFeature",
                                                         "",
                                                         "",
                                                         "",
                                                         null,
                                                         FeatureGroup.None,
                                                         Helpers.CreateAddFacts(stigmata_abilities[bonus_descriptor].ToArray())
                                                         );
                add_stigmata.HideInUI = true;

                stigmata.AddComponent(Helpers.Create <NewMechanics.AddFeatureIfHasFactsFromList>(a => { a.Feature = add_stigmata; a.CheckedFacts = new BlueprintUnitFact[0]; }));
            }

            ChannelEnergyEngine.registerStigmata(stigmata);
        }
Esempio n. 14
0
 private static bool IsNotMaxHealth(ModifierDescriptor modifier)
 {
     return(modifier.TargetProperty != TargetProperty.MaxHealth);
 }