Files
infinitefusion-e18/Data/Scripts/014_Trainers/001_PokeBattle_Trainer.rb
2021-01-11 23:41:35 +00:00

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