public override bool CanBeUsedOn(BlueprintAbility ability, [CanBeNull] AbilityData data) { bool is_metamagic_not_available = ability == null || data?.Spellbook == null || ability.Type != AbilityType.Spell || ((ability.AvailableMetamagic & Metamagic) == 0); if (is_metamagic_not_available) { return(false); } if (!Helpers.checkSpellbook(spellbook, specific_class, data?.Spellbook, this.Owner)) { return(false); } if (this.Abilities != null && !this.Abilities.Empty() && !this.Abilities.Contains(ability)) { return(false); } if (!spell_descriptor.HasAnyFlag(data.Blueprint.SpellDescriptor) && spell_descriptor != SpellDescriptor.None) { return(false); } int cost = calculate_cost(this.Owner.Unit); if (resource != null && this.Owner.Resources.GetResourceAmount((BlueprintScriptableObject)this.resource) < cost) { return(false); } if (limit_spell_level && data.Spellbook.MaxSpellLevel < data.SpellLevel + Metamagic.DefaultCost()) { return(false); } return(true); }
public override bool CanBeUsedOn(BlueprintAbility ability, [CanBeNull] AbilityData data) { bool is_metamagic_not_available = ability == null || data?.Spellbook == null || ability.Type != AbilityType.Spell || ((ability.AvailableMetamagic & Metamagic) == 0); if (is_metamagic_not_available) { return(false); } if (!checkSpellbook(data?.Spellbook?.Blueprint)) { return(false); } int cost = calculate_cost(this.Owner.Unit); if (resource != null && this.Owner.Resources.GetResourceAmount((BlueprintScriptableObject)this.resource) < cost) { return(false); } if (limit_spell_level && data.Spellbook.MaxSpellLevel < data.SpellLevel + Metamagic.DefaultCost()) { return(false); } return(true); }