diff --git a/Data/Scripts/003_Game processing/005_Event_Handlers.rb b/Data/Scripts/003_Game processing/005_Event_Handlers.rb index fb679a4c4..c700ff3c9 100644 --- a/Data/Scripts/003_Game processing/005_Event_Handlers.rb +++ b/Data/Scripts/003_Game processing/005_Event_Handlers.rb @@ -181,13 +181,13 @@ end class HandlerHash2 def initialize @hash = {} - @add_ifs = [] + @add_ifs = {} end def [](sym) sym = sym.id if !sym.is_a?(Symbol) && sym.respond_to?("id") return @hash[sym] if sym && @hash[sym] - @add_ifs.each do |add_if| + @add_ifs.each_value do |add_if| return add_if[1] if add_if[0].call(sym) end return nil @@ -200,11 +200,11 @@ class HandlerHash2 @hash[sym] = handler || handlerBlock if sym end - def addIf(conditionProc, handler = nil, &handlerBlock) + def addIf(sym, conditionProc, handler = nil, &handlerBlock) if ![Proc, Hash].include?(handler.class) && !block_given? - raise ArgumentError, "addIf call for #{self.class.name} has no valid handler (#{handler.inspect} was given)" + raise ArgumentError, "addIf call for #{sym} in #{self.class.name} has no valid handler (#{handler.inspect} was given)" end - @add_ifs.push([conditionProc, handler || handlerBlock]) + @add_ifs[sym] = [conditionProc, handler || handlerBlock] end def copy(src, *dests) @@ -234,19 +234,12 @@ end #=============================================================================== class HandlerHashBasic def initialize - @hash = {} - @addIfs = [] + @hash = {} end def [](entry) - ret = nil - ret = @hash[entry] if entry && @hash[entry] - unless ret - @addIfs.each do |addif| - return addif[1] if addif[0].call(entry) - end - end - return ret + return @hash[entry] if entry && @hash[entry] + return nil end def add(entry, handler = nil, &handlerBlock) @@ -257,13 +250,6 @@ class HandlerHashBasic @hash[entry] = handler || handlerBlock end - def addIf(conditionProc, handler = nil, &handlerBlock) - if ![Proc, Hash].include?(handler.class) && !block_given? - raise ArgumentError, "addIf call for #{self.class.name} has no valid handler (#{handler.inspect} was given)" - end - @addIfs.push([conditionProc, handler || handlerBlock]) - end - def copy(src, *dests) handler = self[src] return if !handler diff --git a/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb b/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb index 7c0b2a5bc..60fd75cdf 100644 --- a/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb +++ b/Data/Scripts/011_Battle/002_Battler/007_Battler_UseMove.rb @@ -160,17 +160,19 @@ class Battle::Battler # Start using the move pbBeginTurn(choice) # Force the use of certain moves if they're already being used - if usingMultiTurnAttack? - choice[2] = Battle::Move.from_pokemon_move(@battle, Pokemon::Move.new(@currentMove)) - specialUsage = true - elsif @effects[PBEffects::Encore] > 0 && choice[1] >= 0 && - @battle.pbCanShowCommands?(@index) - idxEncoredMove = pbEncoredMoveIndex - if idxEncoredMove >= 0 && choice[1] != idxEncoredMove && - @battle.pbCanChooseMove?(@index, idxEncoredMove, false) # Change move if battler was Encored mid-round - choice[1] = idxEncoredMove - choice[2] = @moves[idxEncoredMove] - choice[3] = -1 # No target chosen + if !@battle.futureSight + if usingMultiTurnAttack? + choice[2] = Battle::Move.from_pokemon_move(@battle, Pokemon::Move.new(@currentMove)) + specialUsage = true + elsif @effects[PBEffects::Encore] > 0 && choice[1] >= 0 && + @battle.pbCanShowCommands?(@index) + idxEncoredMove = pbEncoredMoveIndex + if idxEncoredMove >= 0 && choice[1] != idxEncoredMove && + @battle.pbCanChooseMove?(@index, idxEncoredMove, false) # Change move if battler was Encored mid-round + choice[1] = idxEncoredMove + choice[2] = @moves[idxEncoredMove] + choice[3] = -1 # No target chosen + end end end # Labels the move being used as "move" diff --git a/Data/Scripts/012_Overworld/007_Overworld_DayCare.rb b/Data/Scripts/012_Overworld/007_Overworld_DayCare.rb index b7e3d5965..67ca3c5a0 100644 --- a/Data/Scripts/012_Overworld/007_Overworld_DayCare.rb +++ b/Data/Scripts/012_Overworld/007_Overworld_DayCare.rb @@ -173,7 +173,7 @@ class DayCare def inherit_IVs(egg, mother, father) # Get all stats stats = [] - GameData::Stat.each_main { |s| stats.push(s) } + GameData::Stat.each_main { |s| stats.push(s.id) } # Get the number of stats to inherit inherit_count = 3 if Settings::MECHANICS_GENERATION >= 6 diff --git a/Data/Scripts/013_Items/002_Item_Effects.rb b/Data/Scripts/013_Items/002_Item_Effects.rb index 76989c02e..a5323836f 100644 --- a/Data/Scripts/013_Items/002_Item_Effects.rb +++ b/Data/Scripts/013_Items/002_Item_Effects.rb @@ -64,7 +64,8 @@ ItemHandlers::UseFromBag.add(:TOWNMAP, proc { |item| next ($game_temp.fly_destination) ? 2 : 0 }) -ItemHandlers::UseFromBag.addIf(proc { |item| GameData::Item.get(item).is_machine? }, +ItemHandlers::UseFromBag.addIf(:move_machines, + proc { |item| GameData::Item.get(item).is_machine? }, proc { |item| if $player.pokemon_count == 0 pbMessage(_INTL("There is no Pokémon.")) @@ -361,7 +362,8 @@ ItemHandlers::UseInField.add(:EXPALLOFF, proc { |item| # Applies to all items defined as an evolution stone. # No need to add more code for new ones. -ItemHandlers::UseOnPokemon.addIf(proc { |item| GameData::Item.get(item).is_evolution_stone? }, +ItemHandlers::UseOnPokemon.addIf(:evolution_stones, + proc { |item| GameData::Item.get(item).is_evolution_stone? }, proc { |item, qty, pkmn, scene| if pkmn.shadowPokemon? scene.pbDisplay(_INTL("It won't have any effect.")) diff --git a/Data/Scripts/013_Items/003_Item_BattleEffects.rb b/Data/Scripts/013_Items/003_Item_BattleEffects.rb index 758270293..8cae93539 100644 --- a/Data/Scripts/013_Items/003_Item_BattleEffects.rb +++ b/Data/Scripts/013_Items/003_Item_BattleEffects.rb @@ -25,7 +25,8 @@ ItemHandlers::CanUseInBattle.add(:POKEDOLL, proc { |item, pokemon, battler, move ItemHandlers::CanUseInBattle.copy(:POKEDOLL, :FLUFFYTAIL, :POKETOY) -ItemHandlers::CanUseInBattle.addIf(proc { |item| GameData::Item.get(item).is_poke_ball? }, # Poké Balls +ItemHandlers::CanUseInBattle.addIf(:poke_balls, + proc { |item| GameData::Item.get(item).is_poke_ball? }, proc { |item, pokemon, battler, move, firstAction, battle, scene, showMessages| if battle.pbPlayer.party_full? && $PokemonStorage.full? scene.pbDisplay(_INTL("There is no room left in the PC!")) if showMessages @@ -314,7 +315,8 @@ ItemHandlers::UseInBattle.add(:POKEFLUTE, proc { |item, battler, battle| battle.pbDisplay(_INTL("All Pokémon were roused by the tune!")) }) -ItemHandlers::UseInBattle.addIf(proc { |item| GameData::Item.get(item).is_poke_ball? }, # Poké Balls +ItemHandlers::UseInBattle.addIf(:poke_balls, + proc { |item| GameData::Item.get(item).is_poke_ball? }, proc { |item, battler, battle| battle.pbThrowPokeBall(battler.index, item) } diff --git a/Data/Scripts/014_Pokemon/001_Pokemon-related/001_FormHandlers.rb b/Data/Scripts/014_Pokemon/001_Pokemon-related/001_FormHandlers.rb index 10e16a40c..c33c7d715 100644 --- a/Data/Scripts/014_Pokemon/001_Pokemon-related/001_FormHandlers.rb +++ b/Data/Scripts/014_Pokemon/001_Pokemon-related/001_FormHandlers.rb @@ -9,8 +9,8 @@ module MultipleForms @@formSpecies.add(sym, hash) end - def self.registerIf(cond, hash) - @@formSpecies.addIf(cond, hash) + def self.registerIf(sym, cond, hash) + @@formSpecies.addIf(sym, cond, hash) end def self.hasFunction?(pkmn, func)