Module: PfrpgCore::Derived::Magic
- Included in:
- Character
- Defined in:
- lib/pfrpg_core/derived/magic.rb
Instance Method Summary collapse
- #arcane_school ⇒ Object
- #bloodline ⇒ Object
- #can_arcane? ⇒ Boolean
- #can_divine? ⇒ Boolean
- #empty_spells ⇒ Object
- #filter(array, max) ⇒ Object
- #filter_for_high_level(level, total) ⇒ Object
-
#filter_for_max_attribute(class_name, total) ⇒ Object
you can only cast spells up to ($SPELLS_ATTRIBUTE - 10)th level.
- #gets_companion? ⇒ Boolean
- #gets_familiar? ⇒ Boolean
- #known_sorcerer_spells ⇒ Object
- #spells_per_level(class_name, latest = nil) ⇒ Object
- #valid_spell?(spell, class_name, level, spellbooks) ⇒ Boolean
Instance Method Details
#arcane_school ⇒ Object
63 64 65 |
# File 'lib/pfrpg_core/derived/magic.rb', line 63 def arcane_school class_features.find { |x| x.type == 'ArcaneSchool' } end |
#bloodline ⇒ Object
59 60 61 |
# File 'lib/pfrpg_core/derived/magic.rb', line 59 def bloodline class_features.find { |x| x.type == 'Bloodline' } end |
#can_arcane? ⇒ Boolean
67 68 69 70 |
# File 'lib/pfrpg_core/derived/magic.rb', line 67 def can_arcane? arcane_classes = ['Bard', 'Sorcerer', 'Wizard'] return latest_levels.find { |x| arcane_classes.include? x.class_name } end |
#can_divine? ⇒ Boolean
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/pfrpg_core/derived/magic.rb', line 72 def can_divine? divine = false latest_levels.each do |level| if ['Cleric', 'Druid'].include? level.class_name divine = true elsif (['Paladin', 'Ranger'].include? level.class_name) && (level.class_number >= 4) divine = true end end return divine end |
#empty_spells ⇒ Object
44 45 46 |
# File 'lib/pfrpg_core/derived/magic.rb', line 44 def empty_spells [0,0,0,0,0,0,0,0,0,0] end |
#filter(array, max) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/pfrpg_core/derived/magic.rb', line 37 def filter(array, max) for i in (max+1)..9 do array[i] = 0 end return array end |
#filter_for_high_level(level, total) ⇒ Object
32 33 34 35 |
# File 'lib/pfrpg_core/derived/magic.rb', line 32 def filter_for_high_level(level, total) max_spell_level = ((level + 1)/2).floor return filter(total, max_spell_level) end |
#filter_for_max_attribute(class_name, total) ⇒ Object
you can only cast spells up to ($SPELLS_ATTRIBUTE - 10)th level
27 28 29 30 |
# File 'lib/pfrpg_core/derived/magic.rb', line 27 def filter_for_max_attribute(class_name, total) max_spell_level = attr_static(class_name) - 10 return filter(total, max_spell_level) end |
#gets_companion? ⇒ Boolean
88 89 90 |
# File 'lib/pfrpg_core/derived/magic.rb', line 88 def gets_companion? (class_features.find { |x| x.feature_type == 'Nature Bond' && x.ability_name == 'Animal Companion' }) != nil end |
#gets_familiar? ⇒ Boolean
84 85 86 |
# File 'lib/pfrpg_core/derived/magic.rb', line 84 def gets_familiar? (class_features.find { |x| x.feature_type == 'Arcane Bond' && x.ability_name == 'Familiar' }) != nil end |
#known_sorcerer_spells ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/pfrpg_core/derived/magic.rb', line 48 def known_sorcerer_spells spells = [] sorc = class_features.select { |x| x.type == 'SorcererSpells' } sorc.each do |x| x.special.each do |spell| spells << spell end end return spells end |
#spells_per_level(class_name, latest = nil) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/pfrpg_core/derived/magic.rb', line 10 def spells_per_level(class_name, latest=nil) latest ||= self.latest_levels level = latest.find { |x| x.class_name == class_name } return empty_spells unless level return empty_spells if(['Paladin', 'Ranger'].include?(class_name) && level.class_number < 4) base = level.heroclass.spells_per_day(level.class_number) bonuses = PfrpgTables::Tables::Spells::SpellsPerDay.bonus(attr_mod(class_name)) total = [] for i in 0..9 do total[i] = base[i] + bonuses[i] end total = filter_for_max_attribute(class_name, total) total = filter_for_high_level(level.class_number, total) return total end |
#valid_spell?(spell, class_name, level, spellbooks) ⇒ Boolean
92 93 94 95 96 |
# File 'lib/pfrpg_core/derived/magic.rb', line 92 def valid_spell?(spell, class_name, level, spellbooks) return has_class?(class_name) && appropriate_level?(spell, class_name, level) && spell_fits?(class_name, level, spellbooks) end |