- 423
- Posts
- 14
- Years
- Seen Aug 31, 2023
ok well as some people may know i have been working on a way to improve on how we buy things with coins (such as the prizes in the Game Corner) so I came up with this modified version of the PokéMart script all you need to do is paste this script in essentials (I place it directly below the PokéMart script) and way you go
Code:
def pbcoinvalue
$game_variables[32]=$PokemonGlobal.coins
$game_variables[31]=$Trainer.money
$Trainer.money=$game_variables[32]
end
def pbgoldvalue
$game_variables[32]=$Trainer.money
$Trainer.money=$game_variables[31]
$PokemonGlobal.coins=$game_variables[32]
end
class PokemonMartCoinsAdapter
def getMoney
return $Trainer.money
end
def setMoney(value)
$Trainer.money=value
end
def getInventory()
return $PokemonBag
end
def getPrice(item)
return $ItemData[item][ITEMPRICE]
end
def getItemIcon(item)
return nil if !item
return pbItemIconFile(item)
end
def getItemIconRect(item)
return Rect.new(0,0,48,48)
end
def getDisplayName(item)
itemname=PBItems.getName(item)
if pbIsMachine?(item)
machine=$ItemData[item][ITEMMACHINE]
itemname=_INTL("{1} {2}",itemname,PBMoves.getName(machine))
end
return itemname
end
def getName(item)
return PBItems.getName(item)
end
def getDisplayPrice(item)
price=getPrice(item)
return _ISPRINTF("{1:d} Coins",price)
end
def getDescription(item)
return pbGetMessage(MessageTypes::ItemDescriptions,item)
end
def addItem(item)
return $PokemonBag.pbStoreItem(item)
end
def getQuantity(item)
return $PokemonBag.pbQuantity(item)
end
def canSell?(item)
return getPrice(item)>0 && !pbIsImportantItem?(item)
end
def showQuantity?(item)
return !pbIsImportantItem?(item)
end
def removeItem(item)
return $PokemonBag.pbDeleteItem(item)
end
end
class GameCornerScene
def update
pbUpdateSpriteHash(@sprites)
@subscene.update if @subscene
end
def pbChooseNumber(helptext,item,maximum)
curnumber=1
ret=0
helpwindow=@sprites["helpwindow"]
[email protected](item)
itemprice/=2 if !@buying
pbDisplay(helptext,true)
using(numwindow=Window_AdvancedTextPokemon.new("")){ # Showing number of items
[email protected](item)
using(inbagwindow=Window_AdvancedTextPokemon.new("")){ # Showing quantity in bag
pbPrepareWindow(numwindow)
pbPrepareWindow(inbagwindow)
numwindow.viewport=@viewport
numwindow.width=224
numwindow.height=64
numwindow.baseColor=Color.new(88,88,80)
numwindow.shadowColor=Color.new(168,184,184)
inbagwindow.visible=@buying
inbagwindow.viewport=@viewport
inbagwindow.width=190
inbagwindow.height=64
inbagwindow.baseColor=Color.new(88,88,80)
inbagwindow.shadowColor=Color.new(168,184,184)
inbagwindow.text=_ISPRINTF("In Bag:<r>{1:d} ",qty)
numwindow.text=_ISPRINTF("x{1:d} {2:d} Coins",curnumber,curnumber*itemprice)
pbBottomRight(numwindow)
numwindow.y-=helpwindow.height
pbBottomLeft(inbagwindow)
inbagwindow.y-=helpwindow.height
loop do
Graphics.update
Input.update
numwindow.update
inbagwindow.update
self.update
if Input.repeat?(Input::LEFT)
pbPlayCursorSE()
curnumber-=10
curnumber=1 if curnumber<1
numwindow.text=_ISPRINTF("x{1:d} {2:d} Coins",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::RIGHT)
pbPlayCursorSE()
curnumber+=10
curnumber=maximum if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:d} {2:d} Coins",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::UP)
pbPlayCursorSE()
curnumber+=1
curnumber=1 if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:d} {2:d} Coins",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::DOWN)
pbPlayCursorSE()
curnumber-=1
curnumber=maximum if curnumber<1
numwindow.text=_ISPRINTF("x{1:d} {2:d} Coins",curnumber,curnumber*itemprice)
elsif Input.trigger?(Input::C)
pbPlayDecisionSE()
ret=curnumber
break
elsif Input.trigger?(Input::B)
pbPlayCancelSE()
ret=0
break
end
end
}
}
helpwindow.visible=false
return ret
end
def pbPrepareWindow(window)
window.visible=true
window.letterbyletter=false
end
def pbStartBuyOrSellScene(buying,stock,adapter)
# Scroll right before showing screen
pbScrollMap(6,5,5)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@stock=stock
@adapter=adapter
@sprites={}
@sprites["background"]=IconSprite.new(0,0,@viewport)
@sprites["background"].setBitmap("Graphics/Pictures/martScreen")
@sprites["icon"]=IconSprite.new(12,Graphics.height-74,@viewport)
winAdapter=buying ? BuyAdapter.new(adapter) : SellAdapter.new(adapter)
@sprites["itemwindow"]=Window_PokemonMart.new(stock,winAdapter,
Graphics.width-316-16,12,330+16,Graphics.height-126)
@sprites["itemwindow"].viewport=@viewport
@sprites["itemwindow"].index=0
@sprites["itemwindow"].refresh
@sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
pbPrepareWindow(@sprites["itemtextwindow"])
@sprites["itemtextwindow"].x=64
@sprites["itemtextwindow"].y=Graphics.height-96-16
@sprites["itemtextwindow"].width=Graphics.width-64
@sprites["itemtextwindow"].height=128
@sprites["itemtextwindow"].baseColor=Color.new(248,248,248)
@sprites["itemtextwindow"].shadowColor=Color.new(0,0,0)
@sprites["itemtextwindow"].visible=true
@sprites["itemtextwindow"].viewport=@viewport
@sprites["itemtextwindow"].windowskin=nil
@sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["helpwindow"])
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
@sprites["moneywindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["moneywindow"])
@sprites["moneywindow"].visible=true
@sprites["moneywindow"].viewport=@viewport
@sprites["moneywindow"].x=0
@sprites["moneywindow"].y=0
@sprites["moneywindow"].width=190
@sprites["moneywindow"].height=96
@sprites["moneywindow"].baseColor=Color.new(88,88,80)
@sprites["moneywindow"].shadowColor=Color.new(168,184,184)
pbDeactivateWindows(@sprites)
@buying=buying
pbRefresh
Graphics.frame_reset
end
def pbStartBuyScene(stock,adapter)
pbStartBuyOrSellScene(true,stock,adapter)
end
def pbStartSellScene(bag,adapter)
if $PokemonBag
pbStartSellScene2(bag,adapter)
else
pbStartBuyOrSellScene(false,bag,adapter)
end
end
def pbStartSellScene2(bag,adapter)
@subscene=PokemonBag_Scene.new
@adapter=adapter
@viewport2=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport2.z=99999
for j in 0..17
col=Color.new(0,0,0,j*15)
@viewport2.color=col
Graphics.update
Input.update
end
@subscene.pbStartScene(bag)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@sprites={}
@sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["helpwindow"])
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
@sprites["moneywindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["moneywindow"])
@sprites["moneywindow"].visible=false
@sprites["moneywindow"].viewport=@viewport
@sprites["moneywindow"].x=0
@sprites["moneywindow"].y=0
@sprites["moneywindow"].width=186
@sprites["moneywindow"].height=96
@sprites["moneywindow"].baseColor=Color.new(88,88,80)
@sprites["moneywindow"].shadowColor=Color.new(168,184,184)
pbDeactivateWindows(@sprites)
@buying=false
pbRefresh
end
def pbShowMoney
pbRefresh
@sprites["moneywindow"].visible=true
end
def pbHideMoney
pbRefresh
@sprites["moneywindow"].visible=false
end
def pbEndBuyScene
pbDisposeSpriteHash(@sprites)
@viewport.dispose
# Scroll left after showing screen
pbScrollMap(4,5,5)
end
def pbEndSellScene
if @subscene
@subscene.pbEndScene
end
pbDisposeSpriteHash(@sprites)
if @viewport2
for j in 0..17
col=Color.new(0,0,0,(17-j)*15)
@viewport2.color=col
Graphics.update
Input.update
end
@viewport2.dispose
end
@viewport.dispose
if !@subscene
pbScrollMap(4,5,5)
end
end
def pbDisplay(msg,brief=false)
cw=@sprites["helpwindow"]
cw.letterbyletter=true
cw.text=msg
pbBottomLeftLines(cw,2)
cw.visible=true
i=0
pbPlayDecisionSE()
loop do
Graphics.update
Input.update
self.update
if brief && !cw.busy?
return
end
if i==0 && !cw.busy?
pbRefresh
end
if Input.trigger?(Input::C) && cw.busy?
cw.resume
end
if i==60
return
end
i+=1 if !cw.busy?
end
end
def pbDisplayPaused(msg)
cw=@sprites["helpwindow"]
cw.letterbyletter=true
cw.text=msg
pbBottomLeftLines(cw,2)
cw.visible=true
i=0
pbPlayDecisionSE()
loop do
Graphics.update
Input.update
wasbusy=cw.busy?
self.update
if !cw.busy? && wasbusy
pbRefresh
end
if Input.trigger?(Input::C) && cw.resume && !cw.busy?
@sprites["helpwindow"].visible=false
return
end
end
end
def pbConfirm(msg)
dw=@sprites["helpwindow"]
dw.letterbyletter=true
dw.text=msg
dw.visible=true
pbBottomLeftLines(dw,2)
commands=[_INTL("Yes"),_INTL("No")]
cw = Window_CommandPokemon.new(commands)
cw.viewport=@viewport
pbBottomRight(cw)
cw.y-=dw.height
cw.index=0
pbPlayDecisionSE()
loop do
cw.visible=!dw.busy?
Graphics.update
Input.update
cw.update
self.update
if Input.trigger?(Input::B) && dw.resume && !dw.busy?
cw.dispose
@sprites["helpwindow"].visible=false
return false
end
if Input.trigger?(Input::C) && dw.resume && !dw.busy?
cw.dispose
@sprites["helpwindow"].visible=false
return (cw.index==0)?true:false
end
end
end
def pbRefresh
if !@subscene
itemwindow=@sprites["itemwindow"]
[email protected](itemwindow.item)
@sprites["icon"].setBitmap(filename)
@sprites["icon"][email protected](itemwindow.item)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
@adapter.getDescription(itemwindow.item)
itemwindow.refresh
end
@sprites["moneywindow"].text=_INTL("Coins\n<r> {1}",@adapter.getMoney())
end
def pbChooseBuyItem
itemwindow=@sprites["itemwindow"]
@sprites["helpwindow"].visible=false
pbActivateWindow(@sprites,"itemwindow"){
pbRefresh
loop do
Graphics.update
Input.update
olditem=itemwindow.item
self.update
if itemwindow.item!=olditem
[email protected](itemwindow.item)
@sprites["icon"].setBitmap(filename)
@sprites["icon"][email protected](itemwindow.item)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
@adapter.getDescription(itemwindow.item)
end
if Input.trigger?(Input::B)
return 0
end
if Input.trigger?(Input::C)
if itemwindow.index<@stock.length
pbRefresh
return @stock[itemwindow.index]
else
return 0
end
end
end
}
end
=begin
def pbChooseSellItem
if @subscene
return @subscene.pbChooseItem
else
return pbChooseBuyItem
end
end
=end
end
class PokemonMartCoinsScreen
def initialize(scene,stock)
@scene=scene
@stock=stock
@adapter=$PokemonBag ? PokemonMartCoinsAdapter.new : RpgxpMartAdapter.new
end
def pbConfirm(msg)
return @scene.pbConfirm(msg)
end
def pbDisplay(msg)
return @scene.pbDisplay(msg)
end
def pbDisplayPaused(msg)
return @scene.pbDisplayPaused(msg)
end
def pbBuyScreen
@scene.pbStartBuyScene(@stock,@adapter)
item=0
loop do
[email protected]
quantity=0
break if item==0
[email protected](item)
[email protected](item)
if @adapter.getMoney()<price
pbDisplayPaused(_INTL("You don't have enough money."))
next
end
if pbIsImportantItem?(item)
if !pbConfirm(_INTL("Certainly. You want {1}.\r\nThat will be {2} Coins. OK?",itemname,price))
next
end
quantity=1
else
maxafford=(price<=0) ? BAGMAXPERSLOT : @adapter.getMoney()/price
maxafford=BAGMAXPERSLOT if maxafford>BAGMAXPERSLOT
[email protected](
_INTL("{1}? Certainly.\r\nHow many would you like?",itemname),item,maxafford)
if quantity==0
next
end
price*=quantity
if !pbConfirm(_INTL("{1}, and you want {2}.\r\nThat will be {3} Coins. OK?",itemname,quantity,price))
next
end
end
if @adapter.getMoney()<price
pbDisplayPaused(_INTL("You don't have enough money."))
next
end
added=0
quantity.times do
if [email protected](item)
break
end
added+=1
end
if added!=quantity
added.times do
if [email protected](item)
raise _INTL("Failed to delete stored items")
end
end
pbDisplayPaused(_INTL("You have no more room in the Bag."))
else
@adapter.setMoney(@adapter.getMoney()-price)
for i in [email protected]
if pbIsImportantItem?(@stock[i]) && $PokemonBag.pbQuantity(@stock[i])>0
@stock[i]=nil
end
end
@stock.compact!
pbDisplayPaused(_INTL("Here you are!\r\nThank you!"))
if $PokemonBag
if quantity>=10 && isConst?(item,PBItems,:POKEBALL) &&
hasConst?(PBItems,:PREMIERBALL)
if @adapter.addItem(getConst(PBItems,:PREMIERBALL))
pbDisplayPaused(_INTL("I'll throw in a Premier Ball, too."))
end
end
end
end
end
@scene.pbEndBuyScene
end
=begin
def pbSellScreen
[email protected](@adapter.getInventory,@adapter)
loop do
[email protected]
break if item==0
[email protected](item)
[email protected](item)
if [email protected]?(item)
pbDisplayPaused(_INTL("{1}? Oh, no.\r\nI can't buy that.",itemname))
next
end
[email protected](item)
next if qty==0
@scene.pbShowMoney
if qty>1
[email protected](
_INTL("{1}?\r\nHow many would you like to sell?",itemname),item,qty)
end
if qty==0
@scene.pbHideMoney
next
end
price/=2
price*=qty
if pbConfirm(_INTL("I can pay ${1}.\r\nWould that be OK?",price))
@adapter.setMoney(@adapter.getMoney()+price)
for i in 0...qty
@adapter.removeItem(item)
end
pbDisplayPaused(_INTL("Turned over the {1} and received {2} Coins.",itemname,price))
end
@scene.pbHideMoney
end
@scene.pbEndSellScene
end
=end
end
=begin
def pbBuyScreen
@scene.pbStartBuyScene(@stock,@adapter)
item=0
loop do
[email protected]
quantity=0
break if item==0
[email protected](item)
[email protected](item)
if @adapter.getMoney()<price
pbDisplayPaused(_INTL("You don't have enough coins."))
next
end
if pbIsImportantItem?(item)
if !pbConfirm(_INTL("Certainly. You want {1}.\r\nThat will be {2} Coins. OK?",itemname,price))
next
end
quantity=1
else
maxafford=(price<=0) ? BAGMAXPERSLOT : @adapter.getMoney()/price
maxafford=BAGMAXPERSLOT if maxafford>BAGMAXPERSLOT
[email protected](
_INTL("{1}? Certainly.\r\nHow many would you like?",itemname),item,maxafford)
if quantity==0
next
end
price*=quantity
if !pbConfirm(_INTL("{1}, and you want {2}.\r\nThat will be {3} Coins. OK?",itemname,quantity,price))
next
end
end
if @adapter.getMoney()<price
pbDisplayPaused(_INTL("You don't have enough coins."))
next
end
added=0
quantity.times do
if [email protected](item)
break
end
added+=1
end
if added!=quantity
added.times do
if [email protected](item)
raise _INTL("Failed to delete stored items")
end
end
pbDisplayPaused(_INTL("You have no more room in the Bag."))
else
@adapter.setMoney(@adapter.getMoney()-price)
for i in [email protected]
if pbIsImportantItem?(@stock[i]) && $PokemonBag.pbQuantity(@stock[i])>0
@stock[i]=nil
end
end
@stock.compact!
pbDisplayPaused(_INTL("Here you are!\r\nThank you!"))
if $PokemonBag
if quantity>=10 && isConst?(item,PBItems,:POKEBALL) &&
hasConst?(PBItems,:PREMIERBALL)
if @adapter.addItem(getConst(PBItems,:PREMIERBALL))
pbDisplayPaused(_INTL("I'll throw in a Premier Ball, too."))
end
end
end
end
end
@scene.pbEndBuyScene
end
=end
def pbgamecorner(stock,speech=nil,cantsell=false)
pbcoinvalue
for i in 0...stock.length
if pbIsImportantItem?(stock[i]) && $PokemonBag.pbQuantity(stock[i])>0
stock[i]=nil
end
end
stock.compact!
commands=[]
cmdBuy=-1
cmdQuit=-1
commands[cmdBuy=commands.length]=_INTL("Buy")
commands[cmdQuit=commands.length]=_INTL("Quit")
cmd=Kernel.pbMessage(
speech ? speech : _INTL("Welcome!\r\nHow may I serve you?"),
commands,cmdQuit+1)
loop do
if cmdBuy>=0 && cmd==cmdBuy
scene=GameCornerScene.new
screen=PokemonMartCoinsScreen.new(scene,stock)
screen.pbBuyScreen
else
Kernel.pbMessage(_INTL("Please come again!"))
break
end
cmd=Kernel.pbMessage(
_INTL("Is there anything else I can help you with?"),commands,cmdQuit+1)
end
pbgoldvalue
end
Code:
pbgamecorner([
PBItems::POKEBALL,
PBItems::POTION,
PBItems::ANTIDOTE,
])