Advertisement
Guest User

Untitled

a guest
Sep 14th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.51 KB | None | 0 0
  1. class Window_PokemonBag < Window_DrawableCommand
  2. attr_reader :pocket
  3. attr_accessor :sorting
  4.  
  5. def initialize(bag,filterlist,pocket,x,y,width,height)
  6. @bag = bag
  7. @filterlist = filterlist
  8. @pocket = pocket
  9. @sorting = false
  10. @adapter = PokemonMartAdapter.new
  11. super(x,y,width,height)
  12. @selarrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor")
  13. @swaparrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor_swap")
  14. self.windowskin = nil
  15. end
  16.  
  17. def dispose
  18. @swaparrow.dispose
  19. super
  20. end
  21.  
  22. def pocket=(value)
  23. @pocket = value
  24. @item_max = (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
  25. self.index = @bag.getChoice(@pocket)
  26. end
  27.  
  28. def page_row_max; return PokemonBag_Scene::ITEMSVISIBLE; end
  29. def page_item_max; return PokemonBag_Scene::ITEMSVISIBLE; end
  30.  
  31. def item
  32. return 0 if @filterlist && !@filterlist[@pocket][self.index]
  33. thispocket = @bag.pockets[@pocket]
  34. item = (@filterlist) ? thispocket[@filterlist[@pocket][self.index]] : thispocket[self.index]
  35. return (item) ? item[0] : 0
  36. end
  37.  
  38. def itemCount
  39. return (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
  40. end
  41.  
  42. def itemRect(item)
  43. if item<0 || item>=@item_max || item<self.top_item-1 ||
  44. item>self.top_item+self.page_item_max
  45. return Rect.new(0,0,0,0)
  46. else
  47. cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max
  48. x = item % @column_max * (cursor_width + @column_spacing)
  49. y = item / @column_max * @row_height - @virtualOy
  50. return Rect.new(x, y, cursor_width, @row_height)
  51. end
  52. end
  53.  
  54. def drawCursor(index,rect)
  55. if self.index==index
  56. bmp = (@sorting) ? @swaparrow.bitmap : @selarrow.bitmap
  57. pbCopyBitmap(self.contents,bmp,rect.x,rect.y+2)
  58. end
  59. end
  60.  
  61. def drawItem(index,count,rect)
  62. textpos = []
  63. rect = Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height)
  64. ypos = rect.y+4
  65. thispocket = @bag.pockets[@pocket]
  66. if index==self.itemCount-1
  67. textpos.push([_INTL("CLOSE BAG"),rect.x,ypos,false,self.baseColor,self.shadowColor])
  68. else
  69. item = (@filterlist) ? thispocket[@filterlist[@pocket][index]][0] : thispocket[index][0]
  70. baseColor = self.baseColor
  71. shadowColor = self.shadowColor
  72. if @sorting && index==self.index
  73. baseColor = Color.new(224,0,0)
  74. shadowColor = Color.new(248,144,144)
  75. end
  76. textpos.push(
  77. [@adapter.getDisplayName(item),rect.x,ypos,false,baseColor,shadowColor]
  78. )
  79. if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
  80. qty = (@filterlist) ? thispocket[@filterlist[@pocket][index]][1] : thispocket[index][1]
  81. qtytext = _ISPRINTF("x{1: 3d}",qty)
  82. xQty = rect.x+rect.width-self.contents.text_size(qtytext).width-16
  83. textpos.push([qtytext,xQty,ypos,false,baseColor,shadowColor])
  84. end
  85. if pbIsImportantItem?(item)
  86. if @bag.pbIsRegistered?(item)
  87. pbDrawImagePositions(self.contents,[
  88. ["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,0,-1,24]
  89. ])
  90. elsif pbCanRegisterItem?(item)
  91. pbDrawImagePositions(self.contents,[
  92. ["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,24,-1,24]
  93. ])
  94. end
  95. end
  96. end
  97. pbDrawTextPositions(self.contents,textpos)
  98. end
  99.  
  100. def refresh
  101. @item_max = itemCount()
  102. self.update_cursor_rect
  103. dwidth = self.width-self.borderX
  104. dheight = self.height-self.borderY
  105. self.contents = pbDoEnsureBitmap(self.contents,dwidth,dheight)
  106. self.contents.clear
  107. for i in 0...@item_max
  108. next if i<self.top_item-1 || i>self.top_item+self.page_item_max
  109. drawItem(i,@item_max,itemRect(i))
  110. end
  111. drawCursor(self.index,itemRect(self.index))
  112. end
  113.  
  114. def update
  115. super
  116. @uparrow.visible = false
  117. @downarrow.visible = false
  118. end
  119. end
  120.  
  121.  
  122.  
  123. #===============================================================================
  124. # Bag visuals
  125. #===============================================================================
  126. class PokemonBag_Scene
  127. ITEMLISTBASECOLOR = Color.new(88,88,80)
  128. ITEMLISTSHADOWCOLOR = Color.new(168,184,184)
  129. ITEMTEXTBASECOLOR = Color.new(248,248,248)
  130. ITEMTEXTSHADOWCOLOR = Color.new(0,0,0)
  131. POCKETNAMEBASECOLOR = Color.new(88,88,80)
  132. POCKETNAMESHADOWCOLOR = Color.new(168,184,184)
  133. ITEMSVISIBLE = 7
  134.  
  135. def pbUpdate
  136. pbUpdateSpriteHash(@sprites)
  137. end
  138.  
  139. def pbStartScene(bag,choosing=false,filterproc=nil,resetpocket=true)
  140. @viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
  141. @viewport.z = 99999
  142. @bag = bag
  143. @choosing = choosing
  144. @filterproc = filterproc
  145. pbRefreshFilter
  146. lastpocket = @bag.lastpocket
  147. numfilledpockets = @bag.pockets.length-1
  148. if @choosing
  149. numfilledpockets = 0
  150. if @filterlist!=nil
  151. for i in 1...@bag.pockets.length
  152. numfilledpockets += 1 if @filterlist[i].length>0
  153. end
  154. else
  155. for i in 1...@bag.pockets.length
  156. numfilledpockets += 1 if @bag.pockets[i].length>0
  157. end
  158. end
  159. lastpocket = (resetpocket) ? 1 : @bag.lastpocket
  160. if (@filterlist && @filterlist[lastpocket].length==0) ||
  161. (!@filterlist && @bag.pockets[lastpocket].length==0)
  162. for i in 1...@bag.pockets.length
  163. if @filterlist && @filterlist[i].length>0
  164. lastpocket = i; break
  165. elsif !@filterlist && @bag.pockets[i].length>0
  166. lastpocket = i; break
  167. end
  168. end
  169. end
  170. end
  171. @bag.lastpocket = lastpocket
  172. @sliderbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_slider"))
  173. @pocketbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_pocket"))
  174. @sprites = {}
  175. @sprites["background"] = IconSprite.new(0,0,@viewport)
  176. @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
  177. pbSetSystemFont(@sprites["overlay"].bitmap)
  178. @sprites["bagsprite"] = IconSprite.new(30,20,@viewport)
  179. @sprites["pocketicon"] = BitmapSprite.new(186,32,@viewport)
  180. @sprites["pocketicon"].x = 0
  181. @sprites["pocketicon"].y = 224
  182. @sprites["leftarrow"] = AnimatedSprite.new("Graphics/Pictures/leftarrow",8,40,28,2,@viewport)
  183. @sprites["leftarrow"].x = -4
  184. @sprites["leftarrow"].y = 76
  185. @sprites["leftarrow"].visible = (!@choosing || numfilledpockets>1)
  186. @sprites["leftarrow"].play
  187. @sprites["rightarrow"] = AnimatedSprite.new("Graphics/Pictures/rightarrow",8,40,28,2,@viewport)
  188. @sprites["rightarrow"].x = 150
  189. @sprites["rightarrow"].y = 76
  190. @sprites["rightarrow"].visible = (!@choosing || numfilledpockets>1)
  191. @sprites["rightarrow"].play
  192. @sprites["itemlist"] = Window_PokemonBag.new(@bag,@filterlist,lastpocket,168,-8,314,40+32+ITEMSVISIBLE*32)
  193. @sprites["itemlist"].viewport = @viewport
  194. @sprites["itemlist"].pocket = lastpocket
  195. @sprites["itemlist"].index = @bag.getChoice(lastpocket)
  196. @sprites["itemlist"].baseColor = ITEMLISTBASECOLOR
  197. @sprites["itemlist"].shadowColor = ITEMLISTSHADOWCOLOR
  198. @sprites["itemicon"] = ItemIconSprite.new(48,Graphics.height-48,-1,@viewport)
  199. @sprites["itemtext"] = Window_UnformattedTextPokemon.new("")
  200. @sprites["itemtext"].x = 72
  201. @sprites["itemtext"].y = 270
  202. @sprites["itemtext"].width = Graphics.width-72-24
  203. @sprites["itemtext"].height = 128
  204. @sprites["itemtext"].baseColor = ITEMTEXTBASECOLOR
  205. @sprites["itemtext"].shadowColor = ITEMTEXTSHADOWCOLOR
  206. @sprites["itemtext"].visible = true
  207. @sprites["itemtext"].viewport = @viewport
  208. @sprites["itemtext"].windowskin = nil
  209. @sprites["helpwindow"] = Window_UnformattedTextPokemon.new("")
  210. @sprites["helpwindow"].visible = false
  211. @sprites["helpwindow"].viewport = @viewport
  212. @sprites["msgwindow"] = Window_AdvancedTextPokemon.new("")
  213. @sprites["msgwindow"].visible = false
  214. @sprites["msgwindow"].viewport = @viewport
  215. pbBottomLeftLines(@sprites["helpwindow"],1)
  216. pbDeactivateWindows(@sprites)
  217. pbRefresh
  218. pbFadeInAndShow(@sprites)
  219. end
  220.  
  221. def pbEndScene
  222. pbFadeOutAndHide(@sprites)
  223. pbDisposeSpriteHash(@sprites)
  224. @sliderbitmap.dispose
  225. @pocketbitmap.dispose
  226. @viewport.dispose
  227. end
  228.  
  229. def pbDisplay(msg,brief=false)
  230. UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { pbUpdate }
  231. end
  232.  
  233. def pbConfirm(msg)
  234. UIHelper.pbConfirm(@sprites["msgwindow"],msg) { pbUpdate }
  235. end
  236.  
  237. def pbChooseNumber(helptext,maximum,initnum=1)
  238. return UIHelper.pbChooseNumber(@sprites["helpwindow"],helptext,maximum,initnum) { pbUpdate }
  239. end
  240.  
  241. def pbShowCommands(helptext,commands,initcmd=0)
  242. return UIHelper.pbShowCommands(@sprites["helpwindow"],helptext,commands,initcmd) { pbUpdate }
  243. end
  244.  
  245. def pbRefresh
  246. # Set the background image
  247. @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg_#{@bag.lastpocket}"))
  248. # Set the bag sprite
  249. fbagexists = pbResolveBitmap(sprintf("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f"))
  250. if $Trainer.isFemale? && fbagexists
  251. @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f")
  252. else
  253. @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}")
  254. end
  255. # Draw the pocket icons
  256. @sprites["pocketicon"].bitmap.clear
  257. if @choosing && @filterlist
  258. for i in 1...@bag.pockets.length
  259. if @filterlist[i].length==0
  260. @sprites["pocketicon"].bitmap.blt(6+(i-1)*22,6,
  261. @pocketbitmap.bitmap,Rect.new((i-1)*20,28,20,20))
  262. end
  263. end
  264. end
  265. @sprites["pocketicon"].bitmap.blt(2+(@sprites["itemlist"].pocket-1)*22,2,
  266. @pocketbitmap.bitmap,Rect.new((@sprites["itemlist"].pocket-1)*28,0,28,28))
  267. # Refresh the item window
  268. @sprites["itemlist"].refresh
  269. # Refresh more things
  270. pbRefreshIndexChanged
  271. end
  272.  
  273. def pbRefreshIndexChanged
  274. itemlist = @sprites["itemlist"]
  275. overlay = @sprites["overlay"].bitmap
  276. overlay.clear
  277. # Draw the pocket name
  278. pbDrawTextPositions(overlay,[
  279. [PokemonBag.pocketNames[@bag.lastpocket],94,180,2,POCKETNAMEBASECOLOR,POCKETNAMESHADOWCOLOR]
  280. ])
  281. # Draw slider arrows
  282. showslider = false
  283. if itemlist.top_row>0
  284. overlay.blt(470,16,@sliderbitmap.bitmap,Rect.new(0,0,36,38))
  285. showslider = true
  286. end
  287. if itemlist.top_item+itemlist.page_item_max<itemlist.itemCount
  288. overlay.blt(470,228,@sliderbitmap.bitmap,Rect.new(0,38,36,38))
  289. showslider = true
  290. end
  291. # Draw slider box
  292. if showslider
  293. sliderheight = 174
  294. boxheight = (sliderheight*itemlist.page_row_max/itemlist.row_max).floor
  295. boxheight += [(sliderheight-boxheight)/2,sliderheight/6].min
  296. boxheight = [boxheight.floor,38].max
  297. y = 54
  298. y += ((sliderheight-boxheight)*itemlist.top_row/(itemlist.row_max-itemlist.page_row_max)).floor
  299. overlay.blt(470,y,@sliderbitmap.bitmap,Rect.new(36,0,36,4))
  300. i = 0; while i*16<boxheight-4-18
  301. height = [boxheight-4-18-i*16,16].min
  302. overlay.blt(470,y+4+i*16,@sliderbitmap.bitmap,Rect.new(36,4,36,height))
  303. i += 1
  304. end
  305. overlay.blt(470,y+boxheight-18,@sliderbitmap.bitmap,Rect.new(36,20,36,18))
  306. end
  307. # Set the selected item's icon
  308. @sprites["itemicon"].item = itemlist.item
  309. # Set the selected item's description
  310. @sprites["itemtext"].text = (itemlist.item==0) ? _INTL("Close bag.") :
  311. pbGetMessage(MessageTypes::ItemDescriptions,itemlist.item)
  312. end
  313.  
  314. def pbRefreshFilter
  315. @filterlist = nil
  316. return if !@choosing
  317. if @filterproc!=nil
  318. @filterlist = []
  319. for i in 1...@bag.pockets.length
  320. @filterlist[i] = []
  321. for j in 0...@bag.pockets[i].length
  322. @filterlist[i].push(j) if @filterproc.call(@bag.pockets[i][j][0])
  323. end
  324. end
  325. else
  326. end
  327. end
  328.  
  329. # Called when the item screen wants an item to be chosen from the screen
  330. def pbChooseItem
  331. @sprites["helpwindow"].visible = false
  332. itemwindow = @sprites["itemlist"]
  333. thispocket = @bag.pockets[itemwindow.pocket]
  334. swapinitialpos = -1
  335. pbActivateWindow(@sprites,"itemlist"){
  336. loop do
  337. oldindex = itemwindow.index
  338. Graphics.update
  339. Input.update
  340. pbUpdate
  341. if itemwindow.sorting && itemwindow.index>=thispocket.length
  342. itemwindow.index = (oldindex==thispocket.length-1) ? 0 : thispocket.length-1
  343. end
  344. if itemwindow.index!=oldindex
  345. # Move the item being switched
  346. if itemwindow.sorting
  347. thispocket.insert(itemwindow.index,thispocket.delete_at(oldindex))
  348. end
  349. # Update selected item for current pocket
  350. @bag.setChoice(itemwindow.pocket,itemwindow.index)
  351. pbRefresh
  352. end
  353. if itemwindow.sorting
  354. if Input.trigger?(Input::A) ||
  355. Input.trigger?(Input::C)
  356. itemwindow.sorting = false
  357. pbPlayDecisionSE
  358. pbRefresh
  359. elsif Input.trigger?(Input::B)
  360. curindex = itemwindow.index
  361. thispocket.insert(swapinitialpos,thispocket.delete_at(itemwindow.index))
  362. itemwindow.index = swapinitialpos
  363. itemwindow.sorting = false
  364. pbPlayCancelSE
  365. pbRefresh
  366. end
  367. else
  368. # Change pockets
  369. if Input.trigger?(Input::LEFT)
  370. newpocket = itemwindow.pocket
  371. loop do
  372. newpocket = (newpocket==1) ? PokemonBag.numPockets : newpocket-1
  373. break if !@choosing || newpocket==itemwindow.pocket
  374. if @filterlist; break if @filterlist[newpocket].length>0
  375. else; break if @bag.pockets[newpocket].length>0
  376. end
  377. end
  378. if itemwindow.pocket!=newpocket
  379. itemwindow.pocket = newpocket
  380. @bag.lastpocket = itemwindow.pocket
  381. thispocket = @bag.pockets[itemwindow.pocket]
  382. pbPlayCursorSE
  383. pbRefresh
  384. end
  385. elsif Input.trigger?(Input::RIGHT)
  386. newpocket = itemwindow.pocket
  387. loop do
  388. newpocket = (newpocket==PokemonBag.numPockets) ? 1 : newpocket+1
  389. break if !@choosing || newpocket==itemwindow.pocket
  390. if @filterlist; break if @filterlist[newpocket].length>0
  391. else; break if @bag.pockets[newpocket].length>0
  392. end
  393. end
  394. if itemwindow.pocket!=newpocket
  395. itemwindow.pocket = newpocket
  396. @bag.lastpocket = itemwindow.pocket
  397. thispocket = @bag.pockets[itemwindow.pocket]
  398. pbPlayCursorSE
  399. pbRefresh
  400. end
  401. # elsif Input.trigger?(Input::F5) # Register/unregister selected item
  402. # if !@choosing && itemwindow.index<thispocket.length
  403. # if @bag.pbIsRegistered?(itemwindow.item)
  404. # @bag.pbUnregisterItem(itemwindow.item)
  405. # elsif pbCanRegisterItem?(itemwindow.item)
  406. # @bag.pbRegisterItem(itemwindow.item)
  407. # end
  408. # pbPlayDecisionSE
  409. # pbRefresh
  410. # end
  411. elsif Input.trigger?(Input::A) # Start switching the selected item
  412. if !@choosing
  413. if thispocket.length>1 && itemwindow.index<thispocket.length &&
  414. !POCKETAUTOSORT[itemwindow.pocket]
  415. itemwindow.sorting = true
  416. swapinitialpos = itemwindow.index
  417. pbPlayDecisionSE
  418. pbRefresh
  419. end
  420. end
  421. elsif Input.trigger?(Input::B) # Cancel the item screen
  422. pbPlayCancelSE
  423. return 0
  424. elsif Input.trigger?(Input::C) # Choose selected item
  425. pbPlayDecisionSE
  426. return itemwindow.item
  427. end
  428. end
  429. end
  430. }
  431. end
  432. end
  433.  
  434.  
  435.  
  436. #===============================================================================
  437. # Bag mechanics
  438. #===============================================================================
  439. class PokemonBagScreen
  440. def initialize(scene,bag)
  441. @bag = bag
  442. @scene = scene
  443. end
  444.  
  445. def pbStartScreen
  446. @scene.pbStartScene(@bag)
  447. item = 0
  448. loop do
  449. item = @scene.pbChooseItem
  450. break if item==0
  451. cmdRead = -1
  452. cmdUse = -1
  453. cmdRegister = -1
  454. cmdGive = -1
  455. cmdToss = -1
  456. cmdDebug = -1
  457. commands = []
  458. # Generate command list
  459. commands[cmdRead = commands.length] = _INTL("Read") if pbIsMail?(item)
  460. if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0)
  461. if ItemHandlers.hasUseText(item)
  462. commands[cmdUse = commands.length] = ItemHandlers.getUseText(item)
  463. else
  464. commands[cmdUse = commands.length] = _INTL("Use")
  465. end
  466. end
  467. commands[cmdGive = commands.length] = _INTL("Give") if $Trainer.pokemonParty.length>0 && pbCanHoldItem?(item)
  468. commands[cmdToss = commands.length] = _INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG
  469. if @bag.pbIsRegistered?(item)
  470. commands[cmdRegister = commands.length] = _INTL("Deselect")
  471. elsif pbCanRegisterItem?(item)
  472. commands[cmdRegister = commands.length] = _INTL("Register")
  473. end
  474. commands[cmdDebug = commands.length] = _INTL("Debug") if $DEBUG
  475. commands[commands.length] = _INTL("Cancel")
  476. # Show commands generated above
  477. itemname = PBItems.getName(item) # Get item name
  478. command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
  479. if cmdRead>=0 && command==cmdRead # Read mail
  480. pbFadeOutIn(99999){
  481. pbDisplayMail(PokemonMail.new(item,"",""))
  482. }
  483. elsif cmdUse>=0 && command==cmdUse # Use item
  484. ret = pbUseItem(@bag,item,@scene)
  485. # ret: 0=Item wasn't used; 1=Item used; 2=Close Bag to use in field
  486. break if ret==2 # End screen
  487. @scene.pbRefresh
  488. next
  489. elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon
  490. if $Trainer.pokemonCount==0
  491. @scene.pbDisplay(_INTL("There is no Pokémon."))
  492. elsif pbIsImportantItem?(item)
  493. @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
  494. else
  495. pbFadeOutIn(99999){
  496. sscene = PokemonParty_Scene.new
  497. sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  498. sscreen.pbPokemonGiveScreen(item)
  499. @scene.pbRefresh
  500. }
  501. end
  502. elsif cmdToss>=0 && command==cmdToss # Toss item
  503. qty = @bag.pbQuantity(item)
  504. if qty>1
  505. helptext = _INTL("Toss out how many {1}?",PBItems.getNamePlural(item))
  506. qty = @scene.pbChooseNumber(helptext,qty)
  507. end
  508. if qty>0
  509. itemname = PBItems.getNamePlural(item) if qty>1
  510. if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
  511. pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
  512. qty.times { @bag.pbDeleteItem(item) }
  513. @scene.pbRefresh
  514. end
  515. end
  516. elsif cmdRegister>=0 && command==cmdRegister # Register item
  517. if @bag.pbIsRegistered?(item)
  518. @bag.pbUnregisterItem(item)
  519. else
  520. @bag.pbRegisterItem(item)
  521. end
  522. @scene.pbRefresh
  523. elsif cmdDebug>=0 && command==cmdDebug # Debug
  524. command = 0
  525. loop do
  526. command = @scene.pbShowCommands(_INTL("Do what with {1}?",itemname),[
  527. _INTL("Change quantity"),
  528. _INTL("Make Mystery Gift"),
  529. _INTL("Cancel")
  530. ],command)
  531. case command
  532. ### Cancel ###
  533. when -1, 2
  534. break
  535. ### Change quantity ###
  536. when 0
  537. qty = @bag.pbQuantity(item)
  538. itemplural = PBItems.getNamePlural(item)
  539. params = ChooseNumberParams.new
  540. params.setRange(0,BAGMAXPERSLOT)
  541. params.setDefaultValue(qty)
  542. newqty = Kernel.pbMessageChooseNumber(
  543. _INTL("Choose new quantity of {1}.",itemplural),params) { @scene.pbUpdate }
  544. if newqty>qty
  545. @bag.pbStoreItem(item,newqty-qty)
  546. elsif newqty<qty
  547. @bag.pbDeleteItem(item,qty-newqty)
  548. end
  549. @scene.pbRefresh
  550. break if newqty==0
  551. ### Make Mystery Gift ###
  552. when 1
  553. pbCreateMysteryGift(1,item)
  554. end
  555. end
  556. end
  557. end
  558. @scene.pbEndScene
  559. return item
  560. end
  561.  
  562. def pbDisplay(text)
  563. @scene.pbDisplay(text)
  564. end
  565.  
  566. def pbConfirm(text)
  567. return @scene.pbConfirm(text)
  568. end
  569.  
  570. # UI logic for the item screen for choosing an item.
  571. def pbChooseItemScreen(proc=nil)
  572. oldlastpocket = @bag.lastpocket
  573. oldchoices = @bag.getAllChoices
  574. @scene.pbStartScene(@bag,true,proc)
  575. item = @scene.pbChooseItem
  576. @scene.pbEndScene
  577. @bag.lastpocket = oldlastpocket
  578. @bag.setAllChoices(oldchoices)
  579. return item
  580. end
  581.  
  582. # UI logic for withdrawing an item in the item storage screen.
  583. def pbWithdrawItemScreen
  584. if !$PokemonGlobal.pcItemStorage
  585. $PokemonGlobal.pcItemStorage = PCItemStorage.new
  586. end
  587. storage = $PokemonGlobal.pcItemStorage
  588. @scene.pbStartScene(storage)
  589. loop do
  590. item = @scene.pbChooseItem
  591. break if item==0
  592. commands = [_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")]
  593. itemname = PBItems.getName(item)
  594. command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
  595. if command==0 # Withdraw
  596. qty = storage.pbQuantity(item)
  597. if qty>1 && !pbIsImportantItem?(item)
  598. qty = @scene.pbChooseNumber(_INTL("How many do you want to withdraw?"),qty)
  599. end
  600. if qty>0
  601. if !@bag.pbCanStore?(item,qty)
  602. pbDisplay(_INTL("There's no more room in the Bag."))
  603. else
  604. dispqty = (pbIsImportantItem?(item)) ? 1 : qty
  605. itemname = PBItems.getNamePlural(item) if dispqty>1
  606. pbDisplay(_INTL("Withdrew {1} {2}.",dispqty,itemname))
  607. if !storage.pbDeleteItem(item,qty)
  608. raise "Can't delete items from storage"
  609. end
  610. if !@bag.pbStoreItem(item,qty)
  611. raise "Can't withdraw items from storage"
  612. end
  613. end
  614. end
  615. elsif command==1 # Give
  616. if $Trainer.pokemonCount==0
  617. @scene.pbDisplay(_INTL("There is no Pokémon."))
  618. return 0
  619. elsif pbIsImportantItem?(item)
  620. @scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
  621. else
  622. pbFadeOutIn(99999){
  623. sscene = PokemonParty_Scene.new
  624. sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
  625. if sscreen.pbPokemonGiveScreen(item)
  626. # If the item was held, delete the item from storage
  627. if !storage.pbDeleteItem(item,1)
  628. raise "Can't delete item from storage"
  629. end
  630. end
  631. @scene.pbRefresh
  632. }
  633. end
  634. end
  635. end
  636. @scene.pbEndScene
  637. end
  638.  
  639. # UI logic for depositing an item in the item storage screen.
  640. def pbDepositItemScreen
  641. @scene.pbStartScene(@bag)
  642. if !$PokemonGlobal.pcItemStorage
  643. $PokemonGlobal.pcItemStorage = PCItemStorage.new
  644. end
  645. storage = $PokemonGlobal.pcItemStorage
  646. item = 0
  647. loop do
  648. item = @scene.pbChooseItem
  649. break if item==0
  650. qty = @bag.pbQuantity(item)
  651. if qty>1 && !pbIsImportantItem?(item)
  652. qty = @scene.pbChooseNumber(_INTL("How many do you want to deposit?"),qty)
  653. end
  654. if qty>0
  655. if !storage.pbCanStore?(item,qty)
  656. pbDisplay(_INTL("There's no room to store items."))
  657. else
  658. dispqty = (pbIsImportantItem?(item)) ? 1 : qty
  659. itemname = (dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item)
  660. pbDisplay(_INTL("Deposited {1} {2}.",dispqty,itemname))
  661. if !@bag.pbDeleteItem(item,qty)
  662. raise "Can't delete items from bag"
  663. end
  664. if !storage.pbStoreItem(item,qty)
  665. raise "Can't deposit items to storage"
  666. end
  667. end
  668. end
  669. end
  670. @scene.pbEndScene
  671. end
  672.  
  673. # UI logic for tossing an item in the item storage screen.
  674. def pbTossItemScreen
  675. if !$PokemonGlobal.pcItemStorage
  676. $PokemonGlobal.pcItemStorage = PCItemStorage.new
  677. end
  678. storage = $PokemonGlobal.pcItemStorage
  679. @scene.pbStartScene(storage)
  680. loop do
  681. item = @scene.pbChooseItem
  682. break if item==0
  683. if pbIsImportantItem?(item)
  684. @scene.pbDisplay(_INTL("That's too important to toss out!"))
  685. next
  686. end
  687. qty = storage.pbQuantity(item)
  688. itemname = PBItems.getName(item)
  689. itemnameplural = PBItems.getNamePlural(item)
  690. if qty>1
  691. qty=@scene.pbChooseNumber(_INTL("Toss out how many {1}?",itemnameplural),qty)
  692. end
  693. if qty>0
  694. itemname = itemnameplural if qty>1
  695. if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
  696. if !storage.pbDeleteItem(item,qty)
  697. raise "Can't delete items from storage"
  698. end
  699. pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
  700. end
  701. end
  702. end
  703. @scene.pbEndScene
  704. end
  705. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement