Então, tô aqui lutando pra terminar outro script, porém me deparei com um obstáculo.
O cursor da janela não se move, parece que a janela travou, mesmo eu colocando o
activate e indicando o index do cursor.
Testei em um projeto novo e escolhi um outro index, ainda assim o erro persiste.
Creio que não seja incompatibilidade.
Segue o script e pra chamá-lo é só colocar drops(9, 1, 0, true) no chamar script.
#==============================================================================
# Cataclisman - Choose Drop
# por King Gerar
#------------------------------------------------------------------------------
# Este script adiciona uma janela em que é possível se escolher os itens que
# deseja pegar, como por exemplo, itens/armas/armaduras que inimigos mortos
# caídos no chão possuem, ou simples baús.
#==============================================================================
# Módulo CTCM002
#------------------------------------------------------------------------------
# - Este módulo serve para você fazer as configurações deste script.
#==============================================================================
module CTCM002
$stored_drops = Array.new(Dir.glob("#{Dir.pwd}/Data/Map*").size.pred)
#-----------------------------------------------------------------------------
# Texto que aparece acima da janela de itens dropados.
#-----------------------------------------------------------------------------
Txt_Drop = "Itens Encontrados"
#-----------------------------------------------------------------------------
# ID do ícone de dinheiro.
#-----------------------------------------------------------------------------
Coin_Icon = 361
Drops = Array.new
Drops[0] = [["item", 1, 1],
["armor", 1, 1],
["weapon", 1, 1],
["gold", 0, 150]]
Drops[1] = [["item", 3, 1],
["armor", 2, 1],
["gold", 0, 200]]
#==============================================================================
# NÃO MODIFIQUE ABAIXO
#==============================================================================
end
#==============================================================================
# SCENES
#==============================================================================
# Scene_ChooseDrop
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de itens dropados.
#==============================================================================
class Scene_ChooseDrop < Scene_Base
#--------------------------------------------------------------------------
# Inicialização do processo
#--------------------------------------------------------------------------
def start
super
create_background
create_drop_window
end
#--------------------------------------------------------------------------
# Criação do plano de fundo
#--------------------------------------------------------------------------
def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
end
#--------------------------------------------------------------------------
# Criação da janela com a lista de itens dropados.
#--------------------------------------------------------------------------
def create_drop_window
$drop_window = Window_Drop.new
$drop_window.set_handler(:ok, method(:on_item_ok))
$drop_window.set_handler(:cancel, method(:return_scene))
$drop_window.select(0)
$drop_window.activate
@upper_window = Window_UpperWindow.new
end
#--------------------------------------------------------------------------
# Escolha do Item.
#--------------------------------------------------------------------------
def on_item_ok
end
end
#==============================================================================
# WINDOWS
#==============================================================================
# Window_Drops
#------------------------------------------------------------------------------
# Esta janela exibe a janela de itens dropados.
#==============================================================================
class Window_Drop < Window_Selectable
include CTCM002
#--------------------------------------------------------------------------
# Inicialização do objeto.
#--------------------------------------------------------------------------
def initialize
super(0, 0, 224, 24)
@map_id = $current_drop[0]
@event_id = $current_drop[1]
@drop_id = $current_drop[2]
@keep = $current_drop[3]
adjust_position
draw_drops
end
#--------------------------------------------------------------------------
# Aquisição do número máximo de itens
#--------------------------------------------------------------------------
def item_max
$stored_drops[$current_drop[0]][$current_drop[1]].size
end
#--------------------------------------------------------------------------
# Posicionamento da janela no centro da tela.
#--------------------------------------------------------------------------
def adjust_position
self.x = (Graphics.width - self.width) / 2
self.height = (line_height * Drops[@drop_id].size) + (standard_padding * 2)
upper_window_height = line_height + (standard_padding * 2)
self.y = ((Graphics.height - (self.height + upper_window_height)) / 2) + upper_window_height
end
#--------------------------------------------------------------------------
# Criação da lista de itens dropados.
#--------------------------------------------------------------------------
def draw_drops
n = 0
while n < item_max do
case $stored_drops[@map_id][@event_id][n][0]
when "item"
icon = $data_items[$stored_drops[@map_id][@event_id][n][1]].icon_index
name = $data_items[$stored_drops[@map_id][@event_id][n][1]].name
when "weapon"
icon = $data_weapons[$stored_drops[@map_id][@event_id][n][1]].icon_index
name = $data_weapons[$stored_drops[@map_id][@event_id][n][1]].name
when "armor"
icon = $data_armors[$stored_drops[@map_id][@event_id][n][1]].icon_index
name = $data_armors[$stored_drops[@map_id][@event_id][n][1]].name
when "gold"
icon = Coin_Icon
name = Vocab::currency_unit
end
quant = $stored_drops[@map_id][@event_id][n][2]
index = n
draw_item(index, icon, name, quant)
n += 1
end
end
#--------------------------------------------------------------------------
# Desenho de um item
#--------------------------------------------------------------------------
def draw_item(index, icon, name, quant)
rect = item_rect(index)
rect.width -= 4
draw_icon(icon, 0, index * line_height)
draw_text(28, index * line_height, 124, line_height, name, 0)
draw_text(156, index * line_height, 10, line_height, "x", 1)
draw_text(170, index * line_height, 24, line_height, quant, 2)
end
end
#==============================================================================
# Window_UpperDropWindow
#------------------------------------------------------------------------------
# Esta janela exibe o nome da Scene no topo da tela.
#==============================================================================
class Window_UpperWindow < Window_Base
include CTCM002
#--------------------------------------------------------------------------
# Inicialização do objeto.
#--------------------------------------------------------------------------
def initialize
super(0, 0, 224, line_height + (standard_padding * 2))
adjust_position
draw_text( 0, 0, contents_width, line_height, Txt_Drop, 1)
end
#--------------------------------------------------------------------------
# Posicionamento da janela no centro da tela.
#--------------------------------------------------------------------------
def adjust_position
self.x = (Graphics.width - self.width) / 2
self.y = (Graphics.height - (self.height + $drop_window.height)) / 2
end
end
#==============================================================================
# GAME
#==============================================================================
# Game_Interpreter
#------------------------------------------------------------------------------
# Um interpretador para executar os comandos de evento. Esta classe é usada
# internamente pelas classes Game_Map, Game_Troop e Game_Event.
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# Apagar todos os drops.
#--------------------------------------------------------------------------
def drops(map_id, event_id, drop_id, keep)
$current_drop = [map_id, event_id, drop_id, keep]
#---------------------------------------------------------------------------
# Se nenhum drop tiver sido criado para o mapa,
# à array de drops.
#---------------------------------------------------------------------------
$stored_drops[map_id] = Array.new($game_temp.totally_event(map_id)) if $stored_drops[map_id] == nil
#---------------------------------------------------------------------------
# Se o id do evento for maior do que a quantidade de eventos no mapa (Isso
# acontece quando se deleta eventos de ID menores), preenche a array até
# ter o tamanho igual ao ID do evento.
#---------------------------------------------------------------------------
$stored_drops[map_id][event_id] = nil if $stored_drops[map_id].size < event_id
#---------------------------------------------------------------------------
# Se ainda não tiver sido definido drop para o evento, então será.
#---------------------------------------------------------------------------
$stored_drops[map_id][event_id] = CTCM002::Drops[drop_id] if $stored_drops[map_id][event_id] == nil
SceneManager.call(Scene_ChooseDrop)
end
end
#==============================================================================
# Game_Temp
#------------------------------------------------------------------------------
# Verifica o total de eventos num mapa. Chame: $game_temp.totally_event(id)
# Caso não especificar o id, dará o total de eventos do jogo inteiro.
#==============================================================================
class Game_Temp
def totally_event(id=nil)
totally = 0
glob = Dir.glob("./Data/Map*").collect! { |i| i.split("/").last.match(/Map(\d+)/).to_s << ".rvdata2" rescue next }.select(&:to_s)
glob.delete_at(glob.size.pred)
if id.nil?
glob.each { |i| totally += load_data(sprintf("./Data/#{i}")).events.size }
else
totally += load_data(sprintf("./Data/Map%03d.rvdata2", id)).events.size rescue 0
end
return totally
end
end