Bag System
Sobre:
Permite que você limite a quantidade de itens que o jogador pode carregar durante a partida.
Funções:
* Permite que você limite o número de itens carregados pelos usuário à sua escolha.
* Permite que você una ou não itens semelhantes para que eles não ocupem espaço na mochila.
* Permite a configuração da mensagem de batalha quando o item não pode ser ganho.
Instalação:
* Cole o script do menu acima do
▼ Principal e abaixo dos
▼ Scripts Adicionais no Editor de Scripts do RPG Maker VX.
* Configure o script como desejar no guia
Configuração do script.
Utilização:
O script por sí só não proíbe que ocorra ou não ocorra eventos por você configurado. Para realizar isso, há alguns comandos que quando adicionados ao comando de evento
Condição fazem este trabalho. Utilize a opção
Script para isso:
[box title=pack_full?]
* Retorna se a mochila está cheia ou não.[/box]
[box title=pack_empty?]
* Retorna se a mochila está vazia ou não.[/box]
[box title=pack_full_with(tipo, id, número)]
* Retorna se a mochila ficará cheia com os valores definidos.
Onde:
-
tipo : Refere-se ao tipo do item.
"Item" : Item
"Weapon": Arma
"Armor" : Armadura
-
id : O ID do item.
-
número: A quantidade de itens.[/box]
[box title=pack_empty_with(tipo, id, número)]
* Retorna se a mochila ficará vazia quando subtraído o número definido por você. Segue-se o mesmo exemplo acima.[/box]
[box title=pack_max_value]
* Retorna o valor máximo possível que o jogador pode carregar de itens.[/box]
[box title=all_items_value]
* Retorna o valor de todos os itens somados de acordo com sua configuração.[/box]
[box title=Exemplo]Logo, se você quer que um evento só ocorra se houver espaço na mochila para isso, algo semelhante à este exemplo pode ser feito:
(http://img203.imageshack.us/img203/1520/packsystemexemplo01.png)
Na condição do exemplo acima, se a mochila não suportar duas poções
pack_full_with("Item", 1, 2), ela exibirá uma mensagem que não pode ser ganho, senão, mostra a mensagem que pode e adiciona os itens.[/box]
Script:
Spoiler
#==============================================================================
# Bag System [VX]
#------------------------------------------------------------------------------
# Permite que você limite a quantidade de itens que o jogador pode carregar
# durante a partida, relembrando MMORPG's ou o clássico Harvest Moon da
# Natsume™.
#------------------------------------------------------------------------------
# Autor: Kyo Panda
# Versão: 1.0
# Lançado em: 25 de Junho de 2010
#==============================================================================
#==============================================================================
# Funções:
#------------------------------------------------------------------------------
# * Permite que você limite o número de itens carregados pelos usuário à sua
# escolha.
# * Permite que você una ou não itens semelhantes para que eles não ocupem
# espaço na mochila.
# * Permite a configuração da mensagem de batalha quando o item não pode ser
# ganho.
# * Compatível com o script Alternative Items.
#==============================================================================
#==============================================================================
# Como usar:
#------------------------------------------------------------------------------
#
# #--------------------------------------------------------------------------
# # Instalação
# #--------------------------------------------------------------------------
#
# Cole o script do menu acima do "▼ Principal" e abaixo dos
# "▼ Scripts Adicionais" no Editor de Scripts do RPG Maker VX.
#
# Configure o script como desejar no guia "Configuração" logo abaixo.
#
# #--------------------------------------------------------------------------
# # Utilização
# #--------------------------------------------------------------------------
#
# O script por sí só não proíbe que ocorra ou não ocorra eventos por você
# configurado. Para realizar isso, há alguns comandos que quando adicionados
# ao comando de evento "Condição" fazem este trabalho.
# Utilize a opção "Script" para isso:
#
# pack_full?
# * Retorna se a mochila está cheia ou não.
#
# pack_empty?
# * Retorna se a mochila está vazia ou não.
#
# pack_full_with(tipo, id, número)
# * Retorna se a mochila ficará cheia com os valores definidos.
# Onde:
# - tipo : Refere-se ao tipo do item.
# "Item" : Item
# "Weapon": Arma
# "Armor" : Armadura
# - id : O ID do item.
# - número: A quantidade de itens.
#
# pack_empty_with(tipo, id, número)
# * Retorna se a mochila ficará vazia quando subtraído o número definido por
# você. Segue-se o mesmo exemplo acima.
#
# pack_max_value
# * Retorna o valor máximo possível que o jogador pode carregar de itens.
#
# all_items_value
# * Retorna o valor de todos os itens somados de acordo com sua configuração.
#
# Logo, se você quer que um evento só ocorra se houver espaço na mochila para
# isso, algo semelhante à este exemplo pode ser feito:
#
# <> Condição: Script: pack_full_with("Item", 1, 2)
# <> Mensagem:
# : Você não tem espaço sufuciente em sua mochila para
# : duas poções.
# : Exceção:
# <> Mensagem>
# : Você ganhou duas poções!
# <> Mudar item: [Poção] + 2
# : FIM
#
# Na condição do exemplo acima, se a mochila não suportar duas poções
# "pack_full_with("Item", 1, 2)", ela exibirá uma mensagem que não pode ser
# ganho, senão, mostra a mensagem que pode e adiciona os itens.
#
#==============================================================================
#==============================================================================
# Histórico de versões:
#------------------------------------------------------------------------------
# * Versão 1.0, 25 de Junho de 2010
# - Primeira versão do script.
# - Permite que você limite o número de itens carregados pelos usuário à sua
# escolha.
# - Permite que você una ou não itens semelhantes para que eles não ocupem
# espaço na mochila.
# - Permite a configuração da mensagem de batalha quando o item não pode ser
# ganho.
# - Compatível com o script Alternative Items
#==============================================================================
#==============================================================================
# Pack_SystemSettings
#------------------------------------------------------------------------------
# Módulo que armazena as configurações do script Pack System.
#==============================================================================
module Pack_SystemSettings
#--------------------------------------------------------------------------
# Configuração
#--------------------------------------------------------------------------
# Defina aqui o máximo de itens que poderá ser armzenado pelo jogador.
PACK_MAX = 15
# Defina aqui se os itens semelhantes serão agrupados. Se definido sim,
# os itens semelhantes não contarão como máximo de itens.
# Defina true para sim e false para não.
GROUP_EQUAL_ITEMS = true
# Defina aqui se os equipamentos semelhantes serão agrupados. Se definido
# sim, os equipamentos semelhantes não contarão como máximo de itens.
# Defina true para sim e false para não.
GROUP_EQUAL_EQUIPS = false
# Defina aqui a mensagem exibida para quando itens exedentes são adquiridos
# em batalha, após a mensagem de ganho de item.
BATTLE_MESSAGE = ", mas foi descartado!"
#--------------------------------------------------------------------------
# Fim da configuração
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
# Insere a string "Pack_System" na hash $kpanda_scripts
#--------------------------------------------------------------------------
$kpanda_scripts = {} if $kpanda_scripts.nil?
$kpanda_scripts["Pack_System"] = true
#==============================================================================
# Game_Party
#------------------------------------------------------------------------------
# Classe que trata do Grupo. Inclui informações sobre dinheiro, itens, etc.
# Pode ser acessada utilizando $game_party.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Alias do método: gain_item.
# * Novos métodos: all_items_number, pack_full?, pack_empty?, pack_full_with,
# pack_empty_with e pack_max_value.
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# Alias do acrescentar um item (redução)
#--------------------------------------------------------------------------
alias ilim01_gain_item gain_item
#--------------------------------------------------------------------------
# Acrescentar um item (redução)
# item : item
# n : quantidade de itens
# include_equip : inclui os equipamentos
#--------------------------------------------------------------------------
def gain_item(item, n, include_equip = false)
if item.is_a?(RPG::Item)
type = "Item"
elsif item.is_a?(RPG::Weapon)
type = "Weapon"
elsif item.is_a?(RPG::Armor)
type = "Armor"
else
type = nil
end
return if pack_full_with(type, item.id, n)
ilim01_gain_item(item, n, include_equip)
end
#--------------------------------------------------------------------------
# Retorna a quantidade de todos os itens somados
#--------------------------------------------------------------------------
def all_items_number
all_items_value = 0
if !Pack_SystemSettings::GROUP_EQUAL_ITEMS ||
!Pack_SystemSettings::GROUP_EQUAL_EQUIPS
items.each do |item|
if $kpanda_scripts["Alternative_Items"]
next if $game_party.is_an_alternative_item?(item)
end
if item.is_a?(RPG::Item) && !Pack_SystemSettings::GROUP_EQUAL_ITEMS
all_items_value += item_number(item)
elsif !item.is_a?(RPG::Item) && !Pack_SystemSettings::GROUP_EQUAL_EQUIPS
all_items_value += item_number(item)
else
all_items_value += 1
end
end
return all_items_value
else
data = []
items.each do |item|
data.push(item)
end
if $kpanda_scripts["Alternative_Items"]
indexes = []
ind_comp = 0
data.each_index do |i|
item = data[i]
if $game_party.is_an_alternative_item?(item)
indexes.push(i)
end
end
indexes.each_index do |i|
data.delete_at(i - ind_comp)
ind_comp += 1
end
end
return data.size
end
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens está no máximo
#--------------------------------------------------------------------------
def pack_full?
return all_items_number >= Pack_SystemSettings::PACK_MAX
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens está no mínimo
#--------------------------------------------------------------------------
def pack_empty?
return all_items_number <= 0
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens chegará ao máximo com o valor dado
# type : tipo do item à ser verificado
# id : ID do item à ser verificado
# value : valor à ser verificado
#--------------------------------------------------------------------------
def pack_full_with(type, id, value)
return false if type.nil?
if !Pack_SystemSettings::GROUP_EQUAL_ITEMS &&
!Pack_SystemSettings::GROUP_EQUAL_EQUIPS
return all_items_number + value > Pack_SystemSettings::PACK_MAX
else
case type
when "Item"
item = $data_items[id]
when "Weapon"
item = $data_weapons[id]
when "Armor"
item = $data_armors[id]
end
items.each do |itemv|
if item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_ITEMS
if itemv.id.eql? item.id
return false
end
elsif !item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_EQUIPS
if itemv.id.eql? item.id
return false
end
end
end
if item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_ITEMS ||
!item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_EQUIPS
return all_items_number + 1 > Pack_SystemSettings::PACK_MAX
else
return all_items_number + value > Pack_SystemSettings::PACK_MAX
end
end
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens chegará ao mínimo com o valor dado
# type : tipo do item à ser verificado
# id : ID do item à ser verificado
# value : valor à ser verificado
#--------------------------------------------------------------------------
def pack_empty_with(type, id, value)
if !Pack_SystemSettings::GROUP_EQUAL_ITEMS &&
!Pack_SystemSettings::GROUP_EQUAL_EQUIPS
return all_items_number - value <= 0
else
case type
when "Item"
item = $data_items[id]
when "Weapon"
item = $data_weapons[id]
when "Armor"
item = $data_armors[id]
end
items.each do |itemv|
if item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_ITEMS
if item_number(item) - value <= 0
return all_items_number - value <= 0
end
elsif !item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_EQUIPS
if item_number(item) - value <= 0
return all_items_number - value <= 0
end
end
end
if item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_ITEMS ||
!item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_EQUIPS
return all_items_number - 1 <= 0
else
return all_items_number - value <= 0
end
end
end
#--------------------------------------------------------------------------
# Retorna o valor máximo de itens
#--------------------------------------------------------------------------
def pack_max_value
return Pack_SystemSettings::PACK_MAX
end
end
#==============================================================================
# Game_Interpreter
#------------------------------------------------------------------------------
# Esta classe interpreta os comandos de evento e os transforma no código da
# engine do RPG Maker. As classes Game_Map, Game_Troop, Game_Event são usadas.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Novos métodos: pack_full?, pack_empty?, pack_full_with, pack_empty_with e
# pack_max_value.
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens está no máximo
#--------------------------------------------------------------------------
def pack_full?
return $game_party.pack_full?
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens está no mínimo
#--------------------------------------------------------------------------
def pack_empty?
return $game_party.pack_empty?
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens chegará ao máximo com o valor dado
# type : tipo do item à ser verificado
# id : ID do item à ser verificado
# value : valor à ser verificado
#--------------------------------------------------------------------------
def pack_full_with(type, id, value)
return $game_party.pack_full_with(type, id, value)
end
#--------------------------------------------------------------------------
# Retorna se a capacidade dos itens chegará ao mínimo com o valor dado
# type : tipo do item à ser verificado
# id : ID do item à ser verificado
# value : valor à ser verificado
#--------------------------------------------------------------------------
def pack_empty_with(type, id, value)
return $game_party.pack_empty_with(type, id, value)
end
#--------------------------------------------------------------------------
# Retorna o valor máximo de itens
#--------------------------------------------------------------------------
def pack_max_value
return $game_party.pack_max_value
end
#--------------------------------------------------------------------------
# Retorna a quantidade de todos os itens somados
#--------------------------------------------------------------------------
def all_items_number
return $game_party.all_items_number
end
end
#==============================================================================
# Game_Actor
#------------------------------------------------------------------------------
# Esta classe controla os personagens do jogo. Ela é utilizada dentro das
# classes Game_Actors ($game_actors) e Game_Party ($game_party).
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Método sobrescrito: change_equip.
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# Modificação do equipamento
# equip_type : tipo do equipamento (0..4)
# item : ID da arma ou armadura
# test : teste de batalha
#--------------------------------------------------------------------------
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
if last_item.is_a?(RPG::Weapon)
type = "Weapon"
elsif last_item.is_a?(RPG::Armor)
type = "Armor"
else
type = nil
end
if $game_party.pack_full_with(type, last_item.id, 1)
Sound.play_buzzer
return
end
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
item_id = item == nil ? 0 : item.id
case equip_type
when 0 # Arma
@weapon_id = item_id
unless two_hands_legal? # Em caso de proibir duas mãos
change_equip(1, nil, test) # Remove a segunda arma do equipamento
end
when 1 # Escudo
@armor1_id = item_id
unless two_hands_legal? # Em caso de proibir duas mãos
change_equip(0, nil, test) # Remove a segunda arma do equipamento
end
when 2 # Elmo
@armor2_id = item_id
when 3 # Armadura
@armor3_id = item_id
when 4 # Acessório
@armor4_id = item_id
end
end
end
#==============================================================================
# Scene_Battle
#------------------------------------------------------------------------------
# Classe de operações na tela de batalha.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Método sobrescrito: display_drop_items.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# Exibição dos itens
#--------------------------------------------------------------------------
def display_drop_items
drop_items = $game_troop.make_drop_items
for item in drop_items
if item.is_a?(RPG::Item)
type = "Item"
elsif item.is_a?(RPG::Weapon)
type = "Weapon"
elsif item.is_a?(RPG::Armor)
type = "Armor"
else
type = nil
end
if !$game_party.pack_full_with(type, item.id, 1)
$game_party.gain_item(item, 1)
text = sprintf(Vocab::ObtainItem, item.name)
else
text = sprintf(Vocab::ObtainItem, item.name) + Pack_SystemSettings::BATTLE_MESSAGE
end
$game_message.texts.push(text)
end
wait_for_message
end
end
#==============================================================================
# Window_Item
#------------------------------------------------------------------------------
# Janela responsável pela exibição dos items em posse.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Métodos sobrescritos: refresh e draw_items.
#==============================================================================
class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
@data = []
for item in $game_party.items
next unless include?(item)
@data.push(item)
if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
self.index = @data.size - 1
end
end
@data.push(nil) if include?(nil)
indexes = []
@data.each do |item|
if item.is_a?(RPG::Item) && !Pack_SystemSettings::GROUP_EQUAL_ITEMS ||
!item.is_a?(RPG::Item) && !Pack_SystemSettings::GROUP_EQUAL_EQUIPS
if $game_party.item_number(item) > 1
for i in 2 .. $game_party.item_number(item)
indexes.push(item)
end
end
end
end
indexes.each do |item|
@data.push(item)
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# Desenho dos items
# index : número de items
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
number = $game_party.item_number(item)
enabled = enable?(item)
rect.width -= 4
draw_item_name(item, rect.x, rect.y, enabled)
if item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_ITEMS ||
!item.is_a?(RPG::Item) && Pack_SystemSettings::GROUP_EQUAL_EQUIPS
self.contents.draw_text(rect, sprintf(":%2d", number), 2)
end
end
end
end
#==============================================================================
# Scene_Shop
#------------------------------------------------------------------------------
# Classe responsável pelo gerenciamento de lojas.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Método sobrescrito: update_buy_selection.
#==============================================================================
class Scene_Shop < Scene_Base
#--------------------------------------------------------------------------
# Atualização da seleção: Comprar
#--------------------------------------------------------------------------
def update_buy_selection
@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_party.gold or number == 99 or
$game_party.pack_full?
Sound.play_buzzer
else
Sound.play_decision
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
if max + $game_party.all_items_number > Pack_SystemSettings::PACK_MAX
max = Pack_SystemSettings::PACK_MAX - $game_party.all_items_number
end
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
end
end
Histórico de Versões:
* Versão 1.0, 25 de Junho de 2010Spoiler
- Primeira versão do script.
- Permite que você limite o número de itens carregados pelos usuário à sua escolha.
- Permite que você una ou não itens semelhantes para que eles não ocupem espaço na mochila.
- Permite a configuração da mensagem de batalha quando o item não pode ser ganho.
- Compatível com o script Alternative Items
Créditos
Créditos ao autor KyoPanda por permitir a disponibilização, e pela criação.
É como muitos falam, um script para deixar o jogo mais realista. Apesar de curtir colecionar as armas/itens/acessórios... do jogo, esse método é legal também. Se pudesse deixar o personagem mais lerdo...
Obrigado por disponibilizar Lot.
I would rather have a quick release system. A shark will get sick of a burley bag attached to an anchor quite cast and drop it and you may get it back in one peice
Vash: By the powers granted to myself to banish any foolish child, I INVOKE THE HAMMER!
(https://i.imgur.com/CAFg7Ag.png)