mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-09 22:24:58 +00:00
Implemented usage of GameData::Item
This commit is contained in:
@@ -1,224 +1,3 @@
|
||||
#===============================================================================
|
||||
# Item data
|
||||
#===============================================================================
|
||||
module ItemData
|
||||
ID = 0
|
||||
NAME = 1
|
||||
NAME_PLURAL = 2
|
||||
POCKET = 3
|
||||
PRICE = 4
|
||||
DESCRIPTION = 5
|
||||
FIELD_USE = 6
|
||||
BATTLE_USE = 7
|
||||
TYPE = 8
|
||||
MOVE = 9
|
||||
end
|
||||
|
||||
|
||||
|
||||
class PokemonTemp
|
||||
attr_accessor :itemsData
|
||||
end
|
||||
|
||||
|
||||
|
||||
def pbLoadItemsData
|
||||
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
|
||||
if !$PokemonTemp.itemsData
|
||||
$PokemonTemp.itemsData = load_data("Data/items.dat") || []
|
||||
end
|
||||
return $PokemonTemp.itemsData
|
||||
end
|
||||
|
||||
def pbGetItemData(item,itemDataType)
|
||||
item = getID(PBItems,item)
|
||||
itemsData = pbLoadItemsData
|
||||
return itemsData[item][itemDataType] if itemsData[item]
|
||||
return nil
|
||||
end
|
||||
|
||||
alias __itemsData__pbClearData pbClearData
|
||||
def pbClearData
|
||||
$PokemonTemp.itemsData = nil if $PokemonTemp
|
||||
__itemsData__pbClearData
|
||||
end
|
||||
|
||||
def pbGetPocket(item)
|
||||
ret = pbGetItemData(item,ItemData::POCKET)
|
||||
return ret || 0
|
||||
end
|
||||
|
||||
def pbGetPrice(item)
|
||||
ret = pbGetItemData(item,ItemData::PRICE)
|
||||
return ret || 0
|
||||
end
|
||||
|
||||
def pbGetMachine(item)
|
||||
ret = pbGetItemData(item,ItemData::MOVE)
|
||||
return ret || 0
|
||||
end
|
||||
|
||||
def pbIsTechnicalMachine?(item)
|
||||
ret = pbGetItemData(item,ItemData::FIELD_USE)
|
||||
return ret && ret==3
|
||||
end
|
||||
|
||||
def pbIsHiddenMachine?(item)
|
||||
ret = pbGetItemData(item,ItemData::FIELD_USE)
|
||||
return ret && ret==4
|
||||
end
|
||||
|
||||
def pbIsMachine?(item)
|
||||
ret = pbGetItemData(item,ItemData::FIELD_USE)
|
||||
return ret && (ret==3 || ret==4)
|
||||
end
|
||||
|
||||
def pbIsMail?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && (ret==1 || ret==2)
|
||||
end
|
||||
|
||||
def pbIsMailWithPokemonIcons?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==2
|
||||
end
|
||||
|
||||
def pbIsPokeBall?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && (ret==3 || ret==4)
|
||||
end
|
||||
|
||||
def pbIsSnagBall?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && (ret==3 || (ret==4 && $PokemonGlobal.snagMachine))
|
||||
end
|
||||
|
||||
def pbIsBerry?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==5
|
||||
end
|
||||
|
||||
def pbIsKeyItem?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==6
|
||||
end
|
||||
|
||||
def pbIsEvolutionStone?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==7
|
||||
end
|
||||
|
||||
def pbIsFossil?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==8
|
||||
end
|
||||
|
||||
def pbIsApricorn?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==9
|
||||
end
|
||||
|
||||
def pbIsGem?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==10
|
||||
end
|
||||
|
||||
def pbIsMulch?(item)
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==11
|
||||
end
|
||||
|
||||
def pbIsMegaStone?(item) # Does NOT include Red Orb/Blue Orb
|
||||
ret = pbGetItemData(item,ItemData::TYPE)
|
||||
return ret && ret==12
|
||||
end
|
||||
|
||||
# Important items can't be sold, given to hold, or tossed.
|
||||
def pbIsImportantItem?(item)
|
||||
itemData = pbLoadItemsData[getID(PBItems,item)]
|
||||
return false if !itemData
|
||||
return true if itemData[ItemData::TYPE] && itemData[ItemData::TYPE]==6 # Key item
|
||||
return true if itemData[ItemData::FIELD_USE] && itemData[ItemData::FIELD_USE]==4 # HM
|
||||
return true if itemData[ItemData::FIELD_USE] && itemData[ItemData::FIELD_USE]==3 && INFINITE_TMS # TM
|
||||
return false
|
||||
end
|
||||
|
||||
def pbCanHoldItem?(item)
|
||||
return !pbIsImportantItem?(item)
|
||||
end
|
||||
|
||||
def pbCanRegisterItem?(item)
|
||||
return ItemHandlers.hasUseInFieldHandler(item)
|
||||
end
|
||||
|
||||
def pbCanUseOnPokemon?(item)
|
||||
return ItemHandlers.hasUseOnPokemon(item) || pbIsMachine?(item)
|
||||
end
|
||||
|
||||
def pbIsHiddenMove?(move)
|
||||
itemsData = pbLoadItemsData
|
||||
return false if !itemsData
|
||||
for i in 0...itemsData.length
|
||||
next if !pbIsHiddenMachine?(i)
|
||||
atk = pbGetMachine(i)
|
||||
return true if move==atk
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def pbIsUnlosableItem?(item,species,ability)
|
||||
return false if isConst?(species,PBSpecies,:ARCEUS) && ability != :MULTITYPE
|
||||
return false if isConst?(species,PBSpecies,:SILVALLY) && ability != :RKSSYSTEM
|
||||
combos = {
|
||||
:ARCEUS => [:FISTPLATE, :FIGHTINIUMZ,
|
||||
:SKYPLATE, :FLYINIUMZ,
|
||||
:TOXICPLATE, :POISONIUMZ,
|
||||
:EARTHPLATE, :GROUNDIUMZ,
|
||||
:STONEPLATE, :ROCKIUMZ,
|
||||
:INSECTPLATE, :BUGINIUMZ,
|
||||
:SPOOKYPLATE, :GHOSTIUMZ,
|
||||
:IRONPLATE, :STEELIUMZ,
|
||||
:FLAMEPLATE, :FIRIUMZ,
|
||||
:SPLASHPLATE, :WATERIUMZ,
|
||||
:MEADOWPLATE, :GRASSIUMZ,
|
||||
:ZAPPLATE, :ELECTRIUMZ,
|
||||
:MINDPLATE, :PSYCHIUMZ,
|
||||
:ICICLEPLATE, :ICIUMZ,
|
||||
:DRACOPLATE, :DRAGONIUMZ,
|
||||
:DREADPLATE, :DARKINIUMZ,
|
||||
:PIXIEPLATE, :FAIRIUMZ],
|
||||
:SILVALLY => [:FIGHTINGMEMORY,
|
||||
:FLYINGMEMORY,
|
||||
:POISONMEMORY,
|
||||
:GROUNDMEMORY,
|
||||
:ROCKMEMORY,
|
||||
:BUGMEMORY,
|
||||
:GHOSTMEMORY,
|
||||
:STEELMEMORY,
|
||||
:FIREMEMORY,
|
||||
:WATERMEMORY,
|
||||
:GRASSMEMORY,
|
||||
:ELECTRICMEMORY,
|
||||
:PSYCHICMEMORY,
|
||||
:ICEMEMORY,
|
||||
:DRAGONMEMORY,
|
||||
:DARKMEMORY,
|
||||
:FAIRYMEMORY],
|
||||
:GIRATINA => [:GRISEOUSORB],
|
||||
:GENESECT => [:BURNDRIVE,:CHILLDRIVE,:DOUSEDRIVE,:SHOCKDRIVE],
|
||||
:KYOGRE => [:BLUEORB],
|
||||
:GROUDON => [:REDORB]
|
||||
}
|
||||
combos.each do |comboSpecies, items|
|
||||
next if !isConst?(species,PBSpecies,comboSpecies)
|
||||
items.each { |i| return true if isConst?(item,PBItems,i) }
|
||||
break
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# ItemHandlers
|
||||
#===============================================================================
|
||||
@@ -325,6 +104,16 @@ end
|
||||
|
||||
|
||||
|
||||
def pbCanRegisterItem?(item)
|
||||
return ItemHandlers.hasUseInFieldHandler(item)
|
||||
end
|
||||
|
||||
def pbCanUseOnPokemon?(item)
|
||||
return ItemHandlers.hasUseOnPokemon(item) || GameData::Item.get(item).is_machine?
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Change a Pokémon's level
|
||||
#===============================================================================
|
||||
@@ -680,32 +469,34 @@ end
|
||||
#===============================================================================
|
||||
# Use an item from the Bag and/or on a Pokémon
|
||||
#===============================================================================
|
||||
# @return [Integer] 0 = item wasn't used; 1 = item used; 2 = close Bag to use in field
|
||||
def pbUseItem(bag,item,bagscene=nil)
|
||||
useType = pbGetItemData(item,ItemData::FIELD_USE)
|
||||
if pbIsMachine?(item) # TM or HM
|
||||
itm = GameData::Item.get(item)
|
||||
useType = itm.field_use
|
||||
if itm.is_machine? # TM or HM
|
||||
if $Trainer.pokemonCount==0
|
||||
pbMessage(_INTL("There is no Pokémon."))
|
||||
return 0
|
||||
end
|
||||
machine = pbGetMachine(item)
|
||||
return 0 if machine==nil
|
||||
machine = itm.move
|
||||
return 0 if !machine
|
||||
movename = PBMoves.getName(machine)
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",PBItems.getName(item)))
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name))
|
||||
if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?",movename))
|
||||
return 0
|
||||
elsif pbMoveTutorChoose(machine,nil,true)
|
||||
bag.pbDeleteItem(item) if pbIsTechnicalMachine?(item) && !INFINITE_TMS
|
||||
bag.pbDeleteItem(item) if itm.is_TM? && !INFINITE_TMS
|
||||
return 1
|
||||
end
|
||||
return 0
|
||||
elsif useType && (useType==1 || useType==5) # Item is usable on a Pokémon
|
||||
elsif useType==1 || useType==5 # Item is usable on a Pokémon
|
||||
if $Trainer.pokemonCount==0
|
||||
pbMessage(_INTL("There is no Pokémon."))
|
||||
return 0
|
||||
end
|
||||
ret = false
|
||||
annot = nil
|
||||
if pbIsEvolutionStone?(item)
|
||||
if itm.is_evolution_stone?
|
||||
annot = []
|
||||
for pkmn in $Trainer.party
|
||||
elig = pbCheckEvolution(pkmn,item)>0
|
||||
@@ -729,7 +520,7 @@ def pbUseItem(bag,item,bagscene=nil)
|
||||
if ret && useType==1 # Usable on Pokémon, consumed
|
||||
bag.pbDeleteItem(item)
|
||||
if !bag.pbHasItem?(item)
|
||||
pbMessage(_INTL("You used your last {1}.",PBItems.getName(item))) { screen.pbUpdate }
|
||||
pbMessage(_INTL("You used your last {1}.",itm.name)) { screen.pbUpdate }
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -739,7 +530,7 @@ def pbUseItem(bag,item,bagscene=nil)
|
||||
bagscene.pbRefresh if bagscene
|
||||
}
|
||||
return (ret) ? 1 : 0
|
||||
elsif useType && useType==2 # Item is usable from bag
|
||||
elsif useType==2 # Item is usable from bag
|
||||
intret = ItemHandlers.triggerUseFromBag(item)
|
||||
case intret
|
||||
when 0; return 0
|
||||
@@ -758,20 +549,21 @@ end
|
||||
# Only called when in the party screen and having chosen an item to be used on
|
||||
# the selected Pokémon
|
||||
def pbUseItemOnPokemon(item,pkmn,scene)
|
||||
itm = GameData::Item.get(item)
|
||||
# TM or HM
|
||||
if pbIsMachine?(item)
|
||||
machine = pbGetMachine(item)
|
||||
return false if machine==nil
|
||||
if itm.is_machine?
|
||||
machine = itm.move
|
||||
return false if !machine
|
||||
movename = PBMoves.getName(machine)
|
||||
if pkmn.shadowPokemon?
|
||||
pbMessage(_INTL("Shadow Pokémon can't be taught any moves.")) { scene.pbUpdate }
|
||||
elsif !pkmn.compatibleWithMove?(machine)
|
||||
pbMessage(_INTL("{1} can't learn {2}.",pkmn.name,movename)) { scene.pbUpdate }
|
||||
else
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",PBItems.getName(item))) { scene.pbUpdate }
|
||||
pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) { scene.pbUpdate }
|
||||
if pbConfirmMessage(_INTL("Do you want to teach {1} to {2}?",movename,pkmn.name)) { scene.pbUpdate }
|
||||
if pbLearnMove(pkmn,machine,false,true) { scene.pbUpdate }
|
||||
$PokemonBag.pbDeleteItem(item) if pbIsTechnicalMachine?(item) && !INFINITE_TMS
|
||||
$PokemonBag.pbDeleteItem(item) if itm.is_TM? && !INFINITE_TMS
|
||||
return true
|
||||
end
|
||||
end
|
||||
@@ -782,11 +574,11 @@ def pbUseItemOnPokemon(item,pkmn,scene)
|
||||
ret = ItemHandlers.triggerUseOnPokemon(item,pkmn,scene)
|
||||
scene.pbClearAnnotations
|
||||
scene.pbHardRefresh
|
||||
useType = pbGetItemData(item,ItemData::FIELD_USE)
|
||||
if ret && useType && useType==1 # Usable on Pokémon, consumed
|
||||
useType = itm.field_use
|
||||
if ret && useType==1 # Usable on Pokémon, consumed
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
if !$PokemonBag.pbHasItem?(item)
|
||||
pbMessage(_INTL("You used your last {1}.",PBItems.getName(item))) { scene.pbUpdate }
|
||||
pbMessage(_INTL("You used your last {1}.",itm.name)) { scene.pbUpdate }
|
||||
end
|
||||
end
|
||||
return ret
|
||||
@@ -803,7 +595,7 @@ def pbUseKeyItemInField(item)
|
||||
end
|
||||
|
||||
def pbUseItemMessage(item)
|
||||
itemname = PBItems.getName(item)
|
||||
itemname = GameData::Item.get(item).name
|
||||
if itemname.starts_with_vowel?
|
||||
pbMessage(_INTL("You used an {1}.",itemname))
|
||||
else
|
||||
@@ -819,7 +611,7 @@ end
|
||||
# Give an item to a Pokémon to hold, and take a held item from a Pokémon
|
||||
#===============================================================================
|
||||
def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
newitemname = PBItems.getName(item)
|
||||
newitemname = GameData::Item.get(item).name
|
||||
if pkmn.egg?
|
||||
scene.pbDisplay(_INTL("Eggs can't hold items."))
|
||||
return false
|
||||
@@ -828,7 +620,7 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
return false if !pbTakeItemFromPokemon(pkmn,scene)
|
||||
end
|
||||
if pkmn.hasItem?
|
||||
olditemname = PBItems.getName(pkmn.item)
|
||||
olditemname = pkmn.item.name
|
||||
if pkmn.hasItem?(:LEFTOVERS)
|
||||
scene.pbDisplay(_INTL("{1} is already holding some {2}.\1",pkmn.name,olditemname))
|
||||
elsif newitemname.starts_with_vowel?
|
||||
@@ -844,7 +636,7 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
end
|
||||
scene.pbDisplay(_INTL("The Bag is full. The Pokémon's item could not be removed."))
|
||||
else
|
||||
if pbIsMail?(item)
|
||||
if GameData::Item.get(item).is_mail?
|
||||
if pbWriteMail(item,pkmn,pkmnid,scene)
|
||||
pkmn.setItem(item)
|
||||
scene.pbDisplay(_INTL("Took the {1} from {2} and gave it the {3}.",olditemname,pkmn.name,newitemname))
|
||||
@@ -862,7 +654,7 @@ def pbGiveItemToPokemon(item,pkmn,scene,pkmnid=0)
|
||||
end
|
||||
end
|
||||
else
|
||||
if !pbIsMail?(item) || pbWriteMail(item,pkmn,pkmnid,scene)
|
||||
if !GameData::Item.get(item).is_mail? || pbWriteMail(item,pkmn,pkmnid,scene)
|
||||
$PokemonBag.pbDeleteItem(item)
|
||||
pkmn.setItem(item)
|
||||
scene.pbDisplay(_INTL("{1} is now holding the {2}.",pkmn.name,newitemname))
|
||||
@@ -884,22 +676,20 @@ def pbTakeItemFromPokemon(pkmn,scene)
|
||||
scene.pbDisplay(_INTL("Your PC's Mailbox is full."))
|
||||
else
|
||||
scene.pbDisplay(_INTL("The mail was saved in your PC."))
|
||||
pkmn.setItem(0)
|
||||
pkmn.setItem(nil)
|
||||
ret = true
|
||||
end
|
||||
elsif scene.pbConfirm(_INTL("If the mail is removed, its message will be lost. OK?"))
|
||||
$PokemonBag.pbStoreItem(pkmn.item)
|
||||
itemname = PBItems.getName(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
|
||||
pkmn.setItem(0)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",pkmn.item.name,pkmn.name))
|
||||
pkmn.setItem(nil)
|
||||
pkmn.mail = nil
|
||||
ret = true
|
||||
end
|
||||
else
|
||||
$PokemonBag.pbStoreItem(pkmn.item)
|
||||
itemname = PBItems.getName(pkmn.item)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",itemname,pkmn.name))
|
||||
pkmn.setItem(0)
|
||||
scene.pbDisplay(_INTL("Received the {1} from {2}.",pkmn.item.name,pkmn.name))
|
||||
pkmn.setItem(nil)
|
||||
ret = true
|
||||
end
|
||||
return ret
|
||||
@@ -908,61 +698,61 @@ end
|
||||
#===============================================================================
|
||||
# Choose an item from the Bag
|
||||
#===============================================================================
|
||||
def pbChooseItem(var=0,*args)
|
||||
ret = 0
|
||||
def pbChooseItem(var = 0, *args)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
ret = screen.pbChooseItemScreen
|
||||
}
|
||||
$game_variables[var] = ret if var>0
|
||||
$game_variables[var] = ret if var > 0
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbChooseApricorn(var=0)
|
||||
ret = 0
|
||||
def pbChooseApricorn(var = 0)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| pbIsApricorn?(item) })
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_apricorn? })
|
||||
}
|
||||
$game_variables[var] = ret if var>0
|
||||
$game_variables[var] = ret if var > 0
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbChooseFossil(var=0)
|
||||
ret = 0
|
||||
def pbChooseFossil(var = 0)
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| pbIsFossil?(item) })
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_fossil? })
|
||||
}
|
||||
$game_variables[var] = ret if var>0
|
||||
$game_variables[var] = ret if var > 0
|
||||
return ret
|
||||
end
|
||||
|
||||
# Shows a list of items to choose from, with the chosen item's ID being stored
|
||||
# in the given Global Variable. Only items which the player has are listed.
|
||||
def pbChooseItemFromList(message,variable,*args)
|
||||
def pbChooseItemFromList(message, variable, *args)
|
||||
commands = []
|
||||
itemid = []
|
||||
for item in args
|
||||
next if !hasConst?(PBItems,item)
|
||||
id = getConst(PBItems,item)
|
||||
next if !$PokemonBag.pbHasItem?(id)
|
||||
commands.push(PBItems.getName(id))
|
||||
itemid.push(id)
|
||||
next if !GameData::Item.exists?(item)
|
||||
itm = GameData::Item.get(item)
|
||||
next if !$PokemonBag.pbHasItem?(itm)
|
||||
commands.push(itm.name)
|
||||
itemid.push(itm.id)
|
||||
end
|
||||
if commands.length==0
|
||||
if commands.length == 0
|
||||
$game_variables[variable] = 0
|
||||
return 0
|
||||
return nil
|
||||
end
|
||||
commands.push(_INTL("Cancel"))
|
||||
itemid.push(0)
|
||||
ret = pbMessage(message,commands,-1)
|
||||
if ret<0 || ret>=commands.length-1
|
||||
$game_variables[variable] = -1
|
||||
return -1
|
||||
itemid.push(nil)
|
||||
ret = pbMessage(message, commands, -1)
|
||||
if ret < 0 || ret >= commands.length-1
|
||||
$game_variables[variable] = nil
|
||||
return nil
|
||||
end
|
||||
$game_variables[variable] = itemid[ret]
|
||||
return itemid[ret]
|
||||
|
||||
@@ -121,17 +121,15 @@ Events.onStepTaken += proc {
|
||||
$PokemonBag.pbHasItem?(:SUPERREPEL) ||
|
||||
$PokemonBag.pbHasItem?(:MAXREPEL)
|
||||
if pbConfirmMessage(_INTL("The repellent's effect wore off! Would you like to use another one?"))
|
||||
ret = 0
|
||||
ret = nil
|
||||
pbFadeOutIn {
|
||||
scene = PokemonBag_Scene.new
|
||||
screen = PokemonBagScreen.new(scene,$PokemonBag)
|
||||
ret = screen.pbChooseItemScreen(Proc.new { |item|
|
||||
isConst?(item,PBItems,:REPEL) ||
|
||||
isConst?(item,PBItems,:SUPERREPEL) ||
|
||||
isConst?(item,PBItems,:MAXREPEL)
|
||||
[:REPEL, :SUPERREPEL, :MAXREPEL].include?(item)
|
||||
})
|
||||
}
|
||||
pbUseItem($PokemonBag,ret) if ret>0
|
||||
pbUseItem($PokemonBag,ret) if ret
|
||||
end
|
||||
else
|
||||
pbMessage(_INTL("The repellent's effect wore off!"))
|
||||
@@ -292,7 +290,7 @@ ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item|
|
||||
$game_player.turn_right_90
|
||||
end
|
||||
pbWait(Graphics.frame_rate*3/10)
|
||||
pbMessage(_INTL("The {1}'s indicating something right underfoot!",PBItems.getName(item)))
|
||||
pbMessage(_INTL("The {1}'s indicating something right underfoot!",GameData::Item.get(item).name))
|
||||
else # Item is nearby, face towards it
|
||||
direction = $game_player.direction
|
||||
if offsetX.abs>offsetY.abs
|
||||
@@ -307,7 +305,7 @@ ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item|
|
||||
when 8; $game_player.turn_up
|
||||
end
|
||||
pbWait(Graphics.frame_rate*3/10)
|
||||
pbMessage(_INTL("Huh? The {1}'s responding!\1",PBItems.getName(item)))
|
||||
pbMessage(_INTL("Huh? The {1}'s responding!\1",GameData::Item.get(item).name))
|
||||
pbMessage(_INTL("There's an item buried around here!"))
|
||||
end
|
||||
end
|
||||
@@ -344,7 +342,7 @@ 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| pbIsEvolutionStone?(item)},
|
||||
ItemHandlers::UseOnPokemon.addIf(proc { |item| GameData::Item.get(item).is_evolution_stone? },
|
||||
proc { |item,pkmn,scene|
|
||||
if pkmn.shadowPokemon?
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
@@ -1096,7 +1094,7 @@ ItemHandlers::UseOnPokemon.add(:ABILITYCAPSULE,proc { |item,pkmn,scene|
|
||||
next false
|
||||
end
|
||||
newabil = (pkmn.abilityIndex+1)%2
|
||||
newabilname = PokemonData::Ability.get((newabil==0) ? abil1 : abil2).name
|
||||
newabilname = GameData::Ability.get((newabil==0) ? abil1 : abil2).name
|
||||
if scene.pbConfirm(_INTL("Would you like to change {1}'s Ability to {2}?",
|
||||
pkmn.name,newabilname))
|
||||
pkmn.setAbility(newabil)
|
||||
|
||||
@@ -21,7 +21,7 @@ ItemHandlers::CanUseInBattle.add(:POKEDOLL,proc { |item,pokemon,battler,move,fir
|
||||
|
||||
ItemHandlers::CanUseInBattle.copy(:POKEDOLL,:FLUFFYTAIL,:POKETOY)
|
||||
|
||||
ItemHandlers::CanUseInBattle.addIf(proc { |item| pbIsPokeBall?(item) }, # Poké Balls
|
||||
ItemHandlers::CanUseInBattle.addIf(proc { |item| GameData::Item.get(item).is_poke_ball? }, # Poké Balls
|
||||
proc { |item,pokemon,battler,move,firstAction,battle,scene,showMessages|
|
||||
if battle.pbPlayer.party.length>=6 && $PokemonStorage.full?
|
||||
scene.pbDisplay(_INTL("There is no room left in the PC!")) if showMessages
|
||||
@@ -42,7 +42,7 @@ ItemHandlers::CanUseInBattle.addIf(proc { |item| pbIsPokeBall?(item) }, # Pok
|
||||
# than one unfainted opposing Pokémon. (Snag Balls can be thrown in
|
||||
# this case, but only in trainer battles, and the trainer will deflect
|
||||
# them if they are trying to catch a non-Shadow Pokémon.)
|
||||
if battle.pbOpposingBattlerCount>1 && !(pbIsSnagBall?(item) && battle.trainerBattle?)
|
||||
if battle.pbOpposingBattlerCount>1 && !(GameData::Item.get(item).is_snag_ball? && battle.trainerBattle?)
|
||||
if battle.pbOpposingBattlerCount==2
|
||||
scene.pbDisplay(_INTL("It's no good! It's impossible to aim when there are two Pokémon!")) if showMessages
|
||||
else
|
||||
@@ -302,7 +302,7 @@ ItemHandlers::UseInBattle.add(:POKEFLUTE,proc { |item,battler,battle|
|
||||
scene.pbDisplay(_INTL("All Pokémon were roused by the tune!"))
|
||||
})
|
||||
|
||||
ItemHandlers::UseInBattle.addIf(proc { |item| pbIsPokeBall?(item) }, # Poké Balls
|
||||
ItemHandlers::UseInBattle.addIf(proc { |item| GameData::Item.get(item).is_poke_ball? }, # Poké Balls
|
||||
proc { |item,battler,battle|
|
||||
battle.pbThrowPokeBall(battler.index,item)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
class PokemonMail
|
||||
attr_accessor :item,:message,:sender,:poke1,:poke2,:poke3
|
||||
|
||||
def initialize(item,message,sender,poke1=nil,poke2=nil,poke3=nil)
|
||||
def initialize(item, message, sender, poke1 = nil, poke2 = nil, poke3 = nil)
|
||||
item = item.id if !item.is_a?(Symbol) && item.respond_to?("id")
|
||||
@item = item # Item represented by this mail
|
||||
@message = message # Message text
|
||||
@sender = sender # Name of the message's sender
|
||||
@@ -38,7 +39,7 @@ def pbDisplayMail(mail,_bearer=nil)
|
||||
sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,viewport)
|
||||
overlay = sprites["overlay"].bitmap
|
||||
pbSetSystemFont(overlay)
|
||||
if pbIsMailWithPokemonIcons?(mail.item)
|
||||
if GameData::Item.get(mail.item).is_icon_mail?
|
||||
if mail.poke1
|
||||
sprites["bearer"] = IconSprite.new(64,288,viewport)
|
||||
bitmapFileName = pbCheckPokemonIconFiles(mail.poke1,mail.poke1[5])
|
||||
|
||||
@@ -14,10 +14,10 @@ class ItemIconSprite < SpriteWrapper
|
||||
@frame = 0
|
||||
self.x = x
|
||||
self.y = y
|
||||
@blankzero = false
|
||||
@forceitemchange = true
|
||||
self.item = item
|
||||
@forceitemchange = false
|
||||
@blankzero = false
|
||||
end
|
||||
|
||||
def dispose
|
||||
@@ -71,8 +71,8 @@ class ItemIconSprite < SpriteWrapper
|
||||
@item = value
|
||||
@animbitmap.dispose if @animbitmap
|
||||
@animbitmap = nil
|
||||
if @item && !(@item==0 && @blankzero)
|
||||
@animbitmap = AnimatedBitmap.new(pbItemIconFile(value))
|
||||
if @item || !@blankzero
|
||||
@animbitmap = AnimatedBitmap.new(pbItemIconFile(@item))
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
if self.bitmap.height==ANIM_ICON_SIZE
|
||||
@numframes = [(self.bitmap.width/ANIM_ICON_SIZE).floor,1].max
|
||||
@@ -120,26 +120,8 @@ class HeldItemIconSprite < SpriteWrapper
|
||||
self.x = x
|
||||
self.y = y
|
||||
@pokemon = pokemon
|
||||
@item = 0
|
||||
self.item = @pokemon.item
|
||||
end
|
||||
|
||||
def pokemon=(value)
|
||||
@pokemon = value
|
||||
self.item = @pokemon.item
|
||||
end
|
||||
|
||||
def item=(value)
|
||||
return if @item==value
|
||||
@item = value
|
||||
@animbitmap.dispose if @animbitmap
|
||||
@animbitmap = nil
|
||||
if @item && @item>0
|
||||
@animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(value))
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
else
|
||||
self.bitmap = nil
|
||||
end
|
||||
@item = nil
|
||||
self.item = @pokemon.item_id
|
||||
end
|
||||
|
||||
def dispose
|
||||
@@ -147,9 +129,27 @@ class HeldItemIconSprite < SpriteWrapper
|
||||
super
|
||||
end
|
||||
|
||||
def pokemon=(value)
|
||||
@pokemon = value
|
||||
self.item = @pokemon.item_id
|
||||
end
|
||||
|
||||
def item=(value)
|
||||
return if @item==value
|
||||
@item = value
|
||||
@animbitmap.dispose if @animbitmap
|
||||
@animbitmap = nil
|
||||
if @item
|
||||
@animbitmap = AnimatedBitmap.new(pbHeldItemIconFile(@item))
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
else
|
||||
self.bitmap = nil
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
super
|
||||
self.item = @pokemon.item
|
||||
self.item = @pokemon.item_id
|
||||
if @animbitmap
|
||||
@animbitmap.update
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
|
||||
@@ -21,20 +21,20 @@ class PokemonBag
|
||||
@choices[i] = 0
|
||||
end
|
||||
@registeredItems = []
|
||||
@registeredIndex = [0,0,1]
|
||||
@registeredIndex = [0, 0, 1]
|
||||
end
|
||||
|
||||
def rearrange
|
||||
if (@pockets.length-1)!=PokemonBag.numPockets
|
||||
if (@pockets.length - 1) != PokemonBag.numPockets
|
||||
newpockets = []
|
||||
for i in 0..PokemonBag.numPockets
|
||||
newpockets[i] = []
|
||||
@choices[i] = 0 if !@choices[i]
|
||||
@choices[i] = 0 if !@choices[i]
|
||||
end
|
||||
nump = PokemonBag.numPockets
|
||||
for i in 0...[@pockets.length,nump].min
|
||||
num_pockets = PokemonBag.numPockets
|
||||
for i in 0...[@pockets.length, num_pockets].min
|
||||
for item in @pockets[i]
|
||||
p = pbGetPocket(item[0])
|
||||
p = GameData::Item.get(item[0]).pocket
|
||||
newpockets[p].push(item)
|
||||
end
|
||||
end
|
||||
@@ -43,9 +43,7 @@ class PokemonBag
|
||||
end
|
||||
|
||||
def clear
|
||||
for pocket in @pockets
|
||||
pocket.clear
|
||||
end
|
||||
@pockets.each { |pocket| pocket.clear }
|
||||
end
|
||||
|
||||
def pockets
|
||||
@@ -61,25 +59,27 @@ class PokemonBag
|
||||
|
||||
# Gets the index of the current selected item in the pocket
|
||||
def getChoice(pocket)
|
||||
if pocket<=0 || pocket>PokemonBag.numPockets
|
||||
raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
|
||||
if pocket <= 0 || pocket > PokemonBag.numPockets
|
||||
raise ArgumentError.new(_INTL("Invalid pocket: {1}", pocket.inspect))
|
||||
end
|
||||
rearrange
|
||||
return [@choices[pocket],@pockets[pocket].length].min || 0
|
||||
return [@choices[pocket], @pockets[pocket].length].min || 0
|
||||
end
|
||||
|
||||
# Sets the index of the current selected item in the pocket
|
||||
def setChoice(pocket,value)
|
||||
if pocket<=0 || pocket>PokemonBag.numPockets
|
||||
raise ArgumentError.new(_INTL("Invalid pocket: {1}",pocket.inspect))
|
||||
if pocket <= 0 || pocket > PokemonBag.numPockets
|
||||
raise ArgumentError.new(_INTL("Invalid pocket: {1}", pocket.inspect))
|
||||
end
|
||||
rearrange
|
||||
@choices[pocket] = value if value<=@pockets[pocket].length
|
||||
@choices[pocket] = value if value <= @pockets[pocket].length
|
||||
end
|
||||
|
||||
def getAllChoices
|
||||
ret = @choices.clone
|
||||
for i in 0...@choices.length; @choices[i] = 0; end
|
||||
for i in 0...@choices.length
|
||||
@choices[i] = 0
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
@@ -88,143 +88,98 @@ class PokemonBag
|
||||
end
|
||||
|
||||
def pbQuantity(item)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
pocket = pbGetPocket(item)
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length if maxsize<0
|
||||
return ItemStorageHelper.pbQuantity(@pockets[pocket],maxsize,item)
|
||||
item = GameData::Item.get(item)
|
||||
pocket = item.pocket
|
||||
return ItemStorageHelper.pbQuantity(@pockets[pocket], item.id)
|
||||
end
|
||||
|
||||
def pbHasItem?(item)
|
||||
return pbQuantity(item)>0
|
||||
return pbQuantity(item) > 0
|
||||
end
|
||||
|
||||
def pbCanStore?(item,qty=1)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
pocket = pbGetPocket(item)
|
||||
def pbCanStore?(item, qty = 1)
|
||||
item = GameData::Item.get(item)
|
||||
pocket = item.pocket
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length+1 if maxsize<0
|
||||
return ItemStorageHelper.pbCanStore?(@pockets[pocket],maxsize,
|
||||
BAG_MAX_PER_SLOT,item,qty)
|
||||
maxsize = @pockets[pocket].length + 1 if maxsize < 0
|
||||
return ItemStorageHelper.pbCanStore?(
|
||||
@pockets[pocket], maxsize, BAG_MAX_PER_SLOT, item.id, qty)
|
||||
end
|
||||
|
||||
def pbStoreAllOrNone(item,qty=1)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
pocket = pbGetPocket(item)
|
||||
def pbStoreItem(item, qty = 1)
|
||||
item = GameData::Item.get(item)
|
||||
pocket = item.pocket
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length+1 if maxsize<0
|
||||
return ItemStorageHelper.pbStoreAllOrNone(@pockets[pocket],maxsize,
|
||||
BAG_MAX_PER_SLOT,item,qty)
|
||||
maxsize = @pockets[pocket].length + 1 if maxsize < 0
|
||||
return ItemStorageHelper.pbStoreItem(
|
||||
@pockets[pocket], maxsize, BAG_MAX_PER_SLOT, item.id, qty, true)
|
||||
end
|
||||
|
||||
def pbStoreItem(item,qty=1)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
pocket = pbGetPocket(item)
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length+1 if maxsize<0
|
||||
return ItemStorageHelper.pbStoreItem(@pockets[pocket],maxsize,
|
||||
BAG_MAX_PER_SLOT,item,qty,true)
|
||||
def pbStoreAllOrNone(item, qty = 1)
|
||||
return false if !pbCanStore?(item, qty)
|
||||
return pbStoreItem(item, qty)
|
||||
end
|
||||
|
||||
def pbChangeItem(olditem,newitem)
|
||||
olditem = getID(PBItems,olditem)
|
||||
newitem = getID(PBItems,newitem)
|
||||
if !olditem || olditem<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",olditem))
|
||||
elsif !newitem || newitem<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",newitem))
|
||||
end
|
||||
pocket = pbGetPocket(olditem)
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length if maxsize<0
|
||||
def pbChangeItem(old_item, new_item)
|
||||
old_item = GameData::Item.get(old_item)
|
||||
new_item = GameData::Item.get(new_item)
|
||||
pocket = old_item.pocket
|
||||
ret = false
|
||||
for i in 0...maxsize
|
||||
itemslot = @pockets[pocket][i]
|
||||
if itemslot && itemslot[0]==olditem
|
||||
itemslot[0] = newitem
|
||||
ret = true
|
||||
end
|
||||
@pockets[pocket].each do |item|
|
||||
next if !item || item[0] != old_item.id
|
||||
item[0] = new_item.id
|
||||
ret = true
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbChangeQuantity(pocket,index,newqty=1)
|
||||
return false if pocket<=0 || pocket>self.numPockets
|
||||
return false if @pockets[pocket].length<index
|
||||
newqty = [newqty,maxPocketSize(pocket)].min
|
||||
def pbChangeQuantity(pocket, index, newqty = 1)
|
||||
return false if pocket <= 0 || pocket > self.numPockets
|
||||
return false if !@pockets[pocket][index]
|
||||
newqty = [newqty, maxPocketSize(pocket)].min
|
||||
@pockets[pocket][index][1] = newqty
|
||||
return true
|
||||
end
|
||||
|
||||
def pbDeleteItem(item,qty=1)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
pocket = pbGetPocket(item)
|
||||
maxsize = maxPocketSize(pocket)
|
||||
maxsize = @pockets[pocket].length if maxsize<0
|
||||
ret = ItemStorageHelper.pbDeleteItem(@pockets[pocket],maxsize,item,qty)
|
||||
def pbDeleteItem(item, qty = 1)
|
||||
item = GameData::Item.get(item)
|
||||
pocket = item.pocket
|
||||
ret = ItemStorageHelper.pbDeleteItem(@pockets[pocket], item.id, qty)
|
||||
return ret
|
||||
end
|
||||
|
||||
def registeredItems
|
||||
@registeredItems = [] if !@registeredItems
|
||||
if @registeredItem && @registeredItem>0 && !@registeredItems.include?(@registeredItem)
|
||||
@registeredItems.push(@registeredItem)
|
||||
@registeredItem = nil
|
||||
end
|
||||
return @registeredItems
|
||||
end
|
||||
|
||||
def registeredItem; return registeredItems; end
|
||||
|
||||
def pbIsRegistered?(item)
|
||||
item = GameData::Item.get(item).id
|
||||
registeredlist = self.registeredItems
|
||||
return registeredlist.include?(item)
|
||||
end
|
||||
|
||||
# Registers the item in the Ready Menu.
|
||||
def pbRegisterItem(item)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
item = GameData::Item.get(item).id
|
||||
registeredlist = self.registeredItems
|
||||
registeredlist.push(item) if !registeredlist.include?(item)
|
||||
end
|
||||
|
||||
# Unregisters the item from the Ready Menu.
|
||||
def pbUnregisterItem(item)
|
||||
item = getID(PBItems,item)
|
||||
if !item || item<1
|
||||
raise ArgumentError.new(_INTL("Item number {1} is invalid.",item))
|
||||
end
|
||||
item = GameData::Item.get(item).id
|
||||
registeredlist = self.registeredItems
|
||||
if registeredlist.include?(item)
|
||||
for i in 0...registeredlist.length
|
||||
next if registeredlist[i]!=item
|
||||
registeredlist[i] = nil
|
||||
break
|
||||
end
|
||||
registeredlist.compact!
|
||||
for i in 0...registeredlist.length
|
||||
next if registeredlist[i] != item
|
||||
registeredlist[i] = nil
|
||||
break
|
||||
end
|
||||
registeredlist.compact!
|
||||
end
|
||||
|
||||
def registeredIndex
|
||||
@registeredIndex = [0,0,1] if !@registeredIndex
|
||||
@registeredIndex = [0, 0, 1] if !@registeredIndex
|
||||
return @registeredIndex
|
||||
end
|
||||
end
|
||||
@@ -235,25 +190,25 @@ end
|
||||
# The PC item storage object, which actually contains all the items
|
||||
#===============================================================================
|
||||
class PCItemStorage
|
||||
MAXSIZE = 50 # Number of different slots in storage
|
||||
MAXPERSLOT = 999 # Max. number of items per slot
|
||||
MAX_SIZE = 999 # Number of different slots in storage
|
||||
MAX_PER_SLOT = 999 # Max. number of items per slot
|
||||
|
||||
def initialize
|
||||
@items = []
|
||||
# Start storage with a Potion
|
||||
pbStoreItem(getConst(PBItems,:POTION)) if hasConst?(PBItems,:POTION)
|
||||
pbStoreItem(:POTION) if GameData::Item.exists?(:POTION)
|
||||
end
|
||||
|
||||
def [](i)
|
||||
@items[i]
|
||||
return @items[i]
|
||||
end
|
||||
|
||||
def length
|
||||
@items.length
|
||||
return @items.length
|
||||
end
|
||||
|
||||
def empty?
|
||||
return @items.length==0
|
||||
return @items.length == 0
|
||||
end
|
||||
|
||||
def clear
|
||||
@@ -261,27 +216,31 @@ class PCItemStorage
|
||||
end
|
||||
|
||||
def getItem(index)
|
||||
return (index<0 || index>=@items.length) ? 0 : @items[index][0]
|
||||
return (index < 0 || index >= @items.length) ? nil : @items[index][0]
|
||||
end
|
||||
|
||||
def getCount(index)
|
||||
return (index<0 || index>=@items.length) ? 0 : @items[index][1]
|
||||
return (index < 0 || index >= @items.length) ? 0 : @items[index][1]
|
||||
end
|
||||
|
||||
def pbQuantity(item)
|
||||
return ItemStorageHelper.pbQuantity(@items,MAXSIZE,item)
|
||||
item = GameData::Item.get(item).id
|
||||
return ItemStorageHelper.pbQuantity(@items, item)
|
||||
end
|
||||
|
||||
def pbCanStore?(item,qty=1)
|
||||
return ItemStorageHelper.pbCanStore?(@items,MAXSIZE,MAXPERSLOT,item,qty)
|
||||
def pbCanStore?(item, qty = 1)
|
||||
item = GameData::Item.get(item).id
|
||||
return ItemStorageHelper.pbCanStore?(@items, MAX_SIZE, MAX_PER_SLOT, item, qty)
|
||||
end
|
||||
|
||||
def pbStoreItem(item,qty=1)
|
||||
return ItemStorageHelper.pbStoreItem(@items,MAXSIZE,MAXPERSLOT,item,qty)
|
||||
def pbStoreItem(item, qty = 1)
|
||||
item = GameData::Item.get(item).id
|
||||
return ItemStorageHelper.pbStoreItem(@items, MAX_SIZE, MAX_PER_SLOT, item, qty)
|
||||
end
|
||||
|
||||
def pbDeleteItem(item,qty=1)
|
||||
return ItemStorageHelper.pbDeleteItem(@items,MAXSIZE,item,qty)
|
||||
def pbDeleteItem(item, qty = 1)
|
||||
item = GameData::Item.get(item).id
|
||||
return ItemStorageHelper.pbDeleteItem(@items, item, qty)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -293,30 +252,26 @@ end
|
||||
# Used by the Bag, PC item storage, and Triple Triad.
|
||||
#===============================================================================
|
||||
module ItemStorageHelper
|
||||
# Returns the quantity of the given item in the items array, maximum size per
|
||||
# slot, and item ID
|
||||
def self.pbQuantity(items,maxsize,item)
|
||||
# Returns the quantity of check_item in item_array
|
||||
def self.pbQuantity(item_array, check_item)
|
||||
ret = 0
|
||||
for i in 0...maxsize
|
||||
itemslot = items[i]
|
||||
ret += itemslot[1] if itemslot && itemslot[0]==item
|
||||
end
|
||||
item_array.each { |i| ret += i[1] if i && i[0] == check_item }
|
||||
return ret
|
||||
end
|
||||
|
||||
# Deletes an item (items array, max. size per slot, item, no. of items to delete)
|
||||
def self.pbDeleteItem(items,maxsize,item,qty)
|
||||
raise "Invalid value for qty: #{qty}" if qty<0
|
||||
return true if qty==0
|
||||
def self.pbDeleteItem(items, item, qty)
|
||||
raise "Invalid value for qty: #{qty}" if qty < 0
|
||||
return true if qty == 0
|
||||
ret = false
|
||||
for i in 0...maxsize
|
||||
for i in 0...items.length
|
||||
itemslot = items[i]
|
||||
next if !itemslot || itemslot[0]!=item
|
||||
amount = [qty,itemslot[1]].min
|
||||
next if !itemslot || itemslot[0] != item
|
||||
amount = [qty, itemslot[1]].min
|
||||
itemslot[1] -= amount
|
||||
qty -= amount
|
||||
items[i] = nil if itemslot[1]==0
|
||||
next if qty>0
|
||||
items[i] = nil if itemslot[1] == 0
|
||||
next if qty > 0
|
||||
ret = true
|
||||
break
|
||||
end
|
||||
@@ -324,41 +279,44 @@ module ItemStorageHelper
|
||||
return ret
|
||||
end
|
||||
|
||||
def self.pbCanStore?(items,maxsize,maxPerSlot,item,qty)
|
||||
raise "Invalid value for qty: #{qty}" if qty<0
|
||||
return true if qty==0
|
||||
def self.pbCanStore?(items, maxsize, maxPerSlot, item, qty)
|
||||
raise "Invalid value for qty: #{qty}" if qty < 0
|
||||
return true if qty == 0
|
||||
for i in 0...maxsize
|
||||
itemslot = items[i]
|
||||
if !itemslot
|
||||
qty -= [qty,maxPerSlot].min
|
||||
return true if qty==0
|
||||
elsif itemslot[0]==item && itemslot[1]<maxPerSlot
|
||||
qty -= [qty, maxPerSlot].min
|
||||
return true if qty == 0
|
||||
elsif itemslot[0] == item && itemslot[1] < maxPerSlot
|
||||
newamt = itemslot[1]
|
||||
newamt = [newamt+qty,maxPerSlot].min
|
||||
qty -= (newamt-itemslot[1])
|
||||
return true if qty==0
|
||||
newamt = [newamt + qty, maxPerSlot].min
|
||||
qty -= (newamt - itemslot[1])
|
||||
return true if qty == 0
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def self.pbStoreItem(items,maxsize,maxPerSlot,item,qty,sorting=false)
|
||||
raise "Invalid value for qty: #{qty}" if qty<0
|
||||
return true if qty==0
|
||||
itemPocket = pbGetPocket(item)
|
||||
def self.pbStoreItem(items, maxsize, maxPerSlot, item, qty, sorting = false)
|
||||
raise "Invalid value for qty: #{qty}" if qty < 0
|
||||
return true if qty == 0
|
||||
itm = GameData::Item.try_get(item)
|
||||
itemPocket = (itm) ? itm.pocket : 0
|
||||
for i in 0...maxsize
|
||||
itemslot = items[i]
|
||||
if !itemslot
|
||||
items[i] = [item,[qty,maxPerSlot].min]
|
||||
items[i] = [item, [qty, maxPerSlot].min]
|
||||
qty -= items[i][1]
|
||||
items.sort! if sorting && BAG_POCKET_AUTO_SORT[itemPocket]
|
||||
return true if qty==0
|
||||
elsif itemslot[0]==item && itemslot[1]<maxPerSlot
|
||||
if itemPocket > 0 && sorting && BAG_POCKET_AUTO_SORT[itemPocket]
|
||||
items.sort! { |a, b| GameData::Item.get(a[0]).id_number <=> GameData::Item.get(b[0]).id_number }
|
||||
end
|
||||
return true if qty == 0
|
||||
elsif itemslot[0] == item && itemslot[1] < maxPerSlot
|
||||
newamt = itemslot[1]
|
||||
newamt = [newamt+qty,maxPerSlot].min
|
||||
qty -= (newamt-itemslot[1])
|
||||
newamt = [newamt + qty, maxPerSlot].min
|
||||
qty -= (newamt - itemslot[1])
|
||||
itemslot[1] = newamt
|
||||
return true if qty==0
|
||||
return true if qty == 0
|
||||
end
|
||||
end
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user