[box class=catbg2]Scene ShopVariable
[/box]
Autor: Kyo Panda
Versão: 1.1 - Lançado em: 04 de Outubro de 2010
[box class=catbg2]
Sobre:[/box]
Cria uma loja em seu jogo, mas ao invés de usar dinheiro, a unidade monetária é definida por uma variável.
[box class=catbg2]
Agradecimentos:[/box]
- pedro_severo: Pela idealização e melhorias do script.
[box class=catbg2]
Instalação:[/box]
- Cole o script acima do ▼ Principal e abaixo dos ▼ Scripts Adicionais no Editor de Scripts do RPG Maker VX.
- Configure o script na guia configuração do mesmo.
[box class=catbg2]
Utilização:[/box]
Utilize estes códigos com o Comando de Evento Chamar Script em um evento qualquer:
• Para definir a variável da loja:
VShop.var = ID da variável
• Para ligar a função da loja por variável:
VShop.on
• Para desligar a função da loja por variável:
VShop.off
• Para mudar a cifra da loja por variável:
VShop.symbol = "Cifra"
• Para mudar o texto de compra da loja por variável:
VShop.buy_string = "Texto"
• Para mudar o texto de venda da loja por variável:
VShop.sell_string = "Texto"
• Para mudar o texto de saída da loja por variável:
VShop.exit_string = "Texto"
• Para exibir ou não a cifra ao lado dos preços dos itens na hora da compra:
- Defina true para exibir e false para não exibir.
VShop.show_symbol = true / false
• Para ocultar a opção de compra da loja:
- Defina true para ocultar e false para não ocultar.
VShop.hidden_buy = true / false
• Para ocultar a opção de venda da loja:
- Defina true para ocultar e false para não ocultar.
VShop.hidden_sell = true / false
[box class=catbg2]
Script:[/box]
Script
#==============================================================================
# Scene_ShopVariable [VX]
#------------------------------------------------------------------------------
# Cria uma loja em seu jogo, mas ao invés de usar dinheiro, a unidade
# monetária é definida por uma variável.
#------------------------------------------------------------------------------
# Site : http://www.centrorpg.com/
# Autor : Kyo Panda
# Lançado em : 04 de Outubro de 2010
# Versão : 1.1
#==============================================================================
#==============================================================================
# Agradecimentos:
#------------------------------------------------------------------------------
# • pedro_severo : Pela idealização e melhorias do script.
#==============================================================================
#==============================================================================
# Como usar:
#------------------------------------------------------------------------------
#
# #--------------------------------------------------------------------------
# # Instalação
# #--------------------------------------------------------------------------
#
# • Cole o script acima do "▼ Principal" e abaixo dos "▼ Scripts Adicionais"
# no Editor de Scripts do RPG Maker VX.
#
# • Configure o script no guia "Configuração" logo abaixo.
#
# #--------------------------------------------------------------------------
# # Utilização
# #--------------------------------------------------------------------------
#
# Utilize estes códigos com o "Comando de Evento" "Chamar Script" em um
# evento qualquer:
#
# • Para definir a variável da loja
# VShop.var = ID da variável
#
# • Para ligar a função da loja por variável
# VShop.on
#
# • Para desligar a função da loja por variável
# VShop.off
#
# • Para mudar a cifra da loja por variável
# VShop.symbol = "Cifra"
#
# • Para mudar o texto de compra da loja por variável
# VShop.buy_string = "Texto"
#
# • Para mudar o texto de venda da loja por variável
# VShop.sell_string = "Texto"
#
# • Para mudar o texto de saída da loja por variável
# VShop.exit_string = "Texto"
#
# • Para exibir ou não a cifra ao lado dos preços dos itens na hora da compra
# Defina true para exibir e false para não exibir
# VShop.show_symbol = true / false
#
# • Para ocultar a opção de compra da loja
# Defina true para ocultar e false para não ocultar
# VShop.hidden_buy = true / false
#
# • Para ocultar a opção de venda da loja
# Defina true para ocultar e false para não ocultar
# VShop.hidden_sell = true / false
#
#==============================================================================
#==============================================================================
# Histórico de versões:
#------------------------------------------------------------------------------
# • Versão 1.1: 05 de Outubro de 2010
# * Adicionada a opção de mudar os textos de compra, venda e saída.
# * Adicionada a opção de exibir ou não a cifra ao lado dos itens na hora da
# compra.
# * Adicionada a opção de ocultar as opções de compra e venda.
# • Versão 1.0: 04 de Outubro de 2010
# * Primeira versão do script.
#==============================================================================
#==============================================================================
# VShop_Config
#------------------------------------------------------------------------------
# Classe de configuração do script Scene_ShopVariable.
#==============================================================================
module VShop_Config
#--------------------------------------------------------------------------
# Configuração
#--------------------------------------------------------------------------
# Defina aqui o ID da variável padrão da loja.
DEFAULT_VARIABLE = 1
# Defina aqui a cifra padrão que aparecerá na loja.
# O nome deve estar entre aspas ("") ou apóstrofes ('').
DEFAULT_SYMBOL = "P"
# Defina aqui o estado padrão da loja, se está ligado ou não.
# Defina true para ligado e false para desligado.
DEFAULT_STATE = false
# Defina aqui os textos padrões que serão exibidos na tela de loja.
# Os textos devem estar entre aspas ("") ou apóstrofes ('').
DEFAULT_BUY = "Comprar" # Comprar
DEFAULT_SELL = "Vender" # Vender
DEFAULT_EXIT = "Sair" # Sair
# Defina aqui se deseja exibir as cifras ao lado dos preços dos itens
# vendidos na loja, por padrão.
# Defina true para sim e false para não.
DEFAULT_SHOW_SYMBOL = true
# Defina aqui se você deseja ocultar as opções de compra ou venda por
# padrão.
# Defina true para sim e false para não
DEFAULT_HIDDEN_BUY = false
DEFAULT_HIDDEN_SELL = false
#--------------------------------------------------------------------------
# Fim da configuração
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
# Define a chave "Scene_ShopVariable" na hash $kpanda_scripts como true
#--------------------------------------------------------------------------
$kpanda_scripts = {} if $kpanda_scripts.nil?
$kpanda_scripts["Scene_ShopVariable"] = true
#==============================================================================
# VShop
#------------------------------------------------------------------------------
# Classe de operações do script Scene_ShopVariable.
#==============================================================================
module VShop
#--------------------------------------------------------------------------
# Definição da variável da loja por variável
# variable_id : ID da variável
#--------------------------------------------------------------------------
def self.var=(variable_id)
return $game_temp.vshop_variable = variable_id
end
#--------------------------------------------------------------------------
# Ligar loja por variável
#--------------------------------------------------------------------------
def self.on
return $game_temp.vshop_active = true
end
#--------------------------------------------------------------------------
# Desligar loja por variável
#--------------------------------------------------------------------------
def self.off
return $game_temp.vshop_active = false
end
#--------------------------------------------------------------------------
# Definição da cifra da loja por variável
# symbol : Nova cifra
#--------------------------------------------------------------------------
def self.symbol=(symbol)
return $game_temp.vshop_symbol = symbol
end
#--------------------------------------------------------------------------
# Troca do nome de compra da loja por variável
# string : Nova String
#--------------------------------------------------------------------------
def self.buy_string=(string)
return $game_temp.vshop_buy_string = string
end
#--------------------------------------------------------------------------
# Troca do nome de venda da loja por variável
# string : Nova String
#--------------------------------------------------------------------------
def self.sell_string=(string)
return $game_temp.vshop_sell_string = string
end
#--------------------------------------------------------------------------
# Troca do nome de saída da loja por variável
# string : Nova String
#--------------------------------------------------------------------------
def self.exit_string=(string)
return $game_temp.vshop_exit_string = string
end
#--------------------------------------------------------------------------
# Exibir a cifra ao lado dos itens da loja
# state : Novo estado
#--------------------------------------------------------------------------
def self.show_symbol=(state)
return $game_temp.vshop_show_symbol = state
end
#--------------------------------------------------------------------------
# Ocultar a compra da loja
# state : Novo estado
#--------------------------------------------------------------------------
def self.hidden_buy=(state)
return $game_temp.vshop_hidden_buy = state
end
#--------------------------------------------------------------------------
# Ocultar a venda da loja
# state : Novo estado
#--------------------------------------------------------------------------
def self.hidden_sell=(state)
return $game_temp.vshop_hidden_sell = state
end
end
#==============================================================================
# Game_Temp
#------------------------------------------------------------------------------
# Esta classe controla dados que não são salvos pelo jogo, os dados temporários
# Pode ser acessada utilizando $game_temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# Variáveis públicas
#--------------------------------------------------------------------------
attr_accessor :vshop_active # Atividade da loja por variável
attr_accessor :vshop_symbol # Cifra da loja por variável
attr_accessor :vshop_variable # Variável da loja por variável
attr_accessor :vshop_buy_string # Texto de compra
attr_accessor :vshop_sell_string # Texto de venda
attr_accessor :vshop_exit_string # Texto de saída
attr_accessor :vshop_show_symbol # Exibição das cifras nos itens
attr_accessor :vshop_hidden_buy # Definição da compra oculta
attr_accessor :vshop_hidden_sell # Definição da vendfa oculta
#--------------------------------------------------------------------------
# Alias da inicialização do objeto
#--------------------------------------------------------------------------
alias kpnsvs0001_initialize initialize
#--------------------------------------------------------------------------
# Inicialização do objeto
#--------------------------------------------------------------------------
def initialize
@vshop_active = VShop_Config::DEFAULT_STATE
@vshop_symbol = VShop_Config::DEFAULT_SYMBOL
@vshop_variable = VShop_Config::DEFAULT_VARIABLE
@vshop_buy_string = VShop_Config::DEFAULT_BUY
@vshop_sell_string = VShop_Config::DEFAULT_SELL
@vshop_exit_string = VShop_Config::DEFAULT_EXIT
@vshop_show_symbol = VShop_Config::DEFAULT_SHOW_SYMBOL
@vshop_hidden_buy = VShop_Config::DEFAULT_HIDDEN_BUY
@vshop_hidden_sell = VShop_Config::DEFAULT_HIDDEN_SELL
kpnsvs0001_initialize
end
end
#==============================================================================
# Window_Base
#------------------------------------------------------------------------------
# Esta é a classe superior à todas as classes de janelas do jogo.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# Exibição da unidade monetária com valor em posse especial
# value : Valor em posse
# x : Exibe na coordenada X
# y : Exibe na coordenada Y
# width : Largura
# symbol : Símbolo que determina a moeda
#--------------------------------------------------------------------------
def draw_currency_value_ex(value, x, y, width, symbol = Vocab::gold)
cx = contents.text_size(symbol).width
self.contents.font.color = normal_color
self.contents.draw_text(x, y, width - cx - 2, WLH, value, 2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, width, WLH, symbol, 2)
end
end
#==============================================================================
# Window_ShopVariable
#------------------------------------------------------------------------------
# Janela responsável pela exibição do valor de determinada cariável.
#==============================================================================
class Window_ShopVariable < Window_Base
#--------------------------------------------------------------------------
# Variáveis públicas
#--------------------------------------------------------------------------
attr_accessor :variable # Variável da janela
attr_accessor :symbol # Cifra da janela
#--------------------------------------------------------------------------
# Inicialização do objeto
# x : Coordenada X da janela
# y : Coordenada Y da janela
# variable : Variável que será desenhada
# symbol : Cifra que será desenhada
#--------------------------------------------------------------------------
def initialize(x, y, variable, symbol)
super(x, y, 160, WLH + 32)
@variable = variable
@symbol = symbol
refresh
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_currency_value_ex(@variable, 4, 0, 120, @symbol)
end
end
#==============================================================================
# Window_ShopBuy
#------------------------------------------------------------------------------
# Janela que exibe a mercadoria que é permitida ao jogador comprar.
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# Alias do desenho do item
#--------------------------------------------------------------------------
alias kpnsvs0001_draw_item draw_item
#--------------------------------------------------------------------------
# Desenho do item
# index : número de items
#--------------------------------------------------------------------------
def draw_item(index)
if $game_temp.vshop_active
item = @data[index]
number = $game_party.item_number(item)
enabled = (item.price <= $game_variables[$game_temp.vshop_variable] and
number < 99)
rect = item_rect(index)
self.contents.clear_rect(rect)
draw_item_name(item, rect.x, rect.y, enabled)
rect.width -= 4
if $game_temp.vshop_show_symbol
rect.width -= self.contents.text_size($game_temp.vshop_symbol).width
rect.width -= 4
end
self.contents.draw_text(rect, item.price, 2)
if $game_temp.vshop_show_symbol
rect.width += self.contents.text_size($game_temp.vshop_symbol).width
rect.width += 4
self.contents.font.color = system_color
self.contents.draw_text(rect, $game_temp.vshop_symbol, 2)
self.contents.font.color = normal_color
end
else
kpnsvs0001_draw_item(index)
end
end
end
#==============================================================================
# Window_ShopNumber
#------------------------------------------------------------------------------
# Janela responsável pelos valores numéricos inseridos na hora da compra ou
# venda.
#==============================================================================
class Window_ShopNumber < Window_Base
#--------------------------------------------------------------------------
# Alias da atualização
#--------------------------------------------------------------------------
alias kpnsvs0001_refresh refresh
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
if $game_temp.vshop_active
y = 96
self.contents.clear
draw_item_name(@item, 0, y)
self.contents.font.color = normal_color
self.contents.draw_text(212, y, 20, WLH, "×")
self.contents.draw_text(248, y, 20, WLH, @number, 2)
self.cursor_rect.set(244, y, 28, WLH)
draw_currency_value_ex(@price * @number, 4, y + WLH * 2, 264,
$game_temp.vshop_symbol)
else
kpnsvs0001_refresh
end
end
end
#==============================================================================
# Scene_Shop
#------------------------------------------------------------------------------
# Classe responsável pelo gerenciamento de lojas.
#==============================================================================
class Scene_Shop < Scene_Base
#--------------------------------------------------------------------------
# Alias da inicialização do processo
#--------------------------------------------------------------------------
alias kpnsvs0001_start start
#--------------------------------------------------------------------------
# Inicialização do processo
#--------------------------------------------------------------------------
def start
kpnsvs0001_start
if $game_temp.vshop_active
@gold_window = Window_ShopVariable.new(384, 56,
$game_variables[$game_temp.vshop_variable], $game_temp.vshop_symbol)
end
end
#--------------------------------------------------------------------------
# Alias da criação da janela de comandos
#--------------------------------------------------------------------------
alias kpnsvs0001_create_command_window create_command_window
#--------------------------------------------------------------------------
# Criação da janela de comandos
#--------------------------------------------------------------------------
def create_command_window
if $game_temp.vshop_active
commands = []
s1 = $game_temp.vshop_buy_string
s2 = $game_temp.vshop_sell_string
s3 = $game_temp.vshop_exit_string
commands << s1 unless $game_temp.vshop_hidden_buy
commands << s2 unless $game_temp.vshop_hidden_sell
commands << s3
@command_window = Window_Command.new(384, commands, commands.size)
@command_window.y = 56
if $game_temp.shop_purchase_only
@command_window.commands.each_index do |i|
if @command_window.commands[i] == $game_temp.vshop_sell_string
@command_window.draw_item(i, false)
end
end
end
else
kpnsvs0001_create_command_window
end
end
#--------------------------------------------------------------------------
# Alias da atualização da seleção de comando
#--------------------------------------------------------------------------
alias kpnsvs0001_update_command_selection update_command_selection
#--------------------------------------------------------------------------
# Atualização da seleção de comando
#--------------------------------------------------------------------------
def update_command_selection
if $game_temp.vshop_active
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
case @command_window.commands[@command_window.index]
when $game_temp.vshop_buy_string # Comprar
Sound.play_decision
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.refresh
@status_window.visible = true
when $game_temp.vshop_sell_string # Vender
if $game_temp.shop_purchase_only
Sound.play_buzzer
else
Sound.play_decision
@command_window.active = false
@dummy_window.visible = false
@sell_window.active = true
@sell_window.visible = true
@sell_window.refresh
end
when $game_temp.vshop_exit_string # Sair
Sound.play_decision
$scene = Scene_Map.new
end
end
else
kpnsvs0001_update_command_selection
end
end
#--------------------------------------------------------------------------
# Alias da atualização da seleção: Comprar
#--------------------------------------------------------------------------
alias kpnsvs0001_update_buy_selection update_buy_selection
#--------------------------------------------------------------------------
# Atualização da seleção: Comprar
#--------------------------------------------------------------------------
def update_buy_selection
if $game_temp.vshop_active
@status_window.item = @buy_window.item
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@buy_window.active = false
@buy_window.visible = false
@status_window.visible = false
@status_window.item = nil
@help_window.set_text("")
return
end
if Input.trigger?(Input::C)
@item = @buy_window.item
number = $game_party.item_number(@item)
if @item == nil or @item.price >
$game_variables[$game_temp.vshop_variable] or number == 99
Sound.play_buzzer
else
Sound.play_decision
max = @item.price == 0 ? 99 :
$game_variables[$game_temp.vshop_variable] / @item.price
max = [max, 99 - number].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.price)
@number_window.active = true
@number_window.visible = true
end
end
else
kpnsvs0001_update_buy_selection
end
end
#--------------------------------------------------------------------------
# Alias da atualização da seleção: Vender
#--------------------------------------------------------------------------
alias kpnsvs0001_update_sell_selection update_sell_selection
#--------------------------------------------------------------------------
# Atualizaão da seleção: Vender
#--------------------------------------------------------------------------
def update_sell_selection
if $game_temp.vshop_active
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@sell_window.active = false
@sell_window.visible = false
@status_window.item = nil
@help_window.set_text("")
elsif Input.trigger?(Input::C)
@item = @sell_window.item
@status_window.item = @item
if @item == nil or @item.price == 0
Sound.play_buzzer
else
Sound.play_decision
max = $game_party.item_number(@item)
@sell_window.active = false
@sell_window.visible = false
@number_window.set(@item, max, @item.price / 2)
@number_window.active = true
@number_window.visible = true
@status_window.visible = true
end
end
else
kpnsvs0001_update_sell_selection
end
end
#--------------------------------------------------------------------------
# Alias da decisão do número inserido
#--------------------------------------------------------------------------
alias kpnsvs0001_decide_number_input decide_number_input
#--------------------------------------------------------------------------
# Decisão do número inserido
#--------------------------------------------------------------------------
def decide_number_input
if $game_temp.vshop_active
Sound.play_shop
@number_window.active = false
@number_window.visible = false
case @command_window.index
when 0 # Comprando
$game_variables[$game_temp.vshop_variable] -=
@number_window.number * @item.price
$game_party.gain_item(@item, @number_window.number)
@gold_window.variable = $game_variables[$game_temp.vshop_variable]
@gold_window.refresh
@buy_window.refresh
@status_window.refresh
@buy_window.active = true
@buy_window.visible = true
when 1 # Vendendo
$game_variables[$game_temp.vshop_variable] +=
@number_window.number * (@item.price / 2)
$game_party.lose_item(@item, @number_window.number)
@gold_window.variable = $game_variables[$game_temp.vshop_variable]
@gold_window.refresh
@sell_window.refresh
@status_window.refresh
@sell_window.active = true
@sell_window.visible = true
@status_window.visible = false
end
else
kpnsvs0001_decide_number_input
end
end
end
[box class=catbg2]
Demo:[/box]
Em anexo.
[box class=catbg2]
Screenshots:[/box]
Desde que as mudanças não são visuais no script, ou seja, a função da loja é o que muda, seria irrelevante utilizar screenshots.
[box class=catbg2]
Histórico de versões:[/box]
- Versão 1.1: 05 de Outubro de 2010
Spoiler
* Adicionada a opção de mudar os textos de compra, venda e saída.
* Adicionada a opção de exibir ou não a cifra ao lado dos itens na hora da compra.
* Adicionada a opção de ocultar as opções de compra e venda.
- Versão 1.0: 04 de Outubro de 2010
Spoiler
* Primeira versão do script.
[box class=catbg2]
Finalização:[/box]
Qualquer dúvida, erro ou sugestão quanto ao script comunique-me ou ao Kyo, que eu faremos o possível para atendê-lo.
Olá, gostei muito deste roteiro. É útil, exceto que existe alguma maneira de alterar o preço para outro valor? Talvez algo especificado em notas para cada item?
Adiciona esse script abaixo do script da loja:
if $kpanda_scripts.nil? || !$kpanda_scripts["Scene_ShopVariable"]
raise "The script Scene_ShopVariable was not found."
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# This class represents the items in game.
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :vshop_price
#--------------------------------------------------------------------------
# * Object Initialization alias
#--------------------------------------------------------------------------
alias :initialize_202209021234 :initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(*args)
initialize_202209021234(*args)
@vshop_price = nil
end
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
def price
return @vshop_price if $game_temp.vshop_active && !@vshop_price.nil?
@price
end
end
#==============================================================================
# ** VShop
#------------------------------------------------------------------------------
# This module holds the Scene_SchopVariable operations.
#==============================================================================
module VShop
#--------------------------------------------------------------------------
# * Constants
#--------------------------------------------------------------------------
ITEM_PRICE_REGEX = /<vshop:item-price>([^<]*)<\/vshop>/i
#--------------------------------------------------------------------------
# * Process item notes
#--------------------------------------------------------------------------
def self.process_item_notes
$data_items[1..-1].each do |item|
match = item.note.match(ITEM_PRICE_REGEX)
item.vshop_price = match[1].to_i if match
end
end
end
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs the title screen processing.
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * Load Database alias
#--------------------------------------------------------------------------
alias load_database_202209021211 load_database
#--------------------------------------------------------------------------
# * Load Database
#--------------------------------------------------------------------------
def load_database(*args)
load_database_202209021211(*args)
VShop.process_item_notes
end
end
Para definir o preço do item, adiciona na nota dele:
<vshop:item-price>1</vshop>
Mudando o número para o valor que você quer.
Se a loja estiver desativada (usando o Vshop.off, por exemplo), ou se o item não tiver um valor definido nas notas dele, o valor do banco de dados será usado.
Nota que como o script mexe com o valor do item, se realizar alguma operação fora da loja que utiliza o preço do item como referência, ele pegará o preço do item do Vshop e não do banco de dados. Então use o Vshop.off sempre que precisar interagir com o preço do item do banco de dados.
Muito obrigado! É muito bom. Mais uma pergunta, é possível adicionar EquipItem (weapon and armor) ao script também?
eu agradeço a ajuda!
Tá na mão:
if $kpanda_scripts.nil? || !$kpanda_scripts["Scene_ShopVariable"]
raise "The script Scene_ShopVariable was not found."
end
#==============================================================================
# ** RPG::PurchasableItem
#------------------------------------------------------------------------------
# Module used to define the price of purchasable items.
#==============================================================================
module RPG::PurchasableItem
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :vshop_price
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@vshop_price = nil
end
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
def self.included(base)
base.class_eval do
def price
return @vshop_price if $game_temp.vshop_active && !@vshop_price.nil?
@price
end
end
end
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# Data class for items.
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Weapon
#------------------------------------------------------------------------------
# Data class for weapons.
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Armor
#------------------------------------------------------------------------------
# Data class for armors.
#==============================================================================
class RPG::Armor
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** VShop
#------------------------------------------------------------------------------
# This module holds the Scene_SchopVariable operations.
#==============================================================================
module VShop
#--------------------------------------------------------------------------
# * Constants
#--------------------------------------------------------------------------
ITEM_PRICE_REGEX = /<vshop:item-price>([^<]*)<\/vshop>/i
#--------------------------------------------------------------------------
# * Process item notes
#--------------------------------------------------------------------------
def self.process_item_notes
[$data_items, $data_weapons, $data_armors].each do |database|
database[1..-1].each do |item|
match = item.note.match(ITEM_PRICE_REGEX)
item.vshop_price = match[1].to_i if match
end
end
end
end
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs the title screen processing.
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * Load Database alias
#--------------------------------------------------------------------------
alias load_database_202209021211 load_database
#--------------------------------------------------------------------------
# * Load Database
#--------------------------------------------------------------------------
def load_database(*args)
load_database_202209021211(*args)
VShop.process_item_notes
end
end
:<3: :<3:
Obrigada!! Eu estava tentando fazer isso sozinho, mas não conseguiu localizar como obter o preço das armas.
Você é o melhor! Este é o script mais útil que já usei!
Citação de: Kyo Panda online 03/09/2022 às 04:08
Tá na mão:
if $kpanda_scripts.nil? || !$kpanda_scripts["Scene_ShopVariable"]
raise "The script Scene_ShopVariable was not found."
end
#==============================================================================
# ** RPG::PurchasableItem
#------------------------------------------------------------------------------
# Module used to define the price of purchasable items.
#==============================================================================
module RPG::PurchasableItem
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :vshop_price
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@vshop_price = nil
end
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
def self.included(base)
base.class_eval do
def price
return @vshop_price if $game_temp.vshop_active && !@vshop_price.nil?
@price
end
end
end
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# Data class for items.
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Weapon
#------------------------------------------------------------------------------
# Data class for weapons.
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Armor
#------------------------------------------------------------------------------
# Data class for armors.
#==============================================================================
class RPG::Armor
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** VShop
#------------------------------------------------------------------------------
# This module holds the Scene_SchopVariable operations.
#==============================================================================
module VShop
#--------------------------------------------------------------------------
# * Constants
#--------------------------------------------------------------------------
ITEM_PRICE_REGEX = /<vshop:item-price>([^<]*)<\/vshop>/i
#--------------------------------------------------------------------------
# * Process item notes
#--------------------------------------------------------------------------
def self.process_item_notes
[$data_items, $data_weapons, $data_armors].each do |database|
database[1..-1].each do |item|
match = item.note.match(ITEM_PRICE_REGEX)
item.vshop_price = match[1].to_i if match
end
end
end
end
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs the title screen processing.
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * Load Database alias
#--------------------------------------------------------------------------
alias load_database_202209021211 load_database
#--------------------------------------------------------------------------
# * Load Database
#--------------------------------------------------------------------------
def load_database(*args)
load_database_202209021211(*args)
VShop.process_item_notes
end
end
bom dia, desculpe incomodá-lo com isso novamente.. quando eu adicioná-lo ao meu projeto
eu recebi:
"Script 'VShop Mod' line 30: NoMethodError occurred. undefined method 'vshop active' for nil:NilClass"
Com apenas esses dois scripts:
(https://i.imgur.com/d6MpFZl.png)
O jogo carrega normalmente:
(https://i.imgur.com/ZLx44Xh.png)
O que quer dizer que algum outro script está tentando acessar a propriedade price de um item antes do $game_temp ser carregado pelo jogo.
Eu adicionei um check para a existência do $game_temp antes de retornar o valor, mas isso significa que esse script que está tentando acessar esse valor usará o valor do database e não o do Vshop.
if $kpanda_scripts.nil? || !$kpanda_scripts["Scene_ShopVariable"]
raise "The script Scene_ShopVariable was not found."
end
#==============================================================================
# ** RPG::PurchasableItem
#------------------------------------------------------------------------------
# Module used to define the price of purchasable items.
#==============================================================================
module RPG::PurchasableItem
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :vshop_price
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@vshop_price = nil
end
#--------------------------------------------------------------------------
# * Price
#--------------------------------------------------------------------------
def self.included(base)
base.class_eval do
def price
if !$game_temp.nil? && $game_temp.vshop_active && !@vshop_price.nil?
return @vshop_price
end
@price
end
end
end
end
#==============================================================================
# ** RPG::Item
#------------------------------------------------------------------------------
# Data class for items.
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Weapon
#------------------------------------------------------------------------------
# Data class for weapons.
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** RPG::Armor
#------------------------------------------------------------------------------
# Data class for armors.
#==============================================================================
class RPG::Armor
#--------------------------------------------------------------------------
# * Include RPG::PurchasableItem
#--------------------------------------------------------------------------
include RPG::PurchasableItem
end
#==============================================================================
# ** VShop
#------------------------------------------------------------------------------
# This module holds the Scene_SchopVariable operations.
#==============================================================================
module VShop
#--------------------------------------------------------------------------
# * Constants
#--------------------------------------------------------------------------
ITEM_PRICE_REGEX = /<vshop:item-price>([^<]*)<\/vshop>/i
#--------------------------------------------------------------------------
# * Process item notes
#--------------------------------------------------------------------------
def self.process_item_notes
[$data_items, $data_weapons, $data_armors].each do |database|
database[1..-1].each do |item|
match = item.note.match(ITEM_PRICE_REGEX)
item.vshop_price = match[1].to_i if match
end
end
end
end
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs the title screen processing.
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * Load Database alias
#--------------------------------------------------------------------------
alias load_database_202209021211 load_database
#--------------------------------------------------------------------------
# * Load Database
#--------------------------------------------------------------------------
def load_database(*args)
load_database_202209021211(*args)
VShop.process_item_notes
end
end
Aí dependendo se precisar que esse script fução acesse o valor do Vshop ou do database, podemos fazer uns contornos.
Eu adicionei este novo script sem mover a posição no banco de dados e está funcionando agora. Obrigado!