PiaCRT
Orange Dev
- 958
- Posts
- 14
- Years
- Age 29
- Mikan Island
- Seen today
Hello. I used to work with Essentials version 7 but I decided to upgrade to version 10 today. I had a bag script that I worked extremely hard on and it was complete and fully functional. However, it seem in version 10 there is no pbQuantity and instead there are new methods in the engine. I'm not sure what to change to fix this @__@
My script:
My script:
Spoiler:
Code:
class Window_PokemonBag < Window_DrawableCommand
attr_reader :pocket
attr_reader :sortIndex
def initialize(bag,pocket,x,y,width,height)
@bag=bag
@pocket=pocket
@sortIndex=-1
@adapter=PokemonMartAdapter.new
super(x,y,width,height)
self.windowskin=nil
end
def pocket=(value)
@pocket=value
[email protected][@pocket]
@item_max=thispocket.length+1
[email protected](@pocket)
refresh
end
def sortIndex=(value)
@sortIndex=value
refresh
end
def item
[email protected][self.pocket]
item=thispocket[self.index]
return item ? item[0] : 0
end
def itemCount
return @bag.pockets[self.pocket].length+1
end
def drawItem(index,count,rect)
textpos=[]
rect=drawCursor(index,rect)
ypos=rect.y
if [email protected][self.pocket].length
textpos.push([_INTL("CANCEL"),rect.x,ypos,false,
self.baseColor,self.shadowColor])
else
[email protected][self.pocket][index][0]
[email protected](item)
qty=_ISPRINTF("*{1: 2d}",@bag.pockets[self.pocket][index][1])
sizeQty=self.contents.text_size(qty).width
xQty=rect.x+rect.width-sizeQty-2
baseColor=(index==@sortIndex) ? Color.new(248,24,24) : self.baseColor
textpos.push([itemname,rect.x,ypos,false,baseColor,self.shadowColor])
if !pbIsImportantItem?(item) # Key item or HM
textpos.push([qty,xQty,ypos,false,baseColor,self.shadowColor])
end
end
pbDrawTextPositions(self.contents,textpos)
if [email protected][self.pocket].length
if self.pocket==8 && @[email protected][self.pocket][index][0]
pbDrawImagePositions(self.contents,[
["Graphics/Pictures/regitem",rect.x+rect.width-48,ypos+4,0,0,-1,-1]
])
end
end
end
end
class Window_PokemonItemStorage < Window_DrawableCommand
attr_reader :bag
attr_reader :pocket
attr_reader :sortIndex
def sortIndex=(value)
@sortIndex=value
refresh
end
def initialize(bag,x,y,width,height)
@bag=bag
@sortIndex=-1
@adapter=PokemonMartAdapter.new
super(x,y,width,height)
self.windowskin=nil
end
def item
item=@bag[self.index]
return item ? item[0] : 0
end
def itemCount
return @bag.length+1
end
def drawItem(index,count,rect)
textpos=[130,32]
rect=drawCursor(index,rect)
ypos=rect.y
if [email protected]
textpos.push([_INTL("CANCEL"),rect.x,ypos,false,
self.baseColor,self.shadowColor])
else
item=@bag[index][0]
[email protected](item)
qty=_ISPRINTF("x{1: 2d}",@bag[index][1])
sizeQty=self.contents.text_size(qty).width
xQty=rect.x+rect.width-sizeQty-2
baseColor=(index==@sortIndex) ? Color.new(248,24,24) : self.baseColor
textpos.push([itemname,rect.x,ypos,false,self.baseColor,self.shadowColor])
if !pbIsImportantItem?(item) # Key item or HM
textpos.push([qty,xQty,ypos,false,baseColor,self.shadowColor])
end
end
pbDrawTextPositions(self.contents,textpos)
end
end
######################################################
module UIHelper
# Common UI functions used in both the bag and item storage screens.
# Allows the user to choose a number. The window _helpwindow_ will
# display the _helptext_.
def self.pbChooseNumber(helpwindow,helptext,maximum)
oldvisible=helpwindow.visible
helpwindow.visible=true
helpwindow.text=helptext
helpwindow.letterbyletter=false
curnumber=1
ret=0
using(numwindow=Window_UnformattedTextPokemon.new(_INTL("x000"))){
numwindow.viewport=helpwindow.viewport
numwindow.letterbyletter=false
numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
numwindow.resizeToFit(numwindow.text,480)
pbBottomRight(numwindow) # Move number window to the bottom right
helpwindow.resizeHeightToFit(helpwindow.text,480-numwindow.width)
pbBottomLeft(helpwindow) # Move help window to the bottom left
loop do
Graphics.update
Input.update
numwindow.update
block_given? ? yield : helpwindow.update
if Input.repeat?(Input::LEFT)
curnumber-=10
curnumber=1 if curnumber<1
numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
pbPlayCursorSE()
elsif Input.repeat?(Input::RIGHT)
curnumber+=10
curnumber=maximum if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
pbPlayCursorSE()
elsif Input.repeat?(Input::UP)
curnumber+=1
curnumber=1 if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
pbPlayCursorSE()
elsif Input.repeat?(Input::DOWN)
curnumber-=1
curnumber=maximum if curnumber<1
numwindow.text=_ISPRINTF("x{1:03d}",curnumber)
pbPlayCursorSE()
elsif Input.trigger?(Input::C)
ret=curnumber
pbPlayDecisionSE()
break
elsif Input.trigger?(Input::B)
ret=0
pbPlayCancelSE()
break
end
end
}
helpwindow.visible=oldvisible
return ret
end
def self.pbDisplayStatic(msgwindow,message)
oldvisible=msgwindow.visible
msgwindow.visible=true
msgwindow.letterbyletter=false
msgwindow.width=Graphics.width
msgwindow.resizeHeightToFit(message,Graphics.width)
msgwindow.text=message
pbBottomRight(msgwindow)
loop do
Graphics.update
Input.update
if Input.trigger?(Input::B)
break
end
if Input.trigger?(Input::C)
break
end
block_given? ? yield : msgwindow.update
end
msgwindow.visible=oldvisible
Input.update
end
# Letter by letter display of the message _msg_ by the window _helpwindow_.
def self.pbDisplay(helpwindow,msg,brief)
cw=helpwindow
cw.letterbyletter=true
cw.text=msg+"\1"
pbBottomLeftLines(cw,2)
oldvisible=cw.visible
cw.visible=true
loop do
Graphics.update
Input.update
block_given? ? yield : cw.update
if brief && !cw.busy?
cw.visible=oldvisible
return
end
if Input.trigger?(Input::C) && cw.resume && !cw.busy?
cw.visible=oldvisible
return
end
end
end
# Letter by letter display of the message _msg_ by the window _helpwindow_,
# used to ask questions. Returns true if the user chose yes, false if no.
def self.pbConfirm(helpwindow,msg)
dw=helpwindow
oldvisible=dw.visible
dw.letterbyletter=true
dw.text=msg
dw.visible=true
pbBottomLeftLines(dw,2)
commands=[_INTL("YES"),_INTL("NO")]
cw = Window_CommandPokemon.new(commands)
cw.viewport=helpwindow.viewport
pbBottomRight(cw)
cw.y-=dw.height
cw.index=0
loop do
cw.visible=!dw.busy?
Graphics.update
Input.update
cw.update
block_given? ? yield : dw.update
if Input.trigger?(Input::B) && dw.resume && !dw.busy?
cw.dispose
dw.visible=oldvisible
pbPlayCancelSE()
return false
end
if Input.trigger?(Input::C) && dw.resume && !dw.busy?
cwIndex=cw.index
cw.dispose
dw.visible=oldvisible
pbPlayDecisionSE()
return (cwIndex==0)?true:false
end
end
end
def self.pbShowCommands(helpwindow,helptext,commands)
ret=-1
oldvisible=helpwindow.visible
helpwindow.visible=helptext ? true : false
helpwindow.letterbyletter=false
helpwindow.text=helptext ? helptext : ""
cmdwindow=Window_CommandPokemon.new(commands)
begin
cmdwindow.viewport=helpwindow.viewport
pbBottomRight(cmdwindow)
helpwindow.resizeHeightToFit(helpwindow.text,480-cmdwindow.width)
pbBottomLeft(helpwindow)
loop do
Graphics.update
Input.update
yield
cmdwindow.update
if Input.trigger?(Input::B)
ret=-1
pbPlayCancelSE()
break
end
if Input.trigger?(Input::C)
ret=cmdwindow.index
pbPlayDecisionSE()
break
end
end
ensure
cmdwindow.dispose if cmdwindow
end
helpwindow.visible=oldvisible
return ret
end
end
class PokemonBag_Scene
#################################
## Configuration
ITEMLISTBASECOLOR=Color.new(0,0,0)
ITEMLISTSHADOWCOLOR=Color.new(248,248,248)
ITEMTEXTBASECOLOR=Color.new(0,0,0)
ITEMTEXTSHADOWCOLOR=Color.new(248,248,248)
POCKETNAMEBASECOLOR=Color.new(248,248,248)
POCKETNAMESHADOWCOLOR=Color.new(0,0,0)
ITEMSVISIBLE=5
#################################
def update
pbUpdateSpriteHash(@sprites)
end
def pbStartScene(bag)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@bag=bag
@sprites={}
[email protected]
[email protected](lastpocket)
fbackexists=pbResolveBitmap(sprintf("Graphics/Pictures/bagbgf"))
@sprites["background"]=IconSprite.new(0,0,@viewport)
if $Trainer.gender==1 && fbackexists
@sprites["background"].setBitmap(sprintf("Graphics/Pictures/bagbgf"))
else
@sprites["background"].setBitmap(sprintf("Graphics/Pictures/bagbg"))
end
@sprites["leftarrow"]=AnimatedSprite.new("Graphics/Pictures/leftarrow",8,40,28,2,@viewport)
@sprites["rightarrow"]=AnimatedSprite.new("Graphics/Pictures/rightarrow",8,40,28,2,@viewport)
@sprites["leftarrow"].play
@sprites["rightarrow"].play
@sprites["bag"]=IconSprite.new(0,48,@viewport)
#@sprites["icon"]=IconSprite.new(16,248,@viewport)
@sprites["itemwindow"]=Window_PokemonBag.new(@bag,lastpocket,70,16,255,32+ITEMSVISIBLE*32)
@sprites["itemwindow"].viewport=@viewport
@sprites["itemwindow"].pocket=lastpocket
@sprites["itemwindow"].index=lastitem
@sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
@sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
@sprites["itemwindow"].refresh
@sprites["pocketwindow"]=BitmapSprite.new(176,64,@viewport)
pbSetSystemFont(@sprites["pocketwindow"].bitmap)
@sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
@sprites["itemtextwindow"].x=18
@sprites["itemtextwindow"].y=200
@sprites["itemtextwindow"].width=Graphics.width-64
@sprites["itemtextwindow"].height=96
@sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
@sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
@sprites["itemtextwindow"].visible=true
@sprites["itemtextwindow"].viewport=@viewport
@sprites["itemtextwindow"].windowskin=nil
@sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
@sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
@sprites["msgwindow"].visible=false
@sprites["msgwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
pbDeactivateWindows(@sprites)
pbRefresh
pbFadeInAndShow(@sprites)
end
def pbEndScene
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end
def pbChooseNumber(helptext,maximum)
return UIHelper.pbChooseNumber(
@sprites["helpwindow"],helptext,maximum) { update }
end
def pbDisplay(msg,brief=false)
UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
end
def pbConfirm(msg)
UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
end
def pbShowCommands(helptext,commands)
return UIHelper.pbShowCommands(
@sprites["helpwindow"],helptext,commands) { update }
end
def pbRefresh
bm=@sprites["pocketwindow"].bitmap
bm.clear
name=PokemonBag.pocketNames()[@bag.lastpocket]
# Set the bitmap for the currently selected bag
fbagexists=pbResolveBitmap(sprintf("Graphics/Pictures/bagf#{@bag.lastpocket}"))
if $Trainer.gender==1 && fbagexists
@sprites["bag"].setBitmap("Graphics/Pictures/bagf#{@bag.lastpocket}")
else
@sprites["bag"].setBitmap("Graphics/Pictures/bag#{@bag.lastpocket}")
end
#base=POCKETNAMEBASECOLOR
#shadow=POCKETNAMESHADOWCOLOR
# Draw the pocket name on the upper left corner of the screen
#pbDrawTextPositions(bm,[
# [name,bm.width/2,16,2,base,shadow]
#])
# Reset positions of left/right arrows around the bag
@sprites["leftarrow"].x=-4
@sprites["leftarrow"].y=128
@sprites["rightarrow"].x=124
@sprites["rightarrow"].y=128
itemwindow=@sprites["itemwindow"]
# Set the icon for the currently selected item
#filename=sprintf("Graphics/Icons/item%03d",itemwindow.item)
#@sprites["icon"].setBitmap(filename)
# Display the item's description
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("") :
pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
# Refresh the item window
itemwindow.refresh
end
# Called when the item screen wants an item to be chosen from the screen
def pbChooseItem
pbRefresh
@sprites["helpwindow"].visible=false
itemwindow=@sprites["itemwindow"]
itemwindow.refresh
sorting=false
sortindex=-1
pbActivateWindow(@sprites,"itemwindow"){
loop do
Graphics.update
Input.update
olditem=itemwindow.item
oldindex=itemwindow.index
self.update
if itemwindow.item!=olditem
# Update item icon and description
#filename=sprintf("Graphics/Icons/item%03d",itemwindow.item)
#@sprites["icon"].setBitmap(filename)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("") :
pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
end
if itemwindow.index!=oldindex
# Update selected item for current pocket
@bag.setChoice(itemwindow.pocket,itemwindow.index)
end
# Change pockets if Left/Right pressed
numpockets=PokemonBag.numPockets
if Input.trigger?(Input::LEFT)
itemwindow.pocket=(itemwindow.pocket==1) ? numpockets : itemwindow.pocket-1
@bag.lastpocket=itemwindow.pocket
pbRefresh
elsif Input.trigger?(Input::RIGHT)
itemwindow.pocket=(itemwindow.pocket==numpockets) ? 1 : itemwindow.pocket+1
@bag.lastpocket=itemwindow.pocket
pbRefresh
end
# Select item for switching if A is pressed
if Input.trigger?(Input::A)
[email protected][itemwindow.pocket]
if itemwindow.index<thispocket.length
sortindex=itemwindow.index
sorting=true
@sprites["itemwindow"].sortIndex=sortindex
else
next
end
end
# Cancel switching or cancel the item screen
if Input.trigger?(Input::B)
if sorting
sorting=false
@sprites["itemwindow"].sortIndex=-1
else
return 0
end
end
# Confirm selection or item switch
if Input.trigger?(Input::C)
[email protected][itemwindow.pocket]
if itemwindow.index<thispocket.length
if sorting
sorting=false
tmp=thispocket[itemwindow.index]
thispocket[itemwindow.index]=thispocket[sortindex]
thispocket[sortindex]=tmp
@sprites["itemwindow"].sortIndex=-1
pbRefresh
next
else
pbRefresh
return thispocket[itemwindow.index][0]
end
else
return 0
end
end
end
}
end
end
class ItemStorageScene
#################################
## Configuration
ITEMLISTBASECOLOR=Color.new(72,72,72)
ITEMLISTSHADOWCOLOR=Color.new(208,208,208)
ITEMTEXTBASECOLOR=Color.new(31*8,31*8,31*8)
ITEMTEXTSHADOWCOLOR=Color.new(12*8,12*8,12*8)
TITLEBASECOLOR=Color.new(31*8,31*8,31*8)
TITLESHADOWCOLOR=Color.new(12*8,12*8,12*8)
ITEMSVISIBLE=6
#################################
def initialize(title)
@title=title
end
def update
pbUpdateSpriteHash(@sprites)
end
def pbStartScene(bag)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@bag=bag
@sprites={}
@sprites["background"]=IconSprite.new(0,0,@viewport)
@sprites["background"].setBitmap("Graphics/Pictures/pcitembg")
#@sprites["icon"]=IconSprite.new(16,248,@viewport)
# Item list
@sprites["itemwindow"]=Window_PokemonItemStorage.new(@bag,96,0,304,32+ITEMSVISIBLE*32)
@sprites["itemwindow"].viewport=@viewport
@sprites["itemwindow"].index=0
@sprites["itemwindow"].baseColor=ITEMLISTBASECOLOR
@sprites["itemwindow"].shadowColor=ITEMLISTSHADOWCOLOR
@sprites["itemwindow"].refresh
# Title
@sprites["pocketwindow"]=BitmapSprite.new(88,64,@viewport)
@sprites["pocketwindow"].x=16
@sprites["pocketwindow"].y=16
pbSetNarrowFont(@sprites["pocketwindow"].bitmap)
# Item description
@sprites["itemtextwindow"]=Window_UnformattedTextPokemon.newWithSize("",64,208,480-64,128,@viewport)
@sprites["itemtextwindow"].baseColor=ITEMTEXTBASECOLOR
@sprites["itemtextwindow"].shadowColor=ITEMTEXTSHADOWCOLOR
@sprites["itemtextwindow"].windowskin=nil
@sprites["helpwindow"]=Window_UnformattedTextPokemon.new("")
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
# Letter-by-letter message window
@sprites["msgwindow"]=Window_AdvancedTextPokemon.new("")
@sprites["msgwindow"].visible=false
@sprites["msgwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
pbDeactivateWindows(@sprites)
pbRefresh
pbFadeInAndShow(@sprites)
end
def pbEndScene
pbFadeOutAndHide(@sprites)
pbDisposeSpriteHash(@sprites)
@viewport.dispose
end
def pbRefresh
bm=@sprites["pocketwindow"].bitmap
# Draw title at upper left corner ("Toss Item/Withdraw Item")
drawTextEx(bm,0,0,bm.width,2,@title,TITLEBASECOLOR,TITLESHADOWCOLOR)
itemwindow=@sprites["itemwindow"]
#filename=sprintf("Graphics/Icons/item%03d",itemwindow.item)
#@sprites["icon"].setBitmap(filename)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Close storage.") :
pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
itemwindow.refresh
end
def pbChooseItem
pbRefresh
@sprites["helpwindow"].visible=false
itemwindow=@sprites["itemwindow"]
itemwindow.refresh
pbActivateWindow(@sprites,"itemwindow"){
loop do
Graphics.update
Input.update
olditem=itemwindow.item
self.update
if itemwindow.item!=olditem
self.pbRefresh
end
if Input.trigger?(Input::B)
return 0
end
if Input.trigger?(Input::C)
if itemwindow.index<@bag.length
pbRefresh
return @bag[itemwindow.index][0]
else
return 0
end
end
end
}
end
def pbChooseNumber(helptext,maximum)
return UIHelper.pbChooseNumber(
@sprites["helpwindow"],helptext,maximum) { update }
end
def pbDisplay(msg,brief=false)
UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { update }
end
def pbConfirm(msg)
UIHelper.pbConfirm(@sprites["msgwindow"],msg) { update }
end
def pbShowCommands(helptext,commands)
return UIHelper.pbShowCommands(
@sprites["helpwindow"],helptext,commands) { update }
end
end
class WithdrawItemScene < ItemStorageScene
def initialize
super(_INTL("WITHDRAW\nITEM"))
end
end
class TossItemScene < ItemStorageScene
def initialize
super(_INTL("TOSS\nITEM"))
end
end
class PokemonBag
attr_reader :registeredItem
attr_accessor :lastpocket
attr_reader :pockets
def self.pocketNames()
ret=POCKETNAMES
##### Unquote this code to translate the bag pocket names into another language.
# ret=["",
# "Items","Medicine","Balls","TMs & HMs",
# "Berries","Mail","Battle Items","Key Items"
# ] if $PokemonSystem.language==1
return ret
end
def self.numPockets()
return self.pocketNames().length-1
end
def initialize
@lastpocket=1
@pockets=[]
@choices=[]
# Initialize each pocket of the array
for i in 0..PokemonBag.numPockets
@pockets[i]=[]
@choices[i]=0
end
@registeredItem=0
end
def pockets
rearrange()
return @pockets
end
def rearrange()
if @pockets.length==6 && PokemonBag.numPockets==8
newpockets=[]
for i in 0..8
newpockets[i]=[]
@choices[i]=0 if !@choices[i]
end
for i in 0..5
for item in @pockets[i]
newpockets[pbGetPocket(item[0])].push(item)
end
end
@pockets=newpockets
end
end
# 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))
end
rearrange()
return [@choices[pocket],@pockets[pocket].length].min || 0
end
# Clears the entire bag
def clear
for pocket in @pockets
pocket.clear
end
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))
end
rearrange()
if value<@pockets[pocket].length
@choices[pocket]=value
end
end
# Registers the item as a key item. Can be retrieved with $PokemonBag.registeredItem
def pbRegisterKeyItem(item)
if item!=@registeredItem
@registeredItem=item
else
@registeredItem=0
end
end
def maxPocketSize(pocket)
maxsize=MAXPOCKETSIZE[pocket]
return -1 if !maxsize
return maxsize
end
def pbQuantity(item)
pocket=pbGetPocket(item)
maxsize=maxPocketSize(pocket)
maxsize=@pockets[pocket].length if maxsize<0
return ItemStorageHelper.pbQuantity(
@pockets[pocket],maxsize,item)
end
def pbDeleteItem(item,qty=1)
pocket=pbGetPocket(item)
maxsize=maxPocketSize(pocket)
maxsize=@pockets[pocket].length if maxsize<0
ret=ItemStorageHelper.pbDeleteItem(@pockets[pocket],maxsize,item,qty)
if ret
@registeredItem=0 if @registeredItem==item && pbQuantity(item)<=0
end
return ret
end
def pbCanStore?(item,qty=1)
pocket=pbGetPocket(item)
maxsize=maxPocketSize(pocket)
maxsize=@pockets[pocket].length+1 if maxsize<0
return ItemStorageHelper.pbCanStore?(
@pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
end
def pbStoreAllOrNone(item,qty=1)
pocket=pbGetPocket(item)
maxsize=maxPocketSize(pocket)
maxsize=@pockets[pocket].length+1 if maxsize<0
return ItemStorageHelper.pbStoreAllOrNone(
@pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
end
def pbStoreItem(item,qty=1)
pocket=pbGetPocket(item)
maxsize=maxPocketSize(pocket)
maxsize=@pockets[pocket].length+1 if maxsize<0
return ItemStorageHelper.pbStoreItem(
@pockets[pocket],maxsize,BAGMAXPERSLOT,item,qty)
end
end
class PCItemStorage
MAXSIZE=50
MAXPERSLOT=999
def initialize
@items=[]
Start storage with a Potion
if hasConst?(PBItems,:POTION)
ItemStorageHelper.pbStoreItem(
@items,MAXSIZE,MAXPERSLOT,getConst(PBItems,:POTION),1)
end
end
def empty?
return @items.length==0
end
def length
@items.length
end
def [](i)
@items[i]
end
def getItem(index)
if index<0 || index>[email protected]
return 0
else
return @items[index][0]
end
end
def getCount(index)
if index<0 || index>[email protected]
return 0
else
return @items[index][1]
end
end
def pbQuantity(item)
return ItemStorageHelper.pbQuantity(@items,MAXSIZE,item)
end
def pbDeleteItem(item,qty=1)
return ItemStorageHelper.pbDeleteItem(@items,MAXSIZE,item,qty)
end
def pbCanStore?(item,qty=1)
return ItemStorageHelper.pbCanStore?(@items,MAXSIZE,MAXPERSLOT,item,qty)
end
def pbStoreItem(item,qty=1)
return ItemStorageHelper.pbStoreItem(@items,MAXSIZE,MAXPERSLOT,item,qty)
end
end
class PokemonBagScreen
def initialize(scene,bag)
@bag=bag
@scene=scene
end
def pbDisplay(text)
@scene.pbDisplay(text)
end
def pbConfirm(text)
return @scene.pbConfirm(text)
end
# UI logic for the item screen when an item is to be held by a Pokémon.
def pbGiveItemScreen
@scene.pbStartScene(@bag)
item=0
loop do
[email protected]
break if item==0
itemname=PBItems.getName(item)
# Key items and hidden machines can't be held
if pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
next
else
break
end
end
@scene.pbEndScene
return item
end
# UI logic for the item screen for choosing a Berry
def pbChooseBerryScreen
[email protected]
@bag.lastpocket=BERRYPOCKET
@scene.pbStartScene(@bag)
item=0
loop do
[email protected]
break if item==0
itemname=PBItems.getName(item)
if !pbIsBerry?(item)
@scene.pbDisplay(_INTL("That's not a Berry.",itemname))
next
else
break
end
end
@scene.pbEndScene
@bag.lastpocket=oldlastpocket
return item
end
# UI logic for tossing an item in the item screen.
def pbTossItemScreen
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage=PCItemStorage.new
end
storage=$PokemonGlobal.pcItemStorage
@scene.pbStartScene(storage)
loop do
[email protected]
break if item==0
if pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("That's too important to toss out!"))
next
end
qty=storage.pbQuantity(item)
itemname=PBItems.getName(item)
if qty>1
[email protected](_INTL("Toss out how many {1}(s)?",itemname),qty)
end
if qty>0
if pbConfirm(_INTL("Is it OK to throw away {1} {2}(s)?",qty,itemname))
if !storage.pbDeleteItem(item,qty)
raise "Can't delete items from storage"
end
pbDisplay(_INTL("Threw away {1} {2}(s).",qty,itemname))
end
end
end
@scene.pbEndScene
end
# UI logic for withdrawing an item in the item screen.
def pbWithdrawItemScreen
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage=PCItemStorage.new
end
storage=$PokemonGlobal.pcItemStorage
@scene.pbStartScene(storage)
loop do
[email protected]
break if item==0
commands=[_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")]
itemname=PBItems.getName(item)
[email protected](_INTL("{1} is selected.",itemname),commands)
if command==0
qty=storage.pbQuantity(item)
if qty>1
[email protected](_INTL("How many do you want to withdraw?"),qty)
end
if qty>0
if [email protected]?(item,qty)
pbDisplay(_INTL("There's no more room in the Bag."))
else
pbDisplay(_INTL("Withdrew {1} {2}(s).",qty,itemname))
if !storage.pbDeleteItem(item,qty)
raise "Can't delete items from storage"
end
if [email protected](item,qty)
raise "Can't withdraw items from storage"
end
end
end
elsif command==1 # Give
if $Trainer.pokemonCount==0
@scene.pbDisplay(_INTL("There is no Pokémon."))
return 0
elsif pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
else
pbFadeOutIn(99999){
sscene=PokemonScreen_Scene.new
sscreen=PokemonScreen.new(sscene,$Trainer.party)
if sscreen.pbPokemonGiveScreen(item)
# If the item was held, delete the item from storage
if !storage.pbDeleteItem(item,1)
raise "Can't delete item from storage"
end
end
@scene.pbRefresh
}
end
end
end
@scene.pbEndScene
end
# UI logic for depositing an item in the item screen.
def pbDepositItemScreen
@scene.pbStartScene(@bag)
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage=PCItemStorage.new
end
storage=$PokemonGlobal.pcItemStorage
item=0
loop do
[email protected]
break if item==0
[email protected](item)
if qty>1
[email protected](_INTL("How many do you want to deposit?"),qty)
end
if qty>0
itemname=PBItems.getName(item)
if !storage.pbCanStore?(item,qty)
pbDisplay(_INTL("There's no room to store items."))
else
pbDisplay(_INTL("Deposited {1} {2}(s).",qty,itemname))
if [email protected](item,qty)
raise "Can't delete items from bag"
end
if !storage.pbStoreItem(item,qty)
raise "Can't deposit items to storage"
end
end
end
end
@scene.pbEndScene
end
def pbStartScreen
@scene.pbStartScene(@bag)
item=0
loop do
[email protected]
break if item==0
cmdUse=-1
cmdRegister=-1
cmdGive=-1
cmdToss=-1
cmdCheck=-1
commands=[]
# Generate command list
commands[cmdCheck=commands.length]=_INTL("Read") if pbIsMail?(item)
commands[cmdUse=commands.length]=_INTL("Use") if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0)
commands[cmdGive=commands.length]=_INTL("Give") if $Trainer.party.length>0 && !pbIsImportantItem?(item)
commands[cmdToss=commands.length]=_INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG
if @bag.registeredItem==item
commands[cmdRegister=commands.length]=_INTL("Deselect")
elsif pbIsKeyItem?(item) && ItemHandlers.hasKeyItemHandler(item)
commands[cmdRegister=commands.length]=_INTL("Register")
end
commands[commands.length]=_INTL("Cancel")
# Show commands generated above
itemname=PBItems.getName(item) # Get item name
[email protected](_INTL("{1} is selected.",itemname),commands)
if cmdUse>=0 && command==cmdUse # Use item
ret=pbUseItem(@bag,item)
# ret==0: Item wasn't used; ret==1: Item was used
if ret==2 # End screen
break
end
@scene.pbRefresh
next
elsif cmdCheck>=0 && command==cmdCheck # Read mail
pbFadeOutIn(99999){
pbDisplayMail(PokemonMail.new(item,"",""))
}
elsif cmdRegister>=0 && command==cmdRegister # Register key item
@bag.pbRegisterKeyItem(item)
@scene.pbRefresh
elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon
if $Trainer.pokemonCount==0
@scene.pbDisplay(_INTL("There is no Pokémon."))
elsif pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
else
# Give item to a Pokémon
pbFadeOutIn(99999){
sscene=PokemonScreen_Scene.new
sscreen=PokemonScreen.new(sscene,$Trainer.party)
sscreen.pbPokemonGiveScreen(item)
@scene.pbRefresh
}
end
elsif cmdToss>=0 && command==cmdToss # Toss item
[email protected](item)
helptext=_INTL("Toss out how many {1}(s)?",itemname)
[email protected](helptext,qty)
if qty>0
if pbConfirm(_INTL("Is it OK to throw away {1} {2}(s)?",qty,itemname))
pbDisplay(_INTL("Threw away {1} {2}(s).",qty,itemname))
qty.times { @bag.pbDeleteItem(item) }
end
end
end
end
@scene.pbEndScene
return item
end
end