Aller au contenu principal

Créer des Quêtes

webapp_banner.jpg

Quête Exemple

EliteMobs est livré avec un fichier test_quest.yml préinstallé, qui sera analysé ici comme un format de quête simple à suivre.

Les Quêtes Personnalisées se trouvent dans le dossier ~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

Si votre interface de quête ne ressemble pas à ceci, vous pouvez la modifier pour qu'elle corresponde à l'aide de /em alt.

Cette quête d'exemple donnera aux joueurs la tâche d'abattre 1 test_boss.yml. (Le nom réel du boss affiché dans le suivi de quête sera le name: défini dans test_boss.yml.) Et en récompense de la complétion de la quête, ils recevront 1 Cure-dent de Magmaguy.

Créer des Quêtes Personnalisées

isEnabled

Définit si la quête est activée.

KeyValuesDefault
isEnabledBooleantrue
Exemple
isEnabled: true

customObjectives

Définit les objectifs de la quête.

KeyValuesDefault
customObjectivesSpécial [1]aucun

Note : Si vous utilisez un boss multiphase comme objectif, l'objectif doit cibler la première phase.

Exemples

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

Spécial [1]

Déplier le Tableau

Les Objectifs Personnalisés sont construits à l'aide des valeurs suivantes :

KeyDescription
KILL_CUSTOM / FETCH_ITEM / DIALOG / ARENAUtilisé pour définir le type d'objectif que cela représente. KILL_CUSTOM indique que la quête consiste à tuer un Boss Personnalisé spécifique, FETCH_ITEM indique que la quête consiste à obtenir un Objet Personnalisé spécifique, DIALOG indique que la quête consiste à parler à un PNJ, et ARENA indique que la quête consiste à terminer une arène spécifique.
filenameUtilisé pour définir le nom de fichier du Boss Personnalisé, de l'Objet Personnalisé que le joueur doit tuer / obtenir, du PNJ auquel il doit parler, ou de l'arène qu'il doit terminer.
amountUtilisé pour définir le nombre de Boss Personnalisés à tuer ou d'objets à obtenir. Vaut 1 par défaut si non spécifié.
dialogUtilisé pour définir le dialogue du PNJ avec lequel le joueur parle.
nameUtilisé pour définir le nom de l'objectif de la quête, qu'il s'agisse d'un PNJ, d'un objet personnalisé ou d'une arène. À des fins visuelles uniquement.
itemNameUtilisé uniquement avec FETCH_ITEM – Ce paramètre modifie la façon dont le nom de l'objet apparaît dans le suivi de quête. Il vous permet d'afficher un nom personnalisé différent du nom réel de l'objet en jeu.

Veuillez noter que chaque champ d'Objectif Personnalisé est séparé par un : !


customRewards

Définit les récompenses de la quête.

KeyValuesDefault
customRewardsFormat de butin universel d'EliteMobsaucun
Exemple
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

Note : Si vous ne spécifiez pas customRewards, le système de quête générera automatiquement des récompenses en fonction du niveau de la quête. La qualité des récompenses évolue avec la difficulté de la quête et inclut à la fois de la monnaie et des objets. Pour un contrôle précis des récompenses, spécifiez toujours customRewards explicitement.


questAcceptPermission

Définit la permission que le joueur doit posséder pour accepter la quête.

KeyValuesDefault
questAcceptPermissionStringaucun
Exemple
questAcceptPermission: elitequest.my_permission

questAcceptPermissions

Définit les permissions que le joueur doit posséder pour accepter la quête.

KeyValuesDefault
questAcceptPermissionsString Listaucun
Exemple
questAcceptPermissions: 
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml

questLockoutPermission

Définit la permission que le joueur obtiendra à la fin de la quête, ce qui l'empêchera de la refaire. Si elle n'est pas spécifiée, la permission de verrouillage de quête est générée automatiquement sous la forme elitequest.[filename].

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

questLockoutMinutes

Définit la durée, en minutes, pendant laquelle le joueur devra attendre avant de pouvoir refaire la quête (fonctionne en retirant la permission de verrouillage de quête).

KeyValuesDefault
questLockoutMinutesInteger-1(ne se répétera jamais)
Exemple
questLockoutMinutes: 60

name

Définit le nom de la quête. Accepte les Color Codes.

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

questLore

Définit le lore de la quête qui apparaîtra dans le menu de quête en jeu.

KeyValuesDefault
questLoreString Listaucun
Exemple
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

create_quest_lore.jpg


temporaryPermissions

Définit les permissions attribuées au joueur jusqu'à ce qu'il rende la quête.

Si vous utilisez ce paramètre pour vous assurer qu'un objet ne tombe que lorsque les joueurs ont une quête spécifique active, vous devrez également configurer la Même Permission dans le fichier de configuration de l'objet.

KeyValuesDefault
temporaryPermissionsString Listaucun
Exemple
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml

questAcceptDialog

Définit le dialogue qui apparaît dans le chat lors de l'acceptation de la quête.

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

create_quest_accept.jpg


questCompleteMessage

Définit le dialogue qui apparaît dans le chat lors de la complétion de la quête.

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

create_quest_complete.jpg


questCompleteCommands

Définit les commandes qui s'exécuteront lors de la complétion de la quête. Prend en charge les placeholders : $player pour le nom du joueur, et $getX, $getY, $getZ pour les coordonnées de l'emplacement du joueur.

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

create_quest_commands.jpg


turnInNPC

Définit le nom de fichier du PNJ auquel les joueurs doivent parler / avec lequel ils doivent interagir pour terminer la quête. Ce n'a pas besoin d'être le même PNJ que celui qui a donné la quête.

KeyValuesDefault
turnInNPCFilenameaucun
Exemple
turnInNPC: my_cool_quest_npc.yml

Donneurs de Quêtes

Pour attribuer une quête à un PNJ qui la donnera aux joueurs, vous devez configurer le fichier du PNJ, et non le fichier de la quête.

Dans votre fichier de configuration de PNJ (~/plugins/EliteMobs/npcs/), ajoutez :

questFileName: my_quest.yml

Pour les PNJ qui donnent plusieurs quêtes :

questFileName:
- quest_one.yml
- quest_two.yml

Consultez la documentation sur la création de PNJ pour plus d'informations sur la configuration des PNJ.


trackable

Définit si la quête utilisera le suivi de quête.

KeyValuesDefault
trackableBooleantrue
Exemple
trackable: true

questLevel

Définit le niveau de la quête. Il s'agit uniquement d'un guide visuel permettant aux joueurs de savoir à quel point la quête sera difficile. Cela ne modifie en aucune façon les niveaux des boss, des objets ou autres.

KeyValuesDefault
questLevelInteger0
Exemple
questLevel: 10

create_quest_level.jpg


questAcceptSound

Définit le son joué lorsqu'une quête est acceptée. Il est possible de jouer à la fois des sons de Minecraft et des sons provenant d'un resource pack.

KeyValuesDefault
questAcceptSoundStringaucun
Exemple
questAcceptSound: entity.experience_orb.pickup

create_quest_level.jpg


questCompleteSound

Définit le son joué lorsqu'une quête est terminée (rendue). Il est possible de jouer à la fois des sons de Minecraft et des sons provenant d'un resource pack.

KeyValuesDefault
questCompleteSoundStringaucun
Exemple
questCompleteSound: entity.player.levelup

create_quest_level.jpg


Support de Localisation

Les champs suivants prennent en charge la localisation pour les serveurs multilingues :

  • name
  • questLore
  • questAcceptDialog
  • questCompleteMessage

Cela vous permet de fournir des traductions pour différentes langues sur votre serveur.


Permissions

Comme mentionné dans les tableaux ci-dessus, les permissions sont généralement des Strings ou des String Lists. Mais entrons plus en détail sur la façon dont vous les utiliserez pour verrouiller et déverrouiller les quêtes.

Disons que vous créez quest_3 dans une série de quêtes que vous avez planifiée et que vous ne voulez pas que les joueurs puissent prendre quest_3 avant d'avoir terminé quest_2. Nous configurerions le fichier de quête comme ceci :

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

En définissant questAcceptPermissions sur elitequest.quest_2.yml, nous avons maintenant empêché les joueurs de prendre quest_3.yml avant d'avoir terminé quest_2.yml.
En définissant questLockoutPermission sur elitequest.quest_3.yml, nous avons empêché les joueurs de pouvoir recevoir cette quête tant qu'ils l'ont déjà dans leur suivi ou s'ils l'ont déjà terminée. Cela empêche les joueurs de pouvoir répéter la quête.

Si vous souhaitez créer une quête qui ne devient disponible qu'après que les joueurs ont terminé une série de quêtes, vous configureriez alors le fichier de quête comme ceci :

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

Si vous voulez que les joueurs ne puissent récupérer certains objets que lorsqu'ils ont la bonne quête active, alors nous pouvons le faire en utilisant temporaryPermissions. Nous créerions une permission dans le fichier de quête à l'aide de temporaryPermissions puis créerions une permission correspondante dans le fichier d'objet à l'aide de permission.

Par exemple, nous ouvririons notre fichier de quête et ajouterions ce qui suit :

temporaryPermissions: 
- elitequest.my_cool_item.yml

Ensuite, nous ouvririons le fichier d'objet, dans notre cas my_cool_item.yml, puis nous ajouterions ce qui suit :

permission: elitequest.my_cool_item.yml

Les deux fichiers ont maintenant des permissions correspondantes, ce qui devrait désormais faire en sorte que notre objet ne tombe que lorsque les joueurs ont la bonne quête active.

Quêtes Dynamiques

Les Quêtes Dynamiques sont des quêtes générées de manière procédurale qui sont automatiquement créées et actualisées par EliteMobs. Contrairement aux quêtes personnalisées définies dans les fichiers de configuration, les quêtes dynamiques ne nécessitent aucune configuration manuelle et s'adaptent à la progression de chaque joueur.

Comment ça Fonctionne

  • Palier de Quête : Le palier de quête dynamique d'un joueur est dérivé de son niveau de combat : tier = combatLevel / 5, limité à une plage de 1 à 20. Par exemple, un joueur ayant un niveau de combat de 45 recevra des quêtes dynamiques de palier 9. Les quêtes elles-mêmes (et leurs récompenses) sont ajustées au niveau de combat réel du joueur, qui est limité à une plage de 1 à 100.
  • 3 Quêtes Par Palier : Pour chacun des 20 paliers de quête, le système génère exactement 3 objectifs de quête aléatoires à la fois. Les joueurs se voient proposer les 3 quêtes correspondant à leur palier actuel.
  • Cycle d'Actualisation Automatique : Le pool d'objectifs de quête dynamique est régénéré toutes les 60 secondes (toutes les 1200 ticks). Lorsque le pool s'actualise, de nouveaux objectifs remplacent les anciens, offrant aux joueurs une sélection tournante de tâches.
  • Adaptation aux Donjons Dynamiques : Lorsqu'un joueur entre dans un donjon dynamique avec une sélection de niveau spécifique, toutes ses quêtes dynamiques actives s'adaptent pour correspondre au niveau des mobs du donjon. Le niveau de la quête, les objectifs et le nom d'affichage sont mis à jour en conséquence afin que les quêtes restent pertinentes par rapport au contenu du donjon.