Class: Lich::DragonRealms::DRSkill
- Inherits:
-
Object
- Object
- Lich::DragonRealms::DRSkill
- Defined in:
- documented/dragonrealms/drinfomon/drskill.rb
Overview
Represents a skill in the DragonRealms game.
This class manages skill data, including experience and rank.
Instance Attribute Summary collapse
-
#baseline ⇒ Object
Returns the value of attribute baseline.
-
#current ⇒ Object
Returns the value of attribute current.
-
#exp ⇒ Object
Returns the value of attribute exp.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#percent ⇒ Object
Returns the value of attribute percent.
-
#rank ⇒ Object
Returns the value of attribute rank.
-
#skillset ⇒ Object
readonly
Returns the value of attribute skillset.
Class Method Summary collapse
- .clear_mind(val) ⇒ Object
-
.convert_rexp_str_to_seconds(time_string) ⇒ Integer
Converts a rested experience string to seconds.
- .exp_modifiers ⇒ Object
-
.find_skill(val) ⇒ DRSkill?
Finds a skill by its name.
-
.gained_exp(val) ⇒ Float
Calculates the gained experience for a skill.
- .gained_skills ⇒ Object
- .getmodrank(val) ⇒ Object
- .getpercent(val) ⇒ Object
- .getrank(val) ⇒ Object
- .getskillset(val) ⇒ Object
- .getxp(val) ⇒ Object
-
.handle_exp_change(name, new_exp) ⇒ void
Handles changes in experience for a skill.
- .include?(val) ⇒ Boolean
- .list ⇒ Object
-
.listall ⇒ void
Lists all skills and their details.
-
.lookup_alias(skill) ⇒ String
Looks up the alias for a skill based on the guild's skill aliases.
-
.reset ⇒ void
Resets the gained skills and start time.
- .rested_active? ⇒ Boolean
- .rested_exp_refresh ⇒ Object
- .rested_exp_stored ⇒ Object
- .rested_exp_usable ⇒ Object
- .start_time ⇒ Object
-
.update(name, rank, exp, percent) ⇒ void
Updates the skill's rank, experience, and percentage.
-
.update_mods(name, rank) ⇒ void
Updates the experience modifiers for a skill.
-
.update_rested_exp(stored, usable, refresh) ⇒ void
Updates the stored, usable, and refresh rested experience values.
Instance Method Summary collapse
-
#initialize(name, rank, exp, percent) ⇒ DRSkill
constructor
Initializes a new DRSkill instance.
- #lookup_skillset(skill) ⇒ Object
Constructor Details
#initialize(name, rank, exp, percent) ⇒ DRSkill
Initializes a new DRSkill instance.
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 31 def initialize(name, rank, exp, percent) @name = name # skill name like 'Evasion' @rank = rank.to_i # earned ranks in the skill # Skill mindstate x/34 # Hardcode caped skills to 34/34 @exp = rank.to_i >= 1750 ? 34 : exp.to_i @percent = percent.to_i # percent to next rank from 0 to 100 @baseline = rank.to_i + (percent.to_i / 100.0) @current = rank.to_i + (percent.to_i / 100.0) @skillset = lookup_skillset(@name) @@list.push(self) unless @@list.find { |skill| skill.name == @name } end |
Instance Attribute Details
#baseline ⇒ Object
Returns the value of attribute baseline.
23 24 25 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 23 def baseline @baseline end |
#current ⇒ Object
Returns the value of attribute current.
23 24 25 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 23 def current @current end |
#exp ⇒ Object
Returns the value of attribute exp.
23 24 25 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 23 def exp @exp end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
22 23 24 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 22 def name @name end |
#percent ⇒ Object
Returns the value of attribute percent.
23 24 25 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 23 def percent @percent end |
#rank ⇒ Object
Returns the value of attribute rank.
23 24 25 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 23 def rank @rank end |
#skillset ⇒ Object (readonly)
Returns the value of attribute skillset.
22 23 24 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 22 def skillset @skillset end |
Class Method Details
.clear_mind(val) ⇒ Object
151 152 153 154 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 151 def self.clear_mind(val) skill = find_skill(val) skill.exp = 0 if skill end |
.convert_rexp_str_to_seconds(time_string) ⇒ Integer
Converts a rested experience string to seconds.
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 215 def self.convert_rexp_str_to_seconds(time_string) # Handle empty, nil, or specific "zero" cases (less than a minute is zero because it can get stuck there) return 0 if time_string.nil? || time_string.to_s.strip.empty? || time_string.include?('none') || time_string.include?('less than a minute') total_seconds = 0 # Extract hours and optional minutes (e.g., "4:38 hours" or "6 hour") # Ruby's match returns a MatchData object or nil if (hour_match = time_string.match(/(\d+):?(\d+)?\s*hour/)) hours = hour_match[1].to_i total_seconds += hours * 60 * 60 # Handle the minutes part of a "4:38" format if hour_match[2] total_seconds += hour_match[2].to_i * 60 return total_seconds end end # Extract standalone minutes (e.g., "38 minutes") if (minute_match = time_string.match(/(\d+)\s*minute/)) total_seconds += minute_match[1].to_i * 60 end total_seconds end |
.exp_modifiers ⇒ Object
131 132 133 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 131 def self.exp_modifiers @@exp_modifiers end |
.find_skill(val) ⇒ DRSkill?
Finds a skill by its name.
208 209 210 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 208 def self.find_skill(val) @@list.find { |data| data.name == lookup_alias(val) } end |
.gained_exp(val) ⇒ Float
Calculates the gained experience for a skill.
63 64 65 66 67 68 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 63 def self.gained_exp(val) skill = find_skill(val) return 0.00 unless skill&.current (skill.current - skill.baseline).round(2) end |
.gained_skills ⇒ Object
56 57 58 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 56 def self.gained_skills @@gained_skills end |
.getmodrank(val) ⇒ Object
163 164 165 166 167 168 169 170 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 163 def self.getmodrank(val) skill = find_skill(val) return 0 unless skill rank = skill.rank.to_i modifier = exp_modifiers[skill.name].to_i rank + modifier end |
.getpercent(val) ⇒ Object
179 180 181 182 183 184 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 179 def self.getpercent(val) skill = find_skill(val) return 0 unless skill skill.percent.to_i end |
.getrank(val) ⇒ Object
156 157 158 159 160 161 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 156 def self.getrank(val) skill = find_skill(val) return 0 unless skill skill.rank.to_i end |
.getskillset(val) ⇒ Object
186 187 188 189 190 191 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 186 def self.getskillset(val) skill = find_skill(val) return nil unless skill skill.skillset end |
.getxp(val) ⇒ Object
172 173 174 175 176 177 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 172 def self.getxp(val) skill = find_skill(val) return 0 unless skill skill.exp.to_i end |
.handle_exp_change(name, new_exp) ⇒ void
This method returns an undefined value.
Handles changes in experience for a skill.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 74 def self.handle_exp_change(name, new_exp) return unless Lich.display_expgains # Only track gains for skills that already exist # (skip initial skill discovery on login) skill = find_skill(name) return unless skill old_exp = skill.exp.to_i change = new_exp.to_i - old_exp if change > 0 @@gained_skills << { skill: name, change: change } end end |
.include?(val) ⇒ Boolean
89 90 91 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 89 def self.include?(val) !find_skill(val).nil? end |
.list ⇒ Object
201 202 203 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 201 def self.list @@list end |
.listall ⇒ void
This method returns an undefined value.
Lists all skills and their details.
195 196 197 198 199 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 195 def self.listall @@list.each do |i| Lich::Messaging.msg('plain', "DRSkill: #{i.name}: #{i.rank}.#{i.percent}% [#{i.exp}/34]") end end |
.lookup_alias(skill) ⇒ String
Looks up the alias for a skill based on the guild's skill aliases.
248 249 250 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 248 def self.lookup_alias(skill) @@skills_data.dig(:guild_skill_aliases, DRStats.guild, skill) || skill end |
.reset ⇒ void
This method returns an undefined value.
Resets the gained skills and start time.
46 47 48 49 50 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 46 def self.reset @@gained_skills = [] @@start_time = Time.now @@list.each { |skill| skill.baseline = skill.current } end |
.rested_active? ⇒ Boolean
147 148 149 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 147 def self.rested_active? @@rexp_stored > 0 && @@rexp_usable > 0 end |
.rested_exp_refresh ⇒ Object
143 144 145 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 143 def self.rested_exp_refresh @@rexp_refresh end |
.rested_exp_stored ⇒ Object
135 136 137 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 135 def self.rested_exp_stored @@rexp_stored end |
.rested_exp_usable ⇒ Object
139 140 141 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 139 def self.rested_exp_usable @@rexp_usable end |
.start_time ⇒ Object
52 53 54 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 52 def self.start_time @@start_time end |
.update(name, rank, exp, percent) ⇒ void
This method returns an undefined value.
Updates the skill's rank, experience, and percentage.
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 99 def self.update(name, rank, exp, percent) handle_exp_change(name, exp) skill = find_skill(name) if skill skill.rank = rank.to_i skill.exp = skill.rank.to_i >= 1750 ? 34 : exp.to_i skill.percent = percent.to_i skill.current = rank.to_i + (percent.to_i / 100.0) else DRSkill.new(name, rank, exp, percent) end end |
.update_mods(name, rank) ⇒ void
This method returns an undefined value.
Updates the experience modifiers for a skill.
116 117 118 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 116 def self.update_mods(name, rank) exp_modifiers[lookup_alias(name)] = rank.to_i end |
.update_rested_exp(stored, usable, refresh) ⇒ void
This method returns an undefined value.
Updates the stored, usable, and refresh rested experience values.
125 126 127 128 129 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 125 def self.update_rested_exp(stored, usable, refresh) @@rexp_stored = convert_rexp_str_to_seconds(stored) @@rexp_usable = convert_rexp_str_to_seconds(usable) @@rexp_refresh = convert_rexp_str_to_seconds(refresh) end |
Instance Method Details
#lookup_skillset(skill) ⇒ Object
252 253 254 255 |
# File 'documented/dragonrealms/drinfomon/drskill.rb', line 252 def lookup_skillset(skill) result = @@skills_data[:skillsets].find { |_skillset, skills| skills.include?(skill) } result&.first end |