Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # 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
- #-----------------------------------------------------------------------------
- # Texto que aparece acima da janela de itens dropados.
- #-----------------------------------------------------------------------------
- Txt_Drop = "Itens Encontrados"
- #-----------------------------------------------------------------------------
- # Textos para a escolha dos itens a ser pegos.
- #-----------------------------------------------------------------------------
- Txt_Take = "Pegar um" # Texto para pegar somente um do item.
- Txt_TakeAll = "Pegar tudo" # Texto para pegar toda quantidade do item.
- Txt_Cancel = "Retornar" # Texto para retornar à escolha do item.
- #-----------------------------------------------------------------------------
- # ID do ícone de dinheiro.
- #-----------------------------------------------------------------------------
- Coin_Icon = 361
- #-----------------------------------------------------------------------------
- # Aqui é criada a array que guarda todos os drops do jogo.
- #-----------------------------------------------------------------------------
- Drops = Array.new #Não modifique a esta linha!
- #-----------------------------------------------------------------------------
- # Abaixo será o lugar onde você vai criar os drops para os eventos de seu
- # projeto. Os drops seguem a seguinte estrutura de criação:
- #
- # Drops[ID] = [["tipo do item", ID do item, quantidade],
- # ["tipo do item", ID do item, quantidade],
- # ["tipo do item", ID do item, quantidade]]
- #
- # ID = É o ID do drop, ou seja, o índice. Você vai usar este valor para
- # indicar qual dos drops que criou vai pertencer ao evento que quer.
- # "tipo do item" = Aqui você vai escrever "item", se for um item. "weapon", se
- # for uma arma, "armor", se for uma armadura ou "gold", se
- # for dinheiro.
- # ID do item = É o ID em que o item está na aba que escolheu. Por exemplo: se
- # você escolheu este para ser uma poção de vida, você vai colocar
- # nesse espaço o ID da poção de vida que conta no banco de dados.
- # Caso o item seja dinheiro, coloque 0.
- # quantidade = Aqui você escolhe a quantidade do item que vai estar no drop.
- # Por exemplo: se quer deixar no drop 5 poções, coloque 5 nesse
- # espaço.
- #
- # - Um ponto importante: podem reparar que a primeira linha da estrutura do
- # drop estão dois colchetes juntos "[[", e no fim a mesma coisa, porém
- # opostos. Isso deve ser mantido.
- # - Outra observação é que, ao fim de cada linha da estrutura (exceto a
- # última), é necessário colocar vírgula.
- # - O valor do ID dos drops deve ser colocado em ordem crescente. Como pode
- # ver, o exemplo começa em 0 e o seguinte é 1.
- #-----------------------------------------------------------------------------
- Drops[0] = [["item", 1, 3],
- ["armor", 1, 1],
- ["weapon", 1, 1],
- ["gold", 0, 10]]
- Drops[1] = [["item", 3, 2],
- ["armor", 2, 1],
- ["gold", 0, 200]]
- #-----------------------------------------------------------------------------
- # COMO COLOCAR O DROP NO EVENTO?
- #-----------------------------------------------------------------------------
- # Cada evento no jogo pode ter somente um drop, indepedente do número de
- # páginas que o evento possuir.
- # Para adicionar um drop à um evento, é só colocar o seguinte código pelo
- # comando "Chamar Script":
- #
- # drops(ID do mapa, ID do evento, ID do drop)
- #
- # ID do mapa = ID do mapa em que o evento escolhido está.
- # ID do evento = ID do evento escolhido.
- # ID do drop = ID do drop escolhido, que você pode conferir acima.
- #-----------------------------------------------------------------------------
- #==============================================================================
- # NÃO MODIFIQUE ABAIXO
- #==============================================================================
- $stored_drops = Array.new(Dir.glob("#{Dir.pwd}/Data/Map*").size.pred)
- 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
- @map_id = $current_drop[0]
- @event_id = $current_drop[1]
- @drop_id = $current_drop[2]
- 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(:choose_drop))
- @drop_window.set_handler(:cancel, method(:return_scene))
- @drop_window.select(0)
- @drop_window.activate
- @upper_window = Window_UpperWindow.new(@drop_window.height)
- end
- #--------------------------------------------------------------------------
- # Escolha do Item.
- #--------------------------------------------------------------------------
- def choose_drop
- if $stored_drops[@map_id][@event_id][@drop_window.index][2] > 9
- @take_window = Window_TakeDrop.new(@drop_window.x + (@drop_window.width / 2), @drop_window.y + (@drop_window.height / 2))
- @take_window.set_handler(:take, method(:take))
- @take_window.set_handler(:take_all, method(:take_all))
- @take_window.set_handler(:cancel, method(:dont_take))
- @take_window.select(0)
- @take_window.activate
- else
- case $stored_drops[@map_id][@event_id][@drop_window.index][0]
- when "item"
- $game_party.gain_item($data_items[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "weapon"
- $game_party.gain_item($data_weapons[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "armor"
- $game_party.gain_item($data_armors[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "gold"
- $game_party.gold += 1
- end
- $stored_drops[@map_id][@event_id][@drop_window.index][2] -= 1
- if $stored_drops[@map_id][@event_id][@drop_window.index][2] > 0
- @drop_window.refresh
- @drop_window.activate
- else
- @drop_window.refresh
- if @drop_window.item_max > 0
- if @drop_window.index >= @drop_window.item_max
- @drop_window.select(@drop_window.item_max - 1)
- end
- @drop_window.activate
- else
- SceneManager.return
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # Comando [Pegar um]
- #--------------------------------------------------------------------------
- def take
- case $stored_drops[@map_id][@event_id][@drop_window.index][0]
- when "item"
- $game_party.gain_item($data_items[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "weapon"
- $game_party.gain_item($data_weapons[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "armor"
- $game_party.gain_item($data_armors[$stored_drops[@map_id][@event_id][@drop_window.index][1]], 1)
- when "gold"
- $game_party.gain_gold(1)
- end
- $stored_drops[@map_id][@event_id][@drop_window.index][2] -= 1
- @drop_window.refresh
- if $stored_drops[@map_id][@event_id][@drop_window.index] != nil
- @take_window.activate
- else
- if @drop_window.item_max > 0
- @take_window.close
- @drop_window.select(@drop_window.index - 1)
- @drop_window.activate
- else
- SceneManager.return
- end
- end
- end
- #--------------------------------------------------------------------------
- # Comando [Pegar tudo]
- #--------------------------------------------------------------------------
- def take_all
- case $stored_drops[@map_id][@event_id][@drop_window.index][0]
- when "item"
- $game_party.gain_item($data_items[$stored_drops[@map_id][@event_id][@drop_window.index][1]], $stored_drops[@map_id][@event_id][@drop_window.index][2])
- when "weapon"
- $game_party.gain_item($data_weapons[$stored_drops[@map_id][@event_id][@drop_window.index][1]], $stored_drops[@map_id][@event_id][@drop_window.index][2])
- when "armor"
- $game_party.gain_item($data_armors[$stored_drops[@map_id][@event_id][@drop_window.index][1]], $stored_drops[@map_id][@event_id][@drop_window.index][2])
- when "gold"
- $game_party.gain_gold($stored_drops[@map_id][@event_id][@drop_window.index][2])
- end
- $stored_drops[@map_id][@event_id][@drop_window.index][2] -= $stored_drops[@map_id][@event_id][@drop_window.index][2]
- @drop_window.refresh
- @take_window.close
- if @drop_window.item_max > 0
- if @drop_window.index >= @drop_window.item_max
- @drop_window.select(@drop_window.item_max - 1)
- end
- @drop_window.activate
- else
- SceneManager.return
- end
- end
- #--------------------------------------------------------------------------
- # Comando [Retornar]
- #--------------------------------------------------------------------------
- def dont_take
- @take_window.close
- @drop_window.select(@drop_window.index)
- @drop_window.activate
- 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]
- 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 * $stored_drops[@map_id][@event_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
- #---------------------------------------------------------------------------
- # Atualização da janela. Se a quantidade de um item for maior que 1, atualiza
- # para o valor restante, se for igual a 1, retira o item da lista de drops.
- #---------------------------------------------------------------------------
- def refresh
- contents.clear
- #-------------------------------------------------------------------------
- # Verificar se algum dos drops possui quantidade igual a zero.
- #-------------------------------------------------------------------------
- n = 0
- while n < item_max do
- $stored_drops[@map_id][@event_id][n] = nil if $stored_drops[@map_id][@event_id][n][2] <= 0
- $stored_drops[@map_id][@event_id].compact!
- n += 1
- end
- draw_drops
- 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(drop_window_height)
- super(0, 0, 224, line_height + (standard_padding * 2))
- @drop_window_height = drop_window_height
- 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
- #==============================================================================
- # Window_TakeDrop
- #------------------------------------------------------------------------------
- # Esta jenala é exibida caso a quantidade de um item dropado seja maior ou
- # igual a 10. Por ela você pode escolher quantos pegar.
- #==============================================================================
- class Window_TakeDrop < Window_Command
- include CTCM002
- #--------------------------------------------------------------------------
- # Inicialização do objeto
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y)
- end
- #--------------------------------------------------------------------------
- # Aquisição da largura da janela
- #--------------------------------------------------------------------------
- def window_width
- return 160
- end
- #--------------------------------------------------------------------------
- # * Aquisição do número de linhas exibidas
- #--------------------------------------------------------------------------
- def visible_line_number
- item_max
- end
- #--------------------------------------------------------------------------
- # Criação da lista de comandos
- #--------------------------------------------------------------------------
- def make_command_list
- add_command(Txt_Take, :take)
- add_command(Txt_TakeAll, :take_all)
- add_command(Txt_Cancel, :cancel)
- 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)
- $current_drop = [map_id, event_id, drop_id]
- #---------------------------------------------------------------------------
- # 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á. Se já
- # tiver sido criado e o drop estiver vazio (já foram pegos todos os itens)
- # a tela de escolha de drop não é aberta.
- #---------------------------------------------------------------------------
- if $stored_drops[map_id][event_id] == nil
- $stored_drops[map_id][event_id] = CTCM002::Drops[drop_id]
- SceneManager.call(Scene_ChooseDrop)
- elsif $stored_drops[map_id][event_id] != []
- SceneManager.call(Scene_ChooseDrop)
- end
- 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
- #==============================================================================
- # DATA
- #==============================================================================
- # DataManager
- #------------------------------------------------------------------------------
- # Este módulo gerencia o jogo e objetos do banco de dados utilizados no jogo.
- # Quase todas as variáveis globais são inicializadas no módulo.
- #==============================================================================
- class << DataManager
- alias create_game_drops_objects create_game_objects
- def create_game_objects(*a, &b)
- create_game_drops_objects(*a, &b)
- $stored_drops = CTCM002::Drops.clone
- end
- alias make_save_drops_contents make_save_contents
- def make_save_contents(*a, &b)
- contents = make_save_drops_contents(*a, &b)
- contents[:stored_drops] = $stored_drops
- contents
- end
- alias extract_save_drops_contents extract_save_contents
- def extract_save_contents(contents)
- extract_save_drops_contents(contents)
- $stored_drops = contents[:stored_drops]
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement