mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 13:15:01 +00:00
145 lines
5.3 KiB
Ruby
145 lines
5.3 KiB
Ruby
class Battle
|
|
#=============================================================================
|
|
# Choosing to use an item
|
|
#=============================================================================
|
|
def pbCanUseItemOnPokemon?(item, pkmn, battler, scene, showMessages = true)
|
|
if !pkmn || pkmn.egg?
|
|
scene.pbDisplay(_INTL("It won't have any effect.")) if showMessages
|
|
return false
|
|
end
|
|
# Embargo
|
|
if battler && battler.effects[PBEffects::Embargo] > 0
|
|
if showMessages
|
|
scene.pbDisplay(_INTL("Embargo's effect prevents the item's use on {1}!",
|
|
battler.pbThis(true)))
|
|
end
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
# NOTE: Using a Poké Ball consumes all your actions for the round. The method
|
|
# below is one half of making this happen; the other half is in the
|
|
# ItemHandlers::CanUseInBattle for Poké Balls.
|
|
def pbItemUsesAllActions?(item)
|
|
return true if GameData::Item.get(item).is_poke_ball?
|
|
return false
|
|
end
|
|
|
|
def pbRegisterItem(idxBattler, item, idxTarget = nil, idxMove = nil)
|
|
# Register for use of item on a Pokémon in the party
|
|
@choices[idxBattler][0] = :UseItem
|
|
@choices[idxBattler][1] = item # ID of item to be used
|
|
@choices[idxBattler][2] = idxTarget # Party index of Pokémon to use item on
|
|
@choices[idxBattler][3] = idxMove # Index of move to recharge (Ethers)
|
|
# Delete the item from the Bag. If it turns out it will have no effect, it
|
|
# will be re-added to the Bag later.
|
|
pbConsumeItemInBag(item, idxBattler)
|
|
return true
|
|
end
|
|
|
|
#=============================================================================
|
|
# Using an item
|
|
#=============================================================================
|
|
def pbConsumeItemInBag(item, idxBattler)
|
|
return if !item
|
|
return if !GameData::Item.get(item).consumed_after_use?
|
|
if pbOwnedByPlayer?(idxBattler)
|
|
if !$bag.remove(item)
|
|
raise _INTL("Tried to consume item that wasn't in the Bag somehow.")
|
|
end
|
|
else
|
|
items = pbGetOwnerItems(idxBattler)
|
|
items.delete_at(items.index(item))
|
|
end
|
|
end
|
|
|
|
def pbReturnUnusedItemToBag(item, idxBattler)
|
|
return if !item
|
|
return if !GameData::Item.get(item).consumed_after_use?
|
|
if pbOwnedByPlayer?(idxBattler)
|
|
if $bag&.can_add?(item)
|
|
$bag.add(item)
|
|
else
|
|
raise _INTL("Couldn't return unused item to Bag somehow.")
|
|
end
|
|
else
|
|
items = pbGetOwnerItems(idxBattler)
|
|
items&.push(item)
|
|
end
|
|
end
|
|
|
|
def pbUseItemMessage(item, trainerName)
|
|
itemName = GameData::Item.get(item).name
|
|
if itemName.starts_with_vowel?
|
|
pbDisplayBrief(_INTL("{1} used an {2}.", trainerName, itemName))
|
|
else
|
|
pbDisplayBrief(_INTL("{1} used a {2}.", trainerName, itemName))
|
|
end
|
|
end
|
|
|
|
# Uses an item on a Pokémon in the trainer's party.
|
|
def pbUseItemOnPokemon(item, idxParty, userBattler)
|
|
trainerName = pbGetOwnerName(userBattler.index)
|
|
pbUseItemMessage(item, trainerName)
|
|
pkmn = pbParty(userBattler.index)[idxParty]
|
|
battler = pbFindBattler(idxParty, userBattler.index)
|
|
ch = @choices[userBattler.index]
|
|
if ItemHandlers.triggerCanUseInBattle(item, pkmn, battler, ch[3], true, self, @scene, false)
|
|
ItemHandlers.triggerBattleUseOnPokemon(item, pkmn, battler, ch, @scene)
|
|
ch[1] = nil # Delete item from choice
|
|
return
|
|
end
|
|
pbDisplay(_INTL("But it had no effect!"))
|
|
# Return unused item to Bag
|
|
pbReturnUnusedItemToBag(item, userBattler.index)
|
|
end
|
|
|
|
# Uses an item on a Pokémon in battle that belongs to the trainer.
|
|
def pbUseItemOnBattler(item, idxParty, userBattler)
|
|
trainerName = pbGetOwnerName(userBattler.index)
|
|
pbUseItemMessage(item, trainerName)
|
|
battler = pbFindBattler(idxParty, userBattler.index)
|
|
ch = @choices[userBattler.index]
|
|
if battler
|
|
if ItemHandlers.triggerCanUseInBattle(item, battler.pokemon, battler, ch[3], true, self, @scene, false)
|
|
ItemHandlers.triggerBattleUseOnBattler(item, battler, @scene)
|
|
ch[1] = nil # Delete item from choice
|
|
battler.pbItemOnStatDropped
|
|
return
|
|
else
|
|
pbDisplay(_INTL("But it had no effect!"))
|
|
end
|
|
else
|
|
pbDisplay(_INTL("But it's not where this item can be used!"))
|
|
end
|
|
# Return unused item to Bag
|
|
pbReturnUnusedItemToBag(item, userBattler.index)
|
|
end
|
|
|
|
# Uses a Poké Ball in battle directly.
|
|
def pbUsePokeBallInBattle(item, idxBattler, userBattler)
|
|
idxBattler = userBattler.index if idxBattler < 0
|
|
battler = @battlers[idxBattler]
|
|
ItemHandlers.triggerUseInBattle(item, battler, self)
|
|
@choices[userBattler.index][1] = nil # Delete item from choice
|
|
end
|
|
|
|
# Uses an item in battle directly.
|
|
def pbUseItemInBattle(item, idxBattler, userBattler)
|
|
trainerName = pbGetOwnerName(userBattler.index)
|
|
pbUseItemMessage(item, trainerName)
|
|
battler = (idxBattler < 0) ? userBattler : @battlers[idxBattler]
|
|
pkmn = battler.pokemon
|
|
ch = @choices[userBattler.index]
|
|
if ItemHandlers.triggerCanUseInBattle(item, pkmn, battler, ch[3], true, self, @scene, false)
|
|
ItemHandlers.triggerUseInBattle(item, battler, self)
|
|
ch[1] = nil # Delete item from choice
|
|
return
|
|
end
|
|
pbDisplay(_INTL("But it had no effect!"))
|
|
# Return unused item to Bag
|
|
pbReturnUnusedItemToBag(item, userBattler.index)
|
|
end
|
|
end
|