Advertisement
Guest User

Untitled

a guest
Oct 9th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.27 KB | None | 0 0
  1. # Abstraction layer for Pokemon Essentials
  2. class PokemonMartAdapter
  3. def getMoney
  4. return $Trainer.money
  5. end
  6.  
  7. def setMoney(value)
  8. $Trainer.money=value
  9. end
  10.  
  11. def getInventory()
  12. return $PokemonBag
  13. end
  14.  
  15. def getPrice(item,selling=false)
  16. if $game_temp.mart_prices && $game_temp.mart_prices[item]
  17. if selling
  18. return $game_temp.mart_prices[item][1] if $game_temp.mart_prices[item][1]>=0
  19. else
  20. return $game_temp.mart_prices[item][0] if $game_temp.mart_prices[item][0]>0
  21. end
  22. end
  23. return $ItemData[item][ITEMPRICE]
  24. end
  25.  
  26. def getItemIcon(item)
  27. return nil if !item
  28. return pbItemIconFile(item)
  29. end
  30.  
  31. def getItemIconRect(item)
  32. return Rect.new(0,0,48,48)
  33. end
  34.  
  35. def getDisplayName(item)
  36. itemname=PBItems.getName(item)
  37. if pbIsMachine?(item)
  38. machine=$ItemData[item][ITEMMACHINE]
  39. itemname=_INTL("{1} {2}",itemname,PBMoves.getName(machine))
  40. end
  41. return itemname
  42. end
  43.  
  44. def getName(item)
  45. return PBItems.getName(item)
  46. end
  47.  
  48. def getDisplayPrice(item,selling=false)
  49. price=getPrice(item,selling)
  50. return _ISPRINTF("$ {1:d}",price)
  51. end
  52.  
  53. def getDescription(item)
  54. return pbGetMessage(MessageTypes::ItemDescriptions,item)
  55. end
  56.  
  57. def addItem(item)
  58. return $PokemonBag.pbStoreItem(item)
  59. end
  60.  
  61. def getQuantity(item)
  62. return $PokemonBag.pbQuantity(item)
  63. end
  64.  
  65. def canSell?(item)
  66. return getPrice(item,true)>0 && !pbIsImportantItem?(item)
  67. end
  68.  
  69. def showQuantity?(item)
  70. return !pbIsImportantItem?(item)
  71. end
  72.  
  73. def removeItem(item)
  74. return $PokemonBag.pbDeleteItem(item)
  75. end
  76. end
  77.  
  78.  
  79.  
  80. # Abstraction layer for RPG Maker XP/VX
  81. class RpgxpMartAdapter
  82. def getMoney
  83. return $game_party.gold
  84. end
  85.  
  86. def setMoney(value)
  87. $game_party.gain_gold(-$game_party.gold)
  88. $game_party.gain_gold(value)
  89. end
  90.  
  91. def getPrice(item,selling=false)
  92. return item.price
  93. end
  94.  
  95. def getItemIcon(item)
  96. return nil if !item
  97. if item==0
  98. return sprintf("Graphics/Icons/itemBack")
  99. elsif item.respond_to?("icon_index")
  100. return "Graphics/System/IconSet"
  101. else
  102. return sprintf("Graphics/Icons/%s",item.icon_name)
  103. end
  104. end
  105.  
  106. def getItemIconRect(item)
  107. if item && item.respond_to?("icon_index")
  108. ix=item.icon_index % 16 * 24
  109. iy=item.icon_index / 16 * 24
  110. return Rect.new(ix,iy,24,24)
  111. else
  112. return Rect.new(0,0,32,32)
  113. end
  114. end
  115.  
  116. def getInventory()
  117. data = []
  118. for i in 1...$data_items.size
  119. if getQuantity($data_items[i]) > 0
  120. data.push($data_items[i])
  121. end
  122. end
  123. for i in 1...$data_weapons.size
  124. if getQuantity($data_weapons[i]) > 0
  125. data.push($data_weapons[i])
  126. end
  127. end
  128. for i in 1...$data_armors.size
  129. if getQuantity($data_armors[i]) > 0
  130. data.push($data_armors[i])
  131. end
  132. end
  133. return data
  134. end
  135.  
  136. def canSell?(item)
  137. return item ? item.price>0 : false
  138. end
  139.  
  140. def getName(item)
  141. return item ? item.name : ""
  142. end
  143.  
  144. def getDisplayName(item)
  145. return item ? item.name : ""
  146. end
  147.  
  148. def getDisplayPrice(item,selling=false)
  149. price=item.price
  150. return _ISPRINTF("{1:d}",price)
  151. end
  152.  
  153. def getDescription(item)
  154. return item ? item.description : ""
  155. end
  156.  
  157. def addItem(item)
  158. ret=(getQuantity(item)<99)
  159. if $game_party.respond_to?("gain_weapon")
  160. case item
  161. when RPG::Item
  162. $game_party.gain_item(item.id, 1) if ret
  163. when RPG::Weapon
  164. $game_party.gain_weapon(item.id, 1) if ret
  165. when RPG::Armor
  166. $game_party.gain_armor(item.id, 1) if ret
  167. end
  168. else
  169. $game_party.gain_item(item,1) if ret
  170. end
  171. return ret
  172. end
  173.  
  174. def getQuantity(item)
  175. ret=0
  176. if $game_party.respond_to?("weapon_number")
  177. case item
  178. when RPG::Item
  179. ret=$game_party.item_number(item.id)
  180. when RPG::Weapon
  181. ret=($game_party.weapon_number(item.id))
  182. when RPG::Armor
  183. ret=($game_party.armor_number(item.id))
  184. end
  185. else
  186. return $game_party.item_number(item)
  187. end
  188. return ret
  189. end
  190.  
  191. def showQuantity?(item)
  192. return true
  193. end
  194.  
  195. def removeItem(item)
  196. ret=(getQuantity(item)>0)
  197. if $game_party.respond_to?("lose_weapon")
  198. case item
  199. when RPG::Item
  200. $game_party.lose_item(item.id, 1) if ret
  201. when RPG::Weapon
  202. $game_party.lose_weapon(item.id, 1) if ret
  203. when RPG::Armor
  204. $game_party.lose_armor(item.id, 1) if ret
  205. end
  206. else
  207. $game_party.lose_item(item,1) if ret
  208. end
  209. return ret
  210. end
  211. end
  212.  
  213.  
  214. ###################
  215.  
  216.  
  217. class Window_PokemonMart < Window_DrawableCommand
  218. def initialize(stock,adapter,x,y,width,height,viewport=nil)
  219. @stock=stock
  220. @adapter=adapter
  221. super(x,y,width,height,viewport)
  222. @selarrow=AnimatedBitmap.new("Graphics/Pictures/Mart/sel")
  223. @baseColor=Color.new(66,99,132)
  224. @shadowColor=Color.new(107,165,189)
  225. self.windowskin=nil
  226. end
  227.  
  228. def itemCount
  229. return @stock.length+1
  230. end
  231.  
  232. def item
  233. return self.index>=@stock.length ? 0 : @stock[self.index]
  234. end
  235.  
  236. def drawItem(index,count,rect)
  237. textpos=[]
  238. rect=drawCursor(index,rect)
  239. ypos=rect.y
  240. if index==count-1
  241. textpos.push([_INTL("CANCEL"),rect.x,ypos+2,false,
  242. self.baseColor,self.shadowColor])
  243. else
  244. item=@stock[index]
  245. itemname=@adapter.getDisplayName(item)
  246. qty=@adapter.getDisplayPrice(item)
  247. sizeQty=self.contents.text_size(qty).width
  248. xQty=rect.x+rect.width-sizeQty-2-16
  249. textpos.push([itemname,rect.x,ypos+2,false,self.baseColor,self.shadowColor])
  250. textpos.push([qty,xQty,ypos+2,false,self.baseColor,self.shadowColor])
  251. end
  252. pbDrawTextPositions(self.contents,textpos)
  253. end
  254. end
  255.  
  256. class BuyAdapter # :nodoc:
  257. def initialize(adapter)
  258. @adapter=adapter
  259. end
  260.  
  261. def getDisplayName(item)
  262. @adapter.getDisplayName(item)
  263. end
  264.  
  265. def getDisplayPrice(item)
  266. @adapter.getDisplayPrice(item,false)
  267. end
  268.  
  269. def isSelling?
  270. return false
  271. end
  272. end
  273.  
  274. class SellAdapter # :nodoc:
  275. def initialize(adapter)
  276. @adapter=adapter
  277. end
  278.  
  279. def getDisplayName(item)
  280. @adapter.getDisplayName(item)
  281. end
  282.  
  283. def getDisplayPrice(item)
  284. if @adapter.showQuantity?(item)
  285. return sprintf("x%d",@adapter.getQuantity(item))
  286. else
  287. return ""
  288. end
  289. end
  290.  
  291. def isSelling?
  292. return true
  293. end
  294. end
  295.  
  296. class PokemonMartScene
  297. def update
  298. pbUpdateSpriteHash(@sprites)
  299. @subscene.update if @subscene
  300. end
  301.  
  302. def pbChooseNumber(helptext,item,maximum)
  303. curnumber=1
  304. ret=0
  305. helpwindow=@sprites["helpwindow"]
  306. itemprice=@adapter.getPrice(item,!@buying)
  307. itemprice/=2 if !@buying
  308. pbDisplay(helptext,true)
  309. using(numwindow=Window_AdvancedTextPokemon.new("")){ # Showing number of items
  310. qty=@adapter.getQuantity(item)
  311. using(inbagwindow=Window_AdvancedTextPokemon.new("")){ # Showing quantity in bag
  312. pbPrepareWindow(numwindow)
  313. pbPrepareWindow(inbagwindow)
  314. numwindow.viewport=@viewport
  315. numwindow.width=224
  316. numwindow.height=64
  317. numwindow.baseColor=Color.new(88,88,80)
  318. numwindow.shadowColor=Color.new(168,184,184)
  319. inbagwindow.visible=@buying
  320. inbagwindow.viewport=@viewport
  321. inbagwindow.width=190
  322. inbagwindow.height=64
  323. inbagwindow.baseColor=Color.new(88,88,80)
  324. inbagwindow.shadowColor=Color.new(168,184,184)
  325. inbagwindow.text=_ISPRINTF("In Bag:<r>{1:d} ",qty)
  326. numwindow.text=_ISPRINTF("x{1:d}<r>$ {2:d}",curnumber,curnumber*itemprice)
  327. pbBottomRight(numwindow)
  328. numwindow.y-=helpwindow.height
  329. pbBottomLeft(inbagwindow)
  330. inbagwindow.y-=helpwindow.height
  331. loop do
  332. Graphics.update
  333. Input.update
  334. numwindow.update
  335. inbagwindow.update
  336. self.update
  337. if Input.repeat?(Input::LEFT)
  338. pbPlayCursorSE()
  339. curnumber-=10
  340. curnumber=1 if curnumber<1
  341. numwindow.text=_ISPRINTF("x{1:d}<r>$ {2:d}",curnumber,curnumber*itemprice)
  342. elsif Input.repeat?(Input::RIGHT)
  343. pbPlayCursorSE()
  344. curnumber+=10
  345. curnumber=maximum if curnumber>maximum
  346. numwindow.text=_ISPRINTF("x{1:d}<r>$ {2:d}",curnumber,curnumber*itemprice)
  347. elsif Input.repeat?(Input::UP)
  348. pbPlayCursorSE()
  349. curnumber+=1
  350. curnumber=1 if curnumber>maximum
  351. numwindow.text=_ISPRINTF("x{1:d}<r>$ {2:d}",curnumber,curnumber*itemprice)
  352. elsif Input.repeat?(Input::DOWN)
  353. pbPlayCursorSE()
  354. curnumber-=1
  355. curnumber=maximum if curnumber<1
  356. numwindow.text=_ISPRINTF("x{1:d}<r>$ {2:d}",curnumber,curnumber*itemprice)
  357. elsif Input.trigger?(Input::C)
  358. pbPlayDecisionSE()
  359. ret=curnumber
  360. break
  361. elsif Input.trigger?(Input::B)
  362. pbPlayCancelSE()
  363. ret=0
  364. break
  365. end
  366. end
  367. }
  368. }
  369. helpwindow.visible=false
  370. return ret
  371. end
  372.  
  373. def pbPrepareWindow(window)
  374. window.visible=true
  375. window.letterbyletter=false
  376. end
  377.  
  378. def pbStartBuyOrSellScene(buying,stock,adapter)
  379. # Scroll right before showing screen
  380. pbScrollMap(6,5,5)
  381. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  382. @viewport.z=99999
  383. @stock=stock
  384. @adapter=adapter
  385. @sprites={}
  386. @sprites["background"]=IconSprite.new(0,0,@viewport)
  387. @sprites["background"].setBitmap("Graphics/Pictures/Mart/bg")
  388. @sprites["icon"]=IconSprite.new(12,Graphics.height-74,@viewport)
  389. winAdapter=buying ? BuyAdapter.new(adapter) : SellAdapter.new(adapter)
  390. @sprites["itemwindow"]=Window_PokemonMart.new(stock,winAdapter,
  391. 162,12,368,276)
  392. @sprites["itemwindow"].viewport=@viewport
  393. @sprites["itemwindow"].index=0
  394. @sprites["itemwindow"].refresh
  395. @sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
  396. pbPrepareWindow(@sprites["itemtextwindow"])
  397. @sprites["itemtextwindow"].x=72
  398. @sprites["itemtextwindow"].y=270
  399. @sprites["itemtextwindow"].width=Graphics.width-72
  400. @sprites["itemtextwindow"].height=128
  401. @sprites["itemtextwindow"].baseColor=Color.new(255,255,255)
  402. @sprites["itemtextwindow"].shadowColor=Color.new(165,165,173)
  403. @sprites["itemtextwindow"].visible=true
  404. @sprites["itemtextwindow"].viewport=@viewport
  405. @sprites["itemtextwindow"].windowskin=nil
  406. @sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
  407. pbPrepareWindow(@sprites["helpwindow"])
  408. @sprites["helpwindow"].visible=false
  409. @sprites["helpwindow"].viewport=@viewport
  410. pbBottomLeftLines(@sprites["helpwindow"],1)
  411. @sprites["moneywindow"]=Window_AdvancedTextPokemon.new("")
  412. pbPrepareWindow(@sprites["moneywindow"])
  413. @sprites["moneywindow"].setSkin("Graphics/Pictures/Universal/empty")
  414. @sprites["moneywindow"].visible=true
  415. @sprites["moneywindow"].viewport=@viewport
  416. @sprites["moneywindow"].x=16
  417. @sprites["moneywindow"].y=20
  418. @sprites["moneywindow"].width=250
  419. @sprites["moneywindow"].height=200
  420. @sprites["moneywindow"].baseColor=Color.new(255,255,255)
  421. @sprites["moneywindow"].shadowColor=Color.new(165,165,173)
  422. pbDeactivateWindows(@sprites)
  423. @buying=buying
  424. pbRefresh
  425. Graphics.frame_reset
  426. end
  427.  
  428. def pbStartBuyScene(stock,adapter)
  429. pbStartBuyOrSellScene(true,stock,adapter)
  430. end
  431.  
  432. def pbStartSellScene(bag,adapter)
  433. if $PokemonBag
  434. pbStartSellScene2(bag,adapter)
  435. else
  436. pbStartBuyOrSellScene(false,bag,adapter)
  437. end
  438. end
  439.  
  440. def pbStartSellScene2(bag,adapter)
  441. @subscene=PokemonBag_Scene.new
  442. @adapter=adapter
  443. @viewport2=Viewport.new(0,0,Graphics.width,Graphics.height)
  444. @viewport2.z=99999
  445. for j in 0..17
  446. col=Color.new(0,0,0,j*15)
  447. @viewport2.color=col
  448. Graphics.update
  449. Input.update
  450. end
  451. @subscene.pbStartScene(bag)
  452. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  453. @viewport.z=99999
  454. @sprites={}
  455. @sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
  456. pbPrepareWindow(@sprites["helpwindow"])
  457. @sprites["helpwindow"].visible=false
  458. @sprites["helpwindow"].viewport=@viewport
  459. pbBottomLeftLines(@sprites["helpwindow"],1)
  460. @sprites["moneywindow"]=Window_AdvancedTextPokemon.new("")
  461. pbPrepareWindow(@sprites["moneywindow"])
  462. @sprites["moneywindow"].setSkin("Graphics/Windowskins/goldskin")
  463. @sprites["moneywindow"].visible=false
  464. @sprites["moneywindow"].viewport=@viewport
  465. @sprites["moneywindow"].x=0
  466. @sprites["moneywindow"].y=0
  467. @sprites["moneywindow"].width=190
  468. @sprites["moneywindow"].height=96
  469. @sprites["moneywindow"].baseColor=Color.new(88,88,80)
  470. @sprites["moneywindow"].shadowColor=Color.new(168,184,184)
  471. pbDeactivateWindows(@sprites)
  472. @buying=false
  473. pbRefresh
  474. end
  475.  
  476. def pbShowMoney
  477. pbRefresh
  478. @sprites["moneywindow"].visible=true
  479. end
  480.  
  481. def pbHideMoney
  482. pbRefresh
  483. @sprites["moneywindow"].visible=false
  484. end
  485.  
  486. def pbEndBuyScene
  487. pbDisposeSpriteHash(@sprites)
  488. @viewport.dispose
  489. # Scroll left after showing screen
  490. pbScrollMap(4,5,5)
  491. end
  492.  
  493. def pbEndSellScene
  494. if @subscene
  495. @subscene.pbEndScene
  496. end
  497. pbDisposeSpriteHash(@sprites)
  498. if @viewport2
  499. for j in 0..17
  500. col=Color.new(0,0,0,(17-j)*15)
  501. @viewport2.color=col
  502. Graphics.update
  503. Input.update
  504. end
  505. @viewport2.dispose
  506. end
  507. @viewport.dispose
  508. if !@subscene
  509. pbScrollMap(4,5,5)
  510. end
  511. end
  512.  
  513. def pbDisplay(msg,brief=false)
  514. cw=@sprites["helpwindow"]
  515. cw.letterbyletter=true
  516. cw.text=msg
  517. pbBottomLeftLines(cw,2)
  518. cw.visible=true
  519. i=0
  520. pbPlayDecisionSE()
  521. loop do
  522. Graphics.update
  523. Input.update
  524. self.update
  525. if brief && !cw.busy?
  526. return
  527. end
  528. if i==0 && !cw.busy?
  529. pbRefresh
  530. end
  531. if Input.trigger?(Input::C) && cw.busy?
  532. cw.resume
  533. end
  534. if i==60
  535. return
  536. end
  537. i+=1 if !cw.busy?
  538. end
  539. end
  540.  
  541. def pbDisplayPaused(msg)
  542. cw=@sprites["helpwindow"]
  543. cw.letterbyletter=true
  544. cw.text=msg
  545. pbBottomLeftLines(cw,2)
  546. cw.visible=true
  547. i=0
  548. pbPlayDecisionSE()
  549. loop do
  550. Graphics.update
  551. Input.update
  552. wasbusy=cw.busy?
  553. self.update
  554. if !cw.busy? && wasbusy
  555. pbRefresh
  556. end
  557. if Input.trigger?(Input::C) && cw.resume && !cw.busy?
  558. @sprites["helpwindow"].visible=false
  559. return
  560. end
  561. end
  562. end
  563.  
  564. def pbConfirm(msg)
  565. dw=@sprites["helpwindow"]
  566. dw.letterbyletter=true
  567. dw.text=msg
  568. dw.visible=true
  569. pbBottomLeftLines(dw,2)
  570. commands=[_INTL("Yes"),_INTL("No")]
  571. cw = Window_CommandPokemon.new(commands)
  572. cw.viewport=@viewport
  573. pbBottomRight(cw)
  574. cw.y-=dw.height
  575. cw.index=0
  576. pbPlayDecisionSE()
  577. loop do
  578. cw.visible=!dw.busy?
  579. Graphics.update
  580. Input.update
  581. cw.update
  582. self.update
  583. if Input.trigger?(Input::B) && dw.resume && !dw.busy?
  584. cw.dispose
  585. @sprites["helpwindow"].visible=false
  586. return false
  587. end
  588. if Input.trigger?(Input::C) && dw.resume && !dw.busy?
  589. cw.dispose
  590. @sprites["helpwindow"].visible=false
  591. return (cw.index==0)?true:false
  592. end
  593. end
  594. end
  595.  
  596. def pbRefresh
  597. if !@subscene
  598. itemwindow=@sprites["itemwindow"]
  599. filename=@adapter.getItemIcon(itemwindow.item)
  600. @sprites["icon"].setBitmap(filename)
  601. @sprites["icon"].src_rect=@adapter.getItemIconRect(itemwindow.item)
  602. @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
  603. @adapter.getDescription(itemwindow.item)
  604. itemwindow.refresh
  605. end
  606. @sprites["moneywindow"].text=_INTL("Money\n$ {1}",@adapter.getMoney())
  607. end
  608.  
  609. def pbChooseBuyItem
  610. itemwindow=@sprites["itemwindow"]
  611. @sprites["helpwindow"].visible=false
  612. pbActivateWindow(@sprites,"itemwindow"){
  613. pbRefresh
  614. loop do
  615. Graphics.update
  616. Input.update
  617. olditem=itemwindow.item
  618. self.update
  619. if itemwindow.item!=olditem
  620. filename=@adapter.getItemIcon(itemwindow.item)
  621. @sprites["icon"].setBitmap(filename)
  622. @sprites["icon"].src_rect=@adapter.getItemIconRect(itemwindow.item)
  623. @sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
  624. @adapter.getDescription(itemwindow.item)
  625. end
  626. if Input.trigger?(Input::B)
  627. return 0
  628. end
  629. if Input.trigger?(Input::C)
  630. if itemwindow.index<@stock.length
  631. pbRefresh
  632. return @stock[itemwindow.index]
  633. else
  634. return 0
  635. end
  636. end
  637. end
  638. }
  639. end
  640.  
  641. def pbChooseSellItem
  642. if @subscene
  643. return @subscene.pbChooseItem
  644. else
  645. return pbChooseBuyItem
  646. end
  647. end
  648. end
  649.  
  650.  
  651. #######################################################
  652.  
  653.  
  654. class PokemonMartScreen
  655. def initialize(scene,stock)
  656. @scene=scene
  657. @stock=stock
  658. @adapter=$PokemonBag ? PokemonMartAdapter.new : RpgxpMartAdapter.new
  659. end
  660.  
  661. def pbConfirm(msg)
  662. return @scene.pbConfirm(msg)
  663. end
  664.  
  665. def pbDisplay(msg)
  666. return @scene.pbDisplay(msg)
  667. end
  668.  
  669. def pbDisplayPaused(msg)
  670. return @scene.pbDisplayPaused(msg)
  671. end
  672.  
  673. def pbBuyScreen
  674. @scene.pbStartBuyScene(@stock,@adapter)
  675. item=0
  676. loop do
  677. item=@scene.pbChooseBuyItem
  678. quantity=0
  679. break if item==0
  680. itemname=@adapter.getDisplayName(item)
  681. price=@adapter.getPrice(item)
  682. if @adapter.getMoney()<price
  683. pbDisplayPaused(_INTL("You don't have enough money."))
  684. next
  685. end
  686. if pbIsImportantItem?(item)
  687. if !pbConfirm(_INTL("Certainly. You want {1}.\r\nThat will be ${2}. OK?",itemname,price))
  688. next
  689. end
  690. quantity=1
  691. else
  692. maxafford=(price<=0) ? BAGMAXPERSLOT : @adapter.getMoney()/price
  693. maxafford=BAGMAXPERSLOT if maxafford>BAGMAXPERSLOT
  694. quantity=@scene.pbChooseNumber(
  695. _INTL("{1}? Certainly.\r\nHow many would you like?",itemname),item,maxafford)
  696. if quantity==0
  697. next
  698. end
  699. price*=quantity
  700. if !pbConfirm(_INTL("{1}, and you want {2}.\r\nThat will be ${3}. OK?",itemname,quantity,price))
  701. next
  702. end
  703. end
  704. if @adapter.getMoney()<price
  705. pbDisplayPaused(_INTL("You don't have enough money."))
  706. next
  707. end
  708. added=0
  709. quantity.times do
  710. if !@adapter.addItem(item)
  711. break
  712. end
  713. added+=1
  714. end
  715. if added!=quantity
  716. added.times do
  717. if !@adapter.removeItem(item)
  718. raise _INTL("Failed to delete stored items")
  719. end
  720. end
  721. pbDisplayPaused(_INTL("You have no more room in the Bag."))
  722. else
  723. @adapter.setMoney(@adapter.getMoney()-price)
  724. for i in 0...@stock.length
  725. if pbIsImportantItem?(@stock[i]) && $PokemonBag.pbQuantity(@stock[i])>0
  726. @stock[i]=nil
  727. end
  728. end
  729. @stock.compact!
  730. pbSEPlay('Sale.wav',100,100)
  731. pbDisplayPaused(_INTL("Here you are!\r\nThank you!"))
  732. if $PokemonBag
  733. if quantity>=10 && isConst?(item,PBItems,:POKEBALL) &&
  734. hasConst?(PBItems,:PREMIERBALL)
  735. if @adapter.addItem(getConst(PBItems,:PREMIERBALL))
  736. pbDisplayPaused(_INTL("I'll throw in a Premier Ball, too."))
  737. end
  738. end
  739. end
  740. end
  741. end
  742. @scene.pbEndBuyScene
  743. end
  744.  
  745. def pbSellScreen
  746. item=@scene.pbStartSellScene(@adapter.getInventory,@adapter)
  747. loop do
  748. item=@scene.pbChooseSellItem
  749. break if item==0
  750. itemname=@adapter.getDisplayName(item)
  751. price=@adapter.getPrice(item,true)
  752. if !@adapter.canSell?(item)
  753. pbDisplayPaused(_INTL("{1}? Oh, no.\r\nI can't buy that.",itemname))
  754. next
  755. end
  756. qty=@adapter.getQuantity(item)
  757. next if qty==0
  758. @scene.pbShowMoney
  759. if qty>1
  760. qty=@scene.pbChooseNumber(
  761. _INTL("{1}?\r\nHow many would you like to sell?",itemname),item,qty)
  762. end
  763. if qty==0
  764. @scene.pbHideMoney
  765. next
  766. end
  767. price/=2
  768. price*=qty
  769. if pbConfirm(_INTL("I can pay ${1}.\r\nWould that be OK?",price))
  770. @adapter.setMoney(@adapter.getMoney()+price)
  771. for i in 0...qty
  772. @adapter.removeItem(item)
  773. end
  774. pbSEPlay('Sale.wav',100,100)
  775. pbDisplayPaused(_INTL("Turned over the {1} and received ${2}.",itemname,price))
  776. end
  777. @scene.pbHideMoney
  778. end
  779. @scene.pbEndSellScene
  780. end
  781. end
  782.  
  783. def pbPokemonMart(stock,speech=nil,cantsell=false)
  784. for i in 0...stock.length
  785. stock[i]=getID(PBItems,stock[i]) if !stock[i].is_a?(Integer)
  786. if !stock[i] || stock[i]==0 ||
  787. (pbIsImportantItem?(stock[i]) && $PokemonBag.pbQuantity(stock[i])>0)
  788. stock[i]=nil
  789. end
  790. end
  791. stock.compact!
  792. commands=[]
  793. cmdBuy=-1
  794. cmdSell=-1
  795. cmdQuit=-1
  796. commands[cmdBuy=commands.length]=_INTL("Buy")
  797. commands[cmdSell=commands.length]=_INTL("Sell") if !cantsell
  798. commands[cmdQuit=commands.length]=_INTL("Quit")
  799. cmd=Kernel.pbMessage(
  800. speech ? speech : _INTL("Welcome.\r\nHow may I serve you?"),
  801. commands,cmdQuit+1)
  802. loop do
  803. if cmdBuy>=0 && cmd==cmdBuy
  804. scene=PokemonMartScene.new
  805. screen=PokemonMartScreen.new(scene,stock)
  806. screen.pbBuyScreen
  807. elsif cmdSell>=0 && cmd==cmdSell
  808. scene=PokemonMartScene.new
  809. screen=PokemonMartScreen.new(scene,stock)
  810. screen.pbSellScreen
  811. else
  812. Kernel.pbMessage(_INTL("Please come again!"))
  813. break
  814. end
  815. cmd=Kernel.pbMessage(
  816. _INTL("Is there anything else I can help you with?"),commands,cmdQuit+1)
  817. end
  818. $game_temp.clear_mart_prices
  819. end
  820.  
  821. class Game_Temp
  822. attr_writer :mart_prices
  823.  
  824. def mart_prices
  825. @mart_prices=[] if !@mart_prices
  826. return @mart_prices
  827. end
  828.  
  829. def clear_mart_prices
  830. @mart_prices=[]
  831. end
  832. end
  833.  
  834. class Interpreter
  835. def getItem(p)
  836. if p[0]==0
  837. return $data_items[p[1]]
  838. elsif p[0]==1
  839. return $data_weapons[p[1]]
  840. elsif p[0]==2
  841. return $data_armors[p[1]]
  842. end
  843. return nil
  844. end
  845.  
  846. def command_302
  847. $game_temp.battle_abort = true
  848. shop_goods = [getItem(@parameters)]
  849. # Loop
  850. loop do
  851. # Advance index
  852. @index += 1
  853. # If next event command has shop on second line or after
  854. if @list[@index].code == 605
  855. # Add goods list to new item
  856. shop_goods.push(getItem(@list[@index].parameters))
  857. else
  858. # End
  859. pbPokemonMart(shop_goods.compact)
  860. return true
  861. end
  862. end
  863. end
  864.  
  865. def setPrice(item,buyprice=-1,sellprice=-1)
  866. if item.is_a?(String) || item.is_a?(Symbol)
  867. item=getID(PBItems,item)
  868. end
  869. $game_temp.mart_prices[item]=[-1,-1] if !$game_temp.mart_prices[item]
  870. $game_temp.mart_prices[item][0]=buyprice if buyprice>0
  871. if sellprice>=0 # 0=can't sell
  872. $game_temp.mart_prices[item][1]=sellprice*2
  873. else
  874. $game_temp.mart_prices[item][1]=buyprice if buyprice>0
  875. end
  876. end
  877.  
  878. def setSellPrice(item,sellprice)
  879. setPrice(item,-1,sellprice)
  880. end
  881. end
  882.  
  883. class Game_Interpreter
  884. def getItem(p)
  885. if p[0]==0
  886. return $data_items[p[1]]
  887. elsif p[0]==1
  888. return $data_weapons[p[1]]
  889. elsif p[0]==2
  890. return $data_armors[p[1]]
  891. end
  892. return nil
  893. end
  894.  
  895. def command_302
  896. shop_goods = [getItem(@params)]
  897. # Loop
  898. loop do
  899. # Advance index
  900. @index += 1
  901. # If next event command has shop on second line or after
  902. if @list[@index].code == 605
  903. # Add goods list to new item
  904. shop_goods.push(getItem(@list[@index].parameters))
  905. else
  906. # End
  907. pbPokemonMart(shop_goods.compact,nil,@params[2])
  908. return true
  909. end
  910. end
  911. end
  912. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement