O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

! Para quest (RMXP)

Iniciado por RRodrigoRR, 18/12/2018 às 16:11

18/12/2018 às 16:11 Última edição: 04/01/2019 às 00:03 por Vash
Olá galerinha do mal bem,

Estou voltando com meu projeto dps de 1 longo ano sem ter condições de fazer boas alterações. :feelsbatman: nesse sentido estou instalando uma plataforma de quest nos NPCS e preciso fazer um evento que aponte que que o NPC possui quests disponíveis para fazer...

O que pensei foi:
fazer um evento em cima da cabeça da pessoa com início automático. caso a quest esteja avaliada, o evento vai para a condição 1 e altera o gráfico para (!). Caso a quest já tenha sido feita o evento vai para a condição 2 e não altera a cor.

Alguém que tem experiência, como faço para condicionar o evento com o script de da quest? Outra coisa, alguém tem esse gráfico de exclamação?

Obrigado!
Em breve:

18/12/2018 às 16:24 #1 Última edição: 18/12/2018 às 16:33 por Corvo
Não é mais fácil só incluir o ! no charset do NPC? Se bem que isso seria aumentar o tamanho do projeto sem necessidade.  :sera:


Vamos por partes, se eu entendi bem você está usando um script para gerenciar as missões, certo? Se sim, poste um link para o mesmo. Só vendo o código poderemos te informar como usá-lo em uma condição. Se ele não informar, teremos que usar alguns switches ou variáveis pra corrigir isso.

O gráfico é tranquilo, só um balão animado de 32x32. Se não conseguir fazer - recomendo tentar pra ter certeza -, avise.

O código do script "Quest system" está logo abaixo:

Spoiler
=begin
================================================================================
Organized Quest System                                         Version 1.21
Author: KK20                                                   [10/14/2015]
--------------------------------------------------------------------------------

  This script is a full-fledged quest system that uses pictures to represent the
  different types of quests in the User Interface.
 
  Includes:
    ~ Different page tabs to organize which quests to display (the four tabs
      used are 'All', 'New' (not accepted), 'Accepted', and 'Completed'), which
      can be accessed by pressing the 'Shift' key.
    ~ Player rank determined by number of quests completed
    ~ A window displaying the quest's information when selected
    ~ Repeatable quests
    ~ Some customizable features
--------------------------------------------------------------------------------
[[ Version History ]]
1.21[10/14/2015]
   - Fixed regular expression used in writing the quest description
1.2 [11/24/13]
   - Descriptions now use \n and \v[n] and no longer need to be spaced apart
   - Added new features:
     * Repeatable Quests
     * Can check quest's acceptance status more precisely
     * Rewards can have strings in them
1.1 [1/27/13]
   - Cleaned up code
   - Added new features:
     * Map background
     * More quest descriptions and use of game variables
   - Removed storing data into a Game System variable
1.0 [8/15/12]
   - Released script

********************************************************************************
*                         I N S T R U C T I O N S                              *
********************************************************************************
-----------------
-Getting Started-
-----------------
  To call the quest window, use the following in a script call:
> $scene = Scene_Quest.new
 
  To add quests that are available and can be accepted, use the script call:
> Quest.new(quest_id)
 
  To change the quest to being accepted, use the script call:
> Quest.accept(quest_id)
 
  To complete the quest, use the script call:
> Quest.complete(quest_id)
  (Doing this will automatically give the rewards to the player--This includes
  the items, EXP, and Gold. No need to event that in!
  If you still want to use events to reward, this can be configured below.)
 
  To make a quest repeatable, use the script call:
> Quest.repeat(quest_id)
  (In order for a quest to be repeated, the player must complete the quest
  at least once. Repeated quests are still considered completed quests,
  regardless if the player is accepting it or not.)
 
  ######[ NOTE ]################################################################
  A quest cannot be accepted if the quest is not currently available. A quest
  cannot be completed unless the quest is currently being accepted.
  Example: Quest.new(1)
           Quest.complete(1)
  Result: Quest 1 is still considered "new". The player has completed nothing.
  ##############################################################################
 
  For conditional branch needs:

  To check if the quest is repeatable, use the script call:
> Quest.repeat?(quest_id)
  Returns 'true' if the quest is repeatable, 'false' otherwise.
 
  To check if the quest is completed, use the script call:
> Quest.complete?(quest_id)
  Returns 'true' if the quest is completed or repeatable, 'false' otherwise.

  To check if the quest is currently being accepted, use the script call:
> Quest.accept?(quest_id)
  Returns 'true' if the quest is accepted, completed, or repeatable,
  'false' otherwise.
 
  To check if the quest can be accepted, use the script call:
> Quest.new?(quest_id)
  Returns 'true' if the quest is new, accepted, completed, or repeatable,
  'false' otherwise.
 
  ######[ NOTE ]################################################################
  In the last three commands (thus, excluding Quest.repeat?), you can put a
  second parameter to check if the quest is CURRENTLY new, accepted, or
  completed. All you have to put is true after your quest ID.
 
  Example: Quest.new?(1, true)
  Result: Returns true ONLY if the quest is considered new. If it has been
          accepted or completed, it will return false.
  ##############################################################################
 
  To check how many quests have been completed, use the script call:
> Quest.done
  This will return an integer. If you want to, for example, give a reward for
  completing 7 quests, use a 'Conditional Branch', select 'Script' and
  type in 'Quest.done >= 7' (without the quotes).

---------- 
-Controls-
----------
  Arrow keys to move the cursor around
  'C'/'Enter' to view the quest's information
  'X'/'Esc' to close the Scene_Quest
  'Shift' to change tabs (All -> New -> Accepted -> Completed -> All)
 
  When the quest's information window is being displayed:
  You can still use the Arrow keys to view different quests
  'C'/'Enter' and 'Shift' have no use.
  'X'/'Esc' to remove the quest's information window

----------
-Graphics-
----------
  This script uses images stored in 'Graphics/Pictures' to represent the quests.
  The script was written in support for 48 x 48 graphics. Your images must be
  of this size (no less, no bigger). To configure what graphics you wish to use,
  look below for the configuration.
 
---------------
-Configuration-
---------------
  Located below. All the instructions are there.

================================================================================
Credits:
KK20 -> Making this script
game_guy -> Used his 'Quest Log System' as a basis for this script
Blizzard -> Method to turn a long string into a paragraph
================================================================================
=end
module QuestData
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#@             S T A R T          O F         C O N F I G U R A T I O N        @
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  #=============================================================================
  # NPCPicture - Set to 'true' if you want the NPC graphic to be displayed in
  #              the quest's information window. Set to 'false' if you don't
  #              want to.
  #
  # HideReward - Hides the rewards in the quest description until the player has
  #              completed that quest. Set the quest IDs in the array to use this
  #              feature. Delete the array and put 'true' to apply this to all
  #              quests. Create an empty array if you do not wish to use this
  #              feature. An empty array looks like this-->  []
  #
  # RewardOnComplete - Set to 'true' if you want the player to be rewarded at the
  #                    instance of 'Quest.complete(quest_id)'. 'false' otherwise.
  #
  # ShowMapBackGround - Sets the opacity of the windows to allow viewing of the
  #                     map. Set to 'true' if you want this option. 'false' otherwise.
  #
  # ExitScene - Set to the scene you wish to view upon exiting quest scene.
  #
  # PageTurnSound - Sound effect that plays when player shifts the quest page.
  #=============================================================================
  NPCPicture        = true
  HideReward        = [1, 22]
  RewardOnComplete  = true
  ShowMapBackGround = true
  ExitScene         = Scene_Menu.new(0)
  PageTurnSound     = RPG::AudioFile.new("005-System05", 80)
  #=============================================================================
  # EXPicon - The graphic used when the quest's information window is brought up.
  #           It represents EXP gained from the quest. Name it the same as it is
  #           found in 'Graphics/Icons'.
  #
  # GoldIcon - Same as above. Represents the gold gained from the quest.
  #
  # ** If you do not want graphics, simply use an empty string ---> ""
  #    If you do opt to not use icons, the text will fill in the words for you.
  #    These are ICONS, so the graphics must be 24 x 24.
  #=============================================================================
  EXPicon   = "exp"
  GoldIcon  = "gold"
  #=============================================================================
  # NewQuestPic - The picture you want to represent a quest that hasn't been
  #               accepted. Name it the same as it is in 'Graphics/Pictures'.
  #
  # AcceptedQuestPic - Same as above. Represents a quest that has been accepted.
  #
  # CompletedQuestPic - Same as above. Represents a quest that is complete.
  #
  # RepeatQuestPic - Same as above. Represents a repeatable quest.
  #
  #             Remember: Graphics must be of size 48 x 48.
  #=============================================================================
  NewQuestPic = "quest_new"
  AcceptedQuestPic = "quest_accepted"
  CompletedQuestPic = "quest_complete"
  RepeatQuestPic = "quest_repeat"
 
  def self.name(id)
    case id
    #===========================================================================
    # Quest Name - The name of the quest.
    # Configure:
    #     when x then return "name"
    # x = Quest ID
    # name = Quest name. Use "quotes".
    #===========================================================================
    when 1 then return "Dia do Soldado - Primária"
    when 2 then return "Tarefa 1: Encontre a Capa Perdida - Primária"
    when 3 then return "Tarefa 2: Encontre o Anel de Miuch - Primária"
    when 4 then return "Tarefa 3: Encontre o Papel de Desenho - Primária"
    when 5 then return "Em busca da Verdade - Primária"
    when 6 then return "A petição de Oswald - Secundária"
    when 7 then return "Os fantasmas estão vivos! - Secundária"
    when 8 then return "Nos Passos de Idam! - Primária"
    when 9 then return "Em um lugar estranho - Primária"
    when 10 then return "Um misterioso Artefato - Primária"
    when 11 then return "Fazenda da Alvorada - Secundária"
    when 0 then return "O Tutorial"
    end
    return ""
  end
 
  def self.new_description(id)
    case id
    #===========================================================================
    # New Quest Description - Paragraph of the quest's description. This is for
    #   when the quest is new for the player to accept. If the description
    #   is really lengthy, the program will adjust the text into paragraph format.
    #
    #   You may use '\n' to create a new line (e.g. "Hello World!\nYou Rock!").
    #   You may also use '\v[id]' to show a variable in the description. Thus,
    #   doing something like "Found \v[3] out of \v[4]" will replace the
    #   instances with the game variables 3 and 4.
    #
    #   Any quests that are not configured will result in using the message
    #   located between the [] brackets. This text will be centered in the window.
    #   Do note you cannot use \n or \v to format this text.
    #
    # Configure:
    #     when x then return "description"
    # x = Quest ID
    # description = Quest's description. Use "quotes". Can be quite lengthy.
    #===========================================================================
    when 1 then return "Hoje finalmente se tornarás um soldado, quem sabe um herói?"
    when 2 then return "Jéssica perdeu sua capa, encontre-a para passar para o nível seguinte do campo de treinamento"
    when 3 then return "Encontre o precioso anel de casamento de Ry e entregue-opara seguir sua jornada e ajudar Ry a se livrar de uma bronca de sua mulher"
    when 4 then return "Alef, escondeu um pequeno papel em algum lugar, encontre-o para seguir ao ultimo nível de treinamento."
    when 5 then return "Seus sonhos lhe pertubam frequentemente. O problema aumentou quando um homem desconhecido atendendo pelo título de Profeta, te espantou dizendo que os pesadelos são reais. Por alguma razão isso lhe procupa grandemente, e agora deverá procurar alguém que possa lhe exclarecer a respeito deles. Vá para Nov'waleif e fale com os cidadãos de sua cidade, talvez alguém possa lhe ajudar."
    when 6 then return "Oswald, um fazendeiro da cidade de Nov'waleif, foi roubado por ladrões. Eles roubaram uma caixinha ornamentada de alto valor sentimental para Oswald, além de suas anotações.\n Encontre a caixa e devolva para ele para clamar sua recompensa!"
    when 7 then return "Rumores de fantasmas que assolam áreas próximas a cidade de Nov'waleif chegaram aos teus ouvidos. O problema é que os rumores vão além ao falar que eles atacam e matam vários viajantes a caminho da cidade."
    when 8 then return "Após conveersar com o Profeta e com Joh'Kalliun, você descobre que pode estar inserido em uma trama do destino."
    when 9 then return "Um estranho Espírito lhe advertiu para tomar cuidado nesse lugar estranho."
    when 10 then return "O espírito de Idam lhe disse para buscar uma jóia que poderá ser sua salvação algum dia. Ela se localiza em um templo no fundo da Igreja de Nov'waleif. Você deve buscar esse artefato e leva-lo de volta ao Idam e Lian."
    when 11 then return "O dono da INN de Iah'King disse ter ouvido rumores de alguns viajantes sobre um estranho caso que está ocorrendo na Fazenda da Alvorada. Aparecentemente estão sendo roubados, mas ele não tem certeza.\nVá até a Fazenda da Alvorada para ter mais informações. Ela pode ser acessada pela saída Sul de Iah'King."
    when 0 then return "Complete o tutorial para poder sair do Forte e iniciar seu treinamento!\n Dicas: Você deve interagir com o mundo a seu redor! \n Progresso: \v[100]% !"
      end
    return ["?   ?   ?"]
  end
 
  def self.accepted_description(id)
    case id
    #===========================================================================
    # Accepted Quest Description - Paragraph of the quest's description. If the
    #   description is really lengthy, the program will adjust the text into
    #   paragraph format.
    #
    #   You may use '\n' to create a new line (e.g. "Hello World!\nYou Rock!").
    #   You may also use '\v[id]' to show a variable in the description. Thus,
    #   doing something like "Found \v[3] out of \v[4]" will replace the
    #   instances with the game variables 3 and 4.
    #
    # Configure:
    #     when x then return "description"
    # x = Quest ID
    # description = Quest's description. Use "quotes". Can be quite lengthy.
    #===========================================================================
    when 1 then return "Torne-se um nobre soldado de Iah'king, ao vencer todos os quatro desafios propostos pelo Capitão do Camping."
    when 2 then return "Jéssica lhe advertiu que para passar para o próximo nível, você deve encontrar sua capa."
    when 3 then return "Ry está em maus lençois! \n Ele perdeu o anel de casamento de sua mulher e lhe deu uma tarefa exclusiva: Encontrar o anel para avançar."
    when 4 then return "Se você conseguir completar esse treinamento, você será um grande explorador (haha). \nSão as palavras de Alef."
    when 5 then return "Um dos aldeiões de Nov'waleif disse que existe um ancião chamado Joh'Kallium que pode ajudar com seus pesadelos. Procure sua casa aos arredores de Nov'waleif."
    when 6 then return "Oswald teve sua caixa roubada, recupere-a!"
    when 7 then return "A dona de INN de Nov'waleif lhe informou sobre a existência de fantasmas que atacam viajantes desafortunados a caminho de Nov'waleif. Disse também que os Fantasmas estão causando pânico nos moderadores e clientes. \nDurante a noite eles podem ser vistos. Sua missão é eliminar esses monstros espectrais e novamente conferir paz a essa calma cidade!\nAté agora você eliminou: \v[2] fantasmas"
    when 8 then return "Depois de uma longa conversa com o Profeta, você descobriu que seus sonhos são, na realidade, visões de um possível futuro. Entretanto, o Profeta lhe advertiu para ir a Iah'King e falar com o Rei Daeron para que tenhas mais orientações." 
    when 9 then return "Um espírito lhe advertiu para tomar cuidado com esse lugar estranho. \nEncontre-o para que ele possa explicar melhor essa história."
    when 10 then return "O espírito de Idam lhe disse para buscar uma jóia que poderá ser sua salvação algum dia. Ela se localiza em um templo no fundo da Igreja de Nov'waleif. Você deve buscar esse artefato e leva-lo de volta ao Idam e Lian."
    when 11 then return "O soldado lhe informou que um grupo de bandidos saqueam o pequeno vilarejo retirando todos os lucros dos fazendeiros. Como se não o bastasse, os bandidos saem da densa floresta na na parte superior da cidade.\n Encontre e derrote 10 Ladrões para que desistam.\nVocê já eliminou \v[013] Ladrões."
    when 0 then return "Complete o tutorial para poder sair do Forte e iniciar seu treinamento!\n Dicas: Você deve interagir com o mundo a seu redor! \n Progresso: \v[100]% !"
      end
    return ""
  end
 
  def self.completed_description(id)
    case id
    #===========================================================================
    # New Quest Description - Paragraph of the quest's description. This is for
    #   when the quest has been completed by the player. If the description
    #   is really lengthy, the program will adjust the text into paragraph format.
    #
    #   You may use '\n' to create a new line (e.g. "Hello World!\nYou Rock!").
    #   You may also use '\v[id]' to show a variable in the description. Thus,
    #   doing something like "Found \v[3] out of \v[4]" will replace the
    #   instances with the game variables 3 and 4.
    #
    #   Any quests that are not configured will result in using the accepted
    #   quest description (the ones you wrote above).
    #
    # Configure:
    #     when x then return "description"
    # x = Quest ID
    # description = Quest's description. Use "quotes". Can be quite lengthy.
    #===========================================================================
    when 1 then return "Todo os soldados oficialmente condecorados passaram por um intenso treinamento. Os treinamentos de Nov'waleif, apesar de não serem os mais rigorosos nem mais difíceis de se manter, produzem excelentes soldados, e você é um deles!"
    when 2 then return "É uma história simples: Jéssica, uma jovem de uns 28 anos de idade perdeu sua capa. Você a encontrou e devolveu para ela a fim de avançar para o nível 2 do treinamento."
    when 3 then return "Incrívelmente esse conto se repete: Ry, um homem casado de aparentes 32 anos, perdeu seu anel de casado. Você o encontrou e o devolveu para seu dono como requisito para passar. Mesmo que não tenhas percebido, você o livrou de ter de dormir em um sofá, caso ele conseguisse chegar em casa sem a aliança."
    when 4 then return "Algo de novo aconteceu durante essa missão: Surpreendentemente, tive que procurar um papel de caligrafia e devolve-lo para seu dono Alef. Aprendi que assim podia encontrar itens em diferentes lugares, e não apenas nos báus velhos e com cheiro de madeira podre."
    when 5 then return "Fui ter com Joh'Kallium, um ancião de Nov'waleif, que tentou me ajudar com meus sonhos, infelizmente não pôde me ajudar.\n Depois que sai de sua presença, encontrei o Profeta. Ele me advertiu sobre a profecia de um livro do antigo lendário herói, Idam. Agora compreendi o que devo fazer, seguirei minha jornada para evitar que os pesadelos aconteçam." 
    when 6 then return "Oswald havia perdido sua caixinha ornamentada. Ela era um presente antigo no qual ele guardava muito de seus bens. Todos sabiam, entretanto ninguém se importava. Aconteceu que alguns ladrões roubaram sua pobre caixinha, o que resultou na tristeza do homem, uma vez que documentos importantes de sua fazenda e cooperativa estavam ali. \nVocê os encontrou e os devolveu ao homem, que novamente ficou feliz.\n Na realidade, não foi um grande feito, mas quem sabe tenha sido seu primeiro passo para se tornar um herói?!"
    when 7 then return "Incrível! De todas as criaturas vivas e não vivas, você nunca imaginaria que um fantasma pode causar tamanho reboliço em uma cidade. Mas como você o eliminou, tudo novamente se aquietou. Párabens, Com esses feitos você pode se tornar um grande herói!"
    when 8 then return "Você seguiu os conselhos do Profeta e foi a Iah'King, lá, falou com o Rei que lhe explicou a situação: Trata-se de ser o sucessor do Grande Idam Nov'waleif, o Líder da Shining Alliance."
    when 9 then return "Após ter encontrado o estranho Espírito dentro de uma igreja, você descobriu que na realidade era Idam Nov'waleif, que não revelou sua verdadeira, mas que em troca, lhe explicou sobre esse estranho mundo."
    when 10 then return "Você desceu ao mais profundo do templo, passou por imensos perigos mas voltou com o semblante triste. Infelizmente o Guardião do Templo, o qual você acredita ser o Profeta morreu."
    when 11 then return "Após explorar e desbravar a longa floresta, percebeu que existia um acampamento improvisado que os bandidos usavam para guardar os alimentos. Além disso, claro, você os eliminou e clamou a recompensa. Parabéns soldado!"
    when 0 then return "Você conseguiu completar o tutorial com êxito, parabéns!"
      end
    return nil
  end
 
  def self.location(id)
    case id
    #===========================================================================
    # Quest Location - Place where the player received the quest.
    # Configure:
    #     when x then return "location"
    # x = Quest ID
    # location = Map's name. Use "quotes".
    #===========================================================================
    when 1 then return "Base"
    when 2 then return "Treinamento 1"
    when 3 then return "Treinamento 2"
    when 4 then return "Treinamento 3"
    when 5 then return "Saída Camping"
    when 6 then return "Nov'waleif"
    when 7 then return "Nov'waleif"
    when 8 then return "Casa de Joh'Kalliun"
    when 9 then return "?????"
    when 10 then return "Igreja"
    when 11 then return "Vilarejo da Alvorada"
    when 0 then return "Forte"
   
    end
    return "?????"
  end
 
  def self.NPC(id)
    case id
    #===========================================================================
    # Quest NPC - The NPC that the player got the quest from. This can be
    #   displayed in both "string" and/or "picture" format. If using the picture
    #   format (NPCPicture = true), you must name the NPC the same as the
    #   image stored in the 'Graphics/Characters' folder. Otherwise, an error
    #   will occur while running the game.
    # Configure:
    #     when x then return "NPC"
    # x = Quest ID
    # NPC = Name of the NPC as well as the name of the NPC graphic
    #===========================================================================
    when 1 then return "Capitão"     # Even though these character graphics are
    when 2 then return "Jéssica"   # part of the RTP, you still need to copy
    when 3 then return "Ry"     # and rename the graphics and put them in
    when 4 then return "Alef"
    when 5 then return "Profeta"
    when 6 then return "Oswald"
    when 7 then return "Dona da INN"
    when 8 then return "Profeta"
    when 9 then return "Espírito"
    when 10 then return "Espírito"
    when 11 then return "Dono da INN"
    when 0 then return "Capitão"
      end                                   # your Graphics/Characters folder
    return nil
  end
 
  def self.exp(id)
    case id
    #===========================================================================
    # Quest Experience - The amount of EXP given for completing the quest.
    # Configure:
    #     when x then return EXP
    # x = Quest ID
    # EXP = Amount of experience (Player EXP)
    #===========================================================================
    when 1 then return 50 #MUDAR EXP AQUI!!!!!!
    when 6 then return 100
    when 7 then return 150
    when 8 then return 200
    when 9 then return 100
    when 10 then return 100
    when 11 then return 150
    end
    return 0
  end
 
  def self.gold(id)
    case id
    #===========================================================================
    # Quest Gold - The amount of gold given (or lost) for completing the quest.
    # Configure:
    #     when x then return Gold
    # x = Quest ID
    # Gold = Amount of gold given/taken. Use a '-' for lost gold (e.g. -500)
    #===========================================================================
    when 1 then return 0
    when 6 then return 250
    when 7 then return 250
    when 8 then return 300
    when 11 then return 500
   
      end
    return 0
  end
 
  def self.reward(id)
    case id
    #===========================================================================
    # Quest Reward - The items given for completing the quest. The amount of
    #   different items that can be earned should not be more than 5.
    #
    #   You can also put in string values to represent a unique kind of reward.
    #   If RewardOnComplete is true, the game will ignore rewarding string-
    #   based values.
    #
    # Configure:
    #     when x then return [[item_type, item_id, amount], ...] (max size of 5)
    # x = Quest ID
    # item_type = Type of item. Refer below:
    #             1 = Normal Items (potions, key items, medicine, etc.)
    #             2 = Weapon
    #             3 = Armor
    # item_id = Item's ID located in the database
    # amount = Number of items given for completion
    #
    #   For inputing string values, you can copy one of these examples:
    #     when x then return ["String"]
    #     when x then return [[1,2,3], "Your Message"]
    #     when x then return ["You got", [1,1,1], "Nice potion!"]
    #===========================================================================
    when 1 then return [[2,299,1], "Nova Missão: Dia do Soldado"]
    when 6 then return [[2,299,1], "Nova Missão: A Petição de Oswald"]
    end
    return nil
  end
 
  def self.rank(value)
    case value
    #===========================================================================
    # Quest Rank - The player's rank in terms of completed quests.
    #     Of course, if you do not wish to use this, simply delete the 'when's
    #     and the 'end' directly after, leaving only the 'return' left. Then,
    #     put an empty string after the return like this -->  return ""
    # Configure:
    #     when x then return "rank"
    # x = The number of completed quests. Use (x..y) for all values in between
    #     x and y (for example, (3..6) applies for IDs 3, 4, 5, and 6
    # rank = The rank of the party. Use "quotes".
    #===========================================================================
    when 1 then return "Nível 1"
    when 2..5 then return "Nível 1"
    when 6..7 then return "Nível 6"
    when 8 then return "Nível 8"
    when 9..10 then return "Nível 10"
    when 11 then return "Nível 7"
    when 0 then return "Sem nível"
          end
    return "Normais"
  end # <-- Don't delete this 'end' !
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#@             E N D          O F         C O N F I G U R A T I O N            @
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
end

#===============================================================================
module Quest
  #Adds the quest under "New", meaning the player has yet to accept it
  def self.new(id)
    $game_party.add_newquest(id)
  end
  #Adds the quest under "Accepted", meaning the player is doing the quest
  def self.accept(id)
    $game_party.accept_quest(id)
  end
  #Adds the quest under "Completed", meaning the quest is finished. Gives reward.
  def self.complete(id)
    $game_party.complete(id)
  end
  #Adds the quest under "New" and "Completed", meaning the quest can be redone
  def self.repeat(id)
    $game_party.repeat(id)
  end
  #Checks if the quest is repeatable
  def self.repeat?(id)
    return $game_party.repeating?(id)
  end
  #Checks if the quest is completed
  def self.complete?(id, only=false)
    return $game_party.completed?(id, only)
  end
  #Checks if the quest is accepted
  def self.accept?(id, only=false)
    return $game_party.has_quest?(id, only)
  end
  #Checks if the quest is unaccepted
  def self.new?(id, only=false)
    return $game_party.has_available?(id, only)
  end
  #Returns quests completed
  def self.done
    return ($game_party.quests_completed.dup | $game_party.quests_repeating).size
  end
 
end
#===============================================================================
# Game_Party Class
#   : Adds the quest data
#===============================================================================
class Game_Party
 
  attr_accessor :quests_new
  attr_accessor :quests_accepted
  attr_accessor :quests_completed
  attr_accessor :quests_repeating
 
  alias kk20_initialize_again initialize
  def initialize
    kk20_initialize_again
    @quests_new = []
    @quests_accepted = []
    @quests_completed = []
    @quests_repeating = []
  end
 
  def add_newquest(id)
    unless has_available?(id)
      @quests_new.push(id)
    end
  end
 
  def accept_quest(id)
    if !@quests_accepted.include?(id) and @quests_new.include?(id)
      @quests_new.delete(id)
      @quests_accepted.push(id)
    end
  end
 
  def complete(id)
    if !completed?(id, true) and @quests_accepted.include?(id)
      @quests_accepted.delete(id)
      @quests_repeating.delete(id)
      @quests_completed.push(id)
      if QuestData::RewardOnComplete
        $game_party.gain_gold(QuestData.gold(id))
        $game_party.actors.each{|actor|
          unless actor.cant_get_exp?
            actor.exp += QuestData.exp(id)
          end
        }
        rewards = QuestData.reward(id)
        return if rewards.nil?
        #~~begin loop~~
        rewards.each{|reward|
          next if reward.is_a?(String)
          case reward[0]
          when 1 then $game_party.gain_item(reward[1], reward[2])
          when 2 then $game_party.gain_weapon(reward[1], reward[2])
          when 3 then $game_party.gain_armor(reward[1], reward[2])
          end
        }
        #~~end loop~~
      end
    end
  end
 
  def repeat(id)
    if completed?(id, true)
      @quests_completed.delete(id)
      @quests_repeating.push(id)
      @quests_new.push(id)
    end
  end
 
  def repeating?(id)
    return @quests_repeating.include?(id)
  end
 
  def completed?(id, only=false)
    if only
      return @quests_completed.include?(id)
    else
      return (@quests_completed.include?(id) or @quests_repeating.include?(id))
    end
  end
 
  def has_quest?(id, only=false)
    if only
      return @quests_accepted.include?(id)
    else
      return (@quests_accepted.include?(id) or @quests_completed.include?(id) or
              @quests_repeating.include?(id))
    end
  end
 
  def has_available?(id, only=false)
    if only
      return @quests_new.include?(id)
    else
      return (@quests_new.include?(id) or @quests_accepted.include?(id) or
              @quests_completed.include?(id) or @quests_repeating.include?(id))
    end
  end
 
end
#===============================================================================
# Window_Base Class
#   : Modified method provided by Blizzard
#===============================================================================
class Window_Base < Window
 
  def draw_even_text(x, y, width, height, text, align = 0)
    # Replace all instances of \v[n] to the game variable's value
    text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    text.gsub!(/[\V\v]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    # Break up the text into lines
    if text["\n"] != nil
      lines = text.split("\n")
    else
      lines = text.split("\\n")
    end
    result = []
    # For each line generated from \n
    lines.each{|text_line|
      # Divide text into each individual word
      words = text_line.split(' ')
      current_text = words.shift
      # If there were less than two words in that line, just push the text
      if words.empty?
        result.push(current_text == nil ? "" : current_text)
        next
      end
      # Evaluate each word and determine when text overflows to a new line
      words.each_index {|i|
        if self.contents.text_size("#{current_text} #{words}").width > width
          result.push(current_text)
          current_text = words
        else
          current_text = "#{current_text} #{words}"
        end
        result.push(current_text) if i >= words.size - 1
      }
    }
    # Draw results to the window
    result.each_index {|i|
        self.contents.draw_text(x, y + i*height, width, height, result, align)}
  end
     
end
#*******************************************************************************
#===============================================================================
# Window for displaying the party's rank and number of new/available/completed quests
#===============================================================================
class Window_QuestRank < Window_Base
 
  def initialize
    super (0, 0, 640, 64)
    self.contents = Bitmap.new(width-32, height-32)
    refresh
  end
 
  def refresh
    self.contents.clear
    quest_rank = QuestData.rank($game_party.quests_completed.size)
    self.contents.draw_text(0, 0, 640, 32, "#{quest_rank}")
   
    new = sprintf("%5s", $game_party.quests_new.size.to_s)
    accepted = sprintf("%5s", $game_party.quests_accepted.size.to_s)
    completed = sprintf("%5s", ($game_party.quests_completed.dup | $game_party.quests_repeating).size.to_s)
    self.contents.draw_text(0, 0, 608, 32, "Novas:#{new}    " +
      "Ativas:#{accepted}    Finalizadas:#{completed}", 2)
  end
end
#===============================================================================
# Window for displaying the quest's ID and title
#===============================================================================
class Window_QuestTitle < Window_Base
 
  #Type determines what window to view (0 = All, 1 = New, 2 = Accepted, 3 = Complete)
  def initialize(type=0)
    super (0, 64, 640, 64)
    self.contents = Bitmap.new(width-32,height-32)
    @quest_num = 0
    @quest_title = ""
    @type = type
    refresh
  end
 
  #Updates the quest /value/'s ID and name
  alias kk20_update_quest update
  def update(value)
    kk20_update_quest
    return if @quest_num == value
    @quest_num = value
    @quest_title = QuestData.name(value)
    refresh
  end
 
  #Method is called when user shifts the quest tab
  def next_page
    @type = (@type + 1) % 4
    refresh
  end
 
  def refresh
    self.contents.clear
    quest_tab = ""
    case @type
    when 0 then quest_tab = "TODAS AS QUESTS"
    when 1 then quest_tab = "NOVAS"
    when 2 then quest_tab = "ATIVAS"
    when 3 then quest_tab = "FINALIZADAS"
    end
    quest_number = sprintf("%03d", @quest_num)
    if @quest_num != 0 and @quest_num != nil
      self.contents.draw_text(0, 0, 640, 32, "No. #{quest_number}")
    else
      self.contents.draw_text(0, 0, 640, 32, "Missões:.")
    end
    self.contents.draw_text(80, 0, 640, 32, "#{@quest_title}")
    self.contents.draw_text(0, 0, 600, 32, "<#{quest_tab}>", 2)
  end
end
#===============================================================================
# Window for displaying all the quests as pictures
#===============================================================================
class Window_QuestList < Window_Selectable
 
  #Type determines what window to view (0 = All, 1 = New, 2 = Accepted, 3 = Complete)
  def initialize(type=0)
    super (0, 128, 640, 352)
    @column_max = 5
    @type = type
    refresh
    self.index = 0
  end
 
  #For information window
  def quest
    return @data[self.index]
  end
 
  #When the player shifts to next page. Also places cursor to new index if nil.
  def next_page
    @type = (@type + 1) % 4
    refresh
    if (@data[self.index].nil?)
      self.index = [@data.size-1, 0].max
    end
  end
 
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end   
    @data = []
    if [0,1].include?(@type)
      for i in 0...$game_party.quests_new.size
        @data.push($game_party.quests_new)
      end
    end
    if [0,2].include?(@type)
      for i in 0...$game_party.quests_accepted.size
        @data.push($game_party.quests_accepted)
      end
    end
    if [0,3].include?(@type)
      total = $game_party.quests_completed.dup | $game_party.quests_repeating
      for i in 0...total.size
        @data.push(total) unless @data.include?(total)
      end
    end
    @data.sort! if @data.size > 1
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 64, row_max * 64)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end

  def draw_item(index)
    quest_number = @data[index]
    if $game_party.quests_repeating.include?(quest_number)
      bitmap = RPG::Cache.picture(QuestData::RepeatQuestPic)
    elsif $game_party.quests_new.include?(quest_number)
      bitmap = RPG::Cache.picture(QuestData::NewQuestPic)
    elsif $game_party.quests_accepted.include?(quest_number)
      bitmap = RPG::Cache.picture(QuestData::AcceptedQuestPic)
    elsif $game_party.quests_completed.include?(quest_number)
      bitmap = RPG::Cache.picture(QuestData::CompletedQuestPic)
    end
    x = 8 + index % @column_max * (self.width / @column_max)
    y = 8 + index / @column_max * 64
    self.contents.blt(x, y, bitmap, Rect.new(0, 0, 48, 48), 255)
  end
          #####################################################
          # Modified methods to allow 64x64 selection windows #
          #####################################################
  def page_row_max
    return (self.height) / 64
  end
 
  def top_row
    return self.oy / 64
  end

  def top_row=(row)
    if row < 0
      row = 0
    end
    if row > row_max - 1
      row = row_max - 1
    end
    self.oy = row * 64
  end
 
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    row = @index / @column_max
    if row < self.top_row
      self.top_row = row
    end
    if row > self.top_row + (self.page_row_max - 1)
      self.top_row = row - (self.page_row_max - 1)
    end
    # Calculate cursor coordinates
    x = @index % @column_max * (640 / @column_max)
    y = @index / @column_max * 64 - self.oy
    # Update cursor rectangle
    self.cursor_rect.set(x, y, 64, 64)
  end
end
#===============================================================================
# Window to display quest's information
#===============================================================================
class Window_QuestInfo < Window_Base
 
  def initialize(quest_id)
    super (0, 0, 640, 480)
    self.z = 1000
    self.contents = Bitmap.new(width-32,height-32)
    @quest = quest_id
    refresh
  end
 
  def update_quest(quest_id)
    if @quest != quest_id
      @quest = quest_id
      refresh
    end
  end
 
  def refresh
    # Titles of important text------------------------------
    self.contents.clear
    quest_number = sprintf("%03d", @quest)
    self.contents.font.color = system_color
    self.contents.draw_text(0, 0, 640, 32, "No. #{quest_number}")
    self.contents.draw_text(80, 0, 640, 32, QuestData.name(@quest))
    # If quest is completed OR quest is repeatable but not currently accepted
    if Quest.repeat?(@quest) && Quest.accept?(@quest, true)
      self.contents.font.color = Color.new(0, 230, 255)
      self.contents.draw_text(0, 0, 600, 32, "-REPETIÇÃO-", 2)
      self.contents.font.color = system_color
    elsif Quest.complete?(@quest, true) || (Quest.repeat?(@quest) && !Quest.accept?(@quest, true))
      self.contents.font.color = Color.new(233, 188, 10)
      self.contents.draw_text(0, 0, 600, 32, "-FINALIZADAS-", 2)
      self.contents.font.color = system_color
    end
    self.contents.draw_text(0, 200, 280, 32, "Quest recebida do NPC:")
    self.contents.draw_text(0, 360, 280, 32, "Localização:")
    self.contents.draw_text(320, 200, 280, 32, "Recompensa(s):")
    # Description------------------------------
    self.contents.font.color = normal_color
    self.contents.fill_rect(0, 40, 640, 5, Color.new(24,184,231,128))
    self.contents.font.size = 18
    if Quest.complete?(@quest, true) || (Quest.repeat?(@quest) && !Quest.accept?(@quest, true))
      unless QuestData.completed_description(@quest).nil?
        draw_even_text(0, 58, 640-32, 18, QuestData.completed_description(@quest))
      else
        draw_even_text(0, 58, 640-32, 18, QuestData.accepted_description(@quest))
      end
    elsif Quest.accept?(@quest)
      draw_even_text(0, 58, 640-32, 18, QuestData.accepted_description(@quest))
    else
      unless QuestData.new_description(@quest).is_a?(Array)
        draw_even_text(0, 58, 640-32, 18, QuestData.new_description(@quest))
      else
        self.contents.draw_text(0, 103, 640-32, 18, QuestData.new_description(@quest)[0], 1)
      end
    end
    self.contents.fill_rect(0, 180, 640, 5, Color.new(24,184,231,128))
    self.contents.fill_rect(300, 180, 5, 320, Color.new(24,184,231,128))
    # NPC and Location------------------------------
    self.contents.font.size = Font.default_size
    if QuestData::NPCPicture and QuestData.NPC(@quest) != nil
      bitmap = RPG::Cache.character(QuestData.NPC(@quest), 0)
      h = bitmap.height/4
      w = bitmap.width/4
      self.contents.blt(0, 240, bitmap, Rect.new(0, 0, w, h))
      self.contents.draw_text(w+20, h+240, 280, 32, QuestData.NPC(@quest))
    else
      if QuestData.NPC(@quest) != nil
        self.contents.draw_text(20, 240, 280, 32, QuestData.NPC(@quest))
      end
    end
    self.contents.draw_text(20, 400, 280, 32, QuestData.location(@quest))
    # Rewards------------------------------
    if !((QuestData::HideReward == true or QuestData::HideReward.include?(@quest)) and !Quest.complete?(@quest))
      y = 225
      exp_string = ""
      if QuestData.exp(@quest) != 0
        if QuestData::EXPicon != nil and QuestData::EXPicon != ""
          bitmap = RPG::Cache.icon(QuestData::EXPicon)
          self.contents.blt(340, y, bitmap, Rect.new(0, 0, 32, 32))
        else
          exp_string = "EXP"
        end
        self.contents.draw_text(370, y, 280, 32, QuestData.exp(@quest).to_s + " " + exp_string)
        y += 24
      end
      gold_string = ""
      if QuestData.gold(@quest) != 0
        if QuestData::GoldIcon != nil and QuestData::GoldIcon != ""
          bitmap = RPG::Cache.icon(QuestData::GoldIcon)
          self.contents.blt(340, y, bitmap, Rect.new(0, 0, 32, 32))
        else
          gold_string = $data_system.words.gold
        end
        self.contents.draw_text(370, y, 280, 32, QuestData.gold(@quest).to_s + " " + gold_string)
        y += 32
      end
      if QuestData.reward(@quest) != nil
        #~~being loop~~
        QuestData.reward(@quest).each_index{|i|
        item = QuestData.reward(@quest)
        # If string value
        if item.is_a?(String)
          self.contents.draw_text(370, y, 280, 32, item)
          y += 32
          next
        end
        # An actual item
        case item[0]
        when 1
          bitmap = RPG::Cache.icon($data_items[item[1]].icon_name)
          self.contents.draw_text(370, y, 280, 32, $data_items[item[1]].name + " x " + item[2].to_s)
        when 2
          bitmap = RPG::Cache.icon($data_weapons[item[1]].icon_name)
          self.contents.draw_text(370, y, 280, 32, $data_weapons[item[1]].name + " x " + item[2].to_s)
        when 3
          bitmap = RPG::Cache.icon($data_armors[item[1]].icon_name)
          self.contents.draw_text(370, y, 280, 32, $data_armors[item[1]].name + " x " + item[2].to_s)
        end
        self.contents.blt(340, y, bitmap, Rect.new(0, 0, 32, 32))
        y += 32
        }
        #~~end loop~~
      end
      if QuestData.exp(@quest) == 0 and QuestData.gold(@quest) == 0 and QuestData.reward(@quest) == nil
        self.contents.draw_text(370, 225, 280, 32, "Nao")
      end
    else #If Quest Reward is hidden
      self.contents.draw_text(370, 225, 280, 32, "Desconhecida")
    end
  end
 
end
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# The actual quest scene
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
class Scene_Quest

  def main
    #Creates the windows
    @quests_rank = Window_QuestRank.new
    @quests_title = Window_QuestTitle.new(0)
    @quests_list = Window_QuestList.new(0)
    @quest_info = Window_QuestInfo.new(@quests_list.quest)
    @quest_info.visible = false
    @quests_title.update(@quests_list.quest)
    if QuestData::ShowMapBackGround
      @map = Spriteset_Map.new
      [@quests_rank,@quests_title,@quests_list,@quest_info].each{|win| win.back_opacity = 128}
    end
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @map.dispose unless @map.nil?
    @quests_rank.dispose
    @quests_title.dispose
    @quests_list.dispose
  end
  #------------------------------------------------------------
  def update
    @map.update unless @map.nil?
    @quests_title.update(@quests_list.quest)
    @quests_list.update
    @quest_info.update_quest(@quests_list.quest) unless !@quest_info.visible
    update_controls
  end
  #------------------------------------------------------------
  def update_controls
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      # If quest information is not displayed, exit scene
      if !@quest_info.visible
        $scene = QuestData::ExitScene
      else #If quest info is displayed, return to quest list
        @quest_info.visible = false
        [@quests_title,@quests_list,@quests_rank].each{|win| win.visible = true}
      end
    elsif Input.trigger?(Input::C)
      #Works only if quest info isn't displayed
      if !@quest_info.visible and !@quest
[close]
Em breve:

Para verificar se uma missão pode ser aceita, use o comando na condição:

Quest.new?(ID)

ID = ID da missão no script.


Se a condição for cumprida, o evento funcionará exatamente como você planejou, está praticamente pronto. :D

 :wow: :wow: :wow: :wow: :wow: :wow: Beleza!
Obrigadíssimo pela help!
já pode trancar o tópico
Em breve: