summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/character.rb19
-rw-r--r--app/models/item.rb7
2 files changed, 26 insertions, 0 deletions
diff --git a/app/models/character.rb b/app/models/character.rb
index 03bd510..4ee1f71 100644
--- a/app/models/character.rb
+++ b/app/models/character.rb
@@ -188,6 +188,25 @@ class Character < ApplicationRecord
1 + (skill_level(skill) / 20).floor
end
+ def available_infixes(skill)
+ skill = Skill.find_by_gid(skill) if skill.is_a? String
+ max_infixes(skill) - item_infixes.where(skill: skill).count
+ end
+
+ def infix(item, skill)
+ Character.transaction do
+ shift_item(item, -1)
+ item_infixes.create(item: item, skill: skill)
+ end
+ end
+
+ def remove_infix(item_infix)
+ Character.transaction do
+ shift_item(item_infix.item, 1)
+ item_infix.destroy
+ end
+ end
+
def add_skill_xp(skill, amount)
skill = Skill.find_by_gid(skill) if skill.is_a? String
Character.transaction do
diff --git a/app/models/item.rb b/app/models/item.rb
index 8b80788..0e25b2f 100644
--- a/app/models/item.rb
+++ b/app/models/item.rb
@@ -13,6 +13,13 @@ class Item < ApplicationRecord
self.whatnot && self.whatnot[:use_effects]&.any?
end
+ def infixable?(skill = nil)
+ skill = Skill.find_by_gid(skill) if skill.is_a? String
+ return false unless self.whatnot && self.whatnot[:infix_skills]&.any?
+ return true unless skill
+ self.whatnot[:infix_skills].select { |data| data[:gid] == skill.gid }.any?
+ end
+
def equip_slots
return [] unless self.equipment?
self.whatnot[:equip_slots].map { |data| data.to_sym }