summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/lib/activity_processor.rb28
-rw-r--r--app/models/character.rb24
-rw-r--r--app/models/item_infix.rb4
3 files changed, 49 insertions, 7 deletions
diff --git a/app/lib/activity_processor.rb b/app/lib/activity_processor.rb
index 9b03f55..e211db4 100644
--- a/app/lib/activity_processor.rb
+++ b/app/lib/activity_processor.rb
@@ -115,6 +115,24 @@ class ActivityProcessor
end
end
+ # Note: This will result in equipment being checked for breakage twice (after combat, and now) if it provides the
+ # `beastslay_speed` stat. At the time of this writing, that stat doesn't exist.
+ # But just something to keep in mind.
+ # Note: This will result in equipment being checked twice if it provides two speed stats.
+ # Fine for now since no equipment gives two skill speed stats, but may want to refine in the future.
+ if @activity.whatnot[:requirements].any?
+ required_skill_gids = @activity.whatnot[:requirements].select { |r| r[:type] == "skill" }.map { |r| r[:gid] }.uniq
+ required_skill_gids.each do |required_skill_gid|
+ skill = Skill.find_by_gid(required_skill_gid)
+ @character.do_skill_based_equipment_break_checks(skill).each do |broken_item|
+ @results.push({ type: "warning", message: "Your #{broken_item.name} was damaged beyond repair!" })
+ end
+ @character.do_skill_based_item_infix_break_checks(skill).each do |broken_item|
+ @results.push({ type: "warning", message: "Your #{broken_item.name} omen faded away." })
+ end
+ end
+ end
+
if @character.activity && @character.queued_actions
if @character.queued_actions > 0
@character.queued_actions -= 1
@@ -282,7 +300,9 @@ class ActivityProcessor
end
if char_hp < 1 || mon_hp < 1
- break_check
+ @character.do_equipment_break_checks.each do |broken_item|
+ @results.push({ type: "warning", message: "Your #{broken_item.name} was damaged beyond repair!" })
+ end
if monster_spawn
hp_lost = monster_spawn.remaining_hp - mon_hp
@@ -325,10 +345,4 @@ class ActivityProcessor
end
end
end
-
- def break_check
- @character.do_equipment_break_checks.each do |broken_item|
- @results.push({ type: "warning", message: "Your #{broken_item.name} was damaged beyond repair!" })
- end
- end
end
diff --git a/app/models/character.rb b/app/models/character.rb
index 5ff067c..0f2c5b3 100644
--- a/app/models/character.rb
+++ b/app/models/character.rb
@@ -116,6 +116,30 @@ class Character < ApplicationRecord
end
end
+ def do_skill_based_equipment_break_checks(skill)
+ skill = Skill.find_by_gid(skill) if skill.is_a? String
+ broken_items = []
+ # TODO: HACK: Should check other stats besides speed stat in the future.
+ # TODO: HACK: May not want a chance to break if speed is _reduced_. Though no equipment does this yet.
+ equipment.all.select { |eq| eq.effects.select { |ef| ef[:gid] == "#{skill.gid}_speed" }.any? }.each do |equipment|
+ if equipment.break_check
+ broken_items.push(equipment.item)
+ end
+ end
+ broken_items
+ end
+
+ def do_skill_based_item_infix_break_checks(skill)
+ skill = Skill.find_by_gid(skill) if skill.is_a? String
+ broken_items = []
+ item_infixes.where(skill: skill).each do |ii|
+ if ii.break_check
+ broken_items.push(ii.item)
+ end
+ end
+ broken_items
+ end
+
def do_equipment_break_checks(exclude_slots: [])
broken_items = []
equipment.where.not(slot: exclude_slots).each do |equipment|
diff --git a/app/models/item_infix.rb b/app/models/item_infix.rb
index 3167320..47b6aa4 100644
--- a/app/models/item_infix.rb
+++ b/app/models/item_infix.rb
@@ -9,6 +9,10 @@ class ItemInfix < ApplicationRecord
self.item.whatnot[:infix_effects]
end
+ def break_check
+ rand > 0.999 ? destroy : false
+ end
+
private
def check_max_infixes
current_infixes = character.item_infixes.where(skill: skill)