Exemplo n.º 1
0
        static void createDomainSelection()
        {
            paladin_deity       = library.Get <BlueprintFeatureSelection>("a7c8b73528d34c2479b4bd638503da1d");
            paladin_deity.Group = FeatureGroup.Deities;
            var cleric_domain = library.Get <BlueprintFeatureSelection>("48525e5da45c9c243a343fc6545dbdb9");

            domain_selection = library.CopyAndAdd(cleric_domain, "SacredServantDomainSelection", "");
            ClassToProgression.addClassToDomains(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, ClassToProgression.DomainSpellsType.SpecialList, domain_selection);
            domain_selection.SetDescription("Sacred Servant chooses one domain associated with her deity. At 4th level she also gains one domain spell slot for each level of paladin spells she can cast. Every day she must prepare the domain spell from her chosen domain in that spell slot.");
            archetype.GetParentClass().Spellbook.CantripsType = CantripsType.Orisions; //to properly show domain slots
        }
Exemplo n.º 2
0
        static void createKiPool()
        {
            var scaled_fist_archetype = library.Get <BlueprintArchetype>("5868fc82eb11a4244926363983897279");
            var scaled_fist_ki_pool   = library.Get <BlueprintFeature>("ae98ab7bda409ef4bb39149a212d6732");
            var resource = library.Get <BlueprintAbilityResource>("7d002c1025fbfe2458f1509bf7a89ce1");

            var amount = CallOfTheWild.ExtensionMethods.getMaxAmount(resource);

            Helpers.SetField(amount, "ArchetypesDiv", new BlueprintArchetype[] { scaled_fist_archetype });

            ClassToProgression.addClassToResource(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, resource, scaled_fist_archetype.GetParentClass());

            ki_pool = Common.featureToFeature(scaled_fist_ki_pool, false, "", "IroranPaladin");


            var ki_ignore_dr_buff = Helpers.CreateBuff("IroranPaladinKiIgnoreDRBuff",
                                                       "Ki Power: Ignore DR",
                                                       "By spending 1 point from his ki pool, an iroran paladin can ignore any damage reduction possessed by the target of his personal trial ability for 1 round.",
                                                       "",
                                                       Helpers.GetIcon("2c38da66e5a599347ac95b3294acbe00"),
                                                       null,
                                                       Helpers.Create <NewMechanics.IgnoreDamageReductionIfTargetHasFact>(i =>
            {
                i.fact        = personal_trial_buff;
                i.from_caster = true;
            })
                                                       );

            var ability = library.CopyAndAdd <BlueprintAbility>("ca948bb4ce1a2014fbf4d8d44b553074", "IroranPaladinKiPowerIgnoreDRBuff", "");

            ability.SetNameDescriptionIcon(ki_ignore_dr_buff);
            ability.ReplaceComponent <AbilityEffectRunAction>(Helpers.CreateRunActions(Common.createContextActionApplyBuff(ki_ignore_dr_buff, Helpers.CreateContextDuration(1), dispellable: false)));

            ki_pool.AddComponent(Helpers.CreateAddFacts(ability));


            ki_strike_magic = library.CopyAndAdd <BlueprintFeature>("1188005ee3160f84f8bed8b19a7d46cf", "IroranPaladinKiStrikeMagic", "");
            ki_strike_magic.SetDescription("At 4th level, ki strike allows the iroran paladin's unarmed attacks to be treated as magic weapons for the purpose of overcoming damage reduction.");

            ki_strike_cold_iron_silver = library.CopyAndAdd <BlueprintFeature>("7b657938fde78b14cae10fc0d3dcb991", "IroranPaladinKiStrikeColdIronSilver", "");
            ki_strike_cold_iron_silver.SetDescription("At 7th level, the iroran paladin's unarmed attacks are treated as cold iron and silver for the purpose of overcoming damage reduction.");

            ki_strike_lawful = library.CopyAndAdd <BlueprintFeature>("34439e527a8f5fb4588024e71960dd42", "IroranPaladinKiStrikeLawful", "");
            ki_strike_lawful.SetDescription("At 10th level, the iroran paladin's unarmed attacks are treated as lawful weapons for the purpose of overcoming damage reduction.");

            ki_strike_adamantine = library.CopyAndAdd <BlueprintFeature>("ddc10a3463bd4d54dbcbe993655cf64e", "IroranPaladinKiStrikeAdamantine", "");
            ki_strike_adamantine.SetDescription("At 16th level, the iroran paladin's unarmed attacks are treated as adamantine weapons for the purpose of overcoming damage reduction and bypassing hardness.");
        }
Exemplo n.º 3
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.º 4
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;
            }));
        }
Exemplo n.º 5
0
        static public void create()
        {
            var alchemist_class = ResourcesLibrary.TryGetBlueprint <BlueprintCharacterClass>("0937bec61c0dabc468428f496580c721");

            archetype = Helpers.Create <BlueprintArchetype>(a =>
            {
                a.name                 = "ToxicantArchetype";
                a.LocalizedName        = Helpers.CreateString($"{a.name}.Name", "Toxicant");
                a.LocalizedDescription = Helpers.CreateString($"{a.name}.Description", "In lands where poisons are legal and may be openly studied and sold, some vivisectionists obsess over the myriad ways that poisons and venoms can be applied and delivered. Known as toxicants, these deadly artists induce the production of deadly secretions within their own bodies in order to better inflict crippling conditions upon their foes.");
            });
            Helpers.SetField(archetype, "m_ParentClass", alchemist_class);
            library.AddAsset(archetype, "");

            createPoisonBuffAndPoisonImprovements();
            createToxicSecretionAndPoisonDiscoveries();

            var mutagen           = library.Get <BlueprintFeature>("cee8f65448ce71c4b8b8ca13751dd8ea");
            var throw_anything    = library.Get <BlueprintFeature>("65c538dcfd91930489ad3ab18ad9204b");
            var bombs             = library.Get <BlueprintFeature>("c59b2f256f5a70a4d896568658315b7d");
            var discovery         = library.Get <BlueprintFeatureSelection>("cd86c437488386f438dcc9ae727ea2a6");
            var sneak_attack      = library.Get <BlueprintFeature>("9b9eac6709e1c084cb18c3a366e0ec87");
            var medical_discovery = library.Get <BlueprintFeatureSelection>("67f499218a0e22944abab6fe1c9eaeee");
            var advance_talents   = library.Get <BlueprintFeature>("a33b99f95322d6741af83e9381b2391c");

            var poison_immunity    = library.Get <BlueprintFeature>("202af59b918143a4ab7c33d72c8eb6d5");
            var persistent_mutagen = library.Get <BlueprintFeature>("75ba281feb2b96547a3bfb12ecaff052");

            archetype.RemoveFeatures = new LevelEntry[] { Helpers.LevelEntry(1, bombs, mutagen),
                                                          Helpers.LevelEntry(2, discovery),
                                                          Helpers.LevelEntry(3, bombs),
                                                          Helpers.LevelEntry(4, discovery),
                                                          Helpers.LevelEntry(5, bombs),
                                                          Helpers.LevelEntry(6, discovery),
                                                          Helpers.LevelEntry(7, bombs),
                                                          Helpers.LevelEntry(8, discovery),
                                                          Helpers.LevelEntry(9, bombs),
                                                          Helpers.LevelEntry(10, discovery),
                                                          Helpers.LevelEntry(11, bombs),
                                                          Helpers.LevelEntry(12, discovery),
                                                          Helpers.LevelEntry(13, bombs),
                                                          Helpers.LevelEntry(14, discovery, persistent_mutagen),
                                                          Helpers.LevelEntry(15, bombs),
                                                          Helpers.LevelEntry(16, discovery),
                                                          Helpers.LevelEntry(17, bombs),
                                                          Helpers.LevelEntry(18, discovery),
                                                          Helpers.LevelEntry(19, bombs),
                                                          Helpers.LevelEntry(20, discovery), };

            archetype.AddFeatures = new LevelEntry[] { Helpers.LevelEntry(1, poison_secretion, sneak_attack),
                                                       Helpers.LevelEntry(2, medical_discovery),
                                                       Helpers.LevelEntry(3, sneak_attack, poison_improvement),
                                                       Helpers.LevelEntry(4, medical_discovery),
                                                       Helpers.LevelEntry(5, sneak_attack),
                                                       Helpers.LevelEntry(6, medical_discovery, poison_improvement),
                                                       Helpers.LevelEntry(7, sneak_attack),
                                                       Helpers.LevelEntry(8, medical_discovery),
                                                       Helpers.LevelEntry(9, sneak_attack, poison_improvement),
                                                       Helpers.LevelEntry(10, medical_discovery, advance_talents),
                                                       Helpers.LevelEntry(11, sneak_attack),
                                                       Helpers.LevelEntry(12, medical_discovery, poison_improvement),
                                                       Helpers.LevelEntry(13, sneak_attack),
                                                       Helpers.LevelEntry(14, medical_discovery),
                                                       Helpers.LevelEntry(15, sneak_attack, poison_improvement),
                                                       Helpers.LevelEntry(16, medical_discovery),
                                                       Helpers.LevelEntry(17, sneak_attack),
                                                       Helpers.LevelEntry(18, medical_discovery, poison_improvement),
                                                       Helpers.LevelEntry(19, sneak_attack),
                                                       Helpers.LevelEntry(20, medical_discovery), };

            alchemist_class.Progression.UIGroups = alchemist_class.Progression.UIGroups.AddToArray(Helpers.CreateUIGroup(poison_secretion, poison_improvement));
            alchemist_class.Archetypes           = alchemist_class.Archetypes.AddToArray(archetype);

            medical_discovery.AllFeatures = medical_discovery.AllFeatures.AddToArray(sticky_posion, celestial_poison, concentrate_poison);

            var dispelling_attack = library.Get <BlueprintFeature>("1b92146b8a9830d4bb97ab694335fa7c");

            ClassToProgression.addClassToFeat(archetype.GetParentClass(), new BlueprintArchetype[] { archetype }, ClassToProgression.DomainSpellsType.NoSpells, dispelling_attack);

            var greater_mutagen = library.Get <BlueprintFeature>("76c61966afdd82048911f3d63c6fe0bc");
            var cognatogen      = library.Get <BlueprintFeature>("e3f460ea61fcc504183c7d6818bbbf7a");
            var feral_mutagen   = library.Get <BlueprintFeature>("fd5f7b37ab4301c48a88cc196ee5f0ce");

            greater_mutagen.AddComponent(mutagen.PrerequisiteFeature());
            cognatogen.AddComponent(mutagen.PrerequisiteFeature());
            feral_mutagen.AddComponent(mutagen.PrerequisiteFeature());
        }