summaryrefslogtreecommitdiff
path: root/app/models/character_skill.rb
diff options
context:
space:
mode:
authorDavid Gay <david@davidgay.org>2021-05-28 21:45:50 -0400
committerDavid Gay <david@davidgay.org>2021-05-28 21:45:50 -0400
commit65752b4f73cf8e1ce83cdaf8227b5d67923ac729 (patch)
tree5aa91176d33e828a7c70f122f87946948c884026 /app/models/character_skill.rb
parentca98987c1a14655aedb4bdcf8fef7311131ca1be (diff)
Quickly port leaderboard and rankings from old Esoterra
Diffstat (limited to 'app/models/character_skill.rb')
-rw-r--r--app/models/character_skill.rb9
1 files changed, 9 insertions, 0 deletions
diff --git a/app/models/character_skill.rb b/app/models/character_skill.rb
index 20468c3..722a371 100644
--- a/app/models/character_skill.rb
+++ b/app/models/character_skill.rb
@@ -26,6 +26,11 @@ class CharacterSkill < ApplicationRecord
1459475733, 1680697391, 1935475040, 2228899094
].freeze
+ def self.top_xp_for(skill, limit: 10)
+ skill = Skill.find_by_gid(skill) if skill.is_a? String
+ where(skill: skill).order(xp: :desc, updated_at: :asc).limit(limit)
+ end
+
def self.level_for_xp(xp)
XP_TOTALS_PER_LEVEL.each_with_index do |total, index|
if total > xp
@@ -48,6 +53,10 @@ class CharacterSkill < ApplicationRecord
total_xp_for_next_level - self.xp
end
+ def rank
+ CharacterSkill.top_xp_for(self.skill, limit: nil).map(&:character).map(&:id).index(self.character.id) + 1
+ end
+
private
def xp_required_for_level(level)
level <= 120 ? XP_TOTALS_PER_LEVEL[level - 1] : nil