diff options
author | David Gay <david@davidgay.org> | 2021-07-07 21:46:13 -0400 |
---|---|---|
committer | David Gay <david@davidgay.org> | 2021-07-07 21:46:22 -0400 |
commit | 4850c9d042f85f54025ba528fe987f390c344dcc (patch) | |
tree | 15fa17c5ac02445f7248bd9041c82eca0b5ad66b /app | |
parent | 9c015e16340c80a35aad1cde299218c650f5ba35 (diff) |
Give bollyrots and crypt writhes double the damage capacity at night
Diffstat (limited to 'app')
-rw-r--r-- | app/lib/activity_processor.rb | 3 | ||||
-rw-r--r-- | app/models/concerns/has_whatnot.rb | 12 | ||||
-rw-r--r-- | app/models/monster.rb | 2 |
3 files changed, 15 insertions, 2 deletions
diff --git a/app/lib/activity_processor.rb b/app/lib/activity_processor.rb index cca2185..5d80b15 100644 --- a/app/lib/activity_processor.rb +++ b/app/lib/activity_processor.rb @@ -271,8 +271,9 @@ class ActivityProcessor dealt_damage = {} actor.damage_ranges.each do |data| + dealt_damage[data[:gid]] ||= 0 damage_roll = rand(data[:min]..data[:max]) - dealt_damage[data[:gid]] = damage_roll + dealt_damage[data[:gid]] += damage_roll end # If you can't do damage any other way, hit 'em with your fists! diff --git a/app/models/concerns/has_whatnot.rb b/app/models/concerns/has_whatnot.rb index 22322c0..987c969 100644 --- a/app/models/concerns/has_whatnot.rb +++ b/app/models/concerns/has_whatnot.rb @@ -18,5 +18,17 @@ module HasWhatnot def where_has_tag(tag) where("whatnot->'tags' ? :tag", tag: tag) end + + def conditions_met?(data) + data[:conditions]&.each do |conditions_data| + case conditions_data[:type] + when "time_of_day" + return false unless conditions_data[:times].include? World.time_of_day.to_s + else + raise "Invalid condition type GID (#{conditions_data[:type]})" + end + end + true + end end end diff --git a/app/models/monster.rb b/app/models/monster.rb index 40018fd..9e3060f 100644 --- a/app/models/monster.rb +++ b/app/models/monster.rb @@ -22,7 +22,7 @@ class Monster < ApplicationRecord end def damage_ranges - self.whatnot[:hit_effects].filter_map { |e| { gid: e[:gid], min: e[:min], max: e[:max] } if e[:type] == "damage" } + self.whatnot[:hit_effects].filter_map { |e| { gid: e[:gid], min: e[:min], max: e[:max] } if e[:type] == "damage" && conditions_met?(e) } end def resistance(damage_type) |