Module: PfrpgCore::Derived::Magic

Included in:
Character
Defined in:
lib/pfrpg_core/derived/magic.rb

Instance Method Summary collapse

Instance Method Details

#arcane_schoolObject



63
64
65
# File 'lib/pfrpg_core/derived/magic.rb', line 63

def arcane_school
  class_features.find { |x| x.type == 'ArcaneSchool' }
end

#bloodlineObject



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

Returns:

  • (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

Returns:

  • (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_spellsObject



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

Returns:

  • (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

Returns:

  • (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_spellsObject



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

Returns:

  • (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