static bool Prefix(BlueprintParametrizedFeature __instance, UnitDescriptor beforeLevelUpUnit, UnitDescriptor previewUnit, ref IEnumerable <IFeatureSelectionItem> __result)
        {
            switch (__instance.ParameterType)
            {
            case (FeatureParameterType)FeatureParameterTypeExtender.KnownSpell:
                __result = (IEnumerable <IFeatureSelectionItem>)ExtractKnownSpells(__instance, previewUnit, false).ToArray <FeatureUIData>();
                return(false);

            case (FeatureParameterType)FeatureParameterTypeExtender.AvailableSpell:
                __result = (IEnumerable <IFeatureSelectionItem>)ExtractAvailableSpells(__instance, previewUnit).ToArray <FeatureUIData>();
                return(false);

            case (FeatureParameterType)FeatureParameterTypeExtender.AllLearnableSpells:
                __result = (IEnumerable <IFeatureSelectionItem>)ExtractAllLearnableSpells(__instance, previewUnit).ToArray <FeatureUIData>();
                return(false);

            case FeatureParameterType.SpellSpecialization:
                __result = (IEnumerable <IFeatureSelectionItem>)ExtractItemsFromSpellbooks2(__instance, previewUnit).ToArray <FeatureUIData>();
                return(false);

            case (FeatureParameterType)FeatureParameterTypeExtender.KnownSpontaneousSpell:
                __result = (IEnumerable <IFeatureSelectionItem>)ExtractKnownSpells(__instance, previewUnit, true).ToArray <FeatureUIData>();
                return(false);

            default:
                return(true);
            }
        }
Exemple #2
0
        internal static void createDeityFavoredWeapon()
        {
            deity_favored_weapon = library.CopyAndAdd <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e", "DeityFavoredWeapon", "");
            deity_favored_weapon.SetName("Deity's Favored Weapon");
            deity_favored_weapon.SetDescription("");
            deity_favored_weapon.Groups          = new FeatureGroup[0];
            deity_favored_weapon.ComponentsArray = new BlueprintComponent[0];

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

            foreach (var d in deity_selection.AllFeatures)
            {
                var add_features   = d.GetComponents <AddFeatureOnClassLevel>();
                var starting_items = d.GetComponent <AddStartingEquipment>();
                if (add_features.Count() == 0 && starting_items != null)
                {
                    var weapon_category = starting_items.CategoryItems[0];
                    d.AddComponent(Common.createAddParametrizedFeatures(deity_favored_weapon, weapon_category));
                }
                foreach (var add_feature in add_features)
                {
                    var proficiency     = add_feature.Feature.GetComponent <AddProficiencies>();
                    var weapon_category = proficiency == null ? WeaponCategory.UnarmedStrike : proficiency.WeaponProficiencies[0];
                    d.AddComponent(Common.createAddParametrizedFeatures(deity_favored_weapon, weapon_category));
                }
            }
        }
Exemple #3
0
        static private IEnumerable <FeatureUIData> ExtractKnownSpells(BlueprintParametrizedFeature feature, UnitDescriptor unit, bool only_spontaneous)
        {
            foreach (Spellbook spellbook in unit.Spellbooks)
            {
                if (only_spontaneous && !spellbook.Blueprint.Spontaneous)
                {
                    continue;
                }

                if (!only_spontaneous && spellbook.Blueprint.GetComponent <SpellbookMechanics.GetKnownSpellsFromMemorizationSpellbook>() != null)
                {
                    continue;
                }
                foreach (var spell in spellbook.GetAllKnownSpells())
                {
                    if (spell.MetamagicData != null && spell.MetamagicData.MetamagicMask != 0)
                    {
                        continue;
                    }

                    yield return(new FeatureUIData(feature, spell.Blueprint, spell.Blueprint.Name, spell.Blueprint.Description, spell.Blueprint.Icon, spell.Blueprint.name));
                }
            }
            yield break;
        }
        static private IEnumerable <FeatureUIData> ExtractItemsFromSpellbooks2(BlueprintParametrizedFeature feature, UnitDescriptor unit)
        {
            foreach (Spellbook spellbook in unit.Spellbooks)
            {
                if (spellbook.Blueprint.GetComponent <SpellbookMechanics.GetKnownSpellsFromMemorizationSpellbook>() != null)
                {
                    continue;
                }
                foreach (var spell in spellbook.GetAllKnownSpells().Select(s => s.Blueprint).Distinct().ToArray())
                {
                    if (unit.GetFeature(feature.Prerequisite, spell.School) != null)
                    {
                        yield return(new FeatureUIData(feature, spell, spell.Name, spell.Description, spell.Icon, spell.name));
                    }
                }

                /*foreach (SpellLevelList spellLevel in spellbook.Blueprint.SpellList.SpellsByLevel)
                 * {
                 *  if (spellLevel.SpellLevel <= spellbook.MaxSpellLevel)
                 *  {
                 *      foreach (BlueprintAbility spell in spellLevel.SpellsFiltered)
                 *      {
                 *          if (unit.GetFeature(feature.Prerequisite, spell.School) != null)
                 *          {
                 *              yield return new FeatureUIData(feature, spell, spell.Name, spell.Description, spell.Icon, spell.name);
                 *          }
                 *      }
                 *  }
                 * }*/
            }
            yield break;
        }
Exemple #5
0
        static public void LoadNeutral()
        {
            RisiaAddFacts = new List <BlueprintFeature>();

            compNeutral                = Helpers.Create <AddClassLevels>();
            compNeutral.Archetypes     = new BlueprintArchetype[] { };
            compNeutral.CharacterClass = arcanist;
            compNeutral.Levels         = 7;
            compNeutral.LevelsStat     = StatType.Intelligence;
            compNeutral.Skills         = new StatType[] {
                StatType.SkillKnowledgeArcana,
                StatType.SkillKnowledgeWorld,
                StatType.SkillPersuasion,
                StatType.SkillStealth,
                StatType.SkillPerception,
                StatType.SkillUseMagicDevice,
                StatType.SkillMobility
            };
            compNeutral.SelectSpells   = RisiaSpellKnownLevelupSelect;
            compNeutral.MemorizeSpells = RisiaSpellMemory;

            BlueprintFeatureSelection    basicFeatSelection = getSelection("247a4068296e8be42890143f451b4b45");
            BlueprintParametrizedFeature spellFocus         = getFeat("16fa59cc9a72a6043b566b49184f53fe") as BlueprintParametrizedFeature;

            List <SelectionEntry> selectionEntryList = new List <SelectionEntry>();

            selectionEntryList.Add(new SelectionEntry {
                Selection = basicFeatSelection,//basic feat selection
                Features  = RisiaFeats
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = getSelection("247a4068296e8be42890143f451b4b45"),
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocus,
                ParamSpellSchool      = SpellSchool.Illusion
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = getSelection("247a4068296e8be42890143f451b4b45"),
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocus,
                ParamSpellSchool      = SpellSchool.Enchantment
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection = ArcaneExploits.exploitSelection,
                Features  = RisiaArcaneExploits
            });
            compNeutral.Selections = selectionEntryList.ToArray();
            learnNeutral           = Helpers.Create <LearnSpells>(a => {
                a.Spells         = RisiaSpellKnownAfterwards;
                a.CharacterClass = ArcanistClass.arcanist;
            });
            var RisiaLearnSpellFeat = Helpers.CreateFeature("RisiaLearnSpellFeat", "", "",
                                                            OtherUtils.GetMd5("Risia.LearnSpellFeat"),
                                                            null,
                                                            FeatureGroup.None,
                                                            learnNeutral);

            RisiaAddFacts.Add(RisiaLearnSpellFeat);
        }
Exemple #6
0
        public void addParametrizedFeatureSelection(BlueprintParametrizedFeature feature, SpellSchool school)
        {
            var spell_focus = new SelectionEntry();

            spell_focus.IsParametrizedFeature = true;
            spell_focus.ParametrizedFeature   = feature;
            spell_focus.ParamSpellSchool      = school;
            acl.Selections = acl.Selections.AddToArray(spell_focus);
        }
Exemple #7
0
        public void addParametrizedFeatureSelection(BlueprintParametrizedFeature feature, WeaponCategory weapon_category)
        {
            var weapon_focus = new SelectionEntry();

            weapon_focus.IsParametrizedFeature = true;
            weapon_focus.ParametrizedFeature   = feature;
            weapon_focus.ParamWeaponCategory   = weapon_category;

            acl.Selections = acl.Selections.AddToArray(weapon_focus);
        }
        static private FeatureParameterType getParameterType(BlueprintParametrizedFeature feature)
        {
            switch (feature.ParameterType)
            {
            case (FeatureParameterType)NewMechanics.ParametrizedFeatureSelection.FeatureParameterTypeExtender.KnownSpell:
            case (FeatureParameterType)NewMechanics.ParametrizedFeatureSelection.FeatureParameterTypeExtender.AllLearnableSpells:
            case (FeatureParameterType)NewMechanics.ParametrizedFeatureSelection.FeatureParameterTypeExtender.KnownSpontaneousSpell:
                return(FeatureParameterType.SpellSpecialization);

            default:
                return(feature.ParameterType);
            }
        }
        static private IEnumerable <FeatureUIData> ExtractAvailableSpells(BlueprintParametrizedFeature feature, UnitDescriptor unit)
        {
            foreach (Spellbook spellbook in unit.Spellbooks)
            {
                if (feature.SpellcasterClass != null &&
                    spellbook != unit.GetSpellbook(feature.SpellcasterClass))
                {
                    continue;
                }



                foreach (var spell in spellbook.Blueprint.SpellList.GetSpells(feature.SpellLevel))
                {
                    yield return(new FeatureUIData(feature, spell, spell.Name, spell.Description, spell.Icon, spell.name));
                }
            }
            yield break;
        }
Exemple #10
0
 static void Postfix(BlueprintParametrizedFeature __instance, UnitDescriptor unit, ref IEnumerable <FeatureUIData> __result)
 {
     try
     {
         var self = __instance;
         List <FeatureUIData> result = null;
         // Add spells that have been granted by a progression (e.g. bloodline, oracle mystery/curse, etc).
         foreach (var feature in unit.Progression.Features)
         {
             var progression = feature.Blueprint as BlueprintProgression;
             if (progression == null)
             {
                 continue;
             }
             var data = unit.Progression.SureProgressionData(progression);
             foreach (var entry in data.LevelEntries.Where(e => e.Level <= data.Level))
             {
                 foreach (var addSpell in entry.Features.SelectMany(f => f.GetComponents <AddKnownSpell>()))
                 {
                     var spell = addSpell.Spell;
                     if (unit.GetFeature(self.Prerequisite, spell.School) == null)
                     {
                         continue;                                                           // skip spells of wrong school
                     }
                     if (result == null)
                     {
                         result = __result.ToList();
                     }
                     result.Add(new FeatureUIData(self, spell, spell.Name, spell.Description, spell.Icon, spell.name));
                 }
             }
         }
         if (result != null)
         {
             __result = result;
         }
     }
     catch (Exception e)
     {
         Log.Error(e);
     }
 }
Exemple #11
0
        static bool Prefix(BlueprintParametrizedFeature __instance, ref FeatureUIData[] ___m_CachedItems, ref IEnumerable <FeatureUIData> __result)
        {
            if (___m_CachedItems != null)
            {
                return(true);
            }

            var tr = Harmony12.Traverse.Create(__instance);

            switch (__instance.ParameterType)
            {
            case (FeatureParameterType)FeatureParameterTypeExtender.KnownSpell:
            case (FeatureParameterType)FeatureParameterTypeExtender.KnownSpontaneousSpell:
                ___m_CachedItems = tr.Method("ExtractItemsFromBlueprints", (IEnumerable <BlueprintScriptableObject>)__instance.BlueprintParameterVariants).GetValue <IEnumerable <FeatureUIData> >().ToArray <FeatureUIData>();
                return(true);

            default:
                return(true);
            }
        }
        static internal void load()
        {
            var improved_unarmed_strike = library.Get <BlueprintFeature>("7812ad3672a4b9a4fb894ea402095167");
            var weapon_focus            = library.Get <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e");

            feral_combat_training = Helpers.CreateFeatureSelection("FeralCombatTrainingSelection",
                                                                   "Feral Combat Training",
                                                                   "Choose one of your natural weapons. While using the selected natural weapon, you can apply the effects of feats that have Improved Unarmed Strike as a prerequisite.\n"
                                                                   + "Special: If you are a monk, you can use the selected natural weapon with your flurry of blows class feature.",
                                                                   "",
                                                                   LoadIcons.Image2Sprite.Create(@"FeatIcons/Icon_Feral_Combat.png"),
                                                                   FeatureGroup.CombatFeat,
                                                                   Helpers.PrerequisiteFeature(improved_unarmed_strike)
                                                                   );
            feral_combat_training.HideInCharacterSheetAndLevelUp = true;

            foreach (var natural_weapon_entry in natural_weapon_entries)
            {
                feral_combat_training.AddComponent(Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true));
                var feral_combat_entry = Helpers.CreateFeature("FeralCombat" + natural_weapon_entry.category.ToString() + "Feature",
                                                               feral_combat_training.Name + $" ({natural_weapon_entry.name})",
                                                               feral_combat_training.Description,
                                                               "",
                                                               feral_combat_training.Icon,
                                                               FeatureGroup.CombatFeat,
                                                               Helpers.PrerequisiteFeature(improved_unarmed_strike),
                                                               Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true)
                                                               );
                natural_weapon_type_fact_map.Add(natural_weapon_entry.category, feral_combat_entry);
                feral_combat_training.AllFeatures = feral_combat_training.AllFeatures.AddToArray(feral_combat_entry);
                feral_combat_entry.Groups         = feral_combat_entry.Groups.AddToArray(FeatureGroup.Feat);
            }

            library.AddCombatFeats(feral_combat_training);

            ki_focus_weapon = library.CopyAndAdd <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e", "KiWeaponFeature", "");
            ki_focus_weapon.SetNameDescriptionIcon("Ki Weapon", "You can use ki attacks through the specified weapon as if they were unarmed attacks. These attacks include the monk’s ki strike, quivering palm, and the Stunning Fist feat", null);
            ki_focus_weapon.Groups          = new FeatureGroup[0];
            ki_focus_weapon.ComponentsArray = new BlueprintComponent[0];
            fixAbilities();
        }
        static BlueprintParametrizedFeature CreateMagesTattoo()
        {
            spellFocus        = library.Get <BlueprintParametrizedFeature>("16fa59cc9a72a6043b566b49184f53fe");
            spellFocusGreater = (library.Get <BlueprintParametrizedFeature>("5b04b45b228461c43bad768eb0f7c7bf"));
            var noFeature = Helpers.PrerequisiteNoFeature(null);

            magesTattoo = Helpers.CreateParametrizedFeature("MagesTattooSelection",
                                                            "法师纹身",
                                                            "选择一个你有法术专攻的法术学派,你所施展的此学派法术获得+1施法者等级。",
                                                            "8004aabdc67145c5b0613b7580d77da1",
                                                            spellFocusGreater.Icon,
                                                            FeatureGroup.Feat,
                                                            FeatureParameterType.SpellSchool,
                                                            spellFocus.PrerequisiteFeature(),
                                                            Helpers.Create <RecommendationRequiresSpellbook>(),
                                                            Helpers.Create <CasterLevelForSchoolParameterized>(),
                                                            Helpers.Create <RecommendationHasFeature>(r => r.Feature = spellFocus),
                                                            noFeature);
            noFeature.Feature        = magesTattoo;
            magesTattoo.Prerequisite = spellFocus;
            magesTattoo.Ranks        = 1;
            return(magesTattoo);
        }
Exemple #14
0
        static BlueprintParametrizedFeature CreateMagesTattoo()
        {
            spellFocus        = library.Get <BlueprintParametrizedFeature>("16fa59cc9a72a6043b566b49184f53fe");
            spellFocusGreater = (library.Get <BlueprintParametrizedFeature>("5b04b45b228461c43bad768eb0f7c7bf"));
            var noFeature = Helpers.PrerequisiteNoFeature(null);

            magesTattoo = Helpers.CreateParametrizedFeature("MagesTattooSelection",
                                                            "Mage's Tattoo",
                                                            "Select a school of magic in which you have Spell Focus—you cast spells from this school at +1 caster level.",
                                                            "8004aabdc67145c5b0613b7580d77da1",
                                                            spellFocusGreater.Icon,
                                                            FeatureGroup.Feat,
                                                            FeatureParameterType.SpellSchool,
                                                            spellFocus.PrerequisiteFeature(),
                                                            Helpers.Create <RecommendationRequiresSpellbook>(),
                                                            Helpers.Create <CasterLevelForSchoolParameterized>(),
                                                            Helpers.Create <RecommendationHasFeature>(r => r.Feature = spellFocus),
                                                            noFeature);
            noFeature.Feature        = magesTattoo;
            magesTattoo.Prerequisite = spellFocus;
            magesTattoo.Ranks        = 1;
            return(magesTattoo);
        }
        static private IEnumerable <FeatureUIData> ExtractAllLearnableSpells(BlueprintParametrizedFeature feature, UnitDescriptor unit)
        {
            var max_lvl = feature.GetComponent <MaxLearneableSpellLevelLimiter>().max_lvl;

            foreach (Spellbook spellbook in unit.Spellbooks)
            {
                if (spellbook.Blueprint.GetComponent <SpellbookMechanics.GetKnownSpellsFromMemorizationSpellbook>() != null)
                {
                    continue;
                }
                foreach (SpellLevelList spellLevel in spellbook.Blueprint.SpellList.SpellsByLevel)
                {
                    if (spellLevel.SpellLevel <= max_lvl)
                    {
                        foreach (BlueprintAbility spell in spellLevel.SpellsFiltered)
                        {
                            yield return(new FeatureUIData(feature, spell, spell.Name, spell.Description, spell.Icon, spell.name));
                        }
                    }
                }
            }
            yield break;
        }
        static internal void load()
        {
            var improved_unarmed_strike = library.Get <BlueprintFeature>("7812ad3672a4b9a4fb894ea402095167");
            var weapon_focus            = library.Get <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e");

            feral_combat_training = Helpers.CreateFeatureSelection("FeralCombatTrainingSelection",
                                                                   "Feral Combat Training",
                                                                   "Choose one of your natural weapons. While using the selected natural weapon, you can apply the effects of feats that have Improved Unarmed Strike as a prerequisite.\n"
                                                                   + "Special: If you are a monk, you can use the selected natural weapon with your flurry of blows class feature.",
                                                                   "",
                                                                   LoadIcons.Image2Sprite.Create(@"FeatIcons/Icon_Feral_Combat.png"),
                                                                   FeatureGroup.CombatFeat,
                                                                   Helpers.PrerequisiteFeature(improved_unarmed_strike)
                                                                   );
            feral_combat_training.HideInCharacterSheetAndLevelUp = true;

            foreach (var natural_weapon_entry in natural_weapon_entries)
            {
                feral_combat_training.AddComponent(Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true));
                var feral_combat_entry = Helpers.CreateFeature("FeralCombat" + natural_weapon_entry.category.ToString() + "Feature",
                                                               feral_combat_training.Name + $" ({natural_weapon_entry.name})",
                                                               feral_combat_training.Description,
                                                               "",
                                                               feral_combat_training.Icon,
                                                               FeatureGroup.CombatFeat,
                                                               Helpers.PrerequisiteFeature(improved_unarmed_strike),
                                                               Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true)
                                                               );
                natural_weapon_type_fact_map.Add(natural_weapon_entry.category, feral_combat_entry);
                feral_combat_training.AllFeatures = feral_combat_training.AllFeatures.AddToArray(feral_combat_entry);
                feral_combat_entry.Groups         = feral_combat_entry.Groups.AddToArray(FeatureGroup.Feat);
            }

            library.AddCombatFeats(feral_combat_training);

            ki_focus_weapon = library.CopyAndAdd <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e", "KiWeaponFeature", "");
            ki_focus_weapon.SetNameDescriptionIcon("Ki Weapon", "You can use ki attacks through the specified weapon as if they were unarmed attacks. These attacks include the monk’s ki strike, quivering palm, and the Stunning Fist feat.", null);
            ki_focus_weapon.Groups          = new FeatureGroup[0];
            ki_focus_weapon.ComponentsArray = new BlueprintComponent[0];


            crusaders_flurry = library.CopyAndAdd <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e", "CrusadersFlurry", "8ff12016059f45b28eb616b2323efc2e");
            crusaders_flurry.SetNameDescriptionIcon("Crusader's Flurry", "You can use your deity’s favored weapon as if it were a monk weapon.",
                                                    LoadIcons.Image2Sprite.Create(@"FeatIcons/CrusadersFlurry.png"));
            crusaders_flurry.Groups            = new FeatureGroup[] { FeatureGroup.Feat };
            crusaders_flurry.Prerequisite      = NewFeats.deity_favored_weapon;
            crusaders_flurry.WeaponSubCategory = WeaponSubCategory.Melee;
            crusaders_flurry.ComponentsArray   = new BlueprintComponent[]
            {
                Helpers.Create <PrerequisiteMechanics.PrerequisiteMatchingParametrizedFeatures>(p => { p.base_feature = weapon_focus; p.dependent_feature = NewFeats.deity_favored_weapon; }),
                Helpers.Create <PrerequisiteParametrizedWeaponSubcategory>(p => { p.Feature = NewFeats.deity_favored_weapon; p.SubCategory = WeaponSubCategory.Melee; }),
                ChannelEnergyEngine.improved_channel.GetComponent <PrerequisiteFeaturesFromList>(),    //channel energy prereq
                Helpers.PrerequisiteFeature(library.Get <BlueprintFeature>("fd99770e6bd240a4aab70f7af103e56a"), any: true),
                Helpers.PrerequisiteFeature(Warpriest.flurry2_unlock, any: true),
                Helpers.PrerequisiteFeature(Brawler.brawlers_flurry, any: true)
            };
            library.AddFeats(crusaders_flurry);

            var ki_strike_magic      = library.Get <BlueprintFeature>("1188005ee3160f84f8bed8b19a7d46cf");
            var ki_strike_cold_iron  = library.Get <BlueprintFeature>("7b657938fde78b14cae10fc0d3dcb991");
            var ki_strike_adamantine = library.Get <BlueprintFeature>("ddc10a3463bd4d54dbcbe993655cf64e");
            var ki_strike_lawful     = library.Get <BlueprintFeature>("1188005ee3160f84f8bed8b19a7d46cf");

            ki_strike_magic.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.add_magic = true;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                         );
            ki_strike_cold_iron.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.material = PhysicalDamageMaterial.ColdIron;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                             );
            ki_strike_adamantine.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.material = PhysicalDamageMaterial.Adamantite;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                              );
            ki_strike_lawful.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageAlignmentIfParametrizedFeature>(a =>
            {
                a.damage_alignment = DamageAlignment.Lawful;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                          );

            fixAbilities();
        }
Exemple #17
0
        static public void LoadBoss()
        {
            RisiaBossAddFacts = new List <BlueprintFeature>();

            compBoss                = Helpers.Create <AddClassLevels>();
            compBoss.Archetypes     = new BlueprintArchetype[] { };
            compBoss.CharacterClass = arcanist;
            compBoss.Levels         = 20;
            compBoss.LevelsStat     = StatType.Intelligence;
            compBoss.Skills         = new StatType[] {
                StatType.SkillKnowledgeArcana,
                StatType.SkillKnowledgeWorld,
                StatType.SkillPersuasion,
                StatType.SkillStealth,
                StatType.SkillPerception,
                StatType.SkillUseMagicDevice,
                StatType.SkillMobility
            };
            compBoss.SelectSpells   = RisiaBossSpellKnownLevelupSelect;
            compBoss.MemorizeSpells = RisiaBossSpellMemory;

            BlueprintFeatureSelection    basicFeatSelection = getSelection("247a4068296e8be42890143f451b4b45");
            BlueprintParametrizedFeature spellFocus         = getFeat("16fa59cc9a72a6043b566b49184f53fe") as BlueprintParametrizedFeature;
            BlueprintParametrizedFeature spellFocusGreater  = getFeat("5b04b45b228461c43bad768eb0f7c7bf") as BlueprintParametrizedFeature;
            List <SelectionEntry>        selectionEntryList = new List <SelectionEntry>();

            selectionEntryList.Add(new SelectionEntry {
                Selection = basicFeatSelection,//basic feat selection
                Features  = RisiaFeats
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = basicFeatSelection,
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocus,
                ParamSpellSchool      = SpellSchool.Illusion
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = basicFeatSelection,
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocus,
                ParamSpellSchool      = SpellSchool.Enchantment
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = basicFeatSelection,
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocusGreater,
                ParamSpellSchool      = SpellSchool.Illusion
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection             = basicFeatSelection,
                IsParametrizedFeature = true,
                ParametrizedFeature   = spellFocusGreater,
                ParamSpellSchool      = SpellSchool.Enchantment
            });

            //Exploit Selections
            selectionEntryList.Add(new SelectionEntry {
                Selection = ArcaneExploits.exploitSelection,
                Features  = RisiaArcaneExploits
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection = MetamagicKnownledge.exploit,
                Features  = new BlueprintFeature[] { getFeat("ef7ece7bb5bb66a41b256976b27f424e") }//quicken spell
            });
            string GreaterMetaKnowledgeHeightenId = OtherUtils.GetMd5($"ArcanistClassExploitTempGreaterMetamagicKnowledge{Metamagic.Heighten}SubFeat");

            selectionEntryList.Add(new SelectionEntry {
                Selection = GreaterMetamagicKnowledge.exploitTemp,
                Features  = new BlueprintFeature[] { getFeat(GreaterMetaKnowledgeHeightenId) }//heighten spell
            });
            selectionEntryList.Add(new SelectionEntry {
                Selection = Familiar.exploit,
                Features  = new BlueprintFeature[] { getFeat("1cb0b559ca2e31e4d9dc65de012fa82f") } //cat familiar
            });
            compBoss.Selections = selectionEntryList.ToArray();
            learnBoss           = Helpers.Create <LearnSpells>(a => {
                a.Spells         = RisiaBossSpellKnownAfterwards;
                a.CharacterClass = ArcanistClass.arcanist;
            });
            var RisiaBossLearnSpellFeat = Helpers.CreateFeature("RisiaBossLearnSpellFeat", "", "",
                                                                OtherUtils.GetMd5("Risia.Boss.LearnSpellFeat"),
                                                                null,
                                                                FeatureGroup.None,
                                                                learnBoss);
            var RisiaBossApplyBuffOnBattle = Helpers.CreateFeature("RisiaBossApplyBuffOnBattle", "", "",
                                                                   OtherUtils.GetMd5("Risia.Boss.ApplyBuffOnBattle.Feat"),
                                                                   null,
                                                                   FeatureGroup.None,
                                                                   Helpers.Create <AddBuffOnCombatStart>(a => a.Feature = library.Get <BlueprintBuff>("8ab51b96c1310c34199238549d601160")),  //stoneskin cl15
                                                                   Helpers.Create <AddBuffOnCombatStart>(a => a.Feature = library.Get <BlueprintBuff>("51ebd62ee464b1446bb01fa1e214942f"))); //delay poison;

            RisiaBossAddFacts.Add(RisiaBossLearnSpellFeat);
            RisiaBossAddFacts.Add(RisiaBossApplyBuffOnBattle);
        }
        static internal void load()
        {
            var improved_unarmed_strike = library.Get <BlueprintFeature>("7812ad3672a4b9a4fb894ea402095167");
            var weapon_focus            = library.Get <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e");

            feral_combat_training = Helpers.CreateFeatureSelection("FeralCombatTrainingSelection",
                                                                   "Feral Combat Training",
                                                                   "Choose one of your natural weapons. While using the selected natural weapon, you can apply the effects of feats that have Improved Unarmed Strike as a prerequisite.\n"
                                                                   + "Special: If you are a monk, you can use the selected natural weapon with your flurry of blows class feature.",
                                                                   "",
                                                                   LoadIcons.Image2Sprite.Create(@"FeatIcons/Icon_Feral_Combat.png"),
                                                                   FeatureGroup.CombatFeat,
                                                                   Helpers.PrerequisiteFeature(improved_unarmed_strike)
                                                                   );
            feral_combat_training.HideInCharacterSheetAndLevelUp = true;

            foreach (var natural_weapon_entry in natural_weapon_entries)
            {
                feral_combat_training.AddComponent(Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true));
                var feral_combat_entry = Helpers.CreateFeature("FeralCombat" + natural_weapon_entry.category.ToString() + "Feature",
                                                               feral_combat_training.Name + $" ({natural_weapon_entry.name})",
                                                               feral_combat_training.Description,
                                                               "",
                                                               feral_combat_training.Icon,
                                                               FeatureGroup.CombatFeat,
                                                               Helpers.PrerequisiteFeature(improved_unarmed_strike),
                                                               Common.createPrerequisiteParametrizedFeatureWeapon(weapon_focus, natural_weapon_entry.category, any: true)
                                                               );
                natural_weapon_type_fact_map.Add(natural_weapon_entry.category, feral_combat_entry);
                feral_combat_training.AllFeatures = feral_combat_training.AllFeatures.AddToArray(feral_combat_entry);
                feral_combat_entry.Groups         = feral_combat_entry.Groups.AddToArray(FeatureGroup.Feat);
            }

            library.AddCombatFeats(feral_combat_training);

            ki_focus_weapon = library.CopyAndAdd <BlueprintParametrizedFeature>("1e1f627d26ad36f43bbd26cc2bf8ac7e", "KiWeaponFeature", "");
            ki_focus_weapon.SetNameDescriptionIcon("Ki Weapon", "You can use ki attacks through the specified weapon as if they were unarmed attacks. These attacks include the monk’s ki strike, quivering palm, and the Stunning Fist feat", null);
            ki_focus_weapon.Groups          = new FeatureGroup[0];
            ki_focus_weapon.ComponentsArray = new BlueprintComponent[0];

            var ki_strike_magic      = library.Get <BlueprintFeature>("1188005ee3160f84f8bed8b19a7d46cf");
            var ki_strike_cold_iron  = library.Get <BlueprintFeature>("7b657938fde78b14cae10fc0d3dcb991");
            var ki_strike_adamantine = library.Get <BlueprintFeature>("ddc10a3463bd4d54dbcbe993655cf64e");
            var ki_strike_lawful     = library.Get <BlueprintFeature>("1188005ee3160f84f8bed8b19a7d46cf");

            ki_strike_magic.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.add_magic = true;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                         );
            ki_strike_cold_iron.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.material = PhysicalDamageMaterial.ColdIron;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                             );
            ki_strike_adamantine.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageMaterialIfParametrizedFeature>(a =>
            {
                a.material = PhysicalDamageMaterial.Adamantite;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                              );
            ki_strike_lawful.AddComponent(Helpers.Create <NewMechanics.AddOutgoingPhysicalDamageAlignmentIfParametrizedFeature>(a =>
            {
                a.damage_alignment = DamageAlignment.Lawful;
                a.required_parametrized_feature = FeralCombatTraining.ki_focus_weapon;
            })
                                          );

            fixAbilities();
        }