- Pokémon Essentials Version
- v18.1 ➖
What is this?
A script for creating a Mart for buying Pokémon in the same style as the regular one. It is intended to be plug'n'play and pretty easy to use. This was born from a discussion on Discord and was made with a intention to show how easy it is to create a interface for buying (and selling) anything using any currency. This was made in under 30 mins and should be a good example on how to expand the regular mart feature. I have no plans on expanding this any further.
What it looks like?
Installation
Paste the script below above main:
How to use?
It's very similar to the regular mart script call. Simply, from an event, create a script call like this:
As you can see pbPokemonCreaturesMart receives an array of arrays containing the species, price and level of the pokémon to be available for purchase. Here is an actual example:
Enjoy!
A script for creating a Mart for buying Pokémon in the same style as the regular one. It is intended to be plug'n'play and pretty easy to use. This was born from a discussion on Discord and was made with a intention to show how easy it is to create a interface for buying (and selling) anything using any currency. This was made in under 30 mins and should be a good example on how to expand the regular mart feature. I have no plans on expanding this any further.
What it looks like?
Installation
Paste the script below above main:
Ruby:
#===============================================================================
# Pokémon Mart
# by JV
# ----------------
# Provides an interface and backend for buying Pokémon in the same
# style as the regular mart.
#
# To use, simply create a script call from an event:
# 'pbPokemonCreaturesMart([[species,price,level],...])'
#
# Example: 'pbPokemonCreaturesMart([[:PIKACHU,12000,10],[:ABRA,5000,12]])'
#
# Enjoy the script, and make sure to give credit!
#-------------------------------------------------------------------------------
PluginManager.register({
:name => "JV's Pokémon Mart",
:version => "1.0",
:credits => "JV",
:link => "https://reliccastle.com/resources/464/"
})
#-------------------------------------------------------------------------------
def pbPokemonCreaturesMart(stock,speech=nil)
for i in 0...stock.length
stock[i][0] = getID(PBSpecies,stock[i][0])
if !stock[i][0] || stock[i][0]==0
stock[i] = nil
end
end
stock.compact!
commands = []
cmdBuy = -1
cmdSell = -1
cmdQuit = -1
commands[cmdBuy = commands.length] = _INTL("Buy")
commands[cmdQuit = commands.length] = _INTL("Quit")
cmd = pbMessage(
speech ? speech : _INTL("Welcome! How may I serve you?"),
commands,cmdQuit+1)
loop do
if cmdBuy>=0 && cmd==cmdBuy
scene = PokemonCreaturesMart_Scene.new
screen = PokemonCreaturesMartScreen.new(scene,stock)
screen.pbBuyScreen
else
pbMessage(_INTL("Please come again!"))
break
end
cmd = pbMessage(_INTL("Is there anything else I can help you with?"),
commands,cmdQuit+1)
end
$game_temp.clear_mart_prices
end
class PokemonCreaturesMartAdapter
def initialize(stock)
@stock = stock
end
def getMoney
return $Trainer.money
end
def getMoneyString
return pbGetGoldString
end
def setMoney(value)
$Trainer.money=value
end
def getInventory
return $Trainer.party
end
def getDisplayName(item)
itemname = PBSpecies.getName(item)
for i in @stock
level = i[2] if i[0] == item
end
return "#{itemname} (Lv. #{level})"
end
def getName(item)
return PBSpecies.getName(item)
end
def getDescription(item)
echoln(item)
return pbGetMessage(MessageTypes::Entries,item)
end
def getItemIcon(item)
return nil if !item
file = pbCheckPokemonIconFiles([item,nil,nil,nil,nil],nil)
return AnimatedBitmap.new(file).deanimate
end
def getItemIconRect(_item)
return Rect.new(0,0,64,64)
end
def getQuantity(item)
return nil
end
def showQuantity?(item)
return false
end
def getPrice(item,selling=false)
for i in @stock
return i[1] if i[0] == item
end
return 10000
end
def getDisplayPrice(item,selling=false)
price = getPrice(item,selling).to_s_formatted
return _INTL("$ {1}",price)
end
def canSell?(item)
return false
end
def addItem(item)
level = 5
for i in @stock
level = i[2] if i[0] == item && i[2]
end
return pbAddPokemon(item,level)
end
def removeItem(item)
return nil
end
end
class PokemonCreaturesMartScreen < PokemonMartScreen
def initialize(scene,stock)
@scene=scene
@stock=[]
@adapter=PokemonCreaturesMartAdapter.new(stock)
for i in stock
@stock.push(i.first)
end
end
def pbBuyScreen
@scene.pbStartBuyScene(@stock,@adapter)
item=0
loop do
item=@scene.pbChooseBuyItem
quantity=1
break if item==0
itemname=@adapter.getDisplayName(item)
price=@adapter.getPrice(item)
if @adapter.getMoney<price
pbDisplayPaused(_INTL("You don't have enough money."))
next
end
if !pbConfirm(_INTL("Certainly. You want {1}. That will be ${2}. OK?",
itemname,price.to_s_formatted))
next
end
unless pbBoxesFull?
@adapter.setMoney(@adapter.getMoney-price)
pbDisplayPaused(_INTL("Here you are! Thank you!")) { pbSEPlay("Mart buy item") }
@adapter.addItem(item)
else
pbDisplayPaused(_INTL("You have no more room in the Storage."))
end
end
@scene.pbEndBuyScene
end
end
class PokemonCreaturesMart_Scene < PokemonMart_Scene
def pbRefresh
if @subscene
@subscene.pbRefresh
else
itemwindow=@sprites["itemwindow"]
@sprites["icon"].species=itemwindow.item
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
"<fs=24>#{@adapter.getDescription(itemwindow.item)}</fs>"
itemwindow.refresh
end
@sprites["moneywindow"].text=_INTL("Money:\r\n<r>{1}",@adapter.getMoneyString)
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"]=PokemonSpeciesIconSprite.new(0,@viewport)
@sprites["icon"].x = 4
@sprites["icon"].y = Graphics.height-90
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_AdvancedTextPokemon.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"].setSkin("Graphics/Windowskins/goldskin")
@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 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
@sprites["icon"].species=itemwindow.item
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
"<fs=24>#{@adapter.getDescription(itemwindow.item)}</fs>"
end
if Input.trigger?(Input::B)
pbPlayCloseMenuSE
return 0
elsif Input.trigger?(Input::C)
if itemwindow.index<@stock.length
pbRefresh
return @stock[itemwindow.index]
else
return 0
end
end
end
}
end
end
How to use?
It's very similar to the regular mart script call. Simply, from an event, create a script call like this:
pbPokemonCreaturesMart([[species,price,level],...])
As you can see pbPokemonCreaturesMart receives an array of arrays containing the species, price and level of the pokémon to be available for purchase. Here is an actual example:
Enjoy!
- Credits
- This script is made by ~JV~. Please give credit!