Introdução
Essa pequena modificação mostra o total em dinheiro que você vai conseguir ao vender
O item ...recursos... armas e afins na loja do NPC
é algo bastante útil pois para quem gosta de farmar no jogo e quer ver a quantidade que vai ganhar em cada item (montante)
Antes de tudo faça um backup do seu projeto
Printscreen
Não selecionado a quantidade
Selecionado a quantidade e mostra o valor total
Claro você pode fazer ajustes conforme precisar para seu jogo.
Modificações
[VS] Window_Shop troque todo por esse :
- Código:
#==============================================================================
# ** Window_Shop
#------------------------------------------------------------------------------
# Esta classe lida com a janela da loja.
#------------------------------------------------------------------------------
# Autor: Valentine Mod: Merim
#==============================================================================
class Window_Shop < Window_ItemSelectable
attr_reader :price
def initialize
super(280, 165, 212, 212)
self.visible = false
self.closable = true
self.title = Vocab::Shop
end
def show(shop_goods, purchase_only)
@shop_goods = shop_goods
@purchase_only = purchase_only
super()
end
def hide_window
# Não envia o send_close_window se pressionar Esc quando a loja não estiver aberta
return unless visible
$network.send_close_window
end
def enable?(item)
item && @price[item] <= $game_party.gold && !$game_party.item_max?(item)
end
def make_item_list
@data = []
@price = {}
@shop_goods.each do |goods|
item = $game_party.item_object(goods[0] + 1, goods[1])
if item
@data << item
@price[item] = goods[2] == 0 ? item.price : goods[3]
end
end
end
def update
super
$windows[:amount].show(Enums::Amount::BUY_ITEM, item, index) if Mouse.dbl_clk?(:L) && index >= 0
end
def update_drag
return unless Mouse.press?(:L)
return if $cursor.object
return if $dragging_window
return unless index >= 0
$cursor.change_item(item, Enums::Mouse::SHOP)
end
def update_drop
return if Mouse.press?(:L)
return unless $cursor.object
return unless $cursor.type == Enums::Mouse::ITEM
return unless in_area?
sell_item
end
def sell_item
if @purchase_only
$error_msg = Vocab::NotSellItem
Sound.play_buzzer
return
end
$windows[:amount].show(Enums::Amount::SELL_ITEM, $windows[:item].item)
end
end
[VS]Window_Amount troque todo por esse :
- Código:
#==============================================================================
# ** Window_Amount
#------------------------------------------------------------------------------
# Esta classe lida com a janela de quantidade.
#------------------------------------------------------------------------------
# Autor: Valentine Mod: Merim
#==============================================================================
class Window_Amount < Window_Base
def initialize
super(400, 230, 150, 140) # Ajusta a altura da janela para 140
self.visible = false
self.closable = true
self.title = Vocab::Amount
@amount_box = Number_Box.new(self, 10, 40, 130, 5) { enable_ok_button } # Ajusta a posição da barra de quantidade
@ok_button = Button.new(self, 60, 110, Vocab::Ok) { ok } # Reposiciona o botão OK para mais abaixo
@total_value = 0
end
def deposit_gold
amount = @amount_box.value
puts "Tentando depositar #{amount} ouro."
return if $game_party.gold < amount
puts "Ouro suficiente no inventário."
$network.send_bank_gold(amount)
end
def show(type, item = nil, index = 0)
@type = type
@item = item
@index = index
@amount_box.clear
@amount_box.active = true
@ok_button.enable = false
@quantity = 1
update_total_value
if index == 0 && item_number_one?
@amount_box.value = 1
ok
return
end
super()
refresh
end
def update_total_value
@total_value = @item.price * @amount_box.value if @item
end
def refresh
super
contents.clear
if @item
draw_text(0, 0, contents.width, line_height, @item.name) # Coloca o nome do recurso no topo
draw_text(0, 50, contents.width, line_height, "#{@item.name} x #{@amount_box.value}") # Ajusta a posição da quantidade logo abaixo da barra de quantidade
else
draw_text(0, 0, contents.width, line_height, "Gold") # Exibe "Gold" no topo se @item for nil
draw_text(0, 50, contents.width, line_height, "Gold x #{@amount_box.value}") # Exibe "Gold" e a quantidade logo abaixo da barra de quantidade
end
draw_text(0, 80, contents.width, line_height, "Total: #{@total_value} G") # Ajusta a posição do total para logo abaixo da quantidade
end
def item_number_one?
return ($game_trade.my_item_number(@item) == 1) if @type == Enums::Amount::REMOVE_TRADE_ITEM
return ($game_bank.item_number(@item) == 1) if @type == Enums::Amount::WITHDRAW_ITEM
return ($game_party.item_number(@item) == 1)
end
def ok
case @type
when Enums::Amount::BUY_ITEM
buy_item
when Enums::Amount::SELL_ITEM
sell_item
when Enums::Amount::DROP_ITEM
drop_item
when Enums::Amount::ADD_TRADE_ITEM
add_trade_item
when Enums::Amount::ADD_TRADE_GOLD
add_trade_gold
when Enums::Amount::REMOVE_TRADE_ITEM
remove_trade_item
when Enums::Amount::REMOVE_TRADE_GOLD
remove_trade_gold
when Enums::Amount::DEPOSIT_ITEM
deposit_item
when Enums::Amount::DEPOSIT_GOLD
deposit_gold
when Enums::Amount::WITHDRAW_ITEM
withdraw_item
when Enums::Amount::WITHDRAW_GOLD
withdraw_gold
end
hide
end
def buy_item
amount = [@amount_box.value, Configs::MAX_ITEMS - $game_party.item_number(@item)].min
return if $game_party.full_items?(@item)
if $game_party.gold < @item.price * amount
$error_msg = Vocab::NotEnoughMoney
return
end
$network.send_buy_item(@index, amount)
end
def sell_item
amount = @amount_box.value
return if $game_party.item_number(@item) < amount
$network.send_sell_item(@item.id, $game_party.kind_item(@item), amount)
end
def drop_item
amount = @amount_box.value
return if $game_party.item_number(@item) < amount
if $game_map.drops.size >= Configs::MAX_MAP_DROPS
$error_msg = Vocab::FullDrops
return
elsif @item.soulbound?
$error_msg = Vocab::SoulboundItem
return
end
$network.send_add_drop(@item.id, $game_party.kind_item(@item), amount)
end
def add_trade_item
amount = @amount_box.value
return if $game_party.item_number(@item) < $game_trade.my_item_number(@item) + amount
return if $game_trade.full_items?(@item)
if @item.soulbound?
$error_msg = Vocab::SoulboundItem
return
end
$network.send_trade_item(@item.id, $game_party.kind_item(@item), amount)
end
def add_trade_gold
amount = @amount_box.value
return if $game_party.gold < $game_trade.my_gold + amount
$network.send_trade_gold(amount)
end
def remove_trade_item
amount = @amount_box.value
return if $game_trade.my_item_number(@item) < amount
return if $game_party.full_items?(@item)
$network.send_trade_item(@item.id, $game_party.kind_item(@item), -amount)
end
def remove_trade_gold
amount = @amount_box.value
return if $game_trade.my_gold < amount
$network.send_trade_gold(-amount)
end
def deposit_item
amount = [@amount_box.value, Configs::MAX_ITEMS - $game_bank.item_number(@item)].min
return if $game_party.item_number(@item) < amount
return if $game_bank.full_items?(@item)
if @item.soulbound?
$error_msg = Vocab::SoulboundItem
return
end
$network.send_bank_item(@item.id, $game_party.kind_item(@item), amount)
end
def deposit_gold
amount = @amount_box.value
return if $game_party.gold < amount
$network.send_bank_gold(amount)
end
def withdraw_item
amount = [@amount_box.value, Configs::MAX_ITEMS - $game_party.item_number(@item)].min
return if $game_bank.item_number(@item) < amount
return if $game_party.full_items?(@item)
$network.send_bank_item(@item.id, $game_party.kind_item(@item), -amount)
end
def withdraw_gold
amount = @amount_box.value
return if $game_bank.gold < amount
$network.send_bank_gold(-amount)
end
def enable_ok_button
@ok_button.enable = (@amount_box.value != 0)
update_total_value
refresh
end
def update
super
ok if Input.trigger?(:C) && @amount_box.value != 0
end
end
Qualquer bug ou algo do tipo favor reportar nesse post , até o presente momento não tive nenhum
Grande abraço ! e bom desenvolvimento a todos.
Última edição por Merim em Seg Dez 09, 2024 12:08 am, editado 1 vez(es)