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