Class: Lich::Gemstone::Spellsong
- Inherits:
-
Object
- Object
- Lich::Gemstone::Spellsong
- Defined in:
- documented/attributes/spellsong.rb
Overview
Represents a spellsong in the Lich5 project. This class manages the duration and effects of bard spells.
Class Method Summary collapse
-
.armorcost ⇒ Array<Integer>
Returns the armor cost for spells.
-
.cost ⇒ Integer
Returns the cost of renewing the spellsong.
-
.depressionpushdown ⇒ Integer
Calculates the push down value for depression.
-
.depressionslow ⇒ Integer
Calculates the slow value for depression.
-
.duration ⇒ Float
Calculates the duration of the spellsong based on various stats.
-
.duration_base_level(level = Stats.level) ⇒ Integer
Calculates the base duration of the spellsong based on the level.
-
.fortcost ⇒ Array<Integer>
Returns the fortitude cost for spells.
-
.holdingtargets ⇒ Integer
Calculates the number of targets that can be held.
-
.luckcost ⇒ Array<Integer>
Calculates the cost for the luck spell.
-
.manacost ⇒ Array<Integer>
Returns the mana cost for spells.
-
.mirrorscost ⇒ Array<Integer>
Calculates the cost for the mirrors spell.
-
.mirrorsdodgebonus ⇒ Integer
Calculates the dodge bonus for the mirrors spell.
-
.renew_cost ⇒ Integer
Calculates the total renewal cost for active spellsongs.
-
.renewed ⇒ Time
Updates the renewed time to the current time.
-
.renewed=(val) ⇒ Time
Sets the renewed time to a specified value.
-
.renewed_at ⇒ Time
Returns the last renewed time.
-
.serialize ⇒ Float
Serializes the current state of the spellsong.
-
.shieldcost ⇒ Array<Integer>
Returns the shield cost for spells.
-
.sonicarmorbonus ⇒ Integer
Calculates the sonic armor bonus.
-
.sonicarmordurability ⇒ Integer
Calculates the durability of the sonic armor.
-
.sonicbladebonus ⇒ Integer
Calculates the sonic blade bonus.
-
.sonicbladedurability ⇒ Integer
Calculates the durability of the sonic blade.
-
.sonicbonus ⇒ Integer
Calculates the sonic bonus based on bard level.
-
.sonicshieldbonus ⇒ Integer
Calculates the sonic shield bonus.
-
.sonicshielddurability ⇒ Integer
Calculates the durability of the sonic shield.
-
.sonicweaponbonus ⇒ Integer
Returns the sonic weapon bonus.
-
.sonicweapondurability ⇒ Integer
Returns the durability of the sonic weapon.
-
.swordcost ⇒ Array<Integer>
Returns the sword cost for spells.
-
.sync ⇒ String
Synchronizes the spellsong duration based on active bard spells.
-
.timeleft ⇒ Float
Calculates the remaining time left for the spellsong.
-
.tonisdodgebonus ⇒ Integer
Calculates the dodge bonus for the tonis spell.
-
.tonishastebonus ⇒ Integer
Calculates the haste bonus for the tonis spell.
-
.valorbonus ⇒ Integer
Calculates the valor bonus based on bard level.
-
.valorcost ⇒ Array<Integer>
Calculates the cost for the valor spell.
-
.weaponcost ⇒ Array<Integer>
Returns the weapon cost for spells.
Class Method Details
.armorcost ⇒ Array<Integer>
Returns the armor cost for spells.
328 329 330 |
# File 'documented/attributes/spellsong.rb', line 328 def self.armorcost [14, 5] end |
.cost ⇒ Integer
Returns the cost of renewing the spellsong.
197 198 199 |
# File 'documented/attributes/spellsong.rb', line 197 def self.cost self.renew_cost end |
.depressionpushdown ⇒ Integer
Calculates the push down value for depression.
170 171 172 |
# File 'documented/attributes/spellsong.rb', line 170 def self.depressionpushdown 20 + Skills.mltelepathy end |
.depressionslow ⇒ Integer
Calculates the slow value for depression.
178 179 180 181 182 183 |
# File 'documented/attributes/spellsong.rb', line 178 def self.depressionslow thresholds = [10, 25, 45, 70, 100] bonus = -2 thresholds.each { |val| if Skills.mltelepathy >= val then bonus -= 1 end } bonus end |
.duration ⇒ Float
Calculates the duration of the spellsong based on various stats.
73 74 75 76 77 78 79 |
# File 'documented/attributes/spellsong.rb', line 73 def self.duration return @@song_duration if @@duration_calcs == [Stats.level, Stats.log[1], Stats.inf[1], Skills.mltelepathy] return @@song_duration if [Stats.level, Stats.log[1], Stats.inf[1], Skills.mltelepathy].include?(nil) @@duration_calcs = [Stats.level, Stats.log[1], Stats.inf[1], Skills.mltelepathy] total = self.duration_base_level(Stats.level) return (@@song_duration = total + Stats.log[1] + (Stats.inf[1] * 3) + (Skills.mltelepathy * 2)) end |
.duration_base_level(level = Stats.level) ⇒ Integer
Calculates the base duration of the spellsong based on the level.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'documented/attributes/spellsong.rb', line 86 def self.duration_base_level(level = Stats.level) total = 120 case level when (0..25) total += level * 4 when (26..50) total += 100 + (level - 25) * 3 when (51..75) total += 175 + (level - 50) * 2 when (76..100) total += 225 + (level - 75) else Lich.log("unhandled case in Spellsong.duration level=#{level}") end return total end |
.fortcost ⇒ Array<Integer>
Returns the fortitude cost for spells.
304 305 306 |
# File 'documented/attributes/spellsong.rb', line 304 def self.fortcost [3, 1] end |
.holdingtargets ⇒ Integer
Calculates the number of targets that can be held.
189 190 191 |
# File 'documented/attributes/spellsong.rb', line 189 def self.holdingtargets 1 + ((Spells. - 1) / 7).truncate end |
.luckcost ⇒ Array<Integer>
Calculates the cost for the luck spell.
288 289 290 |
# File 'documented/attributes/spellsong.rb', line 288 def self.luckcost [6 + ((Spells. - 6) / 4), (6 + ((Spells. - 6) / 4) / 2).round] end |
.manacost ⇒ Array<Integer>
Returns the mana cost for spells.
296 297 298 |
# File 'documented/attributes/spellsong.rb', line 296 def self.manacost [18, 15] end |
.mirrorscost ⇒ Array<Integer>
Calculates the cost for the mirrors spell.
224 225 226 |
# File 'documented/attributes/spellsong.rb', line 224 def self.mirrorscost [19 + ((Spells. - 19) / 5).truncate, 8 + ((Spells. - 19) / 10).truncate] end |
.mirrorsdodgebonus ⇒ Integer
Calculates the dodge bonus for the mirrors spell.
216 217 218 |
# File 'documented/attributes/spellsong.rb', line 216 def self.mirrorsdodgebonus 20 + ((Spells. - 19) / 2).round end |
.renew_cost ⇒ Integer
Calculates the total renewal cost for active spellsongs.
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'documented/attributes/spellsong.rb', line 107 def self.renew_cost # fixme: multi-spell penalty? total = num_active = 0 [1003, 1006, 1009, 1010, 1012, 1014, 1018, 1019, 1025].each { |song_num| if (song = Spell[song_num]) if song.active? total += song.renew_cost num_active += 1 end else echo "self.renew_cost: warning: can't find song number #{song_num}" end } return total end |
.renewed ⇒ Time
Updates the renewed time to the current time.
30 31 32 |
# File 'documented/attributes/spellsong.rb', line 30 def self.renewed @@renewed = Time.now end |
.renewed=(val) ⇒ Time
Sets the renewed time to a specified value.
39 40 41 |
# File 'documented/attributes/spellsong.rb', line 39 def self.renewed=(val) @@renewed = val end |
.renewed_at ⇒ Time
Returns the last renewed time.
47 48 49 |
# File 'documented/attributes/spellsong.rb', line 47 def self.renewed_at @@renewed end |
.serialize ⇒ Float
Serializes the current state of the spellsong.
65 66 67 |
# File 'documented/attributes/spellsong.rb', line 65 def self.serialize self.timeleft end |
.shieldcost ⇒ Array<Integer>
Returns the shield cost for spells.
312 313 314 |
# File 'documented/attributes/spellsong.rb', line 312 def self.shieldcost [9, 4] end |
.sonicarmorbonus ⇒ Integer
Calculates the sonic armor bonus.
240 241 242 |
# File 'documented/attributes/spellsong.rb', line 240 def self.sonicarmorbonus self.sonicbonus + 15 end |
.sonicarmordurability ⇒ Integer
Calculates the durability of the sonic armor.
127 128 129 |
# File 'documented/attributes/spellsong.rb', line 127 def self.sonicarmordurability 210 + (Stats.level / 2).round + Skills.to_bonus(Skills.elair) end |
.sonicbladebonus ⇒ Integer
Calculates the sonic blade bonus.
248 249 250 |
# File 'documented/attributes/spellsong.rb', line 248 def self.sonicbladebonus self.sonicbonus + 10 end |
.sonicbladedurability ⇒ Integer
Calculates the durability of the sonic blade.
135 136 137 |
# File 'documented/attributes/spellsong.rb', line 135 def self.sonicbladedurability 160 + (Stats.level / 2).round + Skills.to_bonus(Skills.elair) end |
.sonicbonus ⇒ Integer
Calculates the sonic bonus based on bard level.
232 233 234 |
# File 'documented/attributes/spellsong.rb', line 232 def self.sonicbonus (Spells. / 2).round end |
.sonicshieldbonus ⇒ Integer
Calculates the sonic shield bonus.
264 265 266 |
# File 'documented/attributes/spellsong.rb', line 264 def self.sonicshieldbonus self.sonicbonus + 10 end |
.sonicshielddurability ⇒ Integer
Calculates the durability of the sonic shield.
151 152 153 |
# File 'documented/attributes/spellsong.rb', line 151 def self.sonicshielddurability 125 + (Stats.level / 2).round + Skills.to_bonus(Skills.elair) end |
.sonicweaponbonus ⇒ Integer
Returns the sonic weapon bonus.
256 257 258 |
# File 'documented/attributes/spellsong.rb', line 256 def self.sonicweaponbonus self.sonicbladebonus end |
.sonicweapondurability ⇒ Integer
Returns the durability of the sonic weapon.
143 144 145 |
# File 'documented/attributes/spellsong.rb', line 143 def self.sonicweapondurability self.sonicbladedurability end |
.swordcost ⇒ Array<Integer>
Returns the sword cost for spells.
336 337 338 |
# File 'documented/attributes/spellsong.rb', line 336 def self.swordcost [25, 15] end |
.sync ⇒ String
Synchronizes the spellsong duration based on active bard spells.
20 21 22 23 24 |
# File 'documented/attributes/spellsong.rb', line 20 def self.sync timed_spell = Effects::Spells.to_h.keys.find { |k| k.to_s.match(/10[0-9][0-9]/) } return 'No active bard spells' if timed_spell.nil? @@renewed = Time.at(Time.now.to_f - self.timeleft.to_f + (Effects::Spells.time_left(timed_spell) * 60.to_f)) # duration end |
.timeleft ⇒ Float
Calculates the remaining time left for the spellsong.
56 57 58 59 |
# File 'documented/attributes/spellsong.rb', line 56 def self.timeleft return 0.0 if Stats.prof != 'Bard' (self.duration - ((Time.now.to_f - @@renewed.to_f) % self.duration)) / 60.to_f end |
.tonisdodgebonus ⇒ Integer
Calculates the dodge bonus for the tonis spell.
205 206 207 208 209 210 |
# File 'documented/attributes/spellsong.rb', line 205 def self.tonisdodgebonus thresholds = [1, 2, 3, 5, 8, 10, 14, 17, 21, 26, 31, 36, 42, 49, 55, 63, 70, 78, 87, 96] bonus = 20 thresholds.each { |val| if Skills.elair >= val then bonus += 1 end } bonus end |
.tonishastebonus ⇒ Integer
Calculates the haste bonus for the tonis spell.
159 160 161 162 163 164 |
# File 'documented/attributes/spellsong.rb', line 159 def self.tonishastebonus bonus = -1 thresholds = [30, 75] thresholds.each { |val| if Skills.elair >= val then bonus -= 1 end } bonus end |
.valorbonus ⇒ Integer
Calculates the valor bonus based on bard level.
272 273 274 |
# File 'documented/attributes/spellsong.rb', line 272 def self.valorbonus 10 + (([Spells., Stats.level].min - 10) / 2).round end |
.valorcost ⇒ Array<Integer>
Calculates the cost for the valor spell.
280 281 282 |
# File 'documented/attributes/spellsong.rb', line 280 def self.valorcost [10 + (self.valorbonus / 2), 3 + (self.valorbonus / 5)] end |
.weaponcost ⇒ Array<Integer>
Returns the weapon cost for spells.
320 321 322 |
# File 'documented/attributes/spellsong.rb', line 320 def self.weaponcost [12, 4] end |