Merge branch 'pr/43' into refactor

This commit is contained in:
Maruno17
2020-10-17 14:40:52 +01:00
18 changed files with 201 additions and 106 deletions

View File

@@ -141,8 +141,7 @@ module PokeBattle_BattleCommon
end
# Modify the Pokémon's properties because of the capture
if pbIsSnagBall?(ball)
pkmn.ot = pbPlayer.name
pkmn.trainerID = pbPlayer.id
pkmn.owner = Pokemon::Owner.new_from_trainer(pbPlayer)
end
BallHandlers.onCatch(ball,self,pkmn)
pkmn.ballused = pbGetBallType(ball)

View File

@@ -134,10 +134,10 @@ class PokeBattle_Battle
exp /= 7
end
# Foreign Pokémon gain more Exp
isOutsider = (pkmn.trainerID!=pbPlayer.id ||
(pkmn.language!=0 && pkmn.language!=pbPlayer.language))
isOutsider = (pkmn.owner.id != pbPlayer.id ||
(pkmn.owner.language != 0 && pkmn.owner.language != pbPlayer.language))
if isOutsider
if pkmn.language!=0 && pkmn.language!=pbPlayer.language
if pkmn.owner.language != 0 && pkmn.owner.language != pbPlayer.language
exp = (exp*1.7).floor
else
exp = (exp*1.5).floor

View File

@@ -882,8 +882,7 @@ def pbRegisterPartner(trainerid,trainername,partyid=0)
trainerobject = PokeBattle_Trainer.new(_INTL(trainer[0].name),trainerid)
trainerobject.setForeignID($Trainer)
for i in trainer[2]
i.trainerID = trainerobject.id
i.ot = trainerobject.name
i.owner = Pokemon::Owner.new_from_trainer(trainerobject)
i.calcStats
end
$PokemonGlobal.partner = [trainerid,trainerobject.name,trainerobject.id,trainer[2]]

View File

@@ -155,8 +155,8 @@ def pbDayCareGetCompat
isConst?(compat21,PBEggGroups,:Ditto)
if pbDayCareCompatibleGender(pkmn1,pkmn2)
ret = 1
ret += 1 if pkmn1.species==pkmn2.species
ret += 1 if pkmn1.trainerID!=pkmn2.trainerID
ret += 1 if pkmn1.species == pkmn2.species
ret += 1 if pkmn1.owner.id != pkmn2.owner.id
return ret
end
end
@@ -350,7 +350,7 @@ def pbDayCareGenerateEgg
end
# Masuda method and Shiny Charm
shinyretries = 0
shinyretries += 5 if father.language!=mother.language
shinyretries += 5 if father.owner.language != mother.owner.language
shinyretries += 2 if hasConst?(PBItems,:SHINYCHARM) && $PokemonBag.pbHasItem?(:SHINYCHARM)
if shinyretries>0
shinyretries.times do

View File

@@ -77,10 +77,6 @@ class Pokemon
attr_accessor :pokerus
# @return [Integer] this Pokémon's personal ID
attr_accessor :personalID
# The 32-bit ID of this Pokémon's trainer. The secret ID is in the
# upper 16 bits.
# @return [Integer] the ID of this Pokémon's trainer
attr_accessor :trainerID
# @return [Integer] the manner this Pokémon was obtained:
# 0 (met), 1 (as egg), 2 (traded), 4 (fateful encounter)
attr_accessor :obtainMode
@@ -96,15 +92,6 @@ class Pokemon
# Otherwise returns 0.
# @return [Integer] the map ID where egg was hatched (0 by default)
attr_accessor :hatchedMap
# @param value [Integer] new language
attr_writer :language
# @return [String] the name of the original trainer
attr_accessor :ot
# Changes the gender of the original trainer. This is for information only,
# and is not used to verify ownership of the Pokémon.
# @param value [Integer] new value for the original trainer's gender:
# 0 - male, 1 - female, 2 - mixed, 3 - unknown
attr_writer :otgender
# @param value [Integer] new contest stat
attr_writer :cool,:beauty,:cute,:smart,:tough,:sheen
@@ -121,23 +108,25 @@ class Pokemon
# Ownership, obtained information
#=============================================================================
# @return [Integer] the public portion of the original trainer's ID
def publicID
return @trainerID & 0xFFFF
# @return [Owner] this Pokémon's owner
def owner
return @owner
end
# Changes this Pokémon's owner.
# @param new_owner [Owner] the owner to change to
def owner=(new_owner)
validate new_owner => Owner
@owner = new_owner
end
# @param trainer [PokeBattle_Trainer] the trainer to compare to the OT
# @return [Boolean] whether the given trainer and this Pokémon's original trainer don't match
def foreign?(trainer)
return @trainerID != trainer.id || @ot != trainer.name
return @owner.id != trainer.id || @owner.name != trainer.name
end
alias isForeign? foreign?
# @return [0, 1, 2] the gender of this Pokémon original trainer (0 = male, 1 = female, 2 = unknown)
def otgender
return @otgender || 2
end
# @return [Integer] this Pokémon's level when it was obtained
def obtainLevel
return @obtainLevel || 0
@@ -873,11 +862,6 @@ class Pokemon
return @name != self.speciesName
end
# @return [Integer] this Pokémon's language
def language
return @language || 0
end
# @return [Integer] the markings this Pokémon has
def markings
return @markings || 0
@@ -1051,6 +1035,7 @@ class Pokemon
ret.ivMaxed = @ivMaxed.clone
ret.ev = @ev.clone
ret.moves = []
ret.owner = @owner.clone
@moves.each_with_index { |m, i| ret.moves[i] = m.clone }
ret.ribbons = @ribbons.clone if @ribbons
return ret
@@ -1059,9 +1044,9 @@ class Pokemon
# Creates a new Pokémon object.
# @param species [Integer, Symbol, String] Pokémon species
# @param level [Integer] Pokémon level
# @param owner [PokeBattle_Trainer] object for the original trainer
# @param owner [Owner, PokeBattle_Trainer] Pokémon owner (the player by default)
# @param withMoves [Boolean] whether the Pokémon should have moves
def initialize(species, level, owner = nil, withMoves = true)
def initialize(species, level, owner = $Trainer, withMoves = true)
ospecies = species.to_s
species = getID(PBSpecies, species)
cname = getConstantName(PBSpecies, species) rescue nil
@@ -1090,15 +1075,12 @@ class Pokemon
@ribbons = []
@ballused = 0
@eggsteps = 0
if owner
@trainerID = owner.id
@ot = owner.name
@otgender = owner.gender
@language = owner.language
if owner.is_a?(Owner)
@owner = owner
elsif owner.is_a?(PokeBattle_Trainer)
@owner = Owner.new_from_trainer(owner)
else
@trainerID = 0
@ot = ""
@otgender = 2
@owner = Owner.new(0, '', 2, 2)
end
@obtainMap = ($game_map) ? $game_map.map_id : 0
@obtainText = nil

View File

@@ -0,0 +1,71 @@
class Pokemon
# Stores information about a Pokémon's owner.
class Owner
# @return [Integer] the ID of the owner
attr_reader :id
# @return [String] the name of the owner
attr_reader :name
# @return [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown)
attr_reader :gender
# @return [Integer] the language of the owner (see {pbGetLanguage} for language IDs)
attr_reader :language
# @param id [Integer] the ID of the owner
# @param name [String] the name of the owner
# @param gender [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown)
# @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs)
def initialize(id, name, gender, language)
validate id => Integer, name => String, gender => Integer, language => Integer
@id = id
@name = name
@gender = gender
@language = language
end
# Returns a new Owner object populated with values taken from +trainer+.
# @param trainer [PokeBattle_Trainer] trainer object to read data from
# @return [Owner] new Owner object
def self.new_from_trainer(trainer)
validate trainer => PokeBattle_Trainer
return new(trainer.id, trainer.name, trainer.gender, trainer.language)
end
# Returns an Owner object with a foreign ID.
# @param name [String] owner name
# @param gender [Integer] owner gender
# @param language [Integer] owner language
# @return [Owner] foreign Owner object
def self.new_foreign(name = '', gender = 2, language = 2)
return new($Trainer.getForeignID, name, gender, language)
end
# @param new_id [Integer] new owner ID
def id=(new_id)
validate new_id => Integer
@id = new_id
end
# @param new_name [String] new owner name
def name=(new_name)
validate new_name => String
@name = new_name
end
# @param new_gender [Integer] new owner gender
def gender=(new_gender)
validate new_gender => Integer
@gender = new_gender
end
# @param new_language [Integer] new owner language
def language=(new_language)
validate new_language => Integer
@language = new_language
end
# @return [Integer] the public portion of the owner's ID
def public_id
return @id & 0xFFFF
end
end
end

View File

@@ -1,25 +0,0 @@
#===============================================================================
# Deprecated classes, methods and constants for Pokémon.
# These will be removed in a future Essentials version.
#===============================================================================
# @deprecated Use {Pokemon} instead. PokeBattle_Pokemon has been turned into an alias
# and is slated to be removed in vXX.
class PokeBattle_Pokemon; end
PokeBattle_Pokemon = Pokemon
class Pokemon
# @deprecated Use {MAX_NAME_SIZE} instead. This alias is slated to be removed in vXX.
MAX_POKEMON_NAME_SIZE = MAX_NAME_SIZE
end
# (see Pokemon#initialize)
# @deprecated Use +Pokemon.new+ instead. This method and its aliases are
# slated to be removed in vXX.
def pbNewPkmn(species, level, owner = $Trainer, withMoves = true)
Deprecation.warn_method('pbNewPkmn', 'vXX', 'Pokemon.new')
return Pokemon.new(species, level, owner, withMoves)
end
alias pbGenPkmn pbNewPkmn
alias pbGenPoke pbNewPkmn

View File

@@ -0,0 +1,79 @@
#===============================================================================
# Deprecated classes, methods and constants for Pokémon.
# These will be removed in a future Essentials version.
#===============================================================================
# @deprecated Use {Pokemon} instead. PokeBattle_Pokemon has been turned into an alias
# and is slated to be removed in vXX.
class PokeBattle_Pokemon; end
PokeBattle_Pokemon = Pokemon
class Pokemon
# @deprecated Use {MAX_NAME_SIZE} instead. This alias is slated to be removed in vXX.
MAX_POKEMON_NAME_SIZE = MAX_NAME_SIZE
# @deprecated Use {Owner#public_id} instead. This alias is slated to be removed in vXX.
def publicID
Deprecation.warn_method('Pokemon#publicID', 'vXX', 'Pokemon::Owner#public_id')
return @owner.public_id
end
# @deprecated Use {Owner#id} instead. This alias is slated to be removed in vXX.
def trainerID
Deprecation.warn_method('Pokemon#trainerID', 'vXX', 'Pokemon::Owner#id')
return @owner.id
end
# @deprecated Use {Owner#id=} instead. This alias is slated to be removed in vXX.
def trainerID=(value)
Deprecation.warn_method('Pokemon#trainerID=', 'vXX', 'Pokemon::Owner#id=')
@owner.id = value
end
# @deprecated Use {Owner#name} instead. This alias is slated to be removed in vXX.
def ot
Deprecation.warn_method('Pokemon#ot', 'vXX', 'Pokemon::Owner#name')
return @owner.name
end
# @deprecated Use {Owner#name=} instead. This alias is slated to be removed in vXX.
def ot=(value)
Deprecation.warn_method('Pokemon#ot=', 'vXX', 'Pokemon::Owner#name=')
@owner.name = value
end
# @deprecated Use {Owner#gender} instead. This alias is slated to be removed in vXX.
def otgender
Deprecation.warn_method('Pokemon#otgender', 'vXX', 'Pokemon::Owner#gender')
return @owner.gender
end
# @deprecated Use {Owner#gender=} instead. This alias is slated to be removed in vXX.
def otgender=(value)
Deprecation.warn_method('Pokemon#otgender=', 'vXX', 'Pokemon::Owner#gender=')
@owner.gender = value
end
# @deprecated Use {Owner#language} instead. This alias is slated to be removed in vXX.
def language
Deprecation.warn_method('Pokemon#language', 'vXX', 'Pokemon::Owner#language')
return @owner.language
end
# @deprecated Use {Owner#language=} instead. This alias is slated to be removed in vXX.
def language=(value)
Deprecation.warn_method('Pokemon#language=', 'vXX', 'Pokemon::Owner#language=')
@owner.language = value
end
end
# (see Pokemon#initialize)
# @deprecated Use +Pokemon.new+ instead. This method and its aliases are
# slated to be removed in vXX.
def pbNewPkmn(species, level, owner = $Trainer, withMoves = true)
Deprecation.warn_method('pbNewPkmn', 'vXX', 'Pokemon.new')
return Pokemon.new(species, level, owner, withMoves)
end
alias pbGenPkmn pbNewPkmn
alias pbGenPoke pbNewPkmn

View File

@@ -401,18 +401,18 @@ class PokemonSummary_Scene
textpos.push([sprintf("%03d",dexnum),435,80,2,dexNumBase,dexNumShadow])
end
# Write Original Trainer's name and ID number
if @pokemon.ot==""
if @pokemon.owner.name.empty?
textpos.push([_INTL("RENTAL"),435,176,2,Color.new(64,64,64),Color.new(176,176,176)])
textpos.push(["?????",435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
else
ownerbase = Color.new(64,64,64)
ownershadow = Color.new(176,176,176)
case @pokemon.otgender
case @pokemon.owner.gender
when 0; ownerbase = Color.new(24,112,216); ownershadow = Color.new(136,168,208)
when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144)
end
textpos.push([@pokemon.ot,435,176,2,ownerbase,ownershadow])
textpos.push([sprintf("%05d",@pokemon.publicID),435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
textpos.push([@pokemon.owner.name,435,176,2,ownerbase,ownershadow])
textpos.push([sprintf("%05d",@pokemon.owner.public_id),435,208,2,Color.new(64,64,64),Color.new(176,176,176)])
end
# Write Exp text OR heart gauge message (if a Shadow Pokémon)
if @pokemon.shadowPokemon?

View File

@@ -192,8 +192,7 @@ end
def pbHatch(pokemon)
speciesname = pokemon.speciesName
pokemon.name = speciesname
pokemon.trainerID = $Trainer.id
pokemon.ot = $Trainer.name
pokemon.owner = Pokemon::Owner.new_from_trainer($Trainer)
pokemon.happiness = 120
pokemon.timeEggHatched = pbGetTimeNow
pokemon.obtainMode = 1 # hatched from egg

View File

@@ -170,7 +170,7 @@ class PokemonTrade_Scene
speciesname2=PBSpecies.getName(@pokemon2.species)
pbMessageDisplay(@sprites["msgwindow"],
_ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\\wtnp[0]",
@pokemon.name,@pokemon.publicID,@pokemon.ot)) { pbUpdate }
@pokemon.name,@pokemon.owner.public_id,@pokemon.owner.name)) { pbUpdate }
pbMessageWaitForInput(@sprites["msgwindow"],50,true) { pbUpdate }
pbPlayDecisionSE
pbScene1
@@ -181,7 +181,7 @@ class PokemonTrade_Scene
pbScene2
pbMessageDisplay(@sprites["msgwindow"],
_ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\1",
@pokemon2.name,@pokemon2.publicID,@pokemon2.ot)) { pbUpdate }
@pokemon2.name,@pokemon2.owner.public_id,@pokemon2.owner.name)) { pbUpdate }
pbMessageDisplay(@sprites["msgwindow"],
_INTL("Take good care of {1}.",speciesname2)) { pbUpdate }
end
@@ -195,10 +195,7 @@ def pbStartTrade(pokemonIndex,newpoke,nickname,trainerName,trainerGender=0)
opponent.setForeignID($Trainer)
yourPokemon = nil; resetmoves = true
if newpoke.is_a?(Pokemon)
newpoke.trainerID = opponent.id
newpoke.ot = opponent.name
newpoke.otgender = opponent.gender
newpoke.language = opponent.language
newpoke.owner = Pokemon::Owner.new_from_trainer(opponent)
yourPokemon = newpoke
resetmoves = false
else

View File

@@ -302,7 +302,7 @@ class HallOfFame_Scene
end
pokename+="/"+speciesname
pokename=_INTL("Egg")+"/"+_INTL("Egg") if pokemon.egg?
idno=(pokemon.ot=="" || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.publicID)
idno=(pokemon.owner.name.empty? || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.owner.public_id)
dexnumber=pokemon.egg? ? _INTL("No. ???") : _ISPRINTF("No. {1:03d}",pokemon.species)
textPositions=[
[dexnumber,32,Graphics.height-80,0,BASECOLOR,SHADOWCOLOR],

View File

@@ -18,7 +18,7 @@ def pbLottery(winnum,nameVar=2,positionVar=3,matchedVar=4)
winmatched=0
for i in $Trainer.party
thismatched=0
id=i.publicID
id=i.owner.public_id
for j in 0...5
if (id/(10**j))%10 == (winnum/(10**j))%10
thismatched+=1
@@ -34,7 +34,7 @@ def pbLottery(winnum,nameVar=2,positionVar=3,matchedVar=4)
end
pbEachPokemon { |poke,_box|
thismatched=0
id=poke.publicID
id=poke.owner.public_id
for j in 0...5
if (id/(10**j))%10 == (winnum/(10**j))%10
thismatched+=1

View File

@@ -139,12 +139,8 @@ def pbAddForeignPokemon(pokemon,level=nil,ownerName=nil,nickname=nil,ownerGender
if pokemon.is_a?(Integer) && level.is_a?(Integer)
pokemon = Pokemon.new(pokemon,level)
end
# Set original trainer to a foreign one (if ID isn't already foreign)
if pokemon.trainerID==$Trainer.id
pokemon.trainerID = $Trainer.getForeignID
pokemon.ot = ownerName if ownerName && ownerName!=""
pokemon.otgender = ownerGender
end
# Set original trainer to a foreign one
pokemon.owner = Pokemon::Owner.new_foreign(ownerName || "", ownerGender)
# Set nickname
pokemon.name = nickname[0, Pokemon::MAX_NAME_SIZE] if nickname && nickname!=""
# Recalculate stats

View File

@@ -667,9 +667,9 @@ module PokemonDebugMixin
when "ownership"
cmd = 0
loop do
gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender]
msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID),
_INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID)
gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.owner.gender]
msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id),
_INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id)
][pkmn.foreign?($Trainer) ? 1 : 0]
cmd = pbShowCommands(msg,[
_INTL("Make player's"),
@@ -680,25 +680,23 @@ module PokemonDebugMixin
break if cmd<0
case cmd
when 0 # Make player's
pkmn.trainerID = $Trainer.id
pkmn.ot = $Trainer.name
pkmn.otgender = $Trainer.gender
pkmn.owner = Pokemon::Owner.new_from_trainer($Trainer)
when 1 # Set OT's name
pkmn.ot = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE)
pkmn.owner.name = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE)
when 2 # Set OT's gender
cmd2 = pbShowCommands(_INTL("Set OT's gender."),
[_INTL("Male"),_INTL("Female"),_INTL("Unknown")],pkmn.otgender)
pkmn.otgender = cmd2 if cmd2>=0
[_INTL("Male"),_INTL("Female"),_INTL("Unknown")],pkmn.owner.gender)
pkmn.owner.gender = cmd2 if cmd2>=0
when 3 # Random foreign ID
pkmn.trainerID = $Trainer.getForeignID
pkmn.owner.id = $Trainer.getForeignID
when 4 # Set foreign ID
params = ChooseNumberParams.new
params.setRange(0,65535)
params.setDefaultValue(pkmn.publicID)
params.setDefaultValue(pkmn.owner.public_id)
val = pbMessageChooseNumber(
_INTL("Set the new ID (max. 65535)."),params) { pbUpdate }
pkmn.trainerID = val
pkmn.trainerID |= val << 16
pkmn.owner.id = val
pkmn.owner.id |= val << 16
end
end
#===========================================================================