Exemplo n.º 1
0
        static void createMindOverMatter()
        {
            mind_over_matter = library.CopyAndAdd <BlueprintFeature>("2fa48527ba627254ba9bf4556330a4d4", "MindOverMatterBurnFeature", "");
            var burn_resource = Helpers.CreateAbilityResource("OverwhelmingSoulBurnResource", "", "", "", null);

            burn_resource.SetIncreasedByLevel(0, 1, new BlueprintCharacterClass[] { archetype.GetParentClass() });
            burn_resource.SetIncreasedByStat(0, StatType.Charisma);

            var burn_per_round_resource = Helpers.CreateAbilityResource("OverwhelmingSoulBurnPerRoundResource", "", "", "", null);

            burn_per_round_resource.SetFixedResource(1);

            mind_over_matter.ReplaceComponent <AddAbilityResources>(a => a.Resource = burn_resource);
            mind_over_matter.ReplaceComponent <AddKineticistPart>(a =>
            {
                a.MainStat        = StatType.Charisma;
                a.MaxBurn         = burn_resource;
                a.MaxBurnPerRound = burn_per_round_resource;
            }
                                                                  );
            mind_over_matter.RemoveComponents <AddKineticistBurnValueChangedTrigger>();
            mind_over_matter.SetNameDescription("Mind Over Matter",
                                                "An overwhelming soul uses her Charisma modifier instead of her Constitution modifier to determine her damage with wild talents, the DCs of Constitutionbased wild talents, the duration of wild talents with a Constitution-based duration, her bonus on concentration checks for wild talents, and the other Constitutionbased effects of all her wild talents.");
            mind_over_matter.AddComponents(burn_per_round_resource.CreateAddAbilityResource(),
                                           burn_resource.CreateAddAbilityResource()
                                           );
        }
Exemplo n.º 2
0
        static internal void create()
        {
            lamashtu = library.CopyAndAdd <BlueprintFeature>("04bc2b62273ab744092d992ed72bff41", "LamashtuFeature", "");//rovagug

            lamashtu.SetNameDescriptionIcon("Lamashtu",
                                            "Lamashtu (pronounced lah-MAHSH-too) is the mother and patroness of many misshapen and malformed creatures that crawl, slither, or flap on, above, or below the surface of Golarion. Her unholy symbol is a three-eyed jackal head, which may be represented in many ways, and her sacred animal is the jackal.\n"
                                            + "Domains: Chaos, Evil, Madness, Strength, Trickery.\nFavored Weapon: Kukri.",
                                            LoadIcons.Image2Sprite.Create(@"FeatIcons/Lamashtu.png"));
            kukri_proficiency = library.CopyAndAdd <BlueprintFeature>("70ab8880eaf6c0640887ae586556a652", "KukriProficiency", "");
            kukri_proficiency.SetNameDescription("Weapon Proficiency (Kukri)",
                                                 "You become proficient with kukris and can use them as a weapon.");
            kukri_proficiency.ReplaceComponent <AddProficiencies>(a => a.WeaponProficiencies = new Kingmaker.Enums.WeaponCategory[] { Kingmaker.Enums.WeaponCategory.Kukri });

            lamashtu.ReplaceComponent <AddFeatureOnClassLevel>(a => a.Feature     = kukri_proficiency);
            lamashtu.ReplaceComponent <AddStartingEquipment>(a => a.CategoryItems = new Kingmaker.Enums.WeaponCategory[] { Kingmaker.Enums.WeaponCategory.Kukri });
            lamashtu.ReplaceComponent <AddFacts>(a => a.Facts = new Kingmaker.Blueprints.Facts.BlueprintUnitFact[]
            {
                library.Get <BlueprintFeature>("8c7d778bc39fec642befc1435b00f613"), //chaos
                library.Get <BlueprintFeature>("351235ac5fc2b7e47801f63d117b656c"), //evil
                library.Get <BlueprintFeature>("c346bcc77a6613040b3aa915b1ceddec"), //madness
                library.Get <BlueprintFeature>("eaa368e08628a8641b16cd41cbd2cb33"), //trickery
                library.Get <BlueprintFeature>("58d2867520de17247ac6988a31f9e397"), //strength
                library.Get <BlueprintFeature>("dab5255d809f77c4395afc2b713e9cd6"), //channel negative
            });
            //lamashtu.AddComponent(Helpers.Create<RaceMechanics.PrerequisiteRace>(p => p.race = library.Get<BlueprintRace>("9d168ca7100e9314385ce66852385451")));

            var deities = library.Get <BlueprintFeatureSelection>("59e7a76987fe3b547b9cce045f4db3e4");

            deities.AllFeatures = deities.AllFeatures.AddToArray(lamashtu);
        }
        static void createAcBonus()
        {
            var monk     = library.Get <BlueprintCharacterClass>("e8f21e5b58e0569468e420ebea456124");
            var ac_bonus = library.Get <BlueprintFeature>("e241bdfd6333b9843a7bfd674d607ac4");

            ac_bonus.Ranks++;
            foreach (var c in ac_bonus.GetComponents <ContextRankConfig>().ToArray())
            {
                if (c.IsBasedOnClassLevel)
                {
                    ClassToProgression.addClassToContextRankConfig(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, c, "ElementalAscetic", monk);
                }
                if (c.IsBasedOnCustomProperty) //for balance fixes (class level limiter on wisdom)
                {
                    var property = Helpers.GetField <BlueprintUnitProperty>(c, "m_CustomProperty");
                    var cfg      = property.GetComponent <NewMechanics.ContextValueWithLimitProperty>().max_value;
                    ClassToProgression.addClassToContextRankConfig(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, cfg, "ElementalAscetic", monk);
                }
            }

            unlock_ac_bonus = library.CopyAndAdd <BlueprintFeature>("2615c5f87b3d72b42ac0e73b56d895e0", "ElementalAsceticACBonusUnlockFeature", "");
            unlock_ac_bonus.ReplaceComponent <MonkNoArmorFeatureUnlock>(m => m.NewFact = ac_bonus);
            unlock_ac_bonus.SetDescription($"When unarmored and unencumbered, an elemental ascetic adds his Wisdom bonus (if any{(Main.settings.balance_fixes_monk_ac ? ", up to his elemental ascetic level" : "")}) to his AC and CMD. In addition, an elemental ascetic gains a +1 bonus to AC and CMD at 4th level. This bonus increases by 1 for every four elemental ascetic levels thereafter, up to a maximum of +5 at 20th level.\n"
                                           + "An elemental ascetic does not receive his element’s defensive wild talent and can never take the expanded defense utility wild talent.");
        }
Exemplo n.º 4
0
 static void createZenArcherProficiencies()
 {
     zen_archer_proficiencies = library.CopyAndAdd <BlueprintFeature>("c7d6f5244c617734a8a76b6785a752b4", "ZenArcherProficiencies", "");//monk proficiencies
     zen_archer_proficiencies.SetNameDescriptionIcon("Zen Archer Proficiencies",
                                                     "Zen archers are proficient with longbows, shortbows, composite longbows, and composite shortbows in addition to their normal weapon proficiencies.",
                                                     Helpers.GetIcon("3e9d1119d43d07c4c8ba9ebfd1671952"));
     zen_archer_proficiencies.ReplaceComponent <AddProficiencies>(a => a.WeaponProficiencies = a.WeaponProficiencies.AddToArray(WeaponCategory.Longbow, WeaponCategory.Shortbow));
 }
 static void createWeaponProficiency()
 {
     weapon_proficiency = library.CopyAndAdd <BlueprintFeature>("fa3d3b2211a51994785d85e753f612d3", "ArrowsongMinstrelProficiencies", "");
     weapon_proficiency.ReplaceComponent <AddProficiencies>(a => a.WeaponProficiencies = new WeaponCategory[] { WeaponCategory.Shortbow, WeaponCategory.Longbow });
     weapon_proficiency.SetNameDescriptionIcon("Arrowsong Minstrel Proficiencies",
                                               "An Arrowsong minstrel is proficient with longbows, but not the longsword and rapier.",
                                               library.Get <BlueprintAbility>("3e9d1119d43d07c4c8ba9ebfd1671952").Icon);//gravity bow
 }
Exemplo n.º 6
0
 static void createTinkering()
 {
     tinkering = library.CopyAndAdd <BlueprintFeature>("dbb6b3bffe6db3547b31c3711653838e", "SeekerSorcererTinkeringFeature", "");
     tinkering.SetNameDescription("Tinkering",
                                  "Seekers often look to ancient devices, old tomes, and strange magical items in order to learn more about their sorcerous bloodlines. As a result of this curiosity and thanks to an innate knack at deciphering the strange and weird, a seeker gains Disable Device as a class skill. In addition, at 1st level, a seeker adds half his oracle or sorcerer level on Perception checks made to locate traps and on all Disable Device skill checks (minimum +1). A seeker can use Disable Device to disarm magical traps. If the seeker also possesses levels in rogue or another class that provides the trapfinding ability, those levels stack with his sorcerer levels for determining his overall bonus on these skill checks."
                                  );
     tinkering.ReplaceComponent <ContextRankConfig>(c => Helpers.SetField(c, "m_Class", new BlueprintCharacterClass[] { archetype.GetParentClass() }));
     tinkering.AddComponent(Helpers.Create <AddClassSkill>(a => a.Skill = StatType.SkillThievery));
 }
Exemplo n.º 7
0
        static void createAuraOfSelfRighteousness()
        {
            var effect_buff = library.CopyAndAdd <BlueprintBuff>("44939bb018ccac24f8e055f3eddc16f2", "AuraOfSelfRighteousnessEffectBuff", "");

            effect_buff.SetName("Aura of Self-Righteousness");
            effect_buff.SetDescription("At 17th level, a vindictive bastard gains DR 5/lawful or good and immunity to compulsion spells and spell-like abilities. Each ally within 10 feet of her gains a +4 morale bonus on saving throws against compulsion effects. Aura of self-righteousness functions only while the vindictive bastard is conscious, not if she is unconscious or dead.");
            var area = library.CopyAndAdd <BlueprintAbilityAreaEffect>("0c523f9b68ded1a4ca152f3169066a0f", "AuraOfSelfRighteousnessArea", "");

            area.ReplaceComponent <AbilityAreaEffectBuff>(a => a.Buff = effect_buff);
            var buff = library.CopyAndAdd <BlueprintBuff>("bacdf633f8ffdfd4b92bc7f2de43a1c5", "AuraOfSelfRighteousnessBuff", "");

            buff.ReplaceComponent <AddAreaEffect>(a => a.AreaEffect = area);

            aura_of_self_righteousness = library.CopyAndAdd <BlueprintFeature>("6bd4a71232014254e80726f3a3756962", "AuraOfSelfRighteousnessFeature", "");
            aura_of_self_righteousness.ReplaceComponent <AuraFeatureComponent>(a => a.Buff             = buff);
            aura_of_self_righteousness.ReplaceComponent <AddDamageResistancePhysical>(a => a.Alignment = DamageAlignment.Good | DamageAlignment.Lawful);
            aura_of_self_righteousness.SetName(effect_buff.Name);
            aura_of_self_righteousness.SetDescription(effect_buff.Description);
        }
Exemplo n.º 8
0
        static void createDivineBody()
        {
            var ability = library.CopyAndAdd <BlueprintAbility>("7ff088ab58c69854b82ea95c2b0e35b4", "DivineBodyIroranPaladinAbility", "");

            ability.SetNameDescriptionIcon("Divine Body",
                                           "Upon reaching 5th level, an Iroran paladin must form a bond with a weapon, except he can only choose to enhance his unarmed strike. This ability otherwise functions as and replaces divine bond.",
                                           Helpers.GetIcon("1bc83efec9f8c4b42a46162d72cbf494") //burst of glory
                                           );
            ability.AddComponent(Common.createAbilityCasterMainWeaponCheck(WeaponCategory.UnarmedStrike));
            divine_body = library.CopyAndAdd <BlueprintFeature>("1c7cdc1605554954f838d85bbdd22d90", "DivineBodyIroranPaladinFeature", "");
            divine_body.SetNameDescriptionIcon(ability);
            divine_body.ReplaceComponent <AddFacts>(a => a.Facts = a.Facts.Skip(1).ToArray().AddToArray(ability));
        }
Exemplo n.º 9
0
        static void createConfidentDefense()
        {
            var monk = library.Get <BlueprintCharacterClass>("e8f21e5b58e0569468e420ebea456124");
            var paladin_proficiencies   = library.Get <BlueprintFeature>("b10ff88c03308b649b50c31611c2fefb");
            var simple_proficiency      = library.Get <BlueprintFeature>("e70ecf1ed95ca2f40b754f1adb22bbdd");
            var martial_proficiency     = library.Get <BlueprintFeature>("203992ef5b35c864390b4e4a1e200629");
            var light_armor_proficiency = library.Get <BlueprintFeature>("6d3728d4e9c9898458fe5e9532951132");

            confident_defense = library.CopyAndAdd(paladin_proficiencies, "IroranPaladinConfidentDefenseFeature", "");
            confident_defense.ReplaceComponent <AddFacts>(a => a.Facts = new BlueprintUnitFact[] { light_armor_proficiency, martial_proficiency, simple_proficiency });


            var scaled_fist_ac = library.Get <BlueprintFeature>("3929bfd1beeeed243970c9fc0cf333f8");

            scaled_fist_ac.SetDescription("");
            scaled_fist_ac.Ranks++;
            foreach (var c in scaled_fist_ac.GetComponents <ContextRankConfig>().ToArray())
            {
                if (c.IsBasedOnClassLevel)
                {
                    //fix it to not to work with normal monk levels
                    var new_c = Helpers.CreateContextRankConfig(ContextRankBaseValueType.SummClassLevelWithArchetype,
                                                                classes: new BlueprintCharacterClass[] { monk },
                                                                type: c.Type,
                                                                archetype: library.Get <BlueprintArchetype>("5868fc82eb11a4244926363983897279"),
                                                                progression: ContextRankProgression.DivStep,
                                                                stepLevel: 4);
                    scaled_fist_ac.ReplaceComponent(c, new_c);
                }
                if (c.IsBasedOnCustomProperty) //for balance fixes (class level limiter on charisma)
                {
                    var property = Helpers.GetField <BlueprintUnitProperty>(c, "m_CustomProperty");
                    var cfg      = property.GetComponent <NewMechanics.ContextValueWithLimitProperty>().max_value;
                    ClassToProgression.addClassToContextRankConfig(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, cfg, "IroranPaladin", monk);
                }
            }

            confident_defense.AddComponents(Helpers.Create <MonkNoArmorAndMonkWeaponFeatureUnlock>(c => c.NewFact = scaled_fist_ac));
            confident_defense.AddComponents(Helpers.Create <WeaponTrainingMechanics.AddFeatureOnArmor>(a =>
            {
                a.feature         = scaled_fist_ac;
                a.required_armor  = new ArmorProficiencyGroup[] { ArmorProficiencyGroup.Light, ArmorProficiencyGroup.None };
                a.forbidden_armor = new ArmorProficiencyGroup[] { ArmorProficiencyGroup.Buckler, ArmorProficiencyGroup.LightShield, ArmorProficiencyGroup.HeavyShield, ArmorProficiencyGroup.TowerShield };
            }));
            confident_defense.SetNameDescription("Confident Defense",
                                                 $"At 1st level, when wearing light or no armor and not using a shield, an Iroran paladin adds 1 point of his Charisma bonus (if any){(Main.settings.balance_fixes_monk_ac ? " per class level" : "")} as a dodge bonus to his Armor Class. If he is caught flat-footed or otherwise denied his Dexterity bonus, he also loses this bonus. This ability replaces his proficiency with medium armor, heavy armor, and shields.");
        }
Exemplo n.º 10
0
 static void createNinjaProficiencies()
 {
     ninja_proficiencies = library.CopyAndAdd <BlueprintFeature>("33e2a7e4ad9daa54eaf808e1483bb43c", "NinjaProficiencies", "");
     ninja_proficiencies.ReplaceComponent <AddProficiencies>(a => a.WeaponProficiencies = new WeaponCategory[]
     {
         WeaponCategory.Kama,
         WeaponCategory.Nunchaku,
         WeaponCategory.Sai,
         WeaponCategory.Shortbow,
         WeaponCategory.Shortsword,
         WeaponCategory.Shuriken,
         WeaponCategory.Scimitar
     });
     ninja_proficiencies.AddComponent(Helpers.CreateAddFact(library.Get <BlueprintFeature>("9c37279588fd9e34e9c4cb234857492c")));//duelling sword proficiency
     ninja_proficiencies.SetNameDescription("Ninja Proficiencies",
                                            "Ninja are proficient with all simple weapons, plus the kama, dueling sword, nunchaku, sai, shortbow, short sword, shuriken, and scimitar. Ninjas are proficient with light armor but not with shields.");
 }
Exemplo n.º 11
0
        static void createSolarInvocation()
        {
            solar_invocation_resource = Helpers.CreateAbilityResource("SolarInvocationResource", "", "", "", null);
            solar_invocation_resource.SetIncreasedByLevel(0, 2, getDawnflowerAcnchoriteArray());
            solar_invocation_resource.SetIncreasedByStat(0, StatType.Charisma);

            bask_in_radiance = Helpers.CreateFeature("BaskInRadianceFeature",
                                                     "Bask in Radiance",
                                                     "At 3rd level, when a Dawnflower anchorite uses his solar invocation ability, he can designate any number of allies within 30 feet to gain the bonuses granted by solar invocation for as long as he maintains the ability.",
                                                     "",
                                                     Helpers.GetIcon("0d657aa811b310e4bbd8586e60156a2d"), //cure critical wounds
                                                     FeatureGroup.None
                                                     );

            var icon = LoadIcons.Image2Sprite.Create(@"AbilityIcons/FontOfSpiritMagic.png");

            var effect_buff = Helpers.CreateBuff("SolarInvocationEffectBuff",
                                                 "Solar Invocation",
                                                 "A Dawnflower anchorite can harness the sun’s life-giving warmth to protect the innocent and smite the wicked. At 1st level, he can invoke the sun as a standard action, granting him a +1 competence bonus on attack rolls and damage rolls against evil creatures and adding 1 to the DC of his spells and spell-like abilities against evil creatures. The bonus on attack rolls and damage rolls increases to +2 at 5th level and +3 at 9th level. If a Dawnflower anchorite has an animal companion, the companion also gains the competence bonus on attack and damage rolls while this ability is active.\n"
                                                 + "A Dawnflower anchorite can invoke the sun for a number of rounds per day equal to twice his Dawnflower anchorite class level + his Charisma modifier. Maintaining this ability on subsequent rounds is a free action. These bonuses apply only when the Dawnflower anchorite is standing in an outdoor area.\n",
                                                 "",
                                                 icon,
                                                 null,
                                                 Helpers.Create <NewMechanics.AttackBonusAgainstAlignment>(a => { a.value = Helpers.CreateContextValue(AbilityRankType.Default); a.descriptor = ModifierDescriptor.Competence; a.alignment = AlignmentComponent.Evil; }),
                                                 Helpers.Create <NewMechanics.SpellsDCBonusAgainstAlignment>(a => { a.value = Helpers.CreateContextValue(AbilityRankType.StatBonus); a.descriptor = ModifierDescriptor.UntypedStackable; a.alignment = AlignmentComponent.Evil; }),
                                                 Helpers.Create <NewMechanics.DamageBonusAgainstAlignment>(a => { a.value = Helpers.CreateContextValue(AbilityRankType.Default); a.descriptor = ModifierDescriptor.Competence; a.alignment = AlignmentComponent.Evil; })
                                                 );

            var defense_effect_buff = Helpers.CreateBuff("SolarDefenseEffectBuff",
                                                         "Solar Defense",
                                                         "While using solar invocation, the Dawnflower anchorite adds his competence bonus on attack rolls to his Armor Class as a dodge bonus and to Reflex saving throws as a sacred bonus against evil creatures. The Dawnflower anchorite can select this credence twice—the second time he does so, the bonus to Armor Class and on Ref lex saves also applies to any companions who gain bonuses from the Dawnflower anchorite’s solar invocation.",
                                                         "",
                                                         Helpers.GetIcon("62888999171921e4dafb46de83f4d67d"), //shield of dawn
                                                         null,
                                                         Helpers.Create <NewMechanics.ArmorClassBonusAgainstAlignment>(a => { a.value = Helpers.CreateContextValue(AbilityRankType.Default); a.descriptor = ModifierDescriptor.Dodge; a.alignment = AlignmentComponent.Evil; }),
                                                         Helpers.Create <NewMechanics.ContextSavingThrowBonusAgainstAlignment>(a => { a.value = Helpers.CreateContextValue(AbilityRankType.Default); a.descriptor = ModifierDescriptor.Sacred; a.alignment = AlignmentComponent.Evil; a.save_type = SavingThrowType.Reflex; })
                                                         );

            solar_defense = Helpers.CreateFeature("SolarDefenseFeature",
                                                  "Solar Defense I",
                                                  defense_effect_buff.Description,
                                                  "",
                                                  defense_effect_buff.Icon,
                                                  FeatureGroup.None
                                                  );

            solar_defense2 = Helpers.CreateFeature("SolarDefense2Feature",
                                                   "Solar Defense II",
                                                   defense_effect_buff.Description,
                                                   "",
                                                   defense_effect_buff.Icon,
                                                   FeatureGroup.None,
                                                   Helpers.PrerequisiteFeature(solar_defense)
                                                   );

            var flaming            = library.Get <BlueprintWeaponEnchantment>("30f90becaaac51f41bf56641966c4121");
            var solar_weapons_buff = Helpers.CreateBuff("SolarWeaponsEffectBuff",
                                                        "Solar Weapons",
                                                        "While using solar invocation, the Dawnflower anchorite grants the flaming weapon special ability to one weapon of each creature affected by the Dawnflower anchorite’s solar invocation.",
                                                        "",
                                                        LoadIcons.Image2Sprite.Create(@"AbilityIcons/FlameBlade.png"),
                                                        null,
                                                        Common.createBuffContextEnchantPrimaryHandWeapon(1, false, true, new BlueprintWeaponEnchantment[] { flaming })
                                                        );

            solar_weapons = Helpers.CreateFeature("SolarWeaponsFeature",
                                                  solar_weapons_buff.Name,
                                                  solar_weapons_buff.Description,
                                                  "",
                                                  solar_weapons_buff.Icon,
                                                  FeatureGroup.None
                                                  );

            var apply_solar_defense = Common.createContextActionApplyBuff(defense_effect_buff, Helpers.CreateContextDuration(), false, true, true, false);
            var apply_solar_weapons = Common.createContextActionApplyBuff(solar_weapons_buff, Helpers.CreateContextDuration(), false, true, true, false);

            Common.addContextActionApplyBuffOnConditionToActivatedAbilityBuffNoRemove(effect_buff,
                                                                                      Helpers.CreateConditional(Common.createContextConditionCasterHasFact(solar_weapons),
                                                                                                                apply_solar_weapons
                                                                                                                )
                                                                                      );
            Common.addContextActionApplyBuffOnConditionToActivatedAbilityBuffNoRemove(effect_buff,
                                                                                      Helpers.CreateConditional(Common.createContextConditionCasterHasFact(solar_defense),
                                                                                                                Helpers.CreateConditional(Helpers.CreateConditionsCheckerOr(Common.createContextConditionIsCaster(),
                                                                                                                                                                            Common.createContextConditionCasterHasFact(solar_defense2)
                                                                                                                                                                            ),
                                                                                                                                          apply_solar_defense)
                                                                                                                )
                                                                                      );
            var toggle = Common.createToggleAreaEffect(effect_buff, 30.Feet(),
                                                       Helpers.CreateConditionsCheckerOr(Common.createContextConditionIsCaster(),
                                                                                         Helpers.Create <CompanionMechanics.ContextConditionIsPet>(),
                                                                                         Helpers.Create <NewMechanics.ContextConditionIsAllyAndCasterHasFact>(c => c.fact = bask_in_radiance)
                                                                                         ),
                                                       AbilityActivationType.WithUnitCommand,
                                                       UnitCommand.CommandType.Standard,
                                                       Common.createPrefabLink("dfc59904273f7ee49ab00e5278d86e16"),
                                                       Common.createPrefabLink("9353083f430e5a44a8e9d6e26faec248")
                                                       );

            toggle.AddComponents(solar_invocation_resource.CreateActivatableResourceLogic(ResourceSpendType.NewRound));
            toggle.DeactivateIfCombatEnded   = true;
            toggle.DeactivateIfOwnerDisabled = true;
            toggle.Buff.SetBuffFlags(BuffFlags.HiddenInUi);
            toggle.Group     = ActivatableAbilityGroupExtension.SolarInvocation.ToActivatableAbilityGroup();
            solar_invocation = Common.ActivatableAbilityToFeature(toggle, false);
            solar_invocation.AddComponents(solar_invocation_resource.CreateAddAbilityResource());

            solar_invocation2 = SaveGameFix.createDummyFeature("SolarInvocation2Feature", "");
            solar_invocation3 = SaveGameFix.createDummyFeature("SolarInvocation3Feature", "");
            var solar_invocation4 = SaveGameFix.createDummyFeature("SolarInvocation4Feature", "");

            solar_invocation2.HideInCharacterSheetAndLevelUp = true;
            solar_invocation2.HideInUI = true;
            solar_invocation3.HideInCharacterSheetAndLevelUp = true;
            solar_invocation3.HideInUI = true;
            solar_invocation4.HideInCharacterSheetAndLevelUp = true;
            solar_invocation4.HideInUI = true;
            solar_invocation.AddComponents(Helpers.CreateAddFeatureOnClassLevel(solar_invocation2, 5, getDawnflowerAcnchoriteArray()),
                                           Helpers.CreateAddFeatureOnClassLevel(solar_invocation3, 9, getDawnflowerAcnchoriteArray()));

            //add scaling to buffs and dawnflower invocation

            var dawnflower_invocation_buff = Helpers.CreateBuff("DawnflowerInvocationBuff",
                                                                "Dawnflower Invocation",
                                                                "At 10th level, a Dawnflower anchorite is able to, once per day, use his solar invocation ability for 1 minute. The Dawnflower anchorite can also use this ability indoors or underground. While using Dawnflower invocation, all bonuses gained from solar invocation increase by 1. Using this ability doesn’t cost rounds per day of solar invocation.",
                                                                "",
                                                                Helpers.GetIcon("e67efd8c84f69d24ab472c9f546fff7e"),
                                                                null,
                                                                Helpers.CreateAddFactContextActions(activated: Common.createContextActionApplyBuff(toggle.Buff, Helpers.CreateContextDuration(), false, true, true, false)),
                                                                Helpers.CreateAddFact(solar_invocation4)
                                                                );

            var dawnflower_invocation_resource = Helpers.CreateAbilityResource("DawnflowerInvocationResource", "", "", "", null);

            dawnflower_invocation_resource.SetFixedResource(1);
            var dawnflower_invocation_ability = Helpers.CreateAbility("DawnflowerInvocationAbility",
                                                                      dawnflower_invocation_buff.Name,
                                                                      dawnflower_invocation_buff.Description,
                                                                      "",
                                                                      dawnflower_invocation_buff.Icon,
                                                                      AbilityType.Supernatural,
                                                                      CommandType.Swift,
                                                                      AbilityRange.Personal,
                                                                      Helpers.oneMinuteDuration,
                                                                      "",
                                                                      Helpers.CreateRunActions(Common.createContextActionApplyBuff(dawnflower_invocation_buff, Helpers.CreateContextDuration(1, DurationRate.Minutes), dispellable: false)),
                                                                      Common.createAbilitySpawnFx("52d413df527f9fa4a8cf5391fd593edd", anchor: AbilitySpawnFxAnchor.SelectedTarget, position_anchor: AbilitySpawnFxAnchor.None, orientation_anchor: AbilitySpawnFxAnchor.None),
                                                                      dawnflower_invocation_resource.CreateResourceLogic()
                                                                      );

            dawnflower_invocation_ability.setMiscAbilityParametersSelfOnly();
            dawnflower_invocation = Common.AbilityToFeature(dawnflower_invocation_ability, false);
            dawnflower_invocation.AddComponent(dawnflower_invocation_resource.CreateAddAbilityResource());

            toggle.AddComponent(Common.createActivatableAbilityRestrictionHasFact(dawnflower_invocation_buff, not: true));
            var config = Helpers.CreateContextRankConfig(ContextRankBaseValueType.FeatureList,
                                                         featureList: new BlueprintFeature[] { solar_invocation, solar_invocation2, solar_invocation3, solar_invocation4 }
                                                         );
            var config2 = Helpers.CreateContextRankConfig(ContextRankBaseValueType.FeatureList, type: AbilityRankType.StatBonus,
                                                          featureList: new BlueprintFeature[] { solar_invocation, solar_invocation4 }
                                                          );

            effect_buff.AddComponents(config, config2);
            defense_effect_buff.AddComponent(config);

            solar_invocation_move_action = Helpers.CreateFeature("SolarInvocationMoveActionFeature",
                                                                 "Solar Invocation: Move Action",
                                                                 "At 5th level, a Dawnflower anchorite can invoke the sun as a move action instead of a standard action. At 10th level, he can invoke the sun as a swift action.",
                                                                 "",
                                                                 Helpers.GetIcon("03a9630394d10164a9410882d31572f0"), //aid
                                                                 FeatureGroup.None,
                                                                 Helpers.Create <ActivatableAbilityActionTypeModierMechanics.ModifyActivatableAbilityGroupActionType>(m =>
            {
                m.group  = ActivatableAbilityGroupExtension.SolarInvocation.ToActivatableAbilityGroup();
                m.action = CommandType.Move;
            }
                                                                                                                                                                      )
                                                                 );
            solar_invocation_swift_action = library.CopyAndAdd(solar_invocation_move_action, "SolarInvocationSwiftActionFeature", "");
            solar_invocation_swift_action.SetName("Solar Invocation: Swift Action");
            solar_invocation_swift_action.ReplaceComponent <ActivatableAbilityActionTypeModierMechanics.ModifyActivatableAbilityGroupActionType>(m => m.action = CommandType.Swift);

            divine_light = Helpers.CreateFeature("DivineLightFeature",
                                                 "Divine Light",
                                                 "The Dawnflower anchorite can use solar invocation indoors or underground. He can use solar invocation 2 additional rounds per day.",
                                                 "",
                                                 Helpers.GetIcon("be2062d6d85f4634ea4f26e9e858c3b8"), //cleanse
                                                 FeatureGroup.None,
                                                 Helpers.Create <IncreaseResourceAmount>(i => { i.Resource = solar_invocation_resource; i.Value = 2; })
                                                 );

            toggle.AddComponent(Helpers.Create <NewMechanics.OutdoorsUnlessHasFact>(o => o.fact = divine_light));
        }
Exemplo n.º 12
0
        static void createCorpseCompanion()
        {
            var undead_class = library.Get <BlueprintCharacterClass>("19a2d9e58d916d04db4cd7ad2c7a3ee2");

            corpse_companion_archetype = Helpers.Create <BlueprintArchetype>(a =>
            {
                a.name                 = "CorpseCompanionArchetype";
                a.LocalizedName        = Helpers.CreateString($"{a.name}.Name", "Corpse Companion");
                a.LocalizedDescription = Helpers.CreateString($"{a.name}.Description", undead_class.Description);
            });
            Helpers.SetField(corpse_companion_archetype, "m_ParentClass", undead_class);
            library.AddAsset(corpse_companion_archetype, "");
            corpse_companion_archetype.RemoveFeatures = new LevelEntry[0];
            var companion_proficiency = library.CopyAndAdd <BlueprintFeature>("a23591cc77086494ba20880f87e73970", "CorpseCompanionProficiency", "");

            companion_proficiency.SetNameDescription("Proficiencies", "Your corpse companion is proficient with all simple and martial weapons and with all armor (heavy, light, and medium) and shields (including tower shields).");
            var str_dex_bonus = library.CopyAndAdd <BlueprintFeature>("0c80276018694f24fbaf59ec7b841f2b", "CorpseCompanionStrDexIncreaseFeature", "");

            str_dex_bonus.SetNameDescription("Physical Prowess", "Corpse companion receives +1 bonus to their Strength and Dexterity.");

            var size_increase1 = Helpers.CreateFeature("CorpseCompanionLargeFeature",
                                                       "Size Increase: Large",
                                                       "Corpse companion growth in size and receives +4 to its strength, -2 to dexterity and +10 feet bonus to speed.",
                                                       "",
                                                       Helpers.GetIcon("c60969e7f264e6d4b84a1499fdcf9039"),
                                                       FeatureGroup.None,
                                                       Helpers.Create <SizeMechanics.PermanentSizeOverride>(a => a.size = Size.Large),
                                                       Helpers.CreateAddStatBonus(StatType.Strength, 4, ModifierDescriptor.Racial),
                                                       Helpers.CreateAddStatBonus(StatType.Dexterity, -2, ModifierDescriptor.Racial),
                                                       Helpers.CreateAddStatBonus(StatType.Speed, 10, ModifierDescriptor.Racial)
                                                       );

            var size_increase2 = Helpers.CreateFeature("CorpseCompanionHugeFeature",
                                                       "Size Increase: Huge",
                                                       "Corpse companion growth in size and receives +4 to its strength, -2 to dexterity, +1 bonus to natural armor and +10 feet bonus to speed..",
                                                       "",
                                                       Helpers.GetIcon("c60969e7f264e6d4b84a1499fdcf9039"),
                                                       FeatureGroup.None,
                                                       Helpers.Create <SizeMechanics.PermanentSizeOverride>(a => a.size = Size.Huge),
                                                       Helpers.CreateAddStatBonus(StatType.Strength, 4, ModifierDescriptor.Racial),
                                                       Helpers.CreateAddStatBonus(StatType.Dexterity, -2, ModifierDescriptor.Racial),
                                                       Helpers.CreateAddStatBonus(StatType.AC, 1, ModifierDescriptor.NaturalArmor),
                                                       Helpers.CreateAddStatBonus(StatType.Speed, 10, ModifierDescriptor.Racial)
                                                       );

            corpse_companion_archetype.AddFeatures = new LevelEntry[] { Helpers.LevelEntry(1, companion_proficiency),
                                                                        Helpers.LevelEntry(2, str_dex_bonus),
                                                                        Helpers.LevelEntry(4, str_dex_bonus),
                                                                        Helpers.LevelEntry(6, str_dex_bonus),
                                                                        Helpers.LevelEntry(7, size_increase1),
                                                                        Helpers.LevelEntry(12, str_dex_bonus),
                                                                        Helpers.LevelEntry(8, str_dex_bonus),
                                                                        Helpers.LevelEntry(12, str_dex_bonus),
                                                                        Helpers.LevelEntry(14, str_dex_bonus),
                                                                        Helpers.LevelEntry(15, size_increase2),
                                                                        Helpers.LevelEntry(16, str_dex_bonus),
                                                                        Helpers.LevelEntry(18, str_dex_bonus),
                                                                        Helpers.LevelEntry(20, str_dex_bonus) };
            undead_class.Archetypes = undead_class.Archetypes.AddToArray(corpse_companion_archetype);

            var skeleton = library.CopyAndAdd <BlueprintUnit>("6c94133d39dea8544a591836c78eaaf3", "CorpseCompanionSkeletonUnit", "");

            skeleton.LocalizedName        = skeleton.LocalizedName.CreateCopy();
            skeleton.LocalizedName.String = Helpers.CreateString(skeleton.name + ".Name", "Corpse Companion");
            skeleton.Body                 = skeleton.Body.CloneObject();
            skeleton.Body.PrimaryHand     = null;
            skeleton.Body.Armor           = null;
            skeleton.Body.EmptyHandWeapon = library.Get <BlueprintItemWeapon>("118fdd03e569a66459ab01a20af6811a"); //claw 1d4
            skeleton.Faction              = library.Get <BlueprintFaction>("d8de50cc80eb4dc409a983991e0b77ad");    //neutrals
            skeleton.RemoveComponents <Experience>();
            skeleton.RemoveComponents <AddTags>();
            skeleton.AddComponent(Helpers.Create <AllowDyingCondition>());
            skeleton.AddComponent(Helpers.Create <AddResurrectOnRest>());
            skeleton.AddComponent(Helpers.Create <Eidolon.CorpseCompanionComponent>());
            skeleton.ReplaceComponent <AddClassLevels>(a =>
            {
                a.DoNotApplyAutomatically = true;
                a.Archetypes = new BlueprintArchetype[] { corpse_companion_archetype };
                a.Levels     = 0;
                a.Skills     = new StatType[0];
            }
                                                       );
            Helpers.SetField(skeleton, "m_Portrait", Helpers.createPortrait("CorpseCompanionProtrait", "CorpseCompanion", ""));
            corpse_companion = Helpers.CreateFeature("CorpseCompanionFeature",
                                                     "Corpse Companion",
                                                     "With a ritual requiring 8 hours, an undead lord can animate a single skeleton whose Hit Dice do not exceed her cleric level. This corpse companion automatically follows her commands and does not need to be controlled by her. She cannot have more than one corpse companion at a time. It does not count against the number of Hit Dice of undead controlled by other methods.",
                                                     "",
                                                     Helpers.GetIcon("a1a8bf61cadaa4143b2d4966f2d1142e"),    //undead bloodline
                                                     FeatureGroup.AnimalCompanion,
                                                     library.Get <BlueprintFeature>("126712ef923ab204983d6f107629c895").ComponentsArray
                                                     );
            corpse_companion.IsClassFeature   = true;
            corpse_companion.ReapplyOnLevelUp = true;


            corpse_companion.ReplaceComponent <AddPet>(a => { a.Pet = skeleton; a.UpgradeLevel = 100; });
            corpse_companion.AddComponent(Helpers.Create <CompanionMechanics.CustomLevelProgression>());

            var rank_profgression = library.CopyAndAdd <BlueprintProgression>("3853d5405ebfc0f4a86930bb7082b43b", "CorpseCOmpanionClericProgression", "");

            rank_profgression.Classes  = new BlueprintCharacterClass[] { archetype.GetParentClass() };
            corpse_companion_selection = Helpers.CreateFeatureSelection("CorpseCompanionFeatureSelection",
                                                                        corpse_companion.Name,
                                                                        corpse_companion.Description,
                                                                        "",
                                                                        corpse_companion.Icon,
                                                                        FeatureGroup.None,
                                                                        Helpers.Create <AddFeatureOnApply>(a => a.Feature = library.Get <BlueprintFeature>("1670990255e4fe948a863bafd5dbda5d")),
                                                                        Helpers.Create <AddFeatureOnApply>(a => a.Feature = rank_profgression)
                                                                        );
            corpse_companion_selection.Group       = FeatureGroup.AnimalCompanion;
            corpse_companion_selection.AllFeatures = corpse_companion_selection.AllFeatures.AddToArray(corpse_companion);
        }
Exemplo n.º 13
0
        static void createPerformance()
        {
            var cleric   = library.Get <BlueprintCharacterClass>("67819271767a9dd4fbfd4ae700befea0");
            var resource = library.Get <BlueprintAbilityResource>("e190ba276831b5c4fa28737e5e49e6a6");

            ClassToProgression.addClassToResource(cleric, new BlueprintArchetype[] { archetype }, resource, library.Get <BlueprintCharacterClass>("772c83a25e2268e448e841dcd548235f"));

            var archatype_list_feature = Helpers.CreateFeature("BardicPerformanceArchetypeExtensionFeature",
                                                               "",
                                                               "",
                                                               "",
                                                               null,
                                                               FeatureGroup.None);

            archatype_list_feature.AddComponent(Helpers.Create <ContextRankConfigArchetypeList>(c => c.archetypes = new BlueprintArchetype[] { archetype }));
            archatype_list_feature.HideInCharacterSheetAndLevelUp = true;

            var inspire_courage_ability = library.CopyAndAdd <BlueprintActivatableAbility>("70274c5aa9124424c984217b62dabee8", "EvangelistInspireCourageToggleAbility", "");

            inspire_courage_ability.SetDescription("A 1st level evangelist can use his performance to inspire courage in his allies (including himself), bolstering them against fear and improving their combat abilities. To be affected, an ally must be able to perceive the evangelist's performance. An affected ally receives a +1 morale bonus on saving throws against charm and fear effects and a +1 competence bonus on attack and weapon damage rolls. At 5th level, and every six evangelist levels thereafter, this bonus increases by +1, to a maximum of +4 at 17th level.");
            var inspire_courage_buff = library.Get <BlueprintBuff>("6d6d9e06b76f5204a8b7856c78607d5d");

            ClassToProgression.addClassToBuff(cleric, new BlueprintArchetype[] { archetype }, inspire_courage_ability.Buff, library.Get <BlueprintCharacterClass>("772c83a25e2268e448e841dcd548235f"));

            var inspire_competence_ability = library.CopyAndAdd <BlueprintActivatableAbility>("430ab3bb57f2cfc46b7b3a68afd4f74e", "EvangelistInspireCompetenceToggleAbility", "");

            inspire_competence_ability.SetDescription("An evangelist of 3rd level or higher can use his performance to help allies succeed at a task. They must be within 30 feet and able to see and hear the evangelist. They get a +2 competence bonus on all skill checks as long as they continue to hear the evangelist's performance. This bonus increases by +1 for every four levels the evangelist has attained beyond 3rd (+3 at 7th, +4 at 11th, +5 at 15th, and +6 at 19th).");
            ClassToProgression.addClassToBuff(cleric, new BlueprintArchetype[] { archetype }, inspire_competence_ability.Buff, library.Get <BlueprintCharacterClass>("772c83a25e2268e448e841dcd548235f"));


            var inspire_greatness_ability = library.CopyAndAdd <BlueprintActivatableAbility>("be36959e44ac33641ba9e0204f3d227b", "EvangelistInspireGreatnessToggleAbility", "");

            inspire_greatness_ability.SetDescription("An evangelist of 9th level or higher can use his performance to inspire greatness in all allies within 30 feet, granting extra fighting capability. A creature inspired with greatness gains 2 bonus Hit Dice (d10s), the commensurate number of temporary hit points (apply the target's Constitution modifier, if any, to these bonus Hit Dice), a +2 competence bonus on attack rolls, and a +1 competence bonus on Fortitude saves.");

            var inspire_heroics_ability = library.CopyAndAdd <BlueprintActivatableAbility>("a4ce06371f09f504fa86fcf6d0e021e4", "EvangelistInspireHeroicsToggleAbility", "");

            inspire_heroics_ability.SetDescription("An evangelist of 15th level or higher can inspire tremendous heroism in all allies within 30 feet. Inspired creatures gain a +4 morale bonus on saving throws and a +4 dodge bonus to AC. The effect lasts for as long as the targets are able to witness the performance.");

            var fascinate_ability = library.CopyAndAdd <BlueprintActivatableAbility>("993908ad3fb81f34ba0ed168b7c61f58", "EvangelistFascinateToggleAbility", "");

            fascinate_ability.SetDescription("At 6th level, an evangelist can use his performance to cause one or more creatures to become fascinated with him. Each creature to be fascinated must be within 30 feet.\nEach creature within range receives a Will save (DC 10 + 1/2 the evangelist's level + the evangelist's Cha modifier) to negate the effect. If a creature's saving throw succeeds, the evangelist cannot attempt to fascinate that creature again for 24 hours. If its saving throw fails, the creature stands quietly and observes the performance for as long as the bard continues to maintain it. Any damage to the target automatically breaks the effect.");

            var fasciante_area = library.CopyAndAdd <BlueprintAbilityAreaEffect>("a4fc1c0798359974e99e1d790935501d", "EvangelistFascianteArea", "");

            fasciante_area.ReplaceComponent <ContextCalculateAbilityParamsBasedOnClass>(c => c.CharacterClass = cleric);
            var fascinate_buff = library.CopyAndAdd <BlueprintBuff>("555930f121b364a4e82670b433028728", "EvangelistFascianteBuff", "");

            fascinate_buff.SetDescription(fascinate_ability.Description);
            fascinate_buff.ReplaceComponent <AddAreaEffect>(a => a.AreaEffect = fasciante_area);
            fascinate_ability.Buff = fascinate_buff;


            inspire_courage    = Common.ActivatableAbilityToFeature(inspire_courage_ability, false);
            inspire_competence = Common.ActivatableAbilityToFeature(inspire_competence_ability, false);
            inspire_heroics    = Common.ActivatableAbilityToFeature(inspire_heroics_ability, false);
            inspire_greatness  = Common.ActivatableAbilityToFeature(inspire_greatness_ability, false);
            fascinate          = Common.ActivatableAbilityToFeature(fascinate_ability, false);

            performance_resource = library.CopyAndAdd <BlueprintFeature>("b92bfc201c6a79e49afd0b5cfbfc269f", "EvangelistPerformanceResource", "");
            performance_resource.ReplaceComponent <IncreaseResourcesByClass>(i => i.CharacterClass = cleric);
            performance_resource = library.Get <BlueprintFeature>("b92bfc201c6a79e49afd0b5cfbfc269f");
            performance_resource.AddComponent(Helpers.Create <NewMechanics.IncreaseResourcesByClassWithArchetype>(i =>
            {
                i.CharacterClass = archetype.GetParentClass();
                i.Archetype      = archetype;
                i.Resource       = resource;
            }));
        }