public override bool Check( FeatureSelectionState selectionState, UnitDescriptor unit, LevelUpState state) { return(unit.GetSpellbook(character_class) != null); }
static private IEnumerable <FeatureUIData> ExtractKnownSpells(BlueprintParametrizedFeature feature, UnitDescriptor unit, bool only_spontaneous) { foreach (Spellbook spellbook in unit.Spellbooks) { if (feature.SpellcasterClass != null && spellbook != unit.GetSpellbook(feature.SpellcasterClass)) { continue; } 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; }
//used to extract arcanist memorization spellbook from his spontaneous spellbook, for any other kind of spellbooks return spellbook argument public static Spellbook getClassSpellbook(Spellbook spellbook, UnitDescriptor unit) { var companion_spellbook = spellbook?.Blueprint.GetComponent <GetKnownSpellsFromMemorizationSpellbook>()?.spellbook; if (companion_spellbook != null) { return(unit.GetSpellbook(companion_spellbook)); } return(spellbook); }
protected override IEnumerable <BlueprintScriptableObject> GetItems(UnitDescriptor beforeLevelUpUnit, UnitDescriptor previewUnit) { if (SpellcasterClass != null) { var spellbook = previewUnit.GetSpellbook(SpellcasterClass); return(spellbook != null?GetKnownSpells(spellbook) : Array.Empty <BlueprintAbility>()); } else { return(previewUnit.Spellbooks.SelectMany(GetKnownSpells)); } }
//used to extract arcanist spontaneous spellbook from his memorization spellbook, for any other kind of spellbooks return spellbook argument public static Spellbook getCastingSpellbook(Spellbook spellbook, UnitDescriptor unit) { var sb1 = spellbook?.Blueprint.GetComponent <CompanionSpellbook>()?.spellbook?.GetComponent <GetKnownSpellsFromMemorizationSpellbook>()?.spellbook; if (sb1 == null) { return(spellbook); } else { return(unit.GetSpellbook(sb1)); } }
private void PrepareSpellbook(UnitDescriptor unit) { Spellbook spellbook = unit.GetSpellbook(instance.CharacterClass); if (spellbook == null) { return; } spellbook.UpdateAllSlotsSize(true); foreach (BlueprintAbility blueprint in instance.MemorizeSpells) { AbilityData data = new AbilityData(blueprint, spellbook); spellbook.Memorize(data, null); } }
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; }
protected override IEnumerable <BlueprintScriptableObject> GetItems(UnitDescriptor beforeLevelUpUnit, UnitDescriptor previewUnit) { var spells = new List <BlueprintAbility>(); var classData = previewUnit.Progression.GetClassData(SpellcasterClass); var classSpellbook = classData?.Spellbook; if (classSpellbook == null) { return(spells); } var spellbook = previewUnit.GetSpellbook(classSpellbook); if (spellbook == null) { return(spells); } // Bloodline/Mystery spells cannot legally be replaced. var grantedSpells = new HashSet <BlueprintAbility>(previewUnit.Progression.Features.Enumerable .SelectMany(f => f.Blueprint.GetComponents <AddKnownSpell>()).Select(a => a.Spell)); for (int level = 1; level <= SpellLevel; level++) { foreach (var knownSpell in spellbook.GetKnownSpells(level)) { var spell = knownSpell.Blueprint; if (grantedSpells.Contains(spell)) { continue; } spells.Add(spell); } } return(spells); }
protected override bool CanSelect(UnitDescriptor unit, FeatureParam param) { // TODO: this doesn't seem to work. return(!CheckNotKnown || !unit.GetSpellbook(SpellcasterClass).IsKnown(param.Blueprint as BlueprintAbility)); }
public override bool Check(FeatureSelectionState selectionState, UnitDescriptor unit, LevelUpState state) { return(unit.GetSpellbook(CharacterClass)?.MaxSpellLevel >= RequiredSpellLevel); }