Files
infinitefusion-e18/Data/Scripts/011_Data/015_Ability_Data.rb

91 lines
2.5 KiB
Ruby

class Data
class Ability
attr_reader :id
attr_reader :id_number
attr_reader :real_name
attr_reader :real_description
DATA = {}
def initialize(hash)
validate hash => Hash, hash[:id] => Symbol
@id = hash[:id]
@id_number = hash[:id_number] || -1
@real_name = hash[:name] || "Unnamed"
@real_description = hash[:description] || "???"
end
# @return [String] the translated name of this ability
def name
return pbGetMessage(MessageTypes::Abilities, @id_number)
end
# @return [String] the translated description of this ability
def description
return pbGetMessage(MessageTypes::AbilityDescs, @id_number)
end
# @param other [Symbol, Ability, Integer]
# @return [Boolean] whether other is the same as this ability
def ==(other)
return false if other.nil?
validate other => [Symbol, Ability, Integer]
if other.is_a?(Symbol)
return @id == other
elsif other.is_a?(Ability)
return @id == other.id
elsif other.is_a?(Integer)
return @id_number == other
end
return false
end
# @param ability_id [Symbol, Ability, Integer]
# @return [Boolean] whether the given ability_id is defined as an Ability
def self.exists?(ability_id)
return false if ability_id.nil?
validate ability_id => [Symbol, Ability, Integer]
ability_id = ability_id.id if ability_id.is_a?(Ability)
return !DATA[ability_id].nil?
end
# @param ability_id [Symbol, Ability, Integer]
# @return [Ability]
def self.get(ability_id)
validate ability_id => [Symbol, Ability, Integer]
return ability_id if ability_id.is_a?(Ability)
# if ability_id.is_a?(Integer)
# p "Please switch to symbols, thanks."
# end
raise "Unknown ability ID #{ability_id}." unless DATA.has_key?(ability_id)
return DATA[ability_id]
end
def self.try_get(ability_id)
return nil if ability_id.nil?
validate ability_id => [Symbol, Ability, Integer]
return ability_id if ability_id.is_a?(Ability)
# if ability_id.is_a?(Integer)
# p "Please switch to symbols, thanks."
# end
return (DATA.has_key?(ability_id)) ? DATA[ability_id] : nil
end
def self.each
DATA.keys.sort.each do |key|
yield DATA[key] if key.is_a?(Symbol)
end
end
def self.load
const_set(:DATA, load_data("Data/abilities.dat"))
end
def self.save
save_data(DATA, "Data/abilities.dat")
end
end
end