mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
241 lines
6.3 KiB
Ruby
241 lines
6.3 KiB
Ruby
class PokeBattle_Trainer
|
|
attr_accessor :name
|
|
attr_accessor :id
|
|
attr_writer :metaID
|
|
attr_accessor :trainertype
|
|
attr_writer :outfit
|
|
attr_accessor :badges
|
|
attr_reader :money
|
|
attr_accessor :seen
|
|
attr_accessor :owned
|
|
attr_accessor :formseen
|
|
attr_accessor :formlastseen
|
|
attr_accessor :shadowcaught
|
|
attr_accessor :party
|
|
attr_accessor :pokedex # Whether the Pokédex was obtained
|
|
attr_accessor :pokegear # Whether the Pokégear was obtained
|
|
attr_writer :language
|
|
|
|
def trainerTypeName; return GameData::TrainerType.get(@trainertype).name; end
|
|
def moneyEarned; return GameData::TrainerType.get(@trainertype).base_money; end
|
|
def gender; return GameData::TrainerType.get(@trainertype).gender; end
|
|
def male?; return GameData::TrainerType.get(@trainertype).male?; end
|
|
def female?; return GameData::TrainerType.get(@trainertype).female?; end
|
|
alias isMale? male?
|
|
alias isFemale? female?
|
|
def skill; return GameData::TrainerType.get(@trainertype).skill_level; end
|
|
def skillCode; return GameData::TrainerType.get(@trainertype).skill_code; end
|
|
|
|
def hasSkillCode(code)
|
|
c = skillCode
|
|
return c && c != "" && c[/#{code}/]
|
|
end
|
|
|
|
def fullname
|
|
return _INTL("{1} {2}", trainerTypeName, @name)
|
|
end
|
|
|
|
#=============================================================================
|
|
# Unique ID number
|
|
#=============================================================================
|
|
def publicID(id = nil) # Portion of the ID which is visible on the Trainer Card
|
|
return id ? id & 0xFFFF : @id & 0xFFFF
|
|
end
|
|
|
|
def secretID(id = nil) # Other portion of the ID
|
|
return id ? id >> 16 : @id >> 16
|
|
end
|
|
|
|
def getForeignID # Random ID other than this Trainer's ID
|
|
fid = 0
|
|
loop do
|
|
fid = rand(2 ** 16) | rand(2 ** 16) << 16
|
|
break if fid != @id
|
|
end
|
|
return fid
|
|
end
|
|
|
|
def setForeignID(other)
|
|
@id = other.getForeignID
|
|
end
|
|
|
|
def metaID
|
|
@metaID = $PokemonGlobal.playerID if !@metaID
|
|
@metaID = 0 if !@metaID
|
|
return @metaID
|
|
end
|
|
|
|
#=============================================================================
|
|
# Other properties
|
|
#=============================================================================
|
|
def outfit
|
|
return @outfit || 0
|
|
end
|
|
|
|
def language
|
|
return @language || pbGetLanguage
|
|
end
|
|
|
|
def money=(value)
|
|
@money = [[value, MAX_MONEY].min, 0].max
|
|
end
|
|
|
|
def numbadges # Number of badges
|
|
ret = 0
|
|
@badges.each { |b| ret += 1 if b }
|
|
return ret
|
|
end
|
|
|
|
#=============================================================================
|
|
# Party
|
|
#=============================================================================
|
|
def pokemonParty
|
|
return @party.find_all { |p| p && !p.egg? }
|
|
end
|
|
|
|
def ablePokemonParty
|
|
return @party.find_all { |p| p && !p.egg? && !p.fainted? }
|
|
end
|
|
|
|
def partyCount
|
|
return @party.length
|
|
end
|
|
|
|
def pokemonCount
|
|
ret = 0
|
|
@party.each { |p| ret += 1 if p && !p.egg? }
|
|
return ret
|
|
end
|
|
|
|
def ablePokemonCount
|
|
ret = 0
|
|
@party.each { |p| ret += 1 if p && !p.egg? && !p.fainted? }
|
|
return ret
|
|
end
|
|
|
|
def firstParty
|
|
return nil if @party.length == 0
|
|
return @party[0]
|
|
end
|
|
|
|
def firstPokemon
|
|
p = self.pokemonParty
|
|
return nil if p.length == 0
|
|
return p[0]
|
|
end
|
|
|
|
def firstAblePokemon
|
|
p = self.ablePokemonParty
|
|
return nil if p.length == 0
|
|
return p[0]
|
|
end
|
|
|
|
def lastParty
|
|
return nil if @party.length == 0
|
|
return @party[@party.length - 1]
|
|
end
|
|
|
|
def lastPokemon
|
|
p = self.pokemonParty
|
|
return nil if p.length == 0
|
|
return p[p.length - 1]
|
|
end
|
|
|
|
def lastAblePokemon
|
|
p = self.ablePokemonParty
|
|
return nil if p.length == 0
|
|
return p[p.length - 1]
|
|
end
|
|
|
|
def party_full?
|
|
return @party.length >= MAX_PARTY_SIZE
|
|
end
|
|
|
|
#=============================================================================
|
|
# Pokédex
|
|
#=============================================================================
|
|
def pokedexSeen(region = -1) # Number of Pokémon seen
|
|
ret = 0
|
|
if region == -1
|
|
GameData::Species.each { |s| ret += 1 if s.form == 0 && @seen[s.species] }
|
|
else
|
|
pbAllRegionalSpecies(region).each { |s| ret += 1 if s && @seen[s] }
|
|
end
|
|
return ret
|
|
end
|
|
|
|
def pokedexOwned(region = -1) # Number of Pokémon owned
|
|
ret = 0
|
|
if region == -1
|
|
GameData::Species.each { |s| ret += 1 if s.form == 0 && @owned[s.species] }
|
|
else
|
|
pbAllRegionalSpecies(region).each { |s| ret += 1 if s && @owned[s] }
|
|
end
|
|
return ret
|
|
end
|
|
|
|
def numFormsSeen(species)
|
|
species_data = GameData::Species.try_get(species)
|
|
return 0 if !species_data
|
|
species = species_data.species
|
|
ret = 0
|
|
@formseen[species] = [[], []] if !@formseen[species]
|
|
array = @formseen[species]
|
|
for i in 0...[array[0].length, array[1].length].max
|
|
ret += 1 if array[0][i] || array[1][i]
|
|
end
|
|
return ret
|
|
end
|
|
|
|
def seen?(species)
|
|
species_data = GameData::Species.try_get(species)
|
|
return (species_data) ? @seen[species_data.species] : false
|
|
end
|
|
alias hasSeen? seen?
|
|
|
|
def owned?(species)
|
|
species_data = GameData::Species.try_get(species)
|
|
return (species_data) ? @owned[species_data.species] : false
|
|
end
|
|
alias hasOwned? owned?
|
|
|
|
def setSeen(species)
|
|
species_data = GameData::Species.try_get(species)
|
|
@seen[species_data.species] = true if species_data
|
|
end
|
|
|
|
def setOwned(species)
|
|
species_data = GameData::Species.try_get(species)
|
|
@owned[species_data.species] = true if species_data
|
|
end
|
|
|
|
def clearPokedex
|
|
@seen = {}
|
|
@owned = {}
|
|
@formseen = {}
|
|
@formlastseen = {}
|
|
end
|
|
|
|
#=============================================================================
|
|
# Initializing
|
|
#=============================================================================
|
|
def initialize(name, trainertype)
|
|
@name = name
|
|
@language = pbGetLanguage
|
|
@trainertype = trainertype
|
|
@id = rand(2 ** 16) | rand(2 ** 16) << 16
|
|
@metaID = 0
|
|
@outfit = 0
|
|
@pokegear = false
|
|
@pokedex = false
|
|
clearPokedex
|
|
@shadowcaught = {}
|
|
@badges = []
|
|
for i in 0...8
|
|
@badges[i] = false
|
|
end
|
|
@money = INITIAL_MONEY
|
|
@party = []
|
|
end
|
|
end
|