From 65752b4f73cf8e1ce83cdaf8227b5d67923ac729 Mon Sep 17 00:00:00 2001 From: David Gay Date: Fri, 28 May 2021 21:45:50 -0400 Subject: Quickly port leaderboard and rankings from old Esoterra --- app/models/character_skill.rb | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'app/models/character_skill.rb') 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 -- cgit v1.2.3