O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Bag System

Iniciado por Lotmaker, 23/03/2014 às 19:34

23/03/2014 às 19:34 Última edição: 20/01/2017 às 10:00 por King Gerar


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:


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
[close]





Histórico de Versões:


* Versão 1.0, 25 de Junho de 2010
Spoiler
- 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
[close]





Créditos
Créditos ao autor KyoPanda  por permitir a disponibilização, e pela criação.
Conteúdos novos sempre, o trem nunca para.


Zombie  Misty!

By:Zombie

 É 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.

2010 ~ 2016 / 2024

12/05/2019 às 22:13 #2 Última edição: 12/05/2019 às 23:43 por Vash
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!