Pular para o conteúdo principal

Criar Quests

webapp_banner.jpg

Quest de Exemplo

O EliteMobs vem pré-instalado com um test_quest.yml, que será analisado aqui como um formato simples de quest a seguir.

As Quests Personalizadas ficam na pasta ~plugins/EliteMobs/customquests!

test_quest.yml

isEnabled: true
customObjectives:
Objective1:
amount: '1'
filename: test_boss.yml
objectiveType: KILL_CUSTOM
customRewards:
- filename=magmaguys_toothpick.yml:amount=1:chance=1
name: "&aKill the Test Boss"
questLore:
- "&cEnd the test boss'' reign of terror!"

create_quest_quest.jpg

Se a interface da tua quest não tiver este aspeto, podes alterá-la para corresponder usando /em alt.

Esta quest de exemplo dará aos jogadores a tarefa de derrotar 1 test_boss.yml. (O nome real do boss apresentado no rastreador de quests será o name: definido no test_boss.yml.) E, como recompensa por completar a quest, eles serão recompensados com 1 Magmaguy's Toothpick.

Criar Quests Personalizadas

isEnabled

Define se a quest está ativada.

KeyValuesDefault
isEnabledBooleantrue
Exemplo
isEnabled: true

customObjectives

Define os objetivos da quest.

KeyValuesDefault
customObjectivesEspecial [1]nenhum

Nota: Se estiveres a usar um boss multifase como objetivo, o objetivo deve usar a primeira fase como alvo.

Exemplos

KILL_CUSTOM:

customObjectives:
Objective1:
amount: '1'
filename: my_cool_boss.yml
objectiveType: KILL_CUSTOM

DIALOG:

customObjectives:
Objective1:
dialog:
- "&a[Dialog NPC] &fCome here often?"
- "&7&oI should eat more apples."
filename: dialog_npc.yml
npcName: Dialog NPC
location: at dialog location.
objectiveType: DIALOG

FETCH_ITEM:

customObjectives:
Objective1:
amount: '99'
itemName: Red Apples
filename: my_quest_item_red_apples.yml
objectiveType: FETCH_ITEM

ARENA:

customObjectives:
Objective1:
objectiveType: ARENA
filename: my_arena.yml
name: "Complete the Arena"

create_quest_objective.jpg

Especial [1]

Expandir Tabela

Os Objetivos Personalizados são construídos usando os seguintes valores:

KeyDescription
KILL_CUSTOM / FETCH_ITEM / DIALOG / ARENAUsado para definir o tipo de objetivo que isto representa. KILL_CUSTOM indica que a quest envolve matar um Boss Personalizado específico, FETCH_ITEM indica que a quest envolve obter um Item Personalizado específico, DIALOG indica que a quest envolve falar com um NPC, e ARENA indica que a quest envolve completar uma arena específica.
filenameUsado para definir o nome do ficheiro do Boss Personalizado, do Item Personalizado que o jogador tem de matar / obter, do NPC com quem tem de falar, ou da arena que tem de completar.
amountUsado para definir a quantidade de Bosses Personalizados que devem ser mortos ou de itens que devem ser obtidos. Assume 1 por defeito se não for especificado.
dialogUsado para definir o diálogo do NPC com quem o jogador fala.
nameUsado para definir o nome do objetivo da quest, seja um NPC, um item personalizado, ou uma arena. Apenas para fins visuais.
itemNameUsado apenas com FETCH_ITEM – Esta definição altera como o nome do item aparece no rastreador de quests. Permite-te apresentar um nome personalizado diferente do nome real do item no jogo.

Repara que cada campo de Objetivo Personalizado é separado por um : !


customRewards

Define as recompensas da quest.

KeyValuesDefault
customRewardsFormato universal de loot do EliteMobsnenhum
Exemplo
customRewards:
- currencyAmount=50:amount=1:chance=0.05
- material=COOKED_COD:amount=3:chance=1.0
- filename=magmaguys_toothpick.yml:amount=1:chance=1.0

create_quest_rewards.jpg

Nota: Se não especificares customRewards, o sistema de quests gerará automaticamente recompensas com base no nível da quest. A qualidade da recompensa escala com a dificuldade da quest e inclui tanto moeda como itens. Para um controlo preciso das recompensas, especifica sempre customRewards explicitamente.


questAcceptPermission

Define a permissão que o jogador tem de ter para poder aceitar a quest.

KeyValuesDefault
questAcceptPermissionStringnenhum
Exemplo
questAcceptPermission: elitequest.my_permission

questAcceptPermissions

Define as permissões que o jogador tem de ter para poder aceitar a quest.

KeyValuesDefault
questAcceptPermissionsString Listnenhum
Exemplo
questAcceptPermissions: 
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml

questLockoutPermission

Define a permissão que o jogador receberá ao completar a quest, a qual o impedirá de voltar a fazê-la. Se não for especificada, a permissão de bloqueio da quest é gerada automaticamente como elitequest.[filename].

KeyValuesDefault
questLockoutPermissionStringelitequest.[filename]
Exemplo
questLockoutPermission: elitequest.my_quest.yml

questLockoutMinutes

Define quanto tempo, em minutos, o jogador terá de esperar antes de poder voltar a fazer a quest (funciona removendo a permissão de bloqueio da quest).

KeyValuesDefault
questLockoutMinutesInteger-1(nunca se repetirá)
Exemplo
questLockoutMinutes: 60

name

Define o nome da quest. Aceita Color Codes.

KeyValuesDefault
nameString[filename]
Exemplo
name: "&aMy Great Quest Name"

questLore

Define a descrição (lore) da quest que aparecerá no menu de quests no jogo.

KeyValuesDefault
questLoreString Listnenhum
Exemplo
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

create_quest_lore.jpg


temporaryPermissions

Define as permissões atribuídas ao jogador até que ele entregue a quest.

Se estiveres a usar esta definição para garantir que um item só cai quando os jogadores têm uma quest específica ativa, também terás de configurar a Mesma Permissão no ficheiro de configuração do item.

KeyValuesDefault
temporaryPermissionsString Listnenhum
Exemplo
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml

questAcceptDialog

Define o diálogo que aparece no chat ao aceitar a quest.

KeyValuesDefault
questAcceptDialogString Listnenhum
Exemplo
questAcceptDialog:
- "My hero! You are so helpful!"
- "I wish you the best of luck!"

create_quest_accept.jpg


questCompleteMessage

Define o diálogo que aparece no chat ao completar a quest.

KeyValuesDefault
questCompleteMessageString Listnenhum
Exemplo
questCompleteMessage:
- "My hero! You have completed my difficult quest!"
- "As a reward you can have this loaf of bread!"

create_quest_complete.jpg


questCompleteCommands

Define os comandos que serão executados ao completar a quest. Suporta placeholders: $player para o nome do jogador, e $getX, $getY, $getZ para as coordenadas da localização do jogador.

KeyValuesDefault
questCompleteCommandsString Listnenhum
Exemplo
questCompleteCommands:
- say $player has finished a quest at $getX, $getY, $getZ!
- give $player diamond 1

create_quest_commands.jpg


turnInNPC

Define o nome do ficheiro do NPC com quem os jogadores precisam de falar/interagir para completar a quest. Este não tem de ser o mesmo NPC que entregou a quest.

KeyValuesDefault
turnInNPCFilenamenenhum
Exemplo
turnInNPC: my_cool_quest_npc.yml

Doadores de Quests

Para atribuir uma quest a um NPC que a dará aos jogadores, precisas de configurar o ficheiro do NPC, não o ficheiro da quest.

No teu ficheiro de configuração do NPC (~/plugins/EliteMobs/npcs/), adiciona:

questFileName: my_quest.yml

Para NPCs que dão várias quests:

questFileName:
- quest_one.yml
- quest_two.yml

Consulta a documentação de criação de NPCs para mais informações sobre como configurar NPCs.


trackable

Define se a quest usará o rastreador de quests.

KeyValuesDefault
trackableBooleantrue
Exemplo
trackable: true

questLevel

Define o nível da quest. Isto é apenas um guia visual para que os jogadores saibam quão desafiante a quest será. Isto não modifica de forma alguma os níveis de bosses, itens ou outros.

KeyValuesDefault
questLevelInteger0
Exemplo
questLevel: 10

create_quest_level.jpg


questAcceptSound

Define o som que toca quando uma quest é aceite. É possível tanto tocar sons do Minecraft como tocar sons de um resource pack.

KeyValuesDefault
questAcceptSoundStringnenhum
Exemplo
questAcceptSound: entity.experience_orb.pickup

create_quest_level.jpg


questCompleteSound

Define o som que toca quando uma quest é completada (entregue). É possível tanto tocar sons do Minecraft como tocar sons de um resource pack.

KeyValuesDefault
questCompleteSoundStringnenhum
Exemplo
questCompleteSound: entity.player.levelup

create_quest_level.jpg


Suporte de Localização

Os seguintes campos suportam localização para servidores multilíngues:

  • name
  • questLore
  • questAcceptDialog
  • questCompleteMessage

Isto permite-te fornecer traduções para diferentes idiomas no teu servidor.


Permissões

Como mencionado nas tabelas acima, as permissões são normalmente Strings ou String Lists. Mas vamos entrar em mais detalhe sobre como vais usá-las para bloquear e desbloquear quests.

Digamos que estás a criar a quest_3 numa série de quests que planeaste e não queres que os jogadores possam aceitar a quest_3 antes de terminarem a quest_2. Configuraríamos o ficheiro da quest assim:

questAcceptPermission: elitequest.quest_2.yml
questLockoutPermission: elitequest.quest_3.yml

Ao definir o questAcceptPermissions como elitequest.quest_2.yml impedimos agora os jogadores de aceitar a quest_3.yml antes de terminarem a quest_2.yml.
Ao definir o questLockoutPermission como elitequest.quest_3.yml impedimos os jogadores de poderem voltar a receber essa quest enquanto já a tiverem no seu rastreador ou se já a tiverem terminado. Isto impede os jogadores de poderem repetir a quest.

Caso queiras criar uma quest que só fica disponível depois de os jogadores terem completado uma série de quests, então configurarias o ficheiro da quest assim:

questAcceptPermissions: 
- elitequest.quest_2.yml
- elitequest.quest_3.yml
- elitequest.quest_4.yml

Se quiseres que os jogadores só possam saquear determinados itens quando têm a quest correta ativa, então podemos fazer isso usando temporaryPermissions. Criaríamos uma permissão no ficheiro da quest usando temporaryPermissions e depois criaríamos uma permissão correspondente no ficheiro do item usando permission.

Por exemplo, abriríamos o nosso ficheiro de quest e adicionaríamos o seguinte:

temporaryPermissions: 
- elitequest.my_cool_item.yml

Depois abriríamos o ficheiro do item, no nosso caso my_cool_item.yml, e então adicionaríamos o seguinte:

permission: elitequest.my_cool_item.yml

Ambos os ficheiros têm agora permissões correspondentes, o que deverá agora fazer com que o nosso item só caia quando os jogadores têm a quest correta ativa.

Quests Dinâmicas

As Quests Dinâmicas são quests geradas proceduralmente que são criadas e atualizadas automaticamente pelo EliteMobs. Ao contrário das quests personalizadas definidas em ficheiros de configuração, as quests dinâmicas não requerem configuração manual e adaptam-se à progressão de cada jogador.

Como Funcionam

  • Tier da Quest: O tier de quests dinâmicas de um jogador deriva do seu nível de combate: tier = combatLevel / 5, limitado a um intervalo de 1 a 20. Por exemplo, um jogador com nível de combate 45 receberá quests dinâmicas de tier 9. As próprias quests (e as suas recompensas) escalam com o nível de combate real do jogador, que é limitado a um intervalo de 1 a 100.
  • 3 Quests Por Tier: Para cada um dos 20 tiers de quests, o sistema gera exatamente 3 objetivos de quest aleatórios de cada vez. São oferecidas aos jogadores as 3 quests correspondentes ao seu tier atual.
  • Ciclo de Atualização Automática: O conjunto de objetivos de quests dinâmicas é regenerado a cada 60 segundos (a cada 1200 ticks). Quando o conjunto é atualizado, novos objetivos substituem os antigos, dando aos jogadores uma seleção rotativa de tarefas.
  • Adaptação a Masmorras Dinâmicas: Quando um jogador entra numa masmorra dinâmica com uma seleção de nível específica, todas as suas quests dinâmicas ativas adaptam-se para corresponder ao nível dos mobs da masmorra. O nível da quest, os objetivos e o nome apresentado são atualizados em conformidade para que as quests se mantenham relevantes para o conteúdo da masmorra.