mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-01-23 06:46:00 +00:00
Implemented GameData::Ribbon
This commit is contained in:
@@ -19,7 +19,7 @@ critical hit.
|
||||
def pbPurify(pkmn, scene)
|
||||
return if !pkmn.shadowPokemon? || pkmn.heart_gauge != 0
|
||||
pkmn.shadow = false
|
||||
pkmn.giveRibbon(PBRibbons::NATIONAL)
|
||||
pkmn.giveRibbon(:NATIONAL)
|
||||
scene.pbDisplay(_INTL("{1} opened the door to its heart!", pkmn.name))
|
||||
old_moves = []
|
||||
pkmn.moves.each { |m| old_moves.push(m.id) }
|
||||
|
||||
@@ -35,7 +35,7 @@ class Pokemon
|
||||
attr_accessor :moves
|
||||
# @return [Array<Integer>] the IDs of moves known by this Pokémon when it was obtained
|
||||
attr_accessor :first_moves
|
||||
# @return [Array<Integer>] an array of ribbons owned by this Pokémon
|
||||
# @return [Array<Symbol>] an array of ribbons owned by this Pokémon
|
||||
attr_accessor :ribbons
|
||||
# @return [Integer] contest stats
|
||||
attr_accessor :cool, :beauty, :cute, :smart, :tough, :sheen
|
||||
@@ -662,50 +662,56 @@ class Pokemon
|
||||
return @ribbons.length
|
||||
end
|
||||
|
||||
# @param ribbon [Integer, Symbol, String] ribbon ID to check
|
||||
# @param ribbon [Symbol, String, GameData::Ribbon, Integer] ribbon ID to check for
|
||||
# @return [Boolean] whether this Pokémon has the specified ribbon
|
||||
def hasRibbon?(ribbon)
|
||||
ribbon = getID(PBRibbons, ribbon)
|
||||
return ribbon > 0 && @ribbons.include?(ribbon)
|
||||
ribbon_data = GameData::Ribbon.try_get(ribbon)
|
||||
return ribbon_data && @ribbons.include?(ribbon_data.id)
|
||||
end
|
||||
|
||||
# Gives a ribbon to this Pokémon.
|
||||
# @param ribbon [Integer, Symbol, String] ID of the ribbon to give
|
||||
# @param ribbon [Symbol, String, GameData::Ribbon, Integer] ID of the ribbon to give
|
||||
def giveRibbon(ribbon)
|
||||
ribbon = getID(PBRibbons, ribbon)
|
||||
return if ribbon == 0
|
||||
@ribbons.push(ribbon) if !@ribbons.include?(ribbon)
|
||||
ribbon_data = GameData::Ribbon.try_get(ribbon)
|
||||
return if !ribbon_data || @ribbons.include?(ribbon_data.id)
|
||||
@ribbons.push(ribbon_data.id)
|
||||
end
|
||||
|
||||
# Replaces one ribbon with the next one along, if possible.
|
||||
# Replaces one ribbon with the next one along, if possible. If none of the
|
||||
# given ribbons are owned, give the first one.
|
||||
# @return [Symbol, nil] ID of the ribbon that was gained
|
||||
def upgradeRibbon(*arg)
|
||||
for i in 0...arg.length - 1
|
||||
this_ribbon_data = GameData::Ribbon.try_get(i)
|
||||
next if !this_ribbon_data
|
||||
for j in 0...@ribbons.length
|
||||
next if @ribbons[j] != getID(PBRibbons, arg[i])
|
||||
@ribbons[j] = getID(PBRibbons, arg[i + 1])
|
||||
next if @ribbons[j] != this_ribbon_data.id
|
||||
next_ribbon_data = GameData::Ribbon.try_get(arg[i + 1])
|
||||
next if !next_ribbon_data
|
||||
@ribbons[j] = next_ribbon_data.id
|
||||
return @ribbons[j]
|
||||
end
|
||||
end
|
||||
if !hasRibbon?(arg[arg.length - 1])
|
||||
first_ribbon = getID(PBRibbons, arg[0])
|
||||
giveRibbon(first_ribbon)
|
||||
return first_ribbon
|
||||
first_ribbon_data = GameData::Ribbon.try_get(arg[0])
|
||||
last_ribbon_data = GameData::Ribbon.try_get(arg[arg.length - 1])
|
||||
if first_ribbon_data && last_ribbon_data && !hasRibbon?(last_ribbon_data.id)
|
||||
giveRibbon(first_ribbon_data.id)
|
||||
return first_ribbon_data.id
|
||||
end
|
||||
return 0
|
||||
return nil
|
||||
end
|
||||
|
||||
# Removes the specified ribbon from this Pokémon.
|
||||
# @param ribbon [Integer, Symbol, String] id of the ribbon to remove
|
||||
# @param ribbon [Symbol, String, GameData::Ribbon, Integer] ID of the ribbon to remove
|
||||
def takeRibbon(ribbon)
|
||||
return if !@ribbons
|
||||
ribbon = getID(PBRibbons, ribbon)
|
||||
return if ribbon == 0
|
||||
ribbon_data = GameData::Ribbon.try_get(ribbon)
|
||||
return if !ribbon_data
|
||||
for i in 0...@ribbons.length
|
||||
next if @ribbons[i] != ribbon
|
||||
next if @ribbons[i] != ribbon_data.id
|
||||
@ribbons[i] = nil
|
||||
@ribbons.compact!
|
||||
break
|
||||
end
|
||||
@ribbons.compact!
|
||||
end
|
||||
|
||||
# Removes all ribbons from this Pokémon.
|
||||
|
||||
@@ -27,62 +27,64 @@ class PokeBattle_Pokemon
|
||||
def self.copy(pkmn)
|
||||
owner = Pokemon::Owner.new(pkmn.trainerID, pkmn.ot, pkmn.otgender, pkmn.language)
|
||||
ret = Pokemon.new(pkmn.species, pkmn.level, owner, false)
|
||||
ret.forced_form = pkmn.forcedForm if pkmn.forcedForm
|
||||
ret.time_form_set = pkmn.formTime
|
||||
ret.exp = pkmn.exp
|
||||
ret.steps_to_hatch = pkmn.eggsteps
|
||||
ret.status = pkmn.status
|
||||
ret.statusCount = pkmn.statusCount
|
||||
ret.gender = pkmn.genderflag
|
||||
ret.shiny = pkmn.shinyflag
|
||||
ret.ability_index = pkmn.abilityflag
|
||||
ret.nature = pkmn.natureflag
|
||||
ret.forced_form = pkmn.forcedForm if pkmn.forcedForm
|
||||
ret.time_form_set = pkmn.formTime
|
||||
ret.exp = pkmn.exp
|
||||
ret.steps_to_hatch = pkmn.eggsteps
|
||||
ret.status = pkmn.status
|
||||
ret.statusCount = pkmn.statusCount
|
||||
ret.gender = pkmn.genderflag
|
||||
ret.shiny = pkmn.shinyflag
|
||||
ret.ability_index = pkmn.abilityflag
|
||||
ret.nature = pkmn.natureflag
|
||||
ret.nature_for_stats = pkmn.natureOverride
|
||||
ret.item = pkmn.item
|
||||
ret.mail = PokemonMail.copy(pkmn.mail) if pkmn.mail
|
||||
ret.item = pkmn.item
|
||||
ret.mail = PokemonMail.copy(pkmn.mail) if pkmn.mail
|
||||
pkmn.moves.each { |m| ret.moves.push(PBMove.copy(m)) if m && m.id > 0 }
|
||||
pkmn.firstmoves.each { |m| ret.add_first_move(m) }
|
||||
ret.ribbons = pkmn.ribbons.clone if pkmn.ribbons
|
||||
ret.cool = pkmn.cool if pkmn.cool
|
||||
ret.beauty = pkmn.beauty if pkmn.beauty
|
||||
ret.cute = pkmn.cute if pkmn.cute
|
||||
ret.smart = pkmn.smart if pkmn.smart
|
||||
ret.tough = pkmn.tough if pkmn.tough
|
||||
ret.sheen = pkmn.sheen if pkmn.sheen
|
||||
ret.pokerus = pkmn.pokerus if pkmn.pokerus
|
||||
ret.name = pkmn.name
|
||||
ret.happiness = pkmn.happiness
|
||||
ret.poke_ball = pbBallTypeToItem(pkmn.ballused)
|
||||
ret.markings = pkmn.markings if pkmn.markings
|
||||
ret.iv = pkmn.iv.clone
|
||||
ret.ivMaxed = pkmn.ivMaxed.clone if pkmn.ivMaxed
|
||||
ret.ev = pkmn.ev.clone
|
||||
ret.obtain_method = pkmn.obtainMode
|
||||
ret.obtain_map = pkmn.obtainMap
|
||||
ret.obtain_text = pkmn.obtainText
|
||||
ret.obtain_level = pkmn.obtainLevel if pkmn.obtainLevel
|
||||
ret.hatched_map = pkmn.hatchedMap
|
||||
ret.timeReceived = pkmn.timeReceived
|
||||
ret.timeEggHatched = pkmn.timeEggHatched
|
||||
if pkmn.ribbons
|
||||
pkmn.ribbons.each { |r| ret.giveRibbon(r) }
|
||||
end
|
||||
ret.cool = pkmn.cool if pkmn.cool
|
||||
ret.beauty = pkmn.beauty if pkmn.beauty
|
||||
ret.cute = pkmn.cute if pkmn.cute
|
||||
ret.smart = pkmn.smart if pkmn.smart
|
||||
ret.tough = pkmn.tough if pkmn.tough
|
||||
ret.sheen = pkmn.sheen if pkmn.sheen
|
||||
ret.pokerus = pkmn.pokerus if pkmn.pokerus
|
||||
ret.name = pkmn.name
|
||||
ret.happiness = pkmn.happiness
|
||||
ret.poke_ball = pbBallTypeToItem(pkmn.ballused)
|
||||
ret.markings = pkmn.markings if pkmn.markings
|
||||
ret.iv = pkmn.iv.clone
|
||||
ret.ivMaxed = pkmn.ivMaxed.clone if pkmn.ivMaxed
|
||||
ret.ev = pkmn.ev.clone
|
||||
ret.obtain_method = pkmn.obtainMode
|
||||
ret.obtain_map = pkmn.obtainMap
|
||||
ret.obtain_text = pkmn.obtainText
|
||||
ret.obtain_level = pkmn.obtainLevel if pkmn.obtainLevel
|
||||
ret.hatched_map = pkmn.hatchedMap
|
||||
ret.timeReceived = pkmn.timeReceived
|
||||
ret.timeEggHatched = pkmn.timeEggHatched
|
||||
if pkmn.fused
|
||||
ret.fused = PokeBattle_Pokemon.copy(pkmn.fused) if pkmn.fused.is_a?(PokeBattle_Pokemon)
|
||||
ret.fused = pkmn.fused if pkmn.fused.is_a?(Pokemon)
|
||||
end
|
||||
ret.personalID = pkmn.personalID
|
||||
ret.hp = pkmn.hp
|
||||
ret.personalID = pkmn.personalID
|
||||
ret.hp = pkmn.hp
|
||||
if pkmn.shadow
|
||||
ret.shadow = pkmn.shadow
|
||||
ret.heart_gauge = pkmn.heartgauge
|
||||
ret.hyper_mode = pkmn.hypermode
|
||||
ret.saved_exp = pkmn.savedexp
|
||||
ret.saved_ev = pkmn.savedev.clone
|
||||
ret.shadow_moves = []
|
||||
ret.shadow = pkmn.shadow
|
||||
ret.heart_gauge = pkmn.heartgauge
|
||||
ret.hyper_mode = pkmn.hypermode
|
||||
ret.saved_exp = pkmn.savedexp
|
||||
ret.saved_ev = pkmn.savedev.clone
|
||||
ret.shadow_moves = []
|
||||
pkmn.shadowmoves.each_with_index do |move, i|
|
||||
ret.shadow_moves[i] = GameData::Move.get(move).id if move
|
||||
end
|
||||
end
|
||||
# NOTE: Intentionally set last, as it recalculates stats.
|
||||
ret.form_simple = pkmn.form || 0
|
||||
ret.form_simple = pkmn.form || 0
|
||||
return ret
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user