Advertisement
KingGerar

Cataclisman - Quest

Apr 30th, 2015
1,383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 45.19 KB | None | 0 0
  1. #==============================================================================
  2. # Cataclisman - Quest
  3. # por King Gerar
  4. #------------------------------------------------------------------------------
  5. # Este script permite implementar missões ao jogo, com a adição de uma Scene e
  6. # manusear as missões.
  7. #==============================================================================
  8. # Módulo CTCM001
  9. #------------------------------------------------------------------------------
  10. # - Este módulo serve para você fazer as configurações deste script.
  11. #==============================================================================
  12. module CTCM001
  13. #-------------------------------------------------------------------------------
  14. # Escolha o tamanho da fonte.
  15. #-------------------------------------------------------------------------------
  16.   Font_size = 16
  17. #-------------------------------------------------------------------------------
  18. # Adicionar o comando no menu principal? Coloque true(sim) ou false(não).
  19. #-------------------------------------------------------------------------------
  20.   Add_Quests = true
  21. #-------------------------------------------------------------------------------
  22. # Texto que ficará no menu e no topo da scene.
  23. #-------------------------------------------------------------------------------
  24.   Command = "Quests"
  25. #-------------------------------------------------------------------------------
  26. # Tipos de missões que podem haver.
  27. #-------------------------------------------------------------------------------
  28.   Tipos = ["Principal", "Opcional"]
  29. #-------------------------------------------------------------------------------
  30. # Estados que são as situações em que a missão pode estar, sendo eles: "não
  31. # descoberta", ou seja, quando ainda você não tem acesso à missão; "em
  32. # progresso", que é quando você está cumprindo ela; "completa" que é quando
  33. # realiza todos objetivos e; "fracassada" que é quando falha em um ou mais
  34. # objetivos.
  35. # É imprescindível manter esta ordem, somente substitua as palavras pelas que
  36. # preferir.
  37. #-------------------------------------------------------------------------------
  38.   Estados = ["Não descoberta", "Em Progresso", "Completa", "Fracassada"]
  39. #-------------------------------------------------------------------------------
  40. # Escolha aqui a ordem de exibição das missões. Utilizando os números 1 (não
  41. # descobertas), 2 (fracassadas) e 3 (completas), coloque na ordem que preferir.
  42. # Por padrão a ordem é 1, 2, 3, ou seja, primeiro serão exibidas as missões
  43. # não descobertas, em seguida as fracassadas e por fim as já completadas.
  44. #-------------------------------------------------------------------------------
  45.   Ordem = [1, 2, 3]
  46. #-------------------------------------------------------------------------------
  47. # Aqui é a parte de criação das missões. Existe uma de exemplo abaixo. Para
  48. # criar uma nova é só copiar o exemplo, modificando principalmente o valor
  49. # entre os colchetes "[]" na frente da palavra "Quests", este valor corresponde
  50. # ao ID da missão e ela será controlada por ele, portanto não podem haver duas
  51. # missões com o mesmo ID. Depois, modifique e deixe a quest como quiser.
  52. #-------------------------------------------------------------------------------
  53.   Quests = Array.new   #Não modifique a esta linha!
  54. #-------------------------------------------------------------------------------
  55. # Quests[ID] = ["Nome da Missão", Tipo, ID do Ícone, Estado, Símbolo, Progresso,
  56. #              "Descrição: Escreva aqui sobre a missão.",
  57. #              "Quem a lhe deu e a recompensa por exemplo.",
  58. #              "Podem ser usadas até três linhas para isso.",
  59. #              "Primeiro objetivo",
  60. #              "Segundo objetivo",
  61. #              "Terceiro objetivo",
  62. #              "Quarto objetivo",
  63. #              "Quinto objetivo",
  64. #              ID do item de recompensa, Quantidade,
  65. #              ID da arma de recompensa, Quantidade,
  66. #              ID da proteção de recompensa, Quantidade,
  67. #              Ouro, EXP,
  68. #              Valor, Valor final, Valor de adição, Texto 1, Texto 2, Objetivo]
  69. #
  70. # Explicações: TIPO = 0 para missões "Principais" ou 1 para "Opcionais".
  71. #              ESTADO = 0 (não descoberta), 1 (em progresso), 2 (completa) ou
  72. #                       3 (fracassada).
  73. #              SÍMBOLO = pode colocar qualquer coisa, desde que venha precedido
  74. #                        por : (dois pontos).
  75. #              PROGRESSO = é o objetivo atual em que a missão se encontra.
  76. #                          0 significa que não tem nenhum objetivo ainda,
  77. #                          portanto ela não foi descoberta. Logo que ela é
  78. #                          descoberta/obtida, o progresso para a ter valor 1.
  79. #-------------------------------------------------------------------------------
  80. # Se não for utilizar a janela auxiliar, não é preciso colocar os dados após a
  81. # exp dada como recompensa.
  82. #-------------------------------------------------------------------------------
  83. #              VALOR = O valor inicial usado na janela auxiliar (explica-se
  84. #                      abaixo).
  85. #              VALOR FINAL = O valor final, ou seja, o que precisa ser alcançado
  86. #                            para o objetivo ser completado.
  87. #              VALOR DE ADIÇÃO = o valor que se soma ao primeiro gradativamente
  88. #                                a fim de alcançar o valor final.
  89. #              TEXTO 1 = Primeira linha do texto que será exibido na janela.
  90. #              TEXTO 2 = Segunda linha do texto que será exibido na janela.
  91. #              OBJETIVO = número do objetivo da missão em que a janela será
  92. #                         utilizada. Lembrando que é um valor de 1 a 5.
  93. #-------------------------------------------------------------------------------
  94. #              NÃO ESQUEÇA DAS VÍRGULAS, SE NÂO VAI BUGAR è-é
  95. #-------------------------------------------------------------------------------
  96.   Quests[0] = ["O Resgate dos Mineiros", 0, 276, 0, :quest00, 0,
  97.                "Na entrada da caverna, um mineiro se encontrava",
  98.                "caído, e disse que seus companheiros estavam",
  99.                "presos no interior da caverna.",
  100.                "- Encontrar 5 mineiros.",
  101.                "- Achar uma saída.",
  102.                "- Salvar o mineiro restante.",
  103.                "- Encontrar uma saída alternativa.",
  104.                "- Achar um meio de abrir o portão.",
  105.                1, 3,
  106.                1, 1,
  107.                1, 1,
  108.                0, 250,
  109.                0, 5, 1, "Mineiros", "Encontrados", 1]
  110.   Quests[1] = ["Fuga do Templo", 0, 12, 0, :quest01, 0,
  111.                "Precisamos sair do templo, mas para isso",
  112.                "tivemos que passar por um misterioso guarda",
  113.                "aparentemente nos deixou seguir.",
  114.                "- Passar pelo corregor e entrar na porta.",
  115.                "",
  116.                "",
  117.                "",
  118.                "",
  119.                0, 0,
  120.                0, 0,
  121.                0, 0,
  122.                500, 100]
  123. #-------------------------------------------------------------------------------
  124. # Deseja marcar como completa uma missão assim que todos seus objetivos forem
  125. # completados? Coloque true(sim) ou false(não).
  126. #-------------------------------------------------------------------------------
  127.   Auto_complete = true
  128. #-------------------------------------------------------------------------------
  129. # Ao completar uma missão, deseja que as recompensas sejam dadas
  130. # automaticamente? Coloque true(sim) ou false(não).
  131. #-------------------------------------------------------------------------------
  132.   Auto_reward = true
  133. #-------------------------------------------------------------------------------
  134. # Quanto à experiência dada como recompensa. Gostaria de distribuir a quantidade
  135. # de exp entre os membros do grupo? Coloque true(sim) ou false(não). Colocando
  136. # false, cada membro do grupo receberá o valor de exp integral.
  137. #-------------------------------------------------------------------------------
  138.   Divide_exp = true
  139. #-------------------------------------------------------------------------------
  140. # Caso um personagem suba de nível ao ganhar a experiência dada pela missão,
  141. # deseja exibir uma mensagem de level up? Coloque true(sim) ou false(não).
  142. #-------------------------------------------------------------------------------
  143.   Show_levelup_message = true
  144. #-------------------------------------------------------------------------------
  145. # ID dos ícones de ouro e experiência, respectivamente.
  146. #-------------------------------------------------------------------------------
  147.   Gold_Icon = 361
  148.   Exp_Icon = 121
  149. #-------------------------------------------------------------------------------
  150. #                         COMO MANUSEAR AS MISSÕES?
  151. #-------------------------------------------------------------------------------
  152. # Para desbloquear uma missão, avançar um objetivo, marcá-la como completada
  153. # ou fracassada, você irá utilizar pequenos códigos via comando por eventos
  154. # "Chamar Script", os quais seguem abaixo.
  155. #-------------------------------------------------------------------------------
  156. # Para avançar um objetivo e/ou DESBLOQUEAR uma missão, você utilizará:
  157. #
  158. # advance_quest(id)
  159. #
  160. # Onde "id" é o id da missão, mencionado na explicação de como criar uma
  161. # quest. Por exemplo, para avançar um objetivo na Quest[5], você deve por
  162. # "advance_quest(5)". Lembrando que, na primeira vez que se usa esse comando
  163. # a missão é desbloqueada e é liberado o primeiro objetivo dela.
  164. #-------------------------------------------------------------------------------
  165. # Para marcar uma missão como COMPLETA, você utilizará:
  166. #
  167. # advance_quest(id)
  168. #
  169. # Onde "id" é o id da missão. Caso estejam faltando objetivos a serem marcados
  170. # como completados, eles serão marcados também.
  171. #-------------------------------------------------------------------------------
  172. # Para marcar uma missão como FRACASSADA, você utilizará:
  173. #
  174. # failed_quest(id)
  175. #
  176. # Onde "id" é o id da missão. Os objetivos não desbloqueados continuarão
  177. # ocultos, porém, se nenhum objetivo estiver sido exibido, o primeiro será
  178. # revelado.
  179. #-------------------------------------------------------------------------------
  180. # Supondo que o jogador fracasse em uma missão e a mesma seja marcada como
  181. # fracassada, e caso o jogador volte onde pegou a missão, é possível
  182. # REABILITAR uma missão que estej marcada como fracassada, utilizando:
  183. #
  184. # reactive_quest(id)
  185. #
  186. # Onde "id" é o id da missão. Os objetivos serão "resetados" e somente o
  187. # primeiro será liberado até que os próximos sejam desbloqueados.
  188. #-------------------------------------------------------------------------------
  189. # Para acrescentar um de valor (o valor acrescentado corresponde ao VALOR DE
  190. # ADIÇÃO da missão respectiva), utilize:
  191. #
  192. # add_quest_obj(id)
  193. #
  194. # Onde "id" é o id da missão. Importante ressaltar que este comando só
  195. # funcionará se a missão cujo id foi usado neste comando estiver em progresso
  196. # e no mesmo objetivo indicado nas configurações da janela auxiliar da própria
  197. # quest (ou seja, o último valor das configurações da quest).
  198. #-------------------------------------------------------------------------------
  199. # Para verificar se uma missão já foi descoberta, utilize:
  200. #
  201. # verify_quest(id)
  202. #
  203. # Onde "id" é o id da missão. Caso a missão já tenha sido descoberta,completada
  204. # ou fracassada, irá retornar "true", caso contrário, retornará "false". É ideal
  205. # para usar em condições.
  206. #-------------------------------------------------------------------------------
  207. #                             JANELA AUXILIAR
  208. #-------------------------------------------------------------------------------
  209. # A janela auxiliar irá exibir o estado de alguns progressos da missão, como
  210. # por exemplo, a quantidade de itens encontrados em uma missão de encontrar
  211. # itens, ou o número de poções que faltam entregar em uma missão d entregar
  212. # poções. Os dados utilizados por esta janela correspondem à ultima linha de
  213. # informações da quest, como explicado acima (na criação da mesma).
  214. #-------------------------------------------------------------------------------
  215. # Deseja utilizar a janela auxiliar? Coloque true(sim) ou false(não).
  216. #-------------------------------------------------------------------------------
  217.   Aux_window = true
  218. #-------------------------------------------------------------------------------
  219. # Posição da janela auxiliar.
  220. # "left_top", "right_top", "left_bottom" ou "right_bottom"
  221. #-------------------------------------------------------------------------------
  222.   Aux_pos = "right_top"
  223. #-------------------------------------------------------------------------------
  224. # Tempo em frames que a janela mantém uma informação.
  225. #-------------------------------------------------------------------------------
  226.   Aux_time = 300
  227. #-------------------------------------------------------------------------------
  228. # Opacidade da janela auxiliar. Valor de 0 a 255.
  229. #-------------------------------------------------------------------------------
  230.   Aux_opacity = 255
  231. #-------------------------------------------------------------------------------
  232. # Completar objetivo ao igualar os valores da janela auxiliar e objetivo
  233. # auxiliar? Por exemplo, em uma missão de encontrar 5 pedras, ao encontrar as
  234. # 5 pedras, deseja habilitar automaticamente o próximo onjetivo?
  235. # Coloque true(sim) ou false(não).
  236. #-------------------------------------------------------------------------------
  237.   Aux_next_objective = true
  238. #-------------------------------------------------------------------------------
  239. #                            AVISOS DAS MISSÕES
  240. #-------------------------------------------------------------------------------
  241. # Os avisos das missões, se habilitados, serão exibidos automaticamente quando
  242. # um objetivo for concluído, uma missão for completada, fracassada ou
  243. # desbloqueada.
  244. #-------------------------------------------------------------------------------
  245. # Deseja utilizar os avisos das missões? Coloque true(sim) ou false(não).
  246. #-------------------------------------------------------------------------------
  247.   Advice_use = true
  248. #-------------------------------------------------------------------------------
  249. # Tempo em que o aviso permanece na tela.
  250. #-------------------------------------------------------------------------------
  251.   Advice_time = 300
  252. #-------------------------------------------------------------------------------
  253. # Ao invés de window, uma imagem pode ser usada como fundo para exibição dos
  254. # avisos, para isto a imagem deve estar na pasta "Graphics\Pictures" do projeto.
  255. # É importante que a imagem tenha dimensões de 120 x 96 pixels.
  256. #-------------------------------------------------------------------------------
  257.   Advice_img = "Quest - Advice"
  258. #-------------------------------------------------------------------------------
  259. # Textos para objetivo concluído, missão descoberta, completada e fracassada,
  260. # respectivamente. Cada linha deve estar entre aspas e separadas por vírgula
  261. # como nos padrões. É um máximo de duas linhas.
  262. #-------------------------------------------------------------------------------
  263.   Txt_obj_ok = ["Objetivo", "Concluído"]
  264.   Txt_learn = ["Nova Missão", "Descoberta"]
  265.   Txt_ok = ["Missão", "Completada"]
  266.   Txt_fail = ["Missão", "Fracassada"]
  267. #-------------------------------------------------------------------------------
  268. # SE para serem executados na mesma ordem acima. Escreva o nome do SE utilizado
  269. # entre aspas, como nos padrões.
  270. #-------------------------------------------------------------------------------
  271.   SE_obj_ok = "Chime2"
  272.   SE_learn = "Save"
  273.   SE_ok = "Skill3"
  274.   SE_fail = "Down4"
  275. #==============================================================================
  276. #                           NÃO MODIFIQUE ABAIXO
  277. #==============================================================================
  278. end
  279. #==============================================================================
  280. #                                   SCENES
  281. #==============================================================================
  282. #  Scene_Quests
  283. #------------------------------------------------------------------------------
  284. #  Esta classe executa o processamento da tela de missões.
  285. #==============================================================================
  286. class Scene_Quests < Scene_Base
  287.   #--------------------------------------------------------------------------
  288.   # Inicialização do processo
  289.   #--------------------------------------------------------------------------
  290.   def start
  291.     super
  292.     create_upper_window
  293.     create_quests_window
  294.     create_descript_window
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # Criação da janela superior com o nome da Scene.
  298.   #--------------------------------------------------------------------------
  299.   def create_upper_window
  300.     @upper_window = Window_UpperWindow.new
  301.     @upper_window.write_total_quests
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # Criação da janela com a lista de missões.
  305.   #--------------------------------------------------------------------------
  306.   def create_quests_window
  307.     @quests_window = Window_QuestSelect.new(0, @upper_window.height)
  308.     @quests_window.height = Graphics.height - @upper_window.height
  309.     @quests_window.set_handler(:ok,     method(:on_quests_ok))
  310.     @quests_window.set_handler(:cancel, method(:return_scene))
  311.     @quests_window.make_icon_command_list
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # Criação da janela com as informações da missão.
  315.   #--------------------------------------------------------------------------
  316.   def create_descript_window
  317.     width = Graphics.width - @quests_window.width
  318.     height = Graphics.height - @upper_window.height
  319.     @descript_window = Window_QuestDescript.new(@quests_window.width, @upper_window.height, width, height)
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # Quest [Confirmação]
  323.   #--------------------------------------------------------------------------
  324.   def on_quests_ok
  325.     $selected_quest = @quests_window.command_name(@quests_window.index)
  326.     @descript_window.data_quest($selected_quest)
  327.     @quests_window.activate
  328.   end
  329. end
  330. #==============================================================================
  331. #  Scene_Menu
  332. #------------------------------------------------------------------------------
  333. #  Esta classe executa o processamento da tela de menu.
  334. #==============================================================================
  335. class Scene_Menu < Scene_MenuBase
  336.   #--------------------------------------------------------------------------
  337.   # Criação da janela de comando
  338.   #--------------------------------------------------------------------------
  339.   alias create_menu_command_window create_command_window
  340.   def create_command_window
  341.     create_menu_command_window
  342.     @command_window.set_handler(:quests, method(:command_ctcmquests)) if CTCM001::Add_Quests == true
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # Comando [Missões]
  346.   #--------------------------------------------------------------------------
  347.   def command_ctcmquests
  348.     SceneManager.call(Scene_Quests)
  349.   end
  350. end
  351. #==============================================================================
  352. # Scene_Map
  353. #------------------------------------------------------------------------------
  354. # Esta classe executa o processamento da tela de mapa.
  355. #==============================================================================
  356. class Scene_Map < Scene_Base
  357.   #--------------------------------------------------------------------------
  358.   # Inicialização do processo
  359.   #--------------------------------------------------------------------------
  360.   alias aux_quest_start start
  361.   def start
  362.     aux_quest_start
  363.     $aux_quest_window = Window_AuxQuest.new if CTCM001::Aux_window == true
  364.     $adv_quest_window = Window_AdviceQuest.new if CTCM001::Advice_use == true
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # Atualização da tela
  368.   #--------------------------------------------------------------------------
  369.   alias aux_quest_update update
  370.   def update
  371.     aux_quest_update
  372.     $aux_quest_window.refresh if CTCM001::Aux_window == true
  373.     $adv_quest_window.refresh if CTCM001::Advice_use == true
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # Finalização do processo
  377.   #--------------------------------------------------------------------------
  378.   alias aux_quest_terminate terminate
  379.   def terminate
  380.     aux_quest_terminate
  381.     $aux_quest_window.dispose if CTCM001::Aux_window == true
  382.     $adv_quest_window.dispose if CTCM001::Advice_use == true
  383.   end
  384. end
  385. #==============================================================================
  386. #                                   WINDOWS
  387. #==============================================================================
  388. #  Window_Base
  389. #------------------------------------------------------------------------------
  390. #  Esta é a superclasse para todas as janelas no jogo.
  391. #==============================================================================
  392. class Window_Base < Window
  393.   #--------------------------------------------------------------------------
  394.   # Desenho de uma linha horzontal
  395.   #--------------------------------------------------------------------------
  396.   def draw_hr(y)
  397.     contents.fill_rect(0, y, contents_width, 1, normal_color)
  398.   end
  399. end
  400. #==============================================================================
  401. #  Window_MenuCommand
  402. #------------------------------------------------------------------------------
  403. #  Esta janela exibe os comandos do menu.
  404. #==============================================================================
  405. class Window_MenuCommand < Window_Command
  406.   #--------------------------------------------------------------------------
  407.   # Adição de comandos próprios
  408.   #--------------------------------------------------------------------------
  409.   alias add_ctcm_commands add_original_commands
  410.   def add_original_commands
  411.     add_ctcm_commands
  412.     add_command(CTCM001::Command, :quests, quests_verify) if CTCM001::Add_Quests == true
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # Verificar de existem missões descorbertas.
  416.   #--------------------------------------------------------------------------
  417.   def quests_verify
  418.     n = 0
  419.     while n < $aux_quests.size do
  420.       if $aux_quests[n][3] == 0
  421.         n += 1
  422.       else
  423.         return true
  424.       end
  425.     end
  426.     return false
  427.   end
  428. end
  429. #==============================================================================
  430. #  Window_UpperWindow
  431. #------------------------------------------------------------------------------
  432. #  Esta janela exibe o nome da Scene no topo da tela.
  433. #==============================================================================
  434. class Window_UpperWindow < Window_Base
  435.   #--------------------------------------------------------------------------
  436.   # Inicialização do objeto.
  437.   #--------------------------------------------------------------------------
  438.   def initialize
  439.     super(0, 0, Graphics.width, (standard_padding * 2) + line_height)
  440.       self.contents.font.size = CTCM001::Font_size + 2
  441.       draw_text( 0, 0, contents_width, line_height, CTCM001::Command, 1)
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # Exibição do número de missões completas/descobertas + fracassadas.
  445.   #--------------------------------------------------------------------------
  446.   def write_total_quests
  447.     @completeds = Array.new if @completeds == nil
  448.     @total = Array.new if @total == nil
  449.     n = 0
  450.     while n < $aux_quests.size do
  451.       @completeds.push(n) if $aux_quests[n][3] == 2
  452.       @total.push(n) if $aux_quests[n][3] > 0
  453.       n += 1
  454.     end
  455.     self.contents.font.size = CTCM001::Font_size
  456.     draw_text( contents_width - 64, 0, 32, line_height, @completeds.size.to_s, 2)
  457.     draw_text( contents_width - 32, 0, 32, line_height, "/ " + @total.size.to_s, 0)
  458.   end
  459. end
  460. #==============================================================================
  461. #  Window_QuestSelect
  462. #------------------------------------------------------------------------------
  463. #  Esta janela exibe as missões disponíveis dentro da categoria selecionada.
  464. #==============================================================================
  465. class Window_QuestSelect < Window_Command
  466.   include CTCM001
  467.   #--------------------------------------------------------------------------
  468.   # Inicialização do objeto.
  469.   #--------------------------------------------------------------------------
  470.   def initialize(x, y)
  471.     super(x, y)
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # Inicialização da posição do comando de seleção (método da classe).
  475.   #--------------------------------------------------------------------------
  476.   def self.init_command_position
  477.     return 0
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # Aquisição da largura da janela.
  481.   #--------------------------------------------------------------------------
  482.   def window_width
  483.     return 208
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # Aquisição do número de linhas exibidas.
  487.   #--------------------------------------------------------------------------
  488.   def visible_line_number
  489.     return 10
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # Criação da lista de comandos.
  493.   #--------------------------------------------------------------------------
  494.   def make_command_list
  495.     @discovereds = Array.new if @discovereds == nil
  496.     @completeds = Array.new if @completeds == nil
  497.     @faileds = Array.new if @faileds == nil
  498.     #--------------------------------------------------------------------------
  499.     # Criando as arrays com cada tipo de missão.
  500.     #--------------------------------------------------------------------------
  501.     n = 0
  502.     while n < Quests.size do
  503.       @discovereds.push(n) if $aux_quests[n][3] == 1 && @discovereds.include?(n) == false
  504.       @completeds.push(n) if $aux_quests[n][3] == 2 && @completeds.include?(n) == false
  505.       @faileds.push(n) if $aux_quests[n][3] == 3 && @faileds.include?(n) == false
  506.       n += 1
  507.     end
  508.     #--------------------------------------------------------------------------
  509.     # Colocando na ordem selecionada.
  510.     #--------------------------------------------------------------------------
  511.     a = Ordem.index(1)
  512.     b = Ordem.index(2)
  513.     c = Ordem.index(3)
  514.     order = Array.new
  515.     order[a] = @discovereds
  516.     order[b] = @faileds
  517.     order[c] = @completeds
  518.     @ordered_quests =  order[0] + order[1] + order[2]
  519.     #--------------------------------------------------------------------------
  520.     # Criando os comandos.
  521.     #--------------------------------------------------------------------------
  522.     n = 0
  523.     while n < @ordered_quests.size do
  524.       add_command($aux_quests[@ordered_quests[n]][0], $aux_quests[@ordered_quests[n]][4])
  525.       n += 1
  526.     end
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # Criação dos ícones da lista de comandos.
  530.   #--------------------------------------------------------------------------
  531.   def make_icon_command_list
  532.     n = 0
  533.     while n < @ordered_quests.size do
  534.       draw_icon($aux_quests[@ordered_quests[n]][2], 0, n * line_height)
  535.       n += 1
  536.     end
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # Desenho do item
  540.   #     index : índice do item
  541.   #--------------------------------------------------------------------------
  542.   def draw_item(index)
  543.     change_color(normal_color, command_enabled?(index))
  544.     draw_text(item_rect_for_text(index), command_name(index), alignment)
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # Aquisição do retangulo para desenhar o item (para texto)
  548.   #     index : índice do item
  549.   #--------------------------------------------------------------------------
  550.   def item_rect_for_text(index)
  551.     rect = item_rect(index)
  552.     rect.x += 28
  553.     rect.width -= 8
  554.     rect
  555.   end
  556. end
  557. #==============================================================================
  558. #  Window_QuestDescript
  559. #------------------------------------------------------------------------------
  560. #  Esta janela exibe as informações da missão selecionada.
  561. #==============================================================================
  562. class Window_QuestDescript < Window_Base
  563.   include CTCM001
  564.   #--------------------------------------------------------------------------
  565.   # Inicialização do objeto.
  566.   #--------------------------------------------------------------------------
  567.   def initialize(x, y, width, height)
  568.     super(x, y, width, height)
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # Dados da missão selecionada.
  572.   #--------------------------------------------------------------------------
  573.   def data_quest(index)
  574.     $all_quest_names = Array.new if $all_quest_names == nil
  575.     n = 0
  576.     while n < Quests.size do
  577.       $all_quest_names.push($aux_quests[n][0])
  578.       n += 1
  579.     end
  580.     contents.clear
  581.     change_color(normal_color)
  582.     quest = $all_quest_names.index(index) # "quest" = ID da missão selecionada.
  583.     #------------------------------------------------------------------------
  584.     # Cabeçalho.
  585.     #------------------------------------------------------------------------
  586.     draw_icon($aux_quests[quest][2], 0, 0)
  587.     contents.font.size = Font_size + 4
  588.       draw_text(0, 0, contents_width, line_height, $aux_quests[quest][0], 1)
  589.     contents.font.size = Font_size - 1
  590.     draw_text(0, line_height, contents_width, line_height, Tipos[$aux_quests[quest][1]], 1)
  591.     draw_hr(line_height * 2)
  592.     #------------------------------------------------------------------------
  593.     # Descrição.
  594.     #------------------------------------------------------------------------
  595.     contents.font.size = Font_size
  596.     draw_text(0, (line_height * 3), contents_width, line_height, $aux_quests[quest][6], 0)
  597.     draw_text(0, (line_height * 4), contents_width, line_height, $aux_quests[quest][7], 0)
  598.     draw_text(0, (line_height * 5), contents_width, line_height, $aux_quests[quest][8], 0)
  599.     #------------------------------------------------------------------------
  600.     # Objetivos.
  601.     #------------------------------------------------------------------------
  602.     n = $aux_quests[quest][5]
  603.     while n > 0 do
  604.       if n == $aux_quests[quest][5] && $aux_quests[quest][3] == (1 || 2)
  605.         change_color(normal_color)
  606.       else
  607.         change_color(Color.new(255, 255, 255, 150))
  608.       end
  609.       text = $aux_quests[quest][8 + n]
  610.       if $aux_quests[quest].size > 22 && $aux_quests[quest][5] == $aux_quests[quest][27]
  611.         text += (" (" + $aux_quests[quest][22].to_s + "/" + $aux_quests[quest][23].to_s + ")")
  612.       end
  613.       draw_text(0, (line_height * (n + 5)), contents_width, line_height, text, 0)
  614.       n -= 1
  615.     end
  616.     change_color(normal_color)
  617.     #------------------------------------------------------------------------
  618.     # Recompensas.
  619.     #------------------------------------------------------------------------
  620.     draw_hr(line_height * 11)
  621.     draw_text(0, (line_height * 11), contents_width, line_height, "Recompensas", 1)
  622.     contents.font.size = Font_size - 3
  623.     if $aux_quests[quest][15] > 0
  624.       draw_icon($data_items[$aux_quests[quest][14]].icon_index, 0, line_height * 12)
  625.       draw_text(24, (line_height * 12), contents_width, line_height, "x" + $aux_quests[quest][15].to_s, 0)
  626.     end
  627.     if $aux_quests[quest][17] > 0
  628.       draw_icon($data_weapons[$aux_quests[quest][16]].icon_index, 48, line_height * 12)
  629.       draw_text(72, (line_height * 12), contents_width, line_height, "x" + $aux_quests[quest][17].to_s, 0)
  630.     end
  631.     if $aux_quests[quest][19] > 0
  632.       draw_icon($data_armors[$aux_quests[quest][18]].icon_index, 96, line_height * 12)
  633.       draw_text(120, (line_height * 12), contents_width, line_height, "x" + $aux_quests[quest][19].to_s, 0)
  634.     end
  635.     contents.font.size = Font_size - 1
  636.     if $aux_quests[quest][20] > 0
  637.       draw_icon(Gold_Icon, contents_width - 148, line_height * 12)
  638.       draw_text(contents_width - 124, (line_height * 12), 50, line_height, $aux_quests[quest][20].to_s + " G", 0)
  639.     end
  640.     if $aux_quests[quest][21] > 0
  641.       draw_icon(Exp_Icon, contents_width - 64, line_height * 12)
  642.       draw_text(contents_width - 40, (line_height * 12), 40, line_height, $aux_quests[quest][21].to_s, 0)
  643.     end
  644.     #------------------------------------------------------------------------
  645.     # Estado.
  646.     #------------------------------------------------------------------------
  647.     contents.font.size = Font_size + 2
  648.     case $aux_quests[quest][3]
  649.     when 2
  650.       change_color(Color.new(190, 255, 50, 255))
  651.     when 3
  652.       change_color(Color.new(255, 100, 75, 255))
  653.     end
  654.     draw_text(0, (line_height * 13) + 8, contents_width, line_height, Estados[$aux_quests[quest][3]].to_s, 1)
  655.   end
  656. end
  657. #==============================================================================
  658. #  Window_AuxQuest
  659. #------------------------------------------------------------------------------
  660. #  Esta janela exibe status de algum(ns) objetivo(s) das missões ativas.
  661. #==============================================================================
  662. class Window_AuxQuest < Window_Base
  663.   include CTCM001
  664.   #--------------------------------------------------------------------------
  665.   # Inicialização do objeto.
  666.   #--------------------------------------------------------------------------
  667.   def initialize
  668.     super(0, 0, 120, 96)
  669.     set_x
  670.     set_y
  671.     opacity = 0
  672.     contents_opacity = 0
  673.     self.back_opacity = Aux_opacity
  674.     @current_quest = 0
  675.     @timer = Aux_time - 1
  676.     refresh
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # Posição x
  680.   #--------------------------------------------------------------------------
  681.   def set_x
  682.     case Aux_pos
  683.     when "left_top" || "left_bottom"
  684.       self.x = 0
  685.     when "right_top" || "right_bottom"
  686.       self.x = Graphics.width - 120
  687.     end
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # Posição y
  691.   #--------------------------------------------------------------------------
  692.   def set_y
  693.     case Aux_pos
  694.     when "left_top" || "right_top"
  695.       self.y = 0
  696.     when "left_bottom" || "right_bottom"
  697.       self.y = Graphics.height - 96
  698.     end
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # Atualização das informações.
  702.   #--------------------------------------------------------------------------
  703.   def refresh
  704.     @infos_quest = [nil]
  705.     n = 0
  706.     while n < Quests.size do
  707.       if $aux_quests[n].size > 22 && $aux_quests[n][3] == 1
  708.         @infos_quest.push(n) if $aux_quests[n][5] == $aux_quests[n][27]
  709.       end
  710.       n += 1
  711.     end
  712.     @infos_quest.delete(nil)
  713.     @timer += 1
  714.     if @infos_quest[0] != nil
  715.       self.opacity = 255
  716.       self.contents_opacity = 255
  717.       if @timer >= Aux_time
  718.         @current_quest += 1
  719.         @current_quest = 0 if @current_quest >= @infos_quest.size
  720.         @timer = 0
  721.         draw_infos
  722.       end
  723.     else
  724.       contents.clear
  725.       self.opacity = 0
  726.       self.contents_opacity = 0
  727.     end
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # Escrever s informações na janela.
  731.   #--------------------------------------------------------------------------
  732.   def draw_infos
  733.     contents.clear
  734.     draw_text(0, 0, contents_width, line_height, $aux_quests[@infos_quest[@current_quest]][25], 1)
  735.     draw_text(0, line_height, contents_width, line_height, $aux_quests[@infos_quest[@current_quest]][26], 1)
  736.     text = $aux_quests[@infos_quest[@current_quest]][22].to_s + " / " + $aux_quests[@infos_quest[@current_quest]][23].to_s
  737.     draw_text(0, line_height * 2, contents_width, line_height, text, 1)
  738.   end
  739. end
  740. #==============================================================================
  741. #  Window_AdviceQuest
  742. #------------------------------------------------------------------------------
  743. #  Esta janela exibe informações quando uma missão é manuseada.
  744. #==============================================================================
  745. class Window_AdviceQuest < Window_Base
  746.   include CTCM001
  747.   #--------------------------------------------------------------------------
  748.   # Inicialização do objeto.
  749.   #--------------------------------------------------------------------------
  750.   def initialize
  751.     super(Graphics.width - 120, -96, 120, 96)
  752.     if Advice_img != ""
  753.       @layout = Sprite.new
  754.       @layout.bitmap = Cache.picture(Advice_img)
  755.       @layout.x = self.x
  756.       @layout.y = self.y
  757.       @layout.z = $aux_quest_window.z if $aux_quest_window != nil
  758.       self.opacity = 0
  759.       self.z = @layout.z + 1
  760.     end
  761.     @timer = 0
  762.   end
  763.   #--------------------------------------------------------------------------
  764.   # Criação e atualização do texto.
  765.   #--------------------------------------------------------------------------
  766.   def quest_advice(text, icon)
  767.     text = text
  768.     icon = icon
  769.     contents.clear
  770.     draw_text(0, 0, contents_width, line_height, text[0], 1)
  771.     draw_text(0, line_height, contents_width, line_height, text[1], 1)
  772.     draw_icon(icon, (contents_width - 24) / 2, line_height * 2)
  773.     @adviced = false
  774.     @timer = 0
  775.   end
  776.   #--------------------------------------------------------------------------
  777.   # Atualização das informações.
  778.   #--------------------------------------------------------------------------
  779.   def refresh
  780.     if @adviced == false
  781.       if self.y < -48
  782.         self.y += 10
  783.       elsif self.y >= -48 && self.y < -24
  784.         self.y += 5
  785.       elsif self.y >= -24 && self.y < -12
  786.         self.y += 3
  787.       elsif self.y >= -12 && self.y < 0
  788.         self.y += 1
  789.       elsif self.y == 0
  790.         @adviced = true
  791.       end
  792.       @layout.y = self.y
  793.       $aux_quest_window.y = self.y + 96 if $aux_quest_window != nil
  794.     else
  795.       if @timer < 300
  796.         @timer += 1
  797.       else
  798.         if self.y >= -12
  799.           self.y -= 1
  800.         elsif self.y < -12 && self.y >= -24
  801.           self.y -= 3
  802.         elsif self.y < -24 && self.y >= -48
  803.           self.y -= 5
  804.         elsif self.y < -48 && self.y > -96
  805.           self.y -= 10
  806.         elsif self.y <= -96
  807.           self.y = -96
  808.           @adviced = nil
  809.           @timer = 0
  810.         end
  811.         @layout.y = self.y
  812.         $aux_quest_window.y = self.y + 96 if $aux_quest_window != nil
  813.       end
  814.     end
  815.   end
  816. end
  817. #==============================================================================
  818. #                                    GAME
  819. #==============================================================================
  820. # Game_Interpreter
  821. #------------------------------------------------------------------------------
  822. # Um interpretador para executar os comandos de evento. Esta classe é usada
  823. # internamente pelas classes Game_Map, Game_Troop e Game_Event.
  824. #==============================================================================
  825. class Game_Interpreter
  826.   include CTCM001
  827.   #--------------------------------------------------------------------------
  828.   # Avançar um objetivo na missão.
  829.   #--------------------------------------------------------------------------
  830.   def advance_quest(id)
  831.     if $aux_quests[id][3] == 0
  832.       $aux_quests[id][3] = 1
  833.       if Advice_use == true
  834.         RPG::SE.new(SE_learn, 60, 100).play
  835.         $adv_quest_window.quest_advice(Txt_learn, $aux_quests[id][2])
  836.       end
  837.     end
  838.     if $aux_quests[id][9 + $aux_quests[id][5]] != "" && $aux_quests[id][9 + $aux_quests[id][5]].is_a?(String)
  839.       $aux_quests[id][5] += 1
  840.       if Advice_use == true && $aux_quests[id][5] > 1
  841.         RPG::SE.new(SE_obj_ok, 60, 100).play
  842.         $adv_quest_window.quest_advice(Txt_obj_ok, $aux_quests[id][2])
  843.       end
  844.     elsif Auto_complete == true
  845.       complete_quest(id)
  846.     end
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # Marcar uma missão como completa.
  850.   #--------------------------------------------------------------------------
  851.   def complete_quest(id)
  852.     $aux_quests[id][3] = 2
  853.     if Advice_use == true
  854.       RPG::SE.new(SE_ok, 60, 100).play
  855.       $adv_quest_window.quest_advice(Txt_ok, $aux_quests[id][2])
  856.     end
  857.     n = $aux_quests[id][5]
  858.     while $aux_quests[id][9 + n] != "" && n < 5
  859.       $aux_quests[id][5] += 1
  860.       n += 1
  861.     end
  862.     give_rewards_quest(id) if Auto_reward == true
  863.   end
  864.   #--------------------------------------------------------------------------
  865.   # Marcar uma missão como fracassada.
  866.   #--------------------------------------------------------------------------
  867.   def failed_quest(id)
  868.     $aux_quests[id][3] = 3
  869.     $aux_quests[id][5] = 1 if $aux_quests[id][5] == 0
  870.     if Advice_use == true
  871.       RPG::SE.new(SE_fail, 60, 100).play
  872.       $adv_quest_window.quest_advice(Txt_fail, $aux_quests[id][2])
  873.     end
  874.   end
  875.   #--------------------------------------------------------------------------
  876.   # Reabilitar uma missão que foi fracassada.
  877.   #--------------------------------------------------------------------------
  878.   def reactive_quest(id)
  879.     if $aux_quests[id][3] == 3
  880.       $aux_quests[id][3] = 1
  881.       $aux_quests[id][5] = 1
  882.       if Advice_use == true
  883.         RPG::SE.new(SE_learn, 60, 100).play
  884.         $adv_quest_window.quest_advice(Txt_learn, $aux_quests[id][2])
  885.       end
  886.     else
  887.       return
  888.     end
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # Acrescentar um de valor na janela auxiliar de missões.
  892.   #--------------------------------------------------------------------------
  893.   def add_quest_obj(id)
  894.     return if $aux_quests[id][3] == 0
  895.     $aux_quests[id][22] += $aux_quests[id][24] if $aux_quests[id][22] < $aux_quests[id][23] && $aux_quests[id][5] == $aux_quests[id][27]
  896.     advance_quest(id) if Aux_next_objective == true && $aux_quests[id][22] == $aux_quests[id][23]
  897.     $aux_quest_window.draw_infos
  898.   end
  899.   #--------------------------------------------------------------------------
  900.   # Distribuir as recompensas se esta opção estiver habilitada.
  901.   #--------------------------------------------------------------------------
  902.   def give_rewards_quest(id)
  903.     $game_party.gain_item($data_items[$aux_quests[id][14]], $aux_quests[id][15])
  904.     $game_party.gain_item($data_weapons[$aux_quests[id][16]], $aux_quests[id][17])
  905.     $game_party.gain_item($data_armors[$aux_quests[id][18]], $aux_quests[id][19])
  906.     $game_party.gain_gold($aux_quests[id][20])
  907.     if Divide_exp == true
  908.       each_exp = ($aux_quests[id][21] / $game_party.members.size)
  909.       n = 0
  910.       while n < $game_party.members.size do
  911.         $game_party.members[n].gain_quest_exp(each_exp)
  912.         n += 1
  913.       end
  914.     else
  915.       n = 0
  916.       while n < $game_party.members.size do
  917.         $game_party.members[n].gain_quest_exp($aux_quests[id][21])
  918.         n += 1
  919.       end
  920.       $game_party.members[0].gain_quest_exp($aux_quests[id][21])
  921.     end
  922.   end
  923.   #--------------------------------------------------------------------------
  924.   # Distribuir as recompensas se esta opção estiver habilitada.
  925.   #--------------------------------------------------------------------------
  926.   def verify_quest(id)
  927.     if $aux_quests[id][3] != 0
  928.       return true
  929.     else
  930.       return false
  931.     end
  932.   end
  933. end
  934. #==============================================================================
  935. # Game_Actor
  936. #------------------------------------------------------------------------------
  937. # Adição do método "gain_quest_exp" para adicionar a experiência dada pelas
  938. # missões com a opção de mostrar subida de nível ou não.
  939. #==============================================================================
  940. class Game_Actor < Game_Battler
  941. include CTCM001
  942.   def gain_quest_exp(exp)
  943.     change_exp(self.exp + (exp * final_exp_rate).to_i, Show_levelup_message)
  944.   end
  945. end
  946. #==============================================================================
  947. # ** DataManager
  948. #------------------------------------------------------------------------------
  949. # Este módulo gerencia o jogo e objetos do banco de dados utilizados no jogo.
  950. # Quase todas as variáveis globais são inicializadas no módulo.
  951. #==============================================================================
  952. class << DataManager
  953.   alias create_game_quests_objects create_game_objects
  954.   def create_game_objects(*a, &b)
  955.     create_game_quests_objects(*a, &b)
  956.     $aux_quests = CTCM001::Quests.clone
  957.   end
  958.  
  959.   alias make_save_quests_contents make_save_contents
  960.   def make_save_contents(*a, &b)
  961.     contents = make_save_quests_contents(*a, &b)
  962.     contents[:aux_quests] = $aux_quests
  963.     contents
  964.   end
  965.  
  966.   alias extract_save_quest_contents extract_save_contents
  967.   def extract_save_contents(contents)
  968.     extract_save_quest_contents(contents)
  969.     $aux_quests = contents[:aux_quests]
  970.   end
  971. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement