Scene ItemPlus
2 participantes
Página 1 de 1
Scene ItemPlus
Lembrando que esse script não foi feito por mim só estou disponbilizando
Enfim esse script eu achei na minha opnião muito interessante tá aqui:
Enfim esse script eu achei na minha opnião muito interessante tá aqui:
- Código:
#==============================================================================
# Scene ItemPlus [VX]
#------------------------------------------------------------------------------
# Modifica totalmente o sistema de menu de itens padrão do RPG Maker VX.
#------------------------------------------------------------------------------
# Autor: Kyo Panda (http://www.mundorpgmaker.com/)
# Lançado em: 26/04/2010
# Versão: 1.2
# Atualização: 19/05/2010
#==============================================================================
#==============================================================================
# Agradecimentos:
#------------------------------------------------------------------------------
# * kalormano (http://www.mundorpgmaker.com/)
# Por encontrar o bug do drop de itens.
# * kako92 (http://www.mundorpgmaker.com/)
# Por encontrar o bug de quando os itens eram utilizados até o fim.
#==============================================================================
#==============================================================================
# Funções:
#------------------------------------------------------------------------------
# * Lhe dá a opção de mudar a visualização de itens para ícones.
# * Permite que você selecione quantos ícones de itens deve haver por colunas.
# * Permite selecionar a visualização dos itens selecionando-os pelo seu tipo.
# * Permite que você equipe equipamentos pelo menu de itens, se desejar.
# * Lhe dá a opção de verificar as propriedades básicas do ítem simplesmente
# segurando a tecla SHIFT.
# * Permite que você oculte as janelas, permitindo assim você colocar uma
# imagem de fundo na forma do menu.
# * Permite que você configure todos os textos, assim como janelas e suas
# posições e tamanhos, do script.
#==============================================================================
#==============================================================================
# Histórico de versões;
#------------------------------------------------------------------------------
# Versão 1.2, 19/05/2010:
# * Corrigido o bug do drop de itens.
# * Corrigido o bug de quando os itens eram utilizados até o fim.
# Versão 1.1, 26/04/2010:
# * Adicionado a permição de optar entre usar ou não a função de "equipar pelo
# menu de itens.
# * Adicionado a opção de definir os nomes e a ordem em que as opções da
# janela de "Usar ítem" são exibidos, assim como os nomes e a ordem da
# "Janela de seleção do modo de exibição dos itens".
# * Adicionado as "Configurações Avançadas", assim como a opção de modificar
# todas as strings do script.
# Versão 1.0, 25/04/2010
# * Primeira versão do script.
#==============================================================================
#==============================================================================
# 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.
#==============================================================================
#==============================================================================
# Scene_ItemPlus
#------------------------------------------------------------------------------
# Módulo de configuração do menu de itens.
#==============================================================================
module Scene_ItemPlus
#--------------------------------------------------------------------------
# Configuração
#--------------------------------------------------------------------------
# Defina aqui o modo de exibição dos itens na tela do menu.
# 0: Somente será exibido os ícones com suas quantidades no lado inferior
# esquerdo. Seus nomes serão exibidos antes de suas definições na janela
# de ajuda.
# 1: Modo clássico do RPG Maker VX. Serão exibidos os ícones com seus nomes
# logo ao lado e suas quantidades ao lado do nome.
ITEM_MENU_MODE = 0
# Se caso você escolheu o modo de exibição de itens 0, defina aqui quantos
# ícones por coluna você deseja.
COLUMN_NUMBER = 12
# Defina aqui a opacidade (transparência) das janelas da tela de itens.
# Esta opção é útil caso queira utilizar uma imagem de fundo em vez das
# janelas.
# 0: Transparente; 255: Opaco.
ITEM_MENU_OPACITY = 255
# Defina aqui a imagem de background do menu.
# O arquivo deve estar na pasta Graphics/System.
# O nome do arquivo deve estar entre aspas ("") ou apóstrofes ('').
# Defina como nil para manter o plano de fundo padrão.
ITEM_MENU_BACK = nil # "Item Menu Background"
# Defina aqui o aspecto da fonte na tela de itens.
# A fonte é definida por ordem de prioridade, logo se a primeira não
# existir ele procurará a segunda e assim por diante.
ITEM_MENU_FONT = ["UmePlus Gothic", "Calibri"] # Nome da fonte
# Defina aqui o número de colunas existentes para a janela de visualização
# de itens.
ITEM_VISUAL_COLUMNS = 6
# Defina aqui os ícones da janela de seleção do modo de exibição da tela
# de itens.
ITEM_ICON_ALL_ITEMS = 133 # Todos
ITEM_ICON_ITEMS = 144 # Ítens
ITEM_ICON_WEAPONS = 2 # Armas
ITEM_ICON_ARMORS = 40 # Armaduras
ITEM_ICON_ACCESSORIES = 32 # Acessórios
ITEM_ICON_VALUABLES = 145 # Valiosos
# Defina aqui os textos que serão exibidos no guia de ajuda do modo de
# seleção de itens.
# Os nomes deve estar entre aspas ("") ou apóstrofes ('') para serem
# considerados textos pelo RPG Maker VX.
ITEM_HELP_ALL_ITEMS = "Todos" # Todos
ITEM_HELP_ITEMS = "Ítens" # Ítens
ITEM_HELP_WEAPONS = "Armas" # Armas
ITEM_HELP_ARMORS = "Armaduras" # Armaduras
ITEM_HELP_ACCESSORIES = "Acessórios" # Acessórios
ITEM_HELP_VALUABLES = "Valiosos" # Valiosos
# Defina aqui a ordem em que os modos de visualização serão exibidos.
# Lembre-se que a primeira opção é 0 e segue a ordem as demais.
ITEM_INDEX_ALL_ITEMS = 0 # Todos
ITEM_INDEX_ITEMS = 1 # Ítens
ITEM_INDEX_WEAPONS = 2 # Armas
ITEM_INDEX_ARMORS = 3 # Armaduras
ITEM_INDEX_ACCESSORIES = 4 # Acessórios
ITEM_INDEX_VALUABLES = 5 # Valiosos
# Defina aqui a quantidade de modos de exibição que haverá disponível.
# O padrão é 6, logo se você definir acima disso, nada ocorrerá com a 7ª
# opção em diante. Mas, se você optar por um número menor, uma das opções
# ou mais não funcionarão (caso você queira menos modos de visualização).
# Então, se você escolher 5 opções, defina os indexes acima de 0 à 4
# logo o index 5 será descartado.
ITEM_VISUAL_NUMBER = 6
# Defina aqui se deseja ativar o recurso "Equipar" pelo menu de itens.
# Se você optar por NÃO utilizar a opção de "Equipar" pelo menu de itens,
# ao invés de ser exibido a opção "Equipar" na janela de "Usar ítem",
# será exibido a opção "Usar" em cinza, mostrando que o "Equipamento" não
# pode ser usado.
# Defina true para sim e false para não.
ITEM_EQUIP_ACTIVE = true
# Defina aqui as strings (textos) que serão exibidos em cada opção da
# janela de "Usar item".
# Os nomes deve estar entre aspas ("") ou apóstrofes ('') para serem
# considerados textos pelo RPG Maker VX.
ITEM_USE_NAME = "Usar" # Usar
ITEM_EQUIP_NAME = "Equipar" # Equipar
ITEM_VERIFY_NAME = "Verificar" # Verificar
ITEM_DROP_NAME = "Largar" # Largar
# Defina aqui a ordem em que as opções do "Usar item" serão exibidas.
# O primeiro item deve ser definido como 0.
ITEM_USE_INDEX = 0 # Usar/Equipar
ITEM_VERIFY_INDEX = 1 # Verificar
ITEM_DROP_INDEX = 2 # Largar
# Defina aqui quais os textos exibidos quando a opção "Largar" é acionada.
# Os nomes deve estar entre aspas ("") ou apóstrofes ('') para serem
# considerados textos pelo RPG Maker VX.
ITEM_DROP_QUESTION = "Tem certeza que deseja jogá-lo(s) fora?" # Pergunta
ITEM_DROP_ANSWER1 = "Sim" # Resposta afirmativa
ITEM_DROP_ANSWER2 = "Não" # Resposta negativa
# Defina aqui quais os textos exibidos para itens ao utilizar a opção
# "Verificar".
# Os nomes deve estar entre aspas ("") ou apóstrofes ('') para serem
# considerados textos pelo RPG Maker VX.
ITEM_VERIFY_TEXT0 = "Usável em batalha e menu" # Útil em batalha e menu
ITEM_VERIFY_TEXT1 = "Usável somente em batalha" # Útil somente em batalha
ITEM_VERIFY_TEXT2 = "Usável somente em menu" # Útil somente em menu
ITEM_VERIFY_TEXT3 = "Não usável" # Não útil
#--------------------------------------------------------------------------
# Configurações avançadas
#--------------------------------------------------------------------------
# À partir daqui serão definidos valores substanciais ao funcionamento
# do script, que são x (alinhamento horizontal), y (alinhamento vertical),
# altura e largura de cada janela. Além de ser possível ocultar algumas
# delas.
# Aqui você pode definir se algumas janelas serão ativadas ou não.
MNWA = true # Janela do nome do menu
MGWA = true # Janela de dinheiro
HPWA = true # Janela de ajuda sobre os itens
MHWA = true # Janela de ajuda sobre a seleção do modo
# Se utilizar o nome do menu, defina aqui qual nome ele deve apresentar.
# Os nomes deve estar entre aspas ("") ou apóstrofes ('') para serem
# considerados textos pelo RPG Maker VX.
MENU_NAME = "Itens"
# Defina aqui os valores estruturais de cada janela, que são x, y, largura
# altura.
# [ X , Y , Lar, Alt]
MNWV = [ 0, 0, 200, 56] # Janela com o nome do menu
MGWV = [344, 0, 200, 56] # Janela de dinheiro
HPWV = [ 0, 56, 544, 56] # Janela de ajuda sobre os itens
MMWV = [ 0, 112, 224, 56] # Janela de seleção do modo de visualização
MHWV = [224, 112, 320, 56] # Janela de ajuda sobre a seleção do modo
MIWV = [ 0, 168, 544, 248] # Janela de itens
#--------------------------------------------------------------------------
# Fim da configuração
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
# Insere a string "Scene_ItemPlus" na hash $kpanda_scripts
#--------------------------------------------------------------------------
$kpanda_scripts = {} if $kpanda_scripts.nil?
$kpanda_scripts["Scene_ItemPlus"] = true
#==============================================================================
# Window_Equip
#------------------------------------------------------------------------------
# Janela que exibe os itens equipados no herói juntamente com a janela de
# itens possíveis de se equipar.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Novo método: item_max=.
#==============================================================================
class Window_Equip < Window_Selectable
#--------------------------------------------------------------------------
# Retorna o valor do item_max
#--------------------------------------------------------------------------
def item_max=(value)
return @item_max = value
end
end
#==============================================================================
# Window_ItemType
#------------------------------------------------------------------------------
# Janela de escolha do tipo de exibição da tela de itens.
#==============================================================================
class Window_ItemType < Window_Selectable
#--------------------------------------------------------------------------
# Inclusão das constantes do módulo Scene_ItemPlus
#--------------------------------------------------------------------------
include Scene_ItemPlus
#--------------------------------------------------------------------------
# Inicialização do objeto
#--------------------------------------------------------------------------
def initialize
super(MMWV[0], MMWV[1], MMWV[2], MMWV[3])
@index = 0
@column_max = ITEM_VISUAL_COLUMNS
@spacing = 0
refresh
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
@data = []
for i in 1 .. ITEM_VISUAL_NUMBER
@data.push(i)
end
@item_max = @data.size
for i in 0 .. @item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# Desenho das opções
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
rect.width -= 4
item_width = (self.width - 32) / @column_max
align_m = (item_width - 24) / 2
self.contents.clear_rect(rect)
case index
when ITEM_INDEX_ALL_ITEMS
draw_icon(ITEM_ICON_ALL_ITEMS, rect.x + align_m, rect.y)
when ITEM_INDEX_ITEMS
draw_icon(ITEM_ICON_ITEMS, rect.x + align_m, rect.y)
when ITEM_INDEX_WEAPONS
draw_icon(ITEM_ICON_WEAPONS, rect.x + align_m, rect.y)
when ITEM_INDEX_ARMORS
draw_icon(ITEM_ICON_ARMORS, rect.x + align_m, rect.y)
when ITEM_INDEX_ACCESSORIES
draw_icon(ITEM_ICON_ACCESSORIES, rect.x + align_m, rect.y)
when ITEM_INDEX_VALUABLES
draw_icon(ITEM_ICON_VALUABLES, rect.x + align_m, rect.y)
end
end
#--------------------------------------------------------------------------
# Atualização do texto na janela de ajuda
#--------------------------------------------------------------------------
def update_help
@help_window.contents.font.name = ITEM_MENU_FONT
@help_window.contents.font.color = system_color
if @index == ITEM_INDEX_ALL_ITEMS
@help_window.set_text(ITEM_HELP_ALL_ITEMS, 1)
elsif @index == ITEM_INDEX_ITEMS
@help_window.set_text(ITEM_HELP_ITEMS, 1)
elsif @index == ITEM_INDEX_WEAPONS
@help_window.set_text(ITEM_HELP_WEAPONS, 1)
elsif @index == ITEM_INDEX_ARMORS
@help_window.set_text(ITEM_HELP_ARMORS, 1)
elsif @index == ITEM_INDEX_ACCESSORIES
@help_window.set_text(ITEM_HELP_ACCESSORIES, 1)
elsif @index == ITEM_INDEX_VALUABLES
@help_window.set_text(ITEM_HELP_VALUABLES, 1)
else
@help_window.set_text(ITEM_HELP_ALL_ITEMS, 1)
end
end
end
#==============================================================================
# Window_ItemUse
#------------------------------------------------------------------------------
# Janela que exibe as opções de uso para cada item.
#==============================================================================
class Window_ItemUse < Window_Selectable
#--------------------------------------------------------------------------
# Inclusão das constantes do módulo Scene_ItemPlus
#--------------------------------------------------------------------------
include Scene_ItemPlus
#--------------------------------------------------------------------------
# Inicialização do objeto
# x : coordenada X da janela
# y : coordenada Y da janela
# width : largura da janela
# height : altura da janela
#--------------------------------------------------------------------------
def initialize(x, y, mode, drop_enabled = true, usable = true)
super(x, y, 124, 104)
@mode = mode
@usable = usable
@drop_enabled = drop_enabled
self.index = 0
refresh
end
#--------------------------------------------------------------------------
# Definição do modo
#--------------------------------------------------------------------------
def mode
return @mode
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
create_contents
case @mode
when 0
draw_item(0)
when 1
draw_item(1)
end
end
#--------------------------------------------------------------------------
# Desenho dos itens
# index : número de itens
#--------------------------------------------------------------------------
def draw_item(mode)
self.contents.clear
case mode
when 0
@item_max = 3
self.contents.font.color.alpha = @usable ? 255 : 128
self.contents.draw_text(0, 24 * ITEM_USE_INDEX, contents.width, 24, ITEM_USE_NAME, 1)
self.contents.font.color.alpha = 255
self.contents.draw_text(0, 24 * ITEM_VERIFY_INDEX, contents.width, 24, ITEM_VERIFY_NAME, 1)
self.contents.font.color.alpha = @drop_enabled ? 255 : 128
self.contents.draw_text(0, 24 * ITEM_DROP_INDEX, contents.width, 24, ITEM_DROP_NAME, 1)
when 1
@item_max = 3
self.contents.draw_text(0, 24 * ITEM_USE_INDEX, contents.width, 24, ITEM_EQUIP_NAME, 1)
self.contents.draw_text(0, 24 * ITEM_VERIFY_INDEX, contents.width, 24, ITEM_VERIFY_NAME, 1)
self.contents.font.color.alpha = @drop_enabled ? 255 : 128
self.contents.draw_text(0, 24 * ITEM_DROP_INDEX, contents.width, 24, ITEM_DROP_NAME, 1)
end
end
#--------------------------------------------------------------------------
# Atualização do texto na janela de ajuda
#--------------------------------------------------------------------------
def update_help
if @help_window != nil
@help_window.contents.font.name = ITEM_MENU_FONT
@help_window.contents.font.color = @help_window.normal_color
if ITEM_MENU_MODE == 0
@help_window.set_text(item == nil ? "" : item.name + ": " + item.description, 1)
elsif ITEM_MENU_MODE == 1
@help_window.set_text(item == nil ? "" : item.description, 1)
else
@help_window.set_text("", 1)
end
end
end
end
#==============================================================================
# Window_ItemPlus
#------------------------------------------------------------------------------
# Janela responsável pela exibição dos itens em posse.
#==============================================================================
class Window_ItemPlus < Window_Selectable
#--------------------------------------------------------------------------
# Inclusão das constantes do módulo Scene_ItemPlus
#--------------------------------------------------------------------------
include Scene_ItemPlus
#--------------------------------------------------------------------------
# Inicialização do objeto
# x : coordenada X da janela
# y : coordenada Y da janela
# width : largura da janela
# height : altura da janela
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
if ITEM_MENU_MODE == 0
@column_max = COLUMN_NUMBER
@spacing = 0
elsif ITEM_MENU_MODE == 1
@column_max = 2
end
self.index = 0
self.active = false
refresh
end
#--------------------------------------------------------------------------
# Resgate das informações dos itens
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# Itens a serem inclusos na lista
# item : item
#--------------------------------------------------------------------------
def include?(item)
return false if item == nil
if $game_temp.in_battle
return false unless item.is_a?(RPG::Item)
end
return true
end
#--------------------------------------------------------------------------
# Utems de uso possível
# item : item
#--------------------------------------------------------------------------
def enable?(item)
return true
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
@data = []
for item in $game_party.items
next unless include?(item)
if $scene.is_a?(Scene_Item)
if $scene.sort_type == ITEM_INDEX_ALL_ITEMS || nil
@data.push(item)
elsif $scene.sort_type == ITEM_INDEX_ITEMS
@data.push(item) if not item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
elsif $scene.sort_type == ITEM_INDEX_WEAPONS
@data.push(item) if item.is_a?(RPG::Weapon)
elsif $scene.sort_type == ITEM_INDEX_ARMORS
@data.push(item) if item.is_a?(RPG::Armor) and item.kind == 2
elsif $scene.sort_type == ITEM_INDEX_ACCESSORIES
@data.push(item) if item.is_a?(RPG::Armor) and item.kind != 2
elsif $scene.sort_type == ITEM_INDEX_VALUABLES
@data.push(item) if item.price == 0
end
else
@data.push(item)
end
if item.id == $game_party.last_item_id
self.index = @data.size - 1
end
end
@data.push(nil) if include?(nil)
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# Exibição do nome do item
# item : itens (habilidades, armas e equipamentos são bem-vindos)
# x : exibe na coordenada X
# y : exibe na coordenada Y
# enabled : um espaço permitido. Fica translúcido quando falso
#--------------------------------------------------------------------------
def draw_item_name(item, x, y, enabled = true)
if item != nil
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.name = ITEM_MENU_FONT
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(x + 24, y, 172, WLH, item.name)
end
end
#--------------------------------------------------------------------------
# Desenho dos itens
# index : número de itens
#--------------------------------------------------------------------------
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
self.contents.font.color = normal_color
if ITEM_MENU_MODE == 0
item_width = self.width / @column_max
align_m = (item_width - 24) / 2
item_x = rect.x + align_m - 4
draw_icon(item.icon_index, item_x, rect.y, enabled)
self.contents.font.size = 12
align_n = self.contents.font.size / 2
self.contents.draw_text(item_x + align_n, rect.y + align_n, 24, 24, number.to_s, 2)
elsif ITEM_MENU_MODE == 1
draw_item_name(item, rect.x, rect.y, enabled)
self.contents.draw_text(rect, sprintf(":%2d", number), 2)
end
end
end
#--------------------------------------------------------------------------
# Atualização do texto na janela de ajuda
#--------------------------------------------------------------------------
def update_help
if @help_window != nil
@help_window.contents.font.name = ITEM_MENU_FONT
@help_window.contents.font.color = normal_color
if ITEM_MENU_MODE == 0
@help_window.set_text(item == nil ? "" : item.name + ": " + item.description, 1)
elsif ITEM_MENU_MODE == 1
@help_window.set_text(item == nil ? "" : item.description, 1)
else
@help_window.set_text("", 1)
end
end
end
end
#==============================================================================
# Window_Ask
#------------------------------------------------------------------------------
# Janela que exibe uma pergunta de reposta afirmativa ou negativa.
#==============================================================================
class Window_Ask < Window_Selectable
#--------------------------------------------------------------------------
# Inicialização do objeto
#--------------------------------------------------------------------------
def initialize(x, y, width, height, question, answer1, answer2)
super(x, y, width, height)
@question = question
@answer1 = answer1
@answer2 = answer2
@item_max = 2
refresh
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
contents.clear
contents.draw_text(0, WLH * 0, contents.width, WLH, @question, 1)
contents.draw_text(0, WLH * 1, contents.width, WLH, @answer1, 1)
contents.draw_text(0, WLH * 2, contents.width, WLH, @answer2, 1)
end
#--------------------------------------------------------------------------
# Atualização do cursor
#--------------------------------------------------------------------------
def update_cursor
cursor_rect.set(0, @index * WLH + WLH, contents.width, WLH)
end
end
#==============================================================================
# Window_ItemVerify
#------------------------------------------------------------------------------
# Janela que exibe as informações do ítem na tela de itens.
#==============================================================================
class Window_ItemVerify < Window_Base
#--------------------------------------------------------------------------
# Inclusão das constantes do módulo Scene_ItemPlus
#--------------------------------------------------------------------------
include Scene_ItemPlus
#--------------------------------------------------------------------------
# Inicialização do objeto
#--------------------------------------------------------------------------
def initialize(x, y, item, type)
super(x, y, 544, 54)
@item = item
@type = type
@x = x
@y = y
refresh
end
#--------------------------------------------------------------------------
# Atualização
#--------------------------------------------------------------------------
def refresh
case @type
when 0
@item = $data_items[@item.id]
when 1
@item = $data_weapons[@item.id]
when 2
@item = $data_armors[@item.id]
end
self.contents.draw_text(0, 0, contents.width, 24, @item.description, 1)
@item_name_window = Window_Base.new(@x, @y - 56, 224, 56)
@item_name_window.contents.font.name = ITEM_MENU_FONT
@item_name_window.contents.font.color = @item_name_window.system_color
@item_name_window.draw_icon(@item.icon_index, 0, 0)
@item_name_window.contents.draw_text(24, 0, 168, 24, @item.name)
@item_detail_window = Window_Base.new(@x + 224, @y - 56, 320, 56)
@item_detail_window.contents.font.name = ITEM_MENU_FONT
item_detail_refresh
end
#--------------------------------------------------------------------------
# Atualização da janela de detalhes
#--------------------------------------------------------------------------
def item_detail_refresh
if @type != 0
@item_detail_window.contents.font.color = system_color
@item_detail_window.contents.font.color.alpha = @item.atk != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 0, 0, 72, 24, "Atq:")
@item_detail_window.contents.font.color.alpha = @item.def != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 1, 0, 72, 24, "Def:")
@item_detail_window.contents.font.color.alpha = @item.spi != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 2, 0, 72, 24, "Int:")
@item_detail_window.contents.font.color.alpha = @item.agi != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 3, 0, 72, 24, "Agi:")
@item_detail_window.contents.font.color = normal_color
@item_detail_window.contents.font.color.alpha = @item.atk != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 0, 0, 68, 24, @item.atk, 2)
@item_detail_window.contents.font.color.alpha = @item.def != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 1, 0, 68, 24, @item.def, 2)
@item_detail_window.contents.font.color.alpha = @item.spi != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 2, 0, 68, 24, @item.spi, 2)
@item_detail_window.contents.font.color.alpha = @item.agi != 0 ? 255 : 128
@item_detail_window.contents.draw_text(72 * 3, 0, 68, 24, @item.agi, 2)
else
case @item.occasion
when 0
str = ITEM_VERIFY_TEXT0
when 1
str = ITEM_VERIFY_TEXT1
when 2
str = ITEM_VERIFY_TEXT2
when 3
str = ITEM_VERIFY_TEXT3
end
@item_detail_window.contents.font.color = system_color
@item_detail_window.contents.draw_text(0, 0, 288, 24, str, 1)
end
end
#--------------------------------------------------------------------------
# Dispose
#--------------------------------------------------------------------------
def dispose
self.contents.dispose
super
@item_name_window.dispose
@item_detail_window.dispose if not @item_detail_window.nil?
end
#--------------------------------------------------------------------------
# Atualização da tela
#--------------------------------------------------------------------------
def update
self.contents.update
super
@item_name_window.update
@item_detail_window.update if not @item_detail_window.nil?
end
end
#==============================================================================
# Scene_Item
#------------------------------------------------------------------------------
# Classe de operações na tela de itens.
#------------------------------------------------------------------------------
# Sumário de mudanças:
# * Classe totalmente reescrita.
#==============================================================================
class Scene_Item < Scene_Base
#--------------------------------------------------------------------------
# Inclusão das constantes do módulo Scene_ItemPlus
#--------------------------------------------------------------------------
include Scene_ItemPlus
#--------------------------------------------------------------------------
# Variáveis públicas
#--------------------------------------------------------------------------
attr_accessor :sort_type
#--------------------------------------------------------------------------
# Inicialização do processo
#--------------------------------------------------------------------------
def start
super
create_menu_background
# Cria um viewport
@viewport = Viewport.new(0, 0, 544, 416)
# Cria a janela com o nome "Ítens" nela
if MNWA
@menu_select_window = Window_Base.new(MNWV[0], MNWV[1], MNWV[2], MNWV[3])
@menu_select_window.opacity = ITEM_MENU_OPACITY
@menu_select_window.contents.font.name = ITEM_MENU_FONT
@menu_select_window.contents.font.color = @menu_select_window.system_color
@menu_select_window.contents.draw_text(0, 0, MNWV[2] - 32, 24, MENU_NAME, 1)
@menu_select_window.viewport = @viewport
end
# Cria a janela que exibe o dinheiro contido pelo grupo
if MGWA
@gold_window = Window_Base.new(MGWV[0], MGWV[1], MGWV[2], MGWV[3])
@gold_window.opacity = ITEM_MENU_OPACITY
cx = @gold_window.contents.text_size(Vocab::gold).width
@gold_window.contents.font.color = @gold_window.normal_color
@gold_window.contents.draw_text(0, 0, MGWV[2] - 32 - cx - 2, 24, $game_party.gold.to_s, 2)
@gold_window.contents.font.color = @gold_window.system_color
@gold_window.contents.draw_text(0, 0, MGWV[2] - 32, 24, Vocab::gold, 2)
@gold_window.viewport = @viewport
end
# Cria a janela de ajuda
if HPWA
@help_window = Window_Help.new
@help_window.opacity = ITEM_MENU_OPACITY
@help_window.x = HPWV[0]
@help_window.y = HPWV[1]
@help_window.width = HPWV[2]
@help_window.height = HPWV[3]
@help_window.create_contents
@help_window.viewport = @viewport
end
# Cria a janela de seleção de exibição de itens
@item_type_window = Window_ItemType.new
@item_type_window.opacity = ITEM_MENU_OPACITY
@item_type_window.viewport = @viewport
@sort_type = @item_type_window.index
# Cria a janela de ajuda da seleção de exibição de itens
if MHWA
@item_type_help_window = Window_Help.new
@item_type_help_window.opacity = ITEM_MENU_OPACITY
@item_type_help_window.x = MHWV[0]
@item_type_help_window.y = MHWV[1]
@item_type_help_window.width = MHWV[2]
@item_type_help_window.height = MHWV[3]
@item_type_help_window.create_contents
@item_type_help_window.viewport = @viewport
@item_type_window.help_window = @item_type_help_window
end
# Cria a janela de itens
@item_window = Window_ItemPlus.new(MIWV[0], MIWV[1], MIWV[2], MIWV[3])
@item_window.opacity = ITEM_MENU_OPACITY
@item_window.viewport = @viewport
@item_window.help_window = @help_window if HPWA
@item_window.cursor_rect.empty
# Cria a janela de alvo
@target_window = Window_MenuStatus.new(0, 0)
@target_window.visible = false
@target_window.active = false
# Cria uma janela de equipamento nula
@equip_window = nil
@not_update_equip = false
@equiped = false
# Cria uma janela de uso de itens nula
@item_use_window = nil
@not_update = false
# Cria a janela de pergunta
@ask_window = nil
end
#--------------------------------------------------------------------------
# Criação do background do menu
#--------------------------------------------------------------------------
def create_menu_background
@menuback_sprite = Sprite.new
if ITEM_MENU_BACK == nil
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
else
@menuback_sprite.bitmap = Cache.system(ITEM_MENU_BACK)
end
update_menu_background
end
#--------------------------------------------------------------------------
# Fim do processo
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@menu_select_window.dispose if @menu_select_window != nil
@gold_window.dispose if @gold_window != nil
@viewport.dispose
@help_window.dispose if HPWA
@item_type_window.dispose
@item_type_help_window.dispose if MHWA
@item_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# Retornar à tela original
#--------------------------------------------------------------------------
def return_scene
$scene = Scene_Menu.new(0)
end
#--------------------------------------------------------------------------
# Atualização da tela
#--------------------------------------------------------------------------
def update
super
update_menu_background
@menu_select_window.update if @menu_select_window != nil
@gold_window.update if @gold_window != nil
@help_window.update if HPWA
@item_type_window.update
@item_type_help_window.update if MHWA
@target_window.update
unless @not_update_equip
@equip_window.update if @equip_window != nil
@equip_window.refresh if @equip_window != nil
end
if @item_use_window != nil
update_item_use_selection
unless @not_update
@item_use_window.update
@item_use_window.refresh
end
elsif @item_verify_window != nil
update_item_verify_window(false)
elsif @item_verify_window2 != nil
update_item_verify_window(true)
elsif @ask_window != nil
update_ask
elsif @equip_window != nil and @equip_window.active
update_equip_two_hands
elsif @item_type_window.active
update_item_type_selection
elsif @item_window.active
update_item_selection
@item = @item_window.item
if Input.press?(Input::A) and @item != nil
if @item.is_a?(RPG::Weapon)
@item_verify_window = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 1)
elsif @item.is_a?(RPG::Armor)
@item_verify_window = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 2)
else
@item_verify_window = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 0)
end
@viewport.color.alpha = 128
end
elsif @target_window.active
update_target_selection
end
end
#--------------------------------------------------------------------------
# Tipo de exibição de itens
#--------------------------------------------------------------------------
def sort_type
return @sort_type
end
#--------------------------------------------------------------------------
# Valor do tipo de exibição de itens
#--------------------------------------------------------------------------
def sort_type=(value)
return @sort_type = value
end
#--------------------------------------------------------------------------
# Definição do equipamento
#--------------------------------------------------------------------------
def equip?
if @item.is_a?(RPG::Weapon) or @item.is_a?(RPG::Armor)
return true
else
return false
end
end
#--------------------------------------------------------------------------
# Atualização da seleção do tipo de exibição dos itens
#--------------------------------------------------------------------------
def update_item_type_selection
@sort_type = @item_type_window.index
@item_window.refresh
@item_window.cursor_rect.empty
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
@item_window.index = 0
@item_type_window.active = false
@item_window.active = true
end
end
#--------------------------------------------------------------------------
# Atualização da seleção de itens
#--------------------------------------------------------------------------
def update_item_selection
@item_window.update
@item_window_actived = true
if Input.trigger?(Input::B)
Sound.play_cancel
@item_window.index = 0
@item_window.cursor_rect.empty
@item_window.help_window.set_text("") if HPWA
@item_window.active = false
@item_type_window.active = true
@item_window_actived = false
elsif Input.trigger?(Input::C)
@item_window_actived = false
@item = @item_window.item
if @item != nil
$game_party.last_item_id = @item.id
end
if equip?
Sound.play_decision
determine_use(1)
else
if @item != nil
Sound.play_decision
determine_use(0)
end
end
end
end
#--------------------------------------------------------------------------
# Atualização da verificação de item
#--------------------------------------------------------------------------
def update_item_verify_window(from_item_use_window)
if from_item_use_window
if Input.trigger?(Input::B)
Sound.play_cancel
@item_verify_window2.dispose
@item_verify_window2 = nil
if equip?
determine_use(1)
else
determine_use(0)
end
@viewport.color.alpha = -128
@item_use_window.index = ITEM_VERIFY_INDEX
end
else
@item_window.active = false
if not Input.press?(Input::A)
@item_window.active = true
@item_verify_window.dispose
@item_verify_window = nil
@viewport.color.alpha = -128
@item_window.active = true
end
end
end
#--------------------------------------------------------------------------
# Decisão de uso
#--------------------------------------------------------------------------
def determine_use(mode)
@item_window.active = false
xa = @item_window.cursor_rect.x + (@item_window.x + 16) + 4
xb = (@item_window.width - 32) / @item_window.column_max
xn = xa + xb
yn = @item_window.cursor_rect.y + @item_window.y
if xn > 544 - 124
xn = xn - 124 - xb - 8
end
if yn > 416 - 104
yn = yn - 104 + 56
end
case mode
when 0
@droppable = @item.price > 0
@usable = $game_party.item_can_use?(@item)
@item_use_window = Window_ItemUse.new(xn, yn, 0, @droppable, @usable)
when 1
if not ITEM_EQUIP_ACTIVE
@droppable = @item.price > 0
@usable = $game_party.item_can_use?(@item)
@item_use_window = Window_ItemUse.new(xn, yn, 0, @droppable, @usable)
else
@droppable = @item.price > 0
@item_use_window = Window_ItemUse.new(xn, yn, 1, @droppable)
end
end
@not_update = false
end
#--------------------------------------------------------------------------
# Atualização da seleção tipo de uso do ítem
#--------------------------------------------------------------------------
def update_item_use_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@not_update = true
@item_use_window.active = false
@item_use_window.dispose
@item_use_window = nil
@item_window.active = true
elsif Input.trigger?(Input::C)
case @item_use_window.index
when ITEM_USE_INDEX
case @item_use_window.mode
when 0
if @usable
Sound.play_decision
@not_update = true
@item_use_window.active = false
@item_use_window.dispose
@item_use_window = nil
@item_window.active = true
determine_item
else
Sound.play_buzzer
end
when 1
if ITEM_EQUIP_ACTIVE
Sound.play_decision
@not_update = true
@item_use_window.active = false
@item_use_window.dispose
@item_use_window = nil
@item_window.active = true
@equiped = false
determine_equip
else
Sound.play_buzzer
end
end
when ITEM_VERIFY_INDEX
Sound.play_decision
@not_update = true
@item_use_window.active = false
@item_use_window.dispose
@item_use_window = nil
@item_window.active = true
if @item.is_a?(RPG::Weapon)
@item_verify_window2 = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 1)
elsif @item.is_a?(RPG::Armor)
@item_verify_window2 = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 2)
else
@item_verify_window2 = Window_ItemVerify.new(0, ((544 - 112) / 2), @item, 0)
end
update_item_verify_window(true)
@viewport.color.alpha = 128
when ITEM_DROP_INDEX
if @droppable
Sound.play_decision
question = ITEM_DROP_QUESTION
answer1 = ITEM_DROP_ANSWER1
answer2 = ITEM_DROP_ANSWER2
temp_bitmap = Bitmap.new(544, 416)
width = temp_bitmap.text_size(question).width
x = (544 - (width + 32)) / 2
y = (416 - ((24 * 3) + 32)) / 2
@ask_window = Window_Ask.new(x, y, width + 32, 24 * 3 + 32, question,
answer1, answer2)
@ask_window.contents.font.name = ITEM_MENU_FONT
@ask_window.refresh
@ask_window.index = 1
@ask_update = true
@not_update = true
@item_use_window.active = false
@item_use_window.dispose
@item_use_window = nil
@item_window.active = true
else
Sound.play_buzzer
end
end
end
end
#--------------------------------------------------------------------------
# Atualização da pergunta
#--------------------------------------------------------------------------
def update_ask
@viewport.color.alpha = 128
if @ask_update
@ask_window.update
end
if Input.trigger?(Input::B)
Sound.play_cancel
@ask_update = false
@ask_window.dispose
@ask_window = nil
if equip?
determine_use(1)
else
determine_use(0)
end
@item_use_window.index = ITEM_DROP_INDEX
@viewport.color.alpha = -128
elsif Input.trigger?(Input::C)
case @ask_window.index
when 0
Sound.play_equip
$game_party.lose_item(@item, $game_party.item_number(@item))
@ask_update = false
@ask_window.dispose
@ask_window = nil
@item_window.refresh
if @item_window.item == nil
@item_window.index = @item_window.item_max - 1
end
@viewport.color.alpha = -128
when 1
Sound.play_cancel
@ask_update = false
@ask_window.dispose
@ask_window = nil
if equip?
determine_use(1)
else
determine_use(0)
end
@item_use_window.index = ITEM_DROP_INDEX
@viewport.color.alpha = -128
end
end
end
#--------------------------------------------------------------------------
# Decisão de item
#--------------------------------------------------------------------------
def determine_item
if @item.for_friend?
xa = @item_window.cursor_rect.x + @item_window.x + 8
xb = @item_window.width / @item_window.column_max
xn = xa + xb
show_target_window
if @item.for_all?
@target_window.index = 99
else
if $game_party.last_target_index < @target_window.item_max
@target_window.index = $game_party.last_target_index
else
@target_window.index = 0
end
end
else
use_item_nontarget
end
end
#--------------------------------------------------------------------------
# Decisão do equipamento
#--------------------------------------------------------------------------
def determine_equip
xa = @item_window.cursor_rect.x + @item_window.x + 8
xb = @item_window.width / @item_window.column_max
xn = xa + xb
show_target_window
if $game_party.last_target_index < @target_window.item_max
@target_window.index = $game_party.last_target_index
else
@target_window.index = 0
end
@last_target_index = -1
@actor = $game_party.members[@target_window.index]
y = @target_window.cursor_rect.y + @target_window.y + (24 * 5)
if y + (24 * 5) + 32 > 416
y = @target_window.y + @target_window.cursor_rect.y - (24 * 5) - 24
end
@equip_status_window = Window_EquipStatus.new(0, y, @actor)
@equip_window = Window_Equip.new(@equip_status_window.width, y, @actor)
@equip_window.active = false
@not_update_equip = false
@equip_window.refresh if @equip_window != nil
end
#--------------------------------------------------------------------------
# Exibição da janela de alvo
# right : alinhado à direita (falso se esquerda)
#--------------------------------------------------------------------------
def show_target_window
@item_window.active = false
width_remain = 544 - @target_window.width
@target_window.x = width_remain / 2
@target_window.visible = true
@target_window.active = true
x = @target_window.x
y = @target_window.y
width = @target_window.width
height = @target_window.height
@viewport.color.alpha = 128
@viewport.ox = 0
end
#--------------------------------------------------------------------------
# Ocultar janela de alvo
#--------------------------------------------------------------------------
def hide_target_window
@target_window.visible = false
@target_window.active = false
@viewport.rect.set(0, 0, 544, 416)
@viewport.ox = 0
if equip?
if $game_party.item_number(@item) == 0
@item_window.index = 0
@item_window.active = true
else
determine_use(1)
end
else
if $game_party.item_number(@item) == 0
@item_window.index = 0
@item_window.active = true
else
determine_use(0)
end
end
@item_use_window.index = ITEM_USE_INDEX if !@item_use_window.nil?
@viewport.color.alpha = -128
end
#--------------------------------------------------------------------------
# Atualização da seleção de alvo
#--------------------------------------------------------------------------
def update_target_selection
if @last_target_index != @target_window.index and equip?
@equip_window.dispose
@equip_status_window.dispose
@actor = $game_party.members[@target_window.index]
y = @target_window.cursor_rect.y + @target_window.y + (24 * 5)
if y + (24 * 5) + 32 > 416
y = @target_window.y + @target_window.cursor_rect.y - (24 * 5) - 24
end
@equip_status_window = Window_EquipStatus.new(0, y, @actor)
@equip_window = Window_Equip.new(@equip_status_window.width, y, @actor)
@equip_window.active = false
@not_update_equip = true
@equip_window.refresh if @equip_window != nil
@last_target_index = @target_window.index
if @item.is_a?(RPG::Weapon)
if @actor.two_swords_style || @item.two_handed
@equip_window.index = 0
@equip_window.cursor_rect.set(0, 0, @equip_window.width - 32, 48)
else
@equip_window.index = 0
end
elsif @item.is_a?(RPG::Armor)
case @item.kind
when 0
@equip_window.index = 1
when 1
@equip_window.index = 2
when 2
@equip_window.index = 3
when 3
@equip_window.index = 4
end
end
if @actor.equippable?(@item)
temp_actor = @actor.clone
temp_actor.change_equip(@equip_window.index, @item_window.item, true)
new_atk = temp_actor.atk
new_def = temp_actor.def
new_spi = temp_actor.spi
new_agi = temp_actor.agi
@equip_status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
end
if not @actor.equippable?(@item) or $game_party.item_number(@item) == 0
@equip_window.cursor_rect.empty
end
end
if Input.trigger?(Input::B)
Sound.play_cancel
if $game_party.item_number(@item) == 0 # Se usar itens até 0
@item_window.refresh # Atualizar janela
end
if @equip_window != nil
@not_update_equip = true
@equip_status_window.dispose
@equip_status_window = nil
@equip_window.dispose
@equip_window = nil
end
hide_target_window
elsif Input.trigger?(Input::C)
if not $game_party.item_can_use?(@item) and not equip?
Sound.play_buzzer
else
if @actor.nil?
@actor = $game_party.members[@target_window.index]
end
if @item.is_a?(RPG::Weapon) and @actor.two_swords_style and not @item.two_handed
Sound.play_decision
@equip_window.active = true
@target_window.active = false
@not_update_equip = false
else
determine_target
end
end
end
end
#--------------------------------------------------------------------------
# Definição do equipamento para personagem com estilo duas mãos
#--------------------------------------------------------------------------
def update_equip_two_hands
@equip_status_window.update
@equip_status_window.refresh
temp_actor = @actor.clone
temp_actor.change_equip(@equip_window.index, @item_window.item, true)
new_atk = temp_actor.atk
new_def = temp_actor.def
new_spi = temp_actor.spi
new_agi = temp_actor.agi
@equip_status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
@equip_window.item_max = 2
if Input.trigger?(Input::B)
Sound.play_cancel
if @actor.two_swords_style || @item.two_handed
@equip_window.index = 0
@equip_window.cursor_rect.set(0, 0, @equip_window.width - 32, 48)
else
@equip_window.index = 0
end
@equip_window.active = false
@target_window.active = true
@not_update_equip = true
elsif Input.trigger?(Input::C)
determine_target
end
end
#--------------------------------------------------------------------------
# Definição do alvo
# Se não houver efeito, tocar SE de erro.
#--------------------------------------------------------------------------
def determine_target
used = false
if not equip? and @item.for_all?
for target in $game_party.members
target.item_effect(target, @item)
used = true unless target.skipped
end
elsif equip?
if @actor.equippable?(@item) and $game_party.item_number(@item) != 0
Sound.play_equip
@actor.change_equip(@equip_window.index, @item_window.item)
item_window_last_index = @item_window.index
@equip_window.refresh
@item_window.refresh
@item_window.index = item_window_last_index
@equip_status_window.update
@equip_status_window.refresh
else
Sound.play_buzzer
end
else
$game_party.last_target_index = @target_window.index
target = $game_party.members[@target_window.index]
target.item_effect(target, @item)
used = true unless target.skipped
end
if not equip?
if used
use_item_nontarget
else
Sound.play_buzzer
end
end
end
#--------------------------------------------------------------------------
# Uso de item (sem alvo)
#--------------------------------------------------------------------------
def use_item_nontarget
Sound.play_use_item
$game_party.consume_item(@item)
@item_window.draw_item(@item_window.index)
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
elsif @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$scene = Scene_Map.new
end
end
end
Lemuri- Mensagens : 9
Re: Scene ItemPlus
Realmente bem legal esse sistema, o bom dele que ele e bastante customizavel...vlw por diponibilizar
Mihawk-- Mensagens : 65
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos