Tienda Pokémon
La Tienda Pokémon (Poké Mart) es donde el jugador compra y vende objetos. En Pokémon Essentials, las tiendas se implementan mediante la función pbPokemonMart y se pueden personalizar con inventarios específicos, precios variables y monedas alternativas.
Función pbPokemonMart
La función principal para abrir una tienda es:
pbPokemonMart(stock)
Donde stock es un array con los identificadores internos de los objetos disponibles para comprar.
Ejemplo básico
# Tienda con objetos básicos
pbPokemonMart([
:POKEBALL,
:GREATBALL,
:POTION,
:SUPERPOTION,
:ANTIDOTE,
:PARALYZEHEAL,
:AWAKENING,
:REPEL
])
Los precios de cada objeto se toman automáticamente del PBS items.txt. No necesitas especificar precios manualmente a menos que quieras cambiarlos.
Configurar el Inventario de la Tienda
El inventario se define como un array de símbolos (IDs internos de objetos). Puedes crear tiendas especializadas:
Tienda de Poké Balls
pbPokemonMart([
:POKEBALL,
:GREATBALL,
:ULTRABALL,
:NETBALL,
:DIVEBALL,
:NESTBALL,
:REPEATBALL,
:TIMERBALL,
:LUXURYBALL,
:DUSKBALL,
:QUICKBALL
])
Farmacia / Tienda de medicinas
pbPokemonMart([
:POTION,
:SUPERPOTION,
:HYPERPOTION,
:MAXPOTION,
:FULLRESTORE,
:REVIVE,
:ANTIDOTE,
:PARALYZEHEAL,
:BURNHEAL,
:ICEHEAL,
:AWAKENING,
:FULLHEAL
])
Tiendas con Precios Variables
Si quieres cambiar el precio de un objeto específico en una tienda, puedes usar un array de dos elementos [objeto, precio]:
# Tienda con precios personalizados
pbPokemonMart([
[:POKEBALL, 100], # Normalmente 200, aquí a mitad de precio
[:GREATBALL, 300], # Precio reducido
[:POTION, 150], # Precio especial
:SUPERPOTION # Precio normal del PBS
])
Modo Solo Compra y Solo Venta
Puedes configurar la tienda para que solo permita comprar o solo vender:
Solo comprar (sin opción de venta)
# El segundo parámetro es el mensaje de bienvenida
# El tercer parámetro controla si se puede vender (false = no)
pbPokemonMart(
[:POKEBALL, :GREATBALL, :ULTRABALL],
"¡Bienvenido a la tienda de Poké Balls!",
false # No permite vender objetos
)
Solo vender (sin inventario de compra)
# Pasar un array vacío como stock para solo vender
pbPokemonMart([], "Compro objetos a buen precio.")
Inventario Basado en Medallas
Puedes hacer que el inventario de la tienda cambie según las medallas que tenga el jugador:
# Inventario que crece con las medallas
stock = [:POKEBALL, :POTION, :ANTIDOTE]
if $player.badge_count >= 2
stock += [:GREATBALL, :SUPERPOTION, :SUPERREPEL]
end
if $player.badge_count >= 4
stock += [:ULTRABALL, :HYPERPOTION, :MAXREPEL]
end
if $player.badge_count >= 6
stock += [:FULLRESTORE, :REVIVE, :MAXPOTION]
end
if $player.badge_count >= 8
stock += [:MAXREVIVE, :FULLHEAL, :ULTRABALL]
end
pbPokemonMart(stock)
Este patrón es muy utilizado en los juegos oficiales, donde las tiendas de cada ciudad tienen más objetos a medida que progresas.
Tienda de Puntos de Batalla (BP Shop)
Para crear una tienda que use Puntos de Batalla (BP) en lugar de dinero, usa pbBattlePointShop:
# Tienda de BP
pbBattlePointShop([
:POWERBRACER,
:POWERBELT,
:POWERLENS,
:POWERBAND,
:POWERANKLET,
:POWERWEIGHT,
:CHOICEBAND,
:CHOICESPECS,
:CHOICESCARF,
:FOCUSSASH,
:LIFEORB
])
Los precios en BP se definen en el PBS items.txt con el campo de precio alternativo, o se pueden especificar directamente.
Tiendas con Moneda Personalizada
Puedes crear tiendas que usen una moneda completamente personalizada usando variables del juego:
# Tienda con moneda personalizada (usando una variable como moneda)
# Variable 50 = "Monedas de Oro" del jugador
stock = [
[:RARECANDY, 5], # 5 Monedas de Oro
[:PPUP, 3], # 3 Monedas de Oro
[:MASTERBALL, 50], # 50 Monedas de Oro
]
pbMessage("¡Bienvenido a la Tienda de Monedas de Oro!")
pbMessage("Tienes #{$game_variables[50]} Monedas de Oro.")
opciones = []
stock.each { |item| opciones.push(GameData::Item.get(item[0]).name + " - #{item[1]} monedas") }
opciones.push("Salir")
loop do
eleccion = pbMessage("¿Qué deseas comprar?", opciones, opciones.length)
break if eleccion >= stock.length
item_data = stock[eleccion]
if $game_variables[50] >= item_data[1]
$game_variables[50] -= item_data[1]
pbReceiveItem(item_data[0])
pbMessage("Ahora tienes #{$game_variables[50]} Monedas de Oro.")
else
pbMessage("No tienes suficientes Monedas de Oro.")
end
end
Evento Completo del Vendedor
Un evento típico del vendedor de la Tienda Pokémon:
# Evento del vendedor
# Trigger: Action Button
# Graphic: NPC vendedor
pbMessage("¡Bienvenido a la Tienda Pokémon!")
pbMessage("¿En qué puedo ayudarte?")
pbPokemonMart([
:POKEBALL,
:GREATBALL,
:POTION,
:SUPERPOTION,
:ANTIDOTE,
:PARALYZEHEAL,
:AWAKENING,
:REPEL
])
pbMessage("¡Vuelve cuando quieras!")