Confira o Videos Épicos #45!
5 Respostas   765 Visualizações
0 Membros e 1 Visitante estão vendo este tópico.
#==============================================================================# Cataclisman - Quest# por King Gerar#------------------------------------------------------------------------------# Este script permite implementar missões ao jogo, com a adição de uma Scene e# manusear as missões.#==============================================================================# Módulo CTCM001#------------------------------------------------------------------------------# - Este módulo serve para você fazer as configurações deste script.#==============================================================================module CTCM001#-------------------------------------------------------------------------------# Escolha o tamanho da fonte.#------------------------------------------------------------------------------- Font_size = 16#-------------------------------------------------------------------------------# Adicionar o comando no menu principal? Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Add_Quests = true#-------------------------------------------------------------------------------# Texto que ficará no menu e no topo da scene.#------------------------------------------------------------------------------- Command = "Quests"#-------------------------------------------------------------------------------# Tipos de missões que podem haver.#------------------------------------------------------------------------------- Tipos = ["Principal", "Opcional"]#-------------------------------------------------------------------------------# Estados que são as situações em que a missão pode estar, sendo eles: "não# descoberta", ou seja, quando ainda você não tem acesso à missão; "em# progresso", que é quando você está cumprindo ela; "completa" que é quando# realiza todos objetivos e; "fracassada" que é quando falha em um ou mais# objetivos.# É imprescindível manter esta ordem, somente substitua as palavras pelas que# preferir.#------------------------------------------------------------------------------- Estados = ["Não descoberta", "Em Progresso", "Completa", "Fracassada"]#-------------------------------------------------------------------------------# Escolha aqui a ordem de exibição das missões. Utilizando os números 1 (não# descobertas), 2 (fracassadas) e 3 (completas), coloque na ordem que preferir.# Por padrão a ordem é 1, 2, 3, ou seja, primeiro serão exibidas as missões# não descobertas, em seguida as fracassadas e por fim as já completadas.#------------------------------------------------------------------------------- Ordem = [1, 2, 3]#-------------------------------------------------------------------------------# Aqui é a parte de criação das missões. Existe uma de exemplo abaixo. Para# criar uma nova é só copiar o exemplo, modificando principalmente o valor# entre os colchetes "[]" na frente da palavra "Quests", este valor corresponde# ao ID da missão e ela será controlada por ele, portanto não podem haver duas# missões com o mesmo ID. Depois, modifique e deixe a quest como quiser.#------------------------------------------------------------------------------- Quests = Array.new #Não modifique a esta linha!#-------------------------------------------------------------------------------# Quests[ID] = ["Nome da Missão", Tipo, ID do Ícone, Estado, Símbolo, Progresso,# "Descrição: Escreva aqui sobre a missão.",# "Quem a lhe deu e a recompensa por exemplo.",# "Podem ser usadas até três linhas para isso.",# "Primeiro objetivo",# "Segundo objetivo",# "Terceiro objetivo",# "Quarto objetivo",# "Quinto objetivo",# ID do item de recompensa, Quantidade,# ID da arma de recompensa, Quantidade,# ID da proteção de recompensa, Quantidade,# Ouro, EXP,# Valor, Valor final, Valor de adição, Texto 1, Texto 2, Objetivo]## Explicações: TIPO = 0 para missões "Principais" ou 1 para "Opcionais".# ESTADO = 0 (não descoberta), 1 (em progresso), 2 (completa) ou# 3 (fracassada).# SÍMBOLO = pode colocar qualquer coisa, desde que venha precedido# por : (dois pontos).# PROGRESSO = é o objetivo atual em que a missão se encontra.# 0 significa que não tem nenhum objetivo ainda,# portanto ela não foi descoberta. Logo que ela é# descoberta/obtida, o progresso para a ter valor 1.#-------------------------------------------------------------------------------# Se não for utilizar a janela auxiliar, não é preciso colocar os dados após a# exp dada como recompensa.#-------------------------------------------------------------------------------# VALOR = O valor inicial usado na janela auxiliar (explica-se# abaixo).# VALOR FINAL = O valor final, ou seja, o que precisa ser alcançado# para o objetivo ser completado.# VALOR DE ADIÇÃO = o valor que se soma ao primeiro gradativamente# a fim de alcançar o valor final.# TEXTO 1 = Primeira linha do texto que será exibido na janela.# TEXTO 2 = Segunda linha do texto que será exibido na janela. # OBJETIVO = número do objetivo da missão em que a janela será# utilizada. Lembrando que é um valor de 1 a 5.#-------------------------------------------------------------------------------# NÃO ESQUEÇA DAS VÍRGULAS, SE NÂO VAI BUGAR è-é#------------------------------------------------------------------------------- Quests[0] = ["O Resgate dos Mineiros", 0, 276, 0, :quest00, 0, "Na entrada da caverna, um mineiro se encontrava", "caído, e disse que seus companheiros estavam", "presos no interior da caverna.", "- Encontrar 5 mineiros.", "- Achar uma saída.", "- Salvar o mineiro restante.", "- Encontrar uma saída alternativa.", "- Achar um meio de abrir o portão.", 1, 3, 1, 1, 1, 1, 0, 250, 0, 5, 1, "Mineiros", "Encontrados", 1] Quests[1] = ["Fuga do Templo", 0, 12, 0, :quest01, 0, "Precisamos sair do templo, mas para isso", "tivemos que passar por um misterioso guarda", "aparentemente nos deixou seguir.", "- Passar pelo corregor e entrar na porta.", "", "", "", "", 0, 0, 0, 0, 0, 0, 500, 100] Quests = $game_quests if $game_quests != nil#-------------------------------------------------------------------------------# Deseja marcar como completa uma missão assim que todos seus objetivos forem# completados? Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Auto_complete = true#-------------------------------------------------------------------------------# Ao completar uma missão, deseja que as recompensas sejam dadas# automaticamente? Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Auto_reward = true#-------------------------------------------------------------------------------# Quanto à experiência dada como recompensa. Gostaria de distribuir a quantidade# de exp entre os membros do grupo? Coloque true(sim) ou false(não). Colocando# false, cada membro do grupo receberá o valor de exp integral.#------------------------------------------------------------------------------- Divide_exp = true#-------------------------------------------------------------------------------# ID dos ícones de ouro e experiência, respectivamente.#------------------------------------------------------------------------------- Gold_Icon = 361 Exp_Icon = 121#-------------------------------------------------------------------------------# COMO MANUSEAR AS MISSÕES?#-------------------------------------------------------------------------------# Para desbloquear uma missão, avançar um objetivo, marcá-la como completada# ou fracassada, você irá utilizar pequenos códigos via comando por eventos# "Chamar Script", os quais seguem abaixo.#-------------------------------------------------------------------------------# Para avançar um objetivo e/ou DESBLOQUEAR uma missão, você utilizará:## advance_quest(id)## Onde "id" é o id da missão, mencionado na explicação de como criar uma# quest. Por exemplo, para avançar um objetivo na Quest[5], você deve por# "advance_quest(5)". Lembrando que, na primeira vez que se usa esse comando# a missão é desbloqueada e é liberado o primeiro objetivo dela.#-------------------------------------------------------------------------------# Para marcar uma missão como COMPLETA, você utilizará:## advance_quest(id)## Onde "id" é o id da missão. Caso estejam faltando objetivos a serem marcados# como completados, eles serão marcados também.#-------------------------------------------------------------------------------# Para marcar uma missão como FRACASSADA, você utilizará:## failed_quest(id)## Onde "id" é o id da missão. Os objetivos não desbloqueados continuarão# ocultos, porém, se nenhum objetivo estiver sido exibido, o primeiro será# revelado.#-------------------------------------------------------------------------------# Supondo que o jogador fracasse em uma missão e a mesma seja marcada como# fracassada, e caso o jogador volte onde pegou a missão, é possível# REABILITAR uma missão que estej marcada como fracassada, utilizando:## reactive_quest(id)## Onde "id" é o id da missão. Os objetivos serão "resetados" e somente o# primeiro será liberado até que os próximos sejam desbloqueados.#-------------------------------------------------------------------------------# Para acrescentar um de valor (o valor acrescentado corresponde ao VALOR DE# ADIÇÃO da missão respectiva), utilize:## add_quest_obj(id)## Onde "id" é o id da missão. Importante ressaltar que este comando só# funcionará se a missão cujo id foi usado neste comando estiver em progresso# e no mesmo objetivo indicado nas configurações da janela auxiliar da própria# quest (ou seja, o último valor das configurações da quest).#-------------------------------------------------------------------------------# Para verificar se uma missão já foi descoberta, utilize:## verify_quest(id)## Onde "id" é o id da missão. Caso a missão já tenha sido descoberta,completada# ou fracassada, irá retornar "true", caso contrário, retornará "false". É ideal# para usar em condições.#-------------------------------------------------------------------------------# JANELA AUXILIAR#-------------------------------------------------------------------------------# A janela auxiliar irá exibir o estado de alguns progressos da missão, como# por exemplo, a quantidade de itens encontrados em uma missão de encontrar# itens, ou o número de poções que faltam entregar em uma missão d entregar# poções. Os dados utilizados por esta janela correspondem à ultima linha de# informações da quest, como explicado acima (na criação da mesma).#-------------------------------------------------------------------------------# Deseja utilizar a janela auxiliar? Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Aux_window = true#-------------------------------------------------------------------------------# Posição da janela auxiliar.# "left_top", "right_top", "left_bottom" ou "right_bottom"#------------------------------------------------------------------------------- Aux_pos = "right_top"#-------------------------------------------------------------------------------# Tempo em frames que a janela mantém uma informação.#------------------------------------------------------------------------------- Aux_time = 300#-------------------------------------------------------------------------------# Opacidade da janela auxiliar. Valor de 0 a 255.#------------------------------------------------------------------------------- Aux_opacity = 255#-------------------------------------------------------------------------------# Completar objetivo ao igualar os valores da janela auxiliar e objetivo# auxiliar? Por exemplo, em uma missão de encontrar 5 pedras, ao encontrar as# 5 pedras, deseja habilitar automaticamente o próximo onjetivo?# Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Aux_next_objective = true#-------------------------------------------------------------------------------# AVISOS DAS MISSÕES#-------------------------------------------------------------------------------# Os avisos das missões, se habilitados, serão exibidos automaticamente quando# um objetivo for concluído, uma missão for completada, fracassada ou# desbloqueada.#-------------------------------------------------------------------------------# Deseja utilizar os avisos das missões? Coloque true(sim) ou false(não).#------------------------------------------------------------------------------- Advice_use = true#-------------------------------------------------------------------------------# Tempo em que o aviso permanece na tela.#------------------------------------------------------------------------------- Advice_time = 300#-------------------------------------------------------------------------------# Ao invés de window, uma imagem pode ser usada como fundo para exibição dos# avisos, para isto a imagem deve estar na pasta "Graphics\Pictures" do projeto.# É importante que a imagem tenha dimensões de 120 x 96 pixels.#------------------------------------------------------------------------------- Advice_img = "Quest - Advice"#-------------------------------------------------------------------------------# Textos para objetivo concluído, missão descoberta, completada e fracassada,# respectivamente. Cada linha deve estar entre aspas e separadas por vírgula# como nos padrões. É um máximo de duas linhas.#------------------------------------------------------------------------------- Txt_obj_ok = ["Objetivo", "Concluído"] Txt_learn = ["Nova Missão", "Descoberta"] Txt_ok = ["Missão", "Completada"] Txt_fail = ["Missão", "Fracassada"]#-------------------------------------------------------------------------------# SE para serem executados na mesma ordem acima. Escreva o nome do SE utilizado# entre aspas, como nos padrões.#------------------------------------------------------------------------------- SE_obj_ok = "Chime2" SE_learn = "Save" SE_ok = "Skill3" SE_fail = "Down4"#==============================================================================# NÃO MODIFIQUE ABAIXO#==============================================================================end#==============================================================================# SCENES#==============================================================================# Scene_Quests#------------------------------------------------------------------------------# Esta classe executa o processamento da tela de missões.#==============================================================================class Scene_Quests < Scene_Base #-------------------------------------------------------------------------- # Inicialização do processo #-------------------------------------------------------------------------- def start super create_upper_window create_quests_window create_descript_window end #-------------------------------------------------------------------------- # Criação da janela superior com o nome da Scene. #-------------------------------------------------------------------------- def create_upper_window @upper_window = Window_UpperWindow.new @upper_window.write_total_quests end #-------------------------------------------------------------------------- # Criação da janela com a lista de missões. #-------------------------------------------------------------------------- def create_quests_window @quests_window = Window_QuestSelect.new(0, @upper_window.height) @quests_window.height = Graphics.height - @upper_window.height @quests_window.set_handler(:ok, method(:on_quests_ok)) @quests_window.set_handler(:cancel, method(:return_scene)) @quests_window.make_icon_command_list end #-------------------------------------------------------------------------- # Criação da janela com as informações da missão. #-------------------------------------------------------------------------- def create_descript_window width = Graphics.width - @quests_window.width height = Graphics.height - @upper_window.height @descript_window = Window_QuestDescript.new(@quests_window.width, @upper_window.height, width, height) end #-------------------------------------------------------------------------- # Quest [Confirmação] #-------------------------------------------------------------------------- def on_quests_ok $selected_quest = @quests_window.command_name(@quests_window.index) @descript_window.data_quest($selected_quest) @quests_window.activate endend#==============================================================================# Scene_Menu#------------------------------------------------------------------------------# Esta classe executa o processamento da tela de menu.#==============================================================================class Scene_Menu < Scene_MenuBase #-------------------------------------------------------------------------- # Criação da janela de comando #-------------------------------------------------------------------------- alias create_menu_command_window create_command_window def create_command_window create_menu_command_window @command_window.set_handler(:quests, method(:command_ctcmquests)) if CTCM001::Add_Quests == true end #-------------------------------------------------------------------------- # Comando [Missões] #-------------------------------------------------------------------------- def command_ctcmquests SceneManager.call(Scene_Quests) endend#==============================================================================# Scene_Map#------------------------------------------------------------------------------# Esta classe executa o processamento da tela de mapa.#==============================================================================class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # Inicialização do processo #-------------------------------------------------------------------------- alias aux_quest_start start def start aux_quest_start $aux_quest_window = Window_AuxQuest.new if CTCM001::Aux_window == true $adv_quest_window = Window_AdviceQuest.new if CTCM001::Advice_use == true end #-------------------------------------------------------------------------- # Atualização da tela #-------------------------------------------------------------------------- alias aux_quest_update update def update aux_quest_update $aux_quest_window.refresh if CTCM001::Aux_window == true $adv_quest_window.refresh if CTCM001::Advice_use == true end #-------------------------------------------------------------------------- # Finalização do processo #-------------------------------------------------------------------------- alias aux_quest_terminate terminate def terminate aux_quest_terminate $aux_quest_window.dispose if CTCM001::Aux_window == true $adv_quest_window.dispose if CTCM001::Advice_use == true endend#==============================================================================# WINDOWS#==============================================================================# Window_Base#------------------------------------------------------------------------------# Esta é a superclasse para todas as janelas no jogo.#==============================================================================class Window_Base < Window #-------------------------------------------------------------------------- # Desenho de uma linha horzontal #-------------------------------------------------------------------------- def draw_hr(y) contents.fill_rect(0, y, contents_width, 1, normal_color) endend#==============================================================================# Window_MenuCommand#------------------------------------------------------------------------------# Esta janela exibe os comandos do menu.#==============================================================================class Window_MenuCommand < Window_Command #-------------------------------------------------------------------------- # Adição de comandos próprios #-------------------------------------------------------------------------- alias add_ctcm_commands add_original_commands def add_original_commands add_ctcm_commands add_command(CTCM001::Command, :quests, quests_verify) if CTCM001::Add_Quests == true end #-------------------------------------------------------------------------- # Verificar de existem missões descorbertas. #-------------------------------------------------------------------------- def quests_verify n = 0 while n < CTCM001::Quests.size do if CTCM001::Quests[n][3] == 0 n += 1 else return true end end return false endend#==============================================================================# Window_UpperWindow#------------------------------------------------------------------------------# Esta janela exibe o nome da Scene no topo da tela.#==============================================================================class Window_UpperWindow < Window_Base #-------------------------------------------------------------------------- # Inicialização do objeto. #-------------------------------------------------------------------------- def initialize super(0, 0, Graphics.width, (standard_padding * 2) + line_height) self.contents.font.size = CTCM001::Font_size + 2 draw_text( 0, 0, contents_width, line_height, CTCM001::Command, 1) end #-------------------------------------------------------------------------- # Exibição do número de missões completas/descobertas + fracassadas. #-------------------------------------------------------------------------- def write_total_quests @completeds = Array.new if @completeds == nil @total = Array.new if @total == nil n = 0 while n < CTCM001::Quests.size do @completeds.push(n) if CTCM001::Quests[n][3] == 2 @total.push(n) if CTCM001::Quests[n][3] > 0 n += 1 end self.contents.font.size = CTCM001::Font_size draw_text( contents_width - 64, 0, 32, line_height, @completeds.size.to_s, 2) draw_text( contents_width - 32, 0, 32, line_height, "/ " + @total.size.to_s, 0) endend#==============================================================================# Window_QuestSelect#------------------------------------------------------------------------------# Esta janela exibe as missões disponíveis dentro da categoria selecionada.#==============================================================================class Window_QuestSelect < Window_Command include CTCM001 #-------------------------------------------------------------------------- # Inicialização do objeto. #-------------------------------------------------------------------------- def initialize(x, y) super(x, y) end #-------------------------------------------------------------------------- # Inicialização da posição do comando de seleção (método da classe). #-------------------------------------------------------------------------- def self.init_command_position return 0 end #-------------------------------------------------------------------------- # Aquisição da largura da janela. #-------------------------------------------------------------------------- def window_width return 208 end #-------------------------------------------------------------------------- # Aquisição do número de linhas exibidas. #-------------------------------------------------------------------------- def visible_line_number return 10 end #-------------------------------------------------------------------------- # Criação da lista de comandos. #-------------------------------------------------------------------------- def make_command_list @discovereds = Array.new if @discovereds == nil @completeds = Array.new if @completeds == nil @faileds = Array.new if @faileds == nil #-------------------------------------------------------------------------- # Criando as arrays com cada tipo de missão. #-------------------------------------------------------------------------- n = 0 while n < Quests.size do @discovereds.push(n) if Quests[n][3] == 1 && @discovereds.include?(n) == false @completeds.push(n) if Quests[n][3] == 2 && @completeds.include?(n) == false @faileds.push(n) if Quests[n][3] == 3 && @faileds.include?(n) == false n += 1 end #-------------------------------------------------------------------------- # Colocando na ordem selecionada. #-------------------------------------------------------------------------- a = Ordem.index(1) b = Ordem.index(2) c = Ordem.index(3) order = Array.new order[a] = @discovereds order[b] = @faileds order[c] = @completeds @ordered_quests = order[0] + order[1] + order[2] #-------------------------------------------------------------------------- # Criando os comandos. #-------------------------------------------------------------------------- n = 0 while n < @ordered_quests.size do add_command(Quests[@ordered_quests[n]][0], Quests[@ordered_quests[n]][4]) n += 1 end end #-------------------------------------------------------------------------- # Criação dos ícones da lista de comandos. #-------------------------------------------------------------------------- def make_icon_command_list n = 0 while n < @ordered_quests.size do draw_icon(Quests[@ordered_quests[n]][2], 0, n * line_height) n += 1 end end #-------------------------------------------------------------------------- # Desenho do item # index : índice do item #-------------------------------------------------------------------------- def draw_item(index) change_color(normal_color, command_enabled?(index)) draw_text(item_rect_for_text(index), command_name(index), alignment) end #-------------------------------------------------------------------------- # Aquisição do retangulo para desenhar o item (para texto) # index : índice do item #-------------------------------------------------------------------------- def item_rect_for_text(index) rect = item_rect(index) rect.x += 28 rect.width -= 8 rect endend#==============================================================================# Window_QuestDescript#------------------------------------------------------------------------------# Esta janela exibe as informações da missão selecionada.#==============================================================================class Window_QuestDescript < Window_Base include CTCM001 #-------------------------------------------------------------------------- # Inicialização do objeto. #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) end #-------------------------------------------------------------------------- # Dados da missão selecionada. #-------------------------------------------------------------------------- def data_quest(index) $all_quest_names = Array.new if $all_quest_names == nil n = 0 while n < Quests.size do $all_quest_names.push(Quests[n][0]) n += 1 end contents.clear change_color(normal_color) quest = $all_quest_names.index(index) # "quest" = ID da missão selecionada. #------------------------------------------------------------------------ # Cabeçalho. #------------------------------------------------------------------------ draw_icon(Quests[quest][2], 0, 0) contents.font.size = Font_size + 4 draw_text(0, 0, contents_width, line_height, Quests[quest][0], 1) contents.font.size = Font_size - 1 draw_text(0, line_height, contents_width, line_height, Tipos[Quests[quest][1]], 1) draw_hr(line_height * 2) #------------------------------------------------------------------------ # Descrição. #------------------------------------------------------------------------ contents.font.size = Font_size draw_text(0, (line_height * 3), contents_width, line_height, Quests[quest][6], 0) draw_text(0, (line_height * 4), contents_width, line_height, Quests[quest][7], 0) draw_text(0, (line_height * 5), contents_width, line_height, Quests[quest][8], 0) #------------------------------------------------------------------------ # Objetivos. #------------------------------------------------------------------------ n = Quests[quest][5] while n > 0 do if n == Quests[quest][5] && Quests[quest][3] == (1 || 2) change_color(normal_color) else change_color(Color.new(255, 255, 255, 150)) end text = Quests[quest][8 + n] if Quests[quest].size > 22 && Quests[quest][5] == Quests[quest][27] text += (" (" + Quests[quest][22].to_s + "/" + Quests[quest][23].to_s + ")") end draw_text(0, (line_height * (n + 5)), contents_width, line_height, text, 0) n -= 1 end change_color(normal_color) #------------------------------------------------------------------------ # Recompensas. #------------------------------------------------------------------------ draw_hr(line_height * 11) draw_text(0, (line_height * 11), contents_width, line_height, "Recompensas", 1) contents.font.size = Font_size - 3 if Quests[quest][15] > 0 draw_icon($data_items[Quests[quest][14]].icon_index, 0, line_height * 12) draw_text(24, (line_height * 12), contents_width, line_height, "x" + Quests[quest][15].to_s, 0) end if Quests[quest][17] > 0 draw_icon($data_weapons[Quests[quest][16]].icon_index, 48, line_height * 12) draw_text(72, (line_height * 12), contents_width, line_height, "x" + Quests[quest][17].to_s, 0) end if Quests[quest][19] > 0 draw_icon($data_armors[Quests[quest][18]].icon_index, 96, line_height * 12) draw_text(120, (line_height * 12), contents_width, line_height, "x" + Quests[quest][19].to_s, 0) end contents.font.size = Font_size - 1 if Quests[quest][20] > 0 draw_icon(Gold_Icon, contents_width - 148, line_height * 12) draw_text(contents_width - 124, (line_height * 12), 50, line_height, Quests[quest][20].to_s + " G", 0) end if Quests[quest][21] > 0 draw_icon(Exp_Icon, contents_width - 64, line_height * 12) draw_text(contents_width - 40, (line_height * 12), 40, line_height, Quests[quest][21].to_s, 0) end #------------------------------------------------------------------------ # Estado. #------------------------------------------------------------------------ contents.font.size = Font_size + 2 case Quests[quest][3] when 2 change_color(Color.new(190, 255, 50, 255)) when 3 change_color(Color.new(255, 100, 75, 255)) end draw_text(0, (line_height * 13) + 8, contents_width, line_height, Estados[Quests[quest][3]].to_s, 1) endend#==============================================================================# Window_AuxQuest#------------------------------------------------------------------------------# Esta janela exibe status de algum(ns) objetivo(s) das missões ativas.#==============================================================================class Window_AuxQuest < Window_Base include CTCM001 #-------------------------------------------------------------------------- # Inicialização do objeto. #-------------------------------------------------------------------------- def initialize super(0, 0, 120, 96) set_x set_y opacity = 0 contents_opacity = 0 self.back_opacity = Aux_opacity @current_quest = 0 @timer = Aux_time - 1 refresh end #-------------------------------------------------------------------------- # Posição x #-------------------------------------------------------------------------- def set_x case Aux_pos when "left_top" || "left_bottom" self.x = 0 when "right_top" || "right_bottom" self.x = Graphics.width - 120 end end #-------------------------------------------------------------------------- # Posição y #-------------------------------------------------------------------------- def set_y case Aux_pos when "left_top" || "right_top" self.y = 0 when "left_bottom" || "right_bottom" self.y = Graphics.height - 96 end end #-------------------------------------------------------------------------- # Atualização das informações. #-------------------------------------------------------------------------- def refresh @infos_quest = [nil] n = 0 while n < Quests.size do if Quests[n].size > 22 && Quests[n][3] == 1 @infos_quest.push(n) if Quests[n][5] == Quests[n][27] end n += 1 end @infos_quest.delete(nil) @timer += 1 if @infos_quest[0] != nil self.opacity = 255 self.contents_opacity = 255 if @timer >= Aux_time @current_quest += 1 @current_quest = 0 if @current_quest >= @infos_quest.size @timer = 0 draw_infos end else contents.clear self.opacity = 0 self.contents_opacity = 0 end end #-------------------------------------------------------------------------- # Escrever s informações na janela. #-------------------------------------------------------------------------- def draw_infos contents.clear draw_text(0, 0, contents_width, line_height, Quests[@infos_quest[@current_quest]][25], 1) draw_text(0, line_height, contents_width, line_height, Quests[@infos_quest[@current_quest]][26], 1) text = Quests[@infos_quest[@current_quest]][22].to_s + " / " + Quests[@infos_quest[@current_quest]][23].to_s draw_text(0, line_height * 2, contents_width, line_height, text, 1) endend#==============================================================================# Window_AdviceQuest#------------------------------------------------------------------------------# Esta janela exibe informações quando uma missão é manuseada.#==============================================================================class Window_AdviceQuest < Window_Base include CTCM001 #-------------------------------------------------------------------------- # Inicialização do objeto. #-------------------------------------------------------------------------- def initialize super(Graphics.width - 120, -96, 120, 96) if Advice_img != "" @layout = Sprite.new @layout.bitmap = Cache.picture(Advice_img) @layout.x = self.x @layout.y = self.y @layout.z = $aux_quest_window.z if $aux_quest_window != nil self.opacity = 0 self.z = @layout.z + 1 end @timer = 0 end #-------------------------------------------------------------------------- # Criação e atualização do texto. #-------------------------------------------------------------------------- def quest_advice(text, icon) text = text icon = icon contents.clear draw_text(0, 0, contents_width, line_height, text[0], 1) draw_text(0, line_height, contents_width, line_height, text[1], 1) draw_icon(icon, (contents_width - 24) / 2, line_height * 2) @adviced = false @timer = 0 end #-------------------------------------------------------------------------- # Atualização das informações. #-------------------------------------------------------------------------- def refresh if @adviced == false if self.y < -48 self.y += 10 elsif self.y >= -48 && self.y < -24 self.y += 5 elsif self.y >= -24 && self.y < -12 self.y += 3 elsif self.y >= -12 && self.y < 0 self.y += 1 elsif self.y == 0 @adviced = true end @layout.y = self.y $aux_quest_window.y = self.y + 96 if $aux_quest_window != nil else if @timer < 300 @timer += 1 else if self.y >= -12 self.y -= 1 elsif self.y < -12 && self.y >= -24 self.y -= 3 elsif self.y < -24 && self.y >= -48 self.y -= 5 elsif self.y < -48 && self.y > -96 self.y -= 10 elsif self.y <= -96 self.y = -96 @adviced = nil @timer = 0 end @layout.y = self.y $aux_quest_window.y = self.y + 96 if $aux_quest_window != nil end end endend#==============================================================================# 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 include CTCM001 #-------------------------------------------------------------------------- # Avançar um objetivo na missão. #-------------------------------------------------------------------------- def advance_quest(id) if Quests[id][3] == 0 Quests[id][3] = 1 if Advice_use == true RPG::SE.new(SE_learn, 60, 100).play $adv_quest_window.quest_advice(Txt_learn, Quests[id][2]) end end if Quests[id][9 + Quests[id][5]] != "" && Quests[id][9 + Quests[id][5]].is_a?(String) Quests[id][5] += 1 if Advice_use == true && Quests[id][5] > 1 RPG::SE.new(SE_obj_ok, 60, 100).play $adv_quest_window.quest_advice(Txt_obj_ok, Quests[id][2]) end elsif Auto_complete == true complete_quest(id) end end #-------------------------------------------------------------------------- # Marcar uma missão como completa. #-------------------------------------------------------------------------- def complete_quest(id) Quests[id][3] = 2 if Advice_use == true RPG::SE.new(SE_ok, 60, 100).play $adv_quest_window.quest_advice(Txt_ok, Quests[id][2]) end n = Quests[id][5] while Quests[id][9 + n] != "" && n < 5 Quests[id][5] += 1 n += 1 end give_rewards_quest(id) if Auto_reward == true end #-------------------------------------------------------------------------- # Marcar uma missão como fracassada. #-------------------------------------------------------------------------- def failed_quest(id) Quests[id][3] = 3 Quests[id][5] = 1 if Quests[id][5] == 0 if Advice_use == true RPG::SE.new(SE_fail, 60, 100).play $adv_quest_window.quest_advice(Txt_fail, Quests[id][2]) end end #-------------------------------------------------------------------------- # Reabilitar uma missão que foi fracassada. #-------------------------------------------------------------------------- def reactive_quest(id) if Quests[id][3] == 3 Quests[id][3] = 1 Quests[id][5] = 1 if Advice_use == true RPG::SE.new(SE_learn, 60, 100).play $adv_quest_window.quest_advice(Txt_learn, Quests[id][2]) end else return end end #-------------------------------------------------------------------------- # Acrescentar um de valor na janela auxiliar de missões. #-------------------------------------------------------------------------- def add_quest_obj(id) return if Quests[id][3] == 0 Quests[id][22] += Quests[id][24] if Quests[id][22] < Quests[id][23] && Quests[id][5] == Quests[id][27] advance_quest(id) if Aux_next_objective == true && Quests[id][22] == Quests[id][23] $aux_quest_window.draw_infos end #-------------------------------------------------------------------------- # Distribuir as recompensas se esta opção estiver habilitada. #-------------------------------------------------------------------------- def give_rewards_quest(id) $game_party.gain_item($data_items[Quests[id][14]], Quests[id][15]) $game_party.gain_item($data_weapons[Quests[id][16]], Quests[id][17]) $game_party.gain_item($data_armors[Quests[id][18]], Quests[id][19]) $game_party.gain_gold(Quests[id][20]) if Divide_exp == true each_exp = (Quests[id][21] / $game_party.members.size) n = 0 while n < $game_party.members.size do $game_party.members[n].gain_exp(each_exp) n += 1 end else n = 0 while n < $game_party.members.size do $game_party.members[n].gain_exp(Quests[id][21]) n += 1 end $game_party.members[0].gain_exp(Quests[id][21]) end end #-------------------------------------------------------------------------- # Distribuir as recompensas se esta opção estiver habilitada. #-------------------------------------------------------------------------- def verify_quest(id) if Quests[id][3] != 0 return true else return false end endend#==============================================================================# 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.#==============================================================================module DataManager class << self alias make_save_quest_contents make_save_contents alias extract_save_quest_contents extract_save_contents alias save_game_with_quests_without_rescue save_game_without_rescue end def self.make_save_contents make_save_quest_contents contents = {} if !contents contents[:quests] = {} $game_quests = CTCM001::Quests contents[:quests] = $game_quests contents end def self.extract_save_contents(contents) extract_save_quest_contents(contents) $game_quests = contents[:quests] endend
#==============================================================================# ** Game_Timer#------------------------------------------------------------------------------# Esta classe gerencia o cronômetro.# A instância desta classe é referenciada por $game_timer.#==============================================================================class Game_Timerattr_accessor :array_geraralias :gerar_initialize :initialize #-------------------------------------------------------------------------- # * Inicialização do objeto #-------------------------------------------------------------------------- def initialize @array_gerar = Array.new gerar_initialize endend
#==============================================================================# Game_Timer#==============================================================================class Game_Timer attr_accessor :ctcm_quests #-------------------------------------------------------------------------- # Arquivamento das missões. #-------------------------------------------------------------------------- def store_ctcm_quests @quests = CTCM001::Quests end #-------------------------------------------------------------------------- # Arquivamento das missões. #-------------------------------------------------------------------------- def restore_ctcm_quests CTCM001::Quests = @quests if @quests != nil endend#==============================================================================# Scene_Load#==============================================================================class Scene_Load < Scene_File alias on_quest_load_success on_load_success def on_load_success $game_timer.restore_ctcm_quests on_quest_load_success endend#==============================================================================# Scene_Save#==============================================================================class Scene_Save < Scene_File alias on_quest_save_success on_save_success def on_save_success $game_timer.store_ctcm_quests on_quest_save_success endend
module CTCM001 Quests = [] # Defina as quests normalmente... @@progress = {} # Aqui você define o progresso, veja que isto é uma variável, pois o progresso vai mudar. # Aquisição do progresso da missão def self.progress @@progress[id] end def self.progress=(p) @@progress = p end # Outras constantesendmodule DataManager class << self alias makesavecontesnts make_save_contents alias extractsavecontents extract_save_contents end def self.make_save_contents contents = makesavecontents contents[:quests] = CTCM001.progress contents end def self.extract_save_contents(contents) extractsavecontents(contents) CTCM001.progress = contents[:quests] endend