Aller au contenu principal

Créer des PNJ

webapp_banner.jpg

Paramètres de configuration

isEnabled

Définit si un PNJ est activé.

CléValeursDéfaut
isEnabledBooleantrue
Exemple
isEnabled: true

name

Définit le nom d'affichage d'un PNJ. Prend en charge les Codes de couleur et les clés de traduction pour les serveurs multilingues.

CléValeursDéfaut
nameStringaucun
Exemple
name: "&aEnn Peecee"

create_npc_name.jpg


scale

Définit l'échelle (la taille) du PNJ. Ceci est appliqué via l'attribut vanilla generic_scale sur l'entité sous-jacente.

CléValeursDéfaut
scaleMultiplier1.0

Lors de la mise à l'échelle, 1.0 représente la taille par défaut. Pour agrandir l'entité, augmentez la valeur (par exemple, 1.2). Pour rapetisser l'entité, diminuez la valeur (par exemple, 0.8).

Exemple
scale: 1.2

role

Définit le rôle du PNJ, sous le nom. Purement visuel. Prend en charge les Codes de couleur et les clés de traduction pour les serveurs multilingues.

CléValeursDéfaut
roleStringaucun
Exemple
role: "&c<Red Fellow>"

create_npc_role.jpg


profession

Définit la profession du PNJ, qui détermine son apparence (skin) lorsqu'il n'utilise pas de déguisement.

CléValeursDéfaut
professionProfessionNITWIT
Exemple
profession: NITWIT

create_npc_profession.jpg


greetings

Définit la liste des salutations que le PNJ peut prononcer lorsqu'un joueur entre pour la première fois dans son activationRadius. Une entrée est choisie au hasard et affichée sous forme de bulle de chat flottante au-dessus du PNJ (visible uniquement par ce joueur, pendant environ 5 secondes). Prend en charge les clés de traduction pour les serveurs multilingues.

Une salutation ne se déclenche qu'à l'entrée dans le rayon, et non de façon répétée tant que le joueur y reste.

CléValeursDéfaut
greetingsString Listaucun
Exemple
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog

Définit les lignes que le PNJ peut prononcer sous forme de bulle de chat flottante. Une entrée est choisie au hasard à chaque fois (la liste n'est pas lue dans l'ordre). Prend en charge les clés de traduction pour les serveurs multilingues.

Le moment du déclenchement dépend de l'interactionType :

  • Les PNJ CHAT prononcent une ligne de dialogue lorsqu'un joueur fait un clic droit dessus.
  • Tous les autres interactionType prononcent une ligne de dialogue à chaque analyse de proximité tant qu'un joueur reste dans l'activationRadius.

Un \n littéral à l'intérieur d'une ligne la découpe en plusieurs lignes empilées dans la bulle.

CléValeursDéfaut
dialogString Listaucun
Exemple
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell

Définit les messages d'adieu du PNJ. Une entrée est choisie au hasard et affichée sous forme de bulle de chat flottante. Prend en charge les clés de traduction pour les serveurs multilingues.

Les adieux se déclenchent lorsqu'un joueur ferme un menu d'inventaire en se tenant à moins de 5 blocs du PNJ — typiquement juste après avoir fermé un menu de boutique, de quête ou d'arène. Ils ne se déclenchent pas lorsqu'un joueur sort simplement de l'activationRadius.

CléValeursDéfaut
farewellString Listaucun
Exemple
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk

Définit si le PNJ peut parler. Lorsque ce paramètre vaut false, le PNJ n'affiche jamais de bulle de chat : greetings, dialog et farewell sont donc tous supprimés.

CléValeursDéfaut
canTalkBooleantrue
Exemple
canTalk: true

activationRadius

Définit le rayon, en blocs, auquel un PNJ peut détecter l'approche d'un joueur.

La proximité est analysée toutes les 5 secondes. Tant qu'un joueur est dans le rayon, le PNJ pivote pour lui faire face, les indicateurs de quête sont affichés (pour les PNJ QUEST_GIVER / CUSTOM_QUEST_GIVER) et greetings / dialog sont déclenchés. Régler ce paramètre à 0 (ou moins) désactive entièrement la détection de proximité pour ce PNJ.

CléValeursDéfaut
activationRadiusDouble3.0
Exemple
activationRadius: 3.0

scripts

Définit les scripts Lua attachés à ce PNJ. Les fichiers de script sont chargés depuis plugins/EliteMobs/npc_scripts/. L'extension .lua est optionnelle — elle est ajoutée automatiquement si vous l'omettez.

CléValeursDéfaut
scriptsString Listaucun

Les scripts de PNJ s'exécutent sur le moteur Lua partagé MagmaCore et prennent en charge les hooks suivants : on_spawn, on_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter et on_zone_leave. Consultez Scripts Lua de PNJ pour l'API complète et des exemples.

Un nom de fichier de script qui ne correspond à aucun fichier de npc_scripts/ est ignoré avec un avertissement ; le PNJ apparaît quand même.

Exemple
scripts:
- wave.lua

interactionType

Définit le type d'interaction que le PNJ effectuera.

CléValeursDéfaut
interactionTypeSpécial [1]NONE
Exemple
interactionType: TELEPORT_BACK

noPreviousLocationMessage

Lorsqu'un PNJ Téléporteur n'a aucun emplacement précédent vers lequel téléporter un joueur, il affichera ce message. Accepte les Codes de couleur et les clés de traduction pour les serveurs multilingues.

CléValeursDéfaut
noPreviousLocationMessageStringaucun
Exemple
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout

Définit la durée, en minutes, avant qu'un PNJ ne disparaisse définitivement.

CléValeursDéfaut
timeoutDouble0 (jamais)
Exemple
timeout: 0

questFileName

Définit les quêtes que le PNJ donne.

CléValeursDéfaut
questFileNameString Listaucun
Exemple
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise

Définit le déguisement LibsDisguises du PNJ.

CléValeursDéfaut
disguiseFormat LibsDisguisesaucun
Exemple
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData

Définit les données d'un déguisement LibsDisguises personnalisé.

CléValeursDéfaut
customDisguiseDataFormat LibsDisguisesaucun
Exemple
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

create_npc_custom_disguise.jpg


customModel

Définit le modèle personnalisé ModelEngine que le PNJ utilisera.

CléValeursDéfaut
customModelStringaucun
Exemple
customModel: MY_MODEL_ONE

arena

Définit le nom de fichier de l'arène pour laquelle le PNJ ouvrira un menu (nécessite l'interactionType ARENA_MASTER).

CléValeursDéfaut
arenaFilenameaucun
Exemple
arena: my_arena.yml

command

Définit la commande que le PNJ exécutera (nécessite l'interactionType COMMAND). Les commandes sont exécutées en tant que joueur, pas en tant que console. N'incluez pas le slash initial (/).

CléValeursDéfaut
commandStringaucun
Exemple
command: say Look at me running a command, how cool!

create_npc_command.jpg


spawnLocation

Définit un unique emplacement d'apparition pour le PNJ. C'est la clé héritée à emplacement unique : elle n'est lue que si spawnLocations est absente ou vide. Les nouveaux emplacements placés en jeu sont écrits dans spawnLocations à la place ; préférez donc cette clé.

Le format est world,x,y,z,yaw,pitch.

CléValeursDéfaut
spawnLocationStringaucun
Exemple
spawnLocation: my_world,10,50,10,0,0

spawnLocations

Définit les emplacements d'apparition du PNJ. Un même fichier de PNJ peut être placé à plusieurs endroits ; un PNJ est créé par entrée. Vous devriez les définir via la commande /em place npc <npcfilename.yml>, qui ajoute votre emplacement actuel (y compris la direction dans laquelle vous regardez) à cette liste et définit également isEnabled: true.

Le format de chaque entrée est world,x,y,z,yaw,pitch.

CléValeursDéfaut
spawnLocationsString Listaucun
Exemple
spawnLocations: 
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0

instanced

Définit si le PNJ doit être instancié (pour une utilisation dans les donjons instanciés). Lorsqu'il est défini sur true, le PNJ n'apparaît pas dans le monde blueprint ; il est enregistré comme modèle et cloné pour chaque instance de donjon, chaque clone existant dans le monde d'instance correspondant.

CléValeursDéfaut
instancedBooleanfalse
Exemple
instanced: false

syncMovement

Définit si le modèle personnalisé du PNJ doit voir son mouvement synchronisé avec l'entité sous-jacente. Cela n'a d'effet que lorsque customModel est défini et que le modèle est chargé — le paramètre est ignoré pour les PNJ simples et les PNJ LibsDisguises.

CléValeursDéfaut
syncMovementBooleantrue
Exemple
syncMovement: true

Exemple de configuration de PNJ
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

create_npc_npc.jpg


Spécial [1]

Voici la liste des types d'interaction de PNJ valides :

TypeDescription
GUILD_GREETEROuvre le menu de sélection du bonus de compétence d'arme
CHATLe clic droit fait dire une ligne aléatoire de dialog
CUSTOM_SHOPOuvre le menu de la boutique personnalisée
PROCEDURALLY_GENERATED_SHOPOuvre la boutique générée procéduralement
BARNon implémenté. Indique au joueur que la fonctionnalité arrive bientôt.
ARENANe fait rien. Utilisez ARENA_MASTER à la place.
QUEST_GIVEROuvre le menu des quêtes générées procéduralement
CUSTOM_QUEST_GIVEROuvre le menu de quête pour une quête spécifique définie dans questFileName
NONEAucune interaction
SELLOuvre le menu de vente
TELEPORT_BACKTéléporte les joueurs vers le dernier emplacement hors monde elitemobs où ils se trouvaient
SCRAPPEROuvre le menu de récupération (scrap)
REPAIRMANOuvre le menu de réparation
ENCHANTEROuvre le menu d'enchantement
REFINERREMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ
SMELTERREMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ
ENHANCERREMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ
UNBINDEROuvre le menu de déliaison
ARENA_MASTEROuvre le menu d'arène pour l'arène définie dans arena
COMMANDExécute la commande définie dans command
SCROLL_APPLIEROuvre le menu des parchemins d'objet d'élite. Le PNJ n'apparaît pas du tout tant que useEliteItemScrolls est désactivé
ARROW_SHOPOuvre le menu de la boutique de flèches
GAMBLING_BLACKJACKOuvre le jeu d'argent de blackjack
GAMBLING_COINFLIPOuvre le jeu d'argent de pile ou face
GAMBLING_SLOTSOuvre le jeu d'argent de machine à sous
GAMBLING_HIGHERLOWEROuvre le jeu d'argent plus haut/plus bas

Pour plus d'informations sur ce que font les types d'interaction SCRAPPER et similaires, cliquez ici.

Notes sur le comportement des PNJ

Les PNJ ont plusieurs comportements codés en dur qui ne peuvent pas être configurés :

  • IA désactivée : les PNJ ne peuvent ni se déplacer ni trouver de chemin. Ils restent à leur emplacement d'apparition. Ils pivotent toutefois sur place pour faire face à un joueur situé dans l'activationRadius.
  • Affichage du rôle : le texte du role est rendu sur une entité d'affichage de texte flottante au-dessus du PNJ. Le décalage vertical dépend du mode de rendu du PNJ : 2.52 pour un PNJ simple, 2.30 pour un PNJ LibsDisguises, et 2.3 pour un PNJ utilisant un customModel.
  • Étiquette de rôle Bedrock : les clients Bedrock ne peuvent pas rendre les entités d'affichage de texte ; un PNJ déguisé reçoit donc en plus un porte-armure marqueur invisible portant le texte du rôle, affiché uniquement aux joueurs Bedrock et masqué pour les joueurs Java. Sa hauteur est définie par bedrockNPCRoleYOffset dans config.yml (par défaut 2.2). Ce repli nécessite Geyser ou Floodgate sur le serveur backend ; une installation Geyser uniquement sur le proxy le désactive.
  • Temps de recharge des dialogues : les PNJ attendent 3 secondes entre deux prises de parole pour éviter le chevauchement des messages. Les bulles de chat sont du texte flottant par joueur qui disparaît après environ 5 secondes, et non des messages de chat.
  • Invisibilité : un PNJ sous effet de potion d'invisibilité n'affichera pas de bulles de chat.
  • Cycle de vie des chunks : les PNJ disparaissent lorsque leur chunk est déchargé et réapparaissent lorsqu'il est rechargé. Les entités de PNJ ne sont jamais enregistrées dans le monde : elles sont recréées à partir de leur fichier de configuration.
  • Renommage bloqué : un clic droit sur un PNJ avec une étiquette en main est annulé et le joueur est informé que le PNJ ne peut pas être renommé.