Saltar al contenido principal

Crear NPCs

webapp_banner.jpg

Guarda las definiciones en plugins/EliteMobs/npcs/, con nombres de archivo únicos que incluyan .yml. Guarda el archivo y ejecuta /em reload antes de colocar un NPC nuevo. Un jugador con elitemobs.place.npc puede usar /em place npc <npcfilename.yml> desde la posición y orientación deseadas. Un archivo admite varias ubicaciones.

Reutilizar otro archivo de NPC​

Un archivo de NPC puede partir de otro archivo de NPC con extends y cambiar solo lo que sea distinto:

extends: my_base_npc.yml
name: "&aSecond Guard"
spawnLocations:
- my_world,20,64,20,90,0

El archivo hereda todos los valores de la base y sobrescribe las claves que define. Las secciones anidadas, como patrol, se combinan clave por clave; una lista, como dialog, sustituye por completo la lista de la base. Indica la base solo por su nombre de archivo, sin ruta de carpeta. Debe ser otro archivo de npcs, incluidas sus subcarpetas, y puede a su vez extender otra base.

isEnabled, spawnLocation y spawnLocations nunca se heredan, así que cada archivo conserva sus propias ubicaciones. Una base con isEnabled: false puede servir de plantilla: los archivos que la extienden se cargan igualmente. EliteMobs no escribe valores por defecto en un archivo que usa extends. Una base que no existe, una ruta en extends o un bucle de referencias extends desactiva el archivo con una advertencia en la consola. El editor de patrullas usa extends cuando separa una ubicación de un archivo que tiene varias.

Ajustes de configuración​

isEnabled​

Habilita la definición al cargar la configuración. Recarga después de cambiarlo. Un SCROLL_APPLIER también necesita que useEliteItemScrolls esté habilitado para aparecer.

ClaveValoresPredeterminado
isEnabledBooleanotrue
Ejemplo
isEnabled: true

name​

Establece el nombre visible. Admite códigos de color. EliteMobs registra este texto en su CSV de traducciones y utiliza la traducción del idioma configurado cuando existe.

ClaveValoresPredeterminado
nameTextocadena vacía
Ejemplo
name: "&aEnn Peecee"

create_npc_name.jpg


Disposición de las etiquetas​

El nombre y el rol usan una disposición fija. No hay ajustes nameplateScale ni nameplateLineGap por NPC. Las etiquetas normales y las de disfraces siguen la altura de la entidad o del disfraz. Los modelos compatibles de FreeMinecraftModels gestionan sus etiquetas; ModelEngine conserva su propio nombre mientras EliteMobs muestra el rol. Los indicadores personales de misión se sitúan por encima.

Con las apuestas habilitadas, el NPC especial gambling_den_owner.yml añade las ganancias de la casa a estas mismas etiquetas y las actualiza aproximadamente cada segundo.

scale​

Establece la escala del aldeano subyacente mediante el atributo de escala de Minecraft. Un modelo o disfraz puede gestionar su propio tamaño visual; este ajuste no garantiza que su apariencia cambie con el aldeano.

ClaveValoresPredeterminado
scaleMultiplicador1.0

Al escalar, 1.0 representa el tamaño predeterminado. Para hacer la entidad más grande, aumenta el valor (por ejemplo, 1.2). Para hacer la entidad más pequeña, disminuye el valor (por ejemplo, 0.8).

Ejemplo
scale: 1.2

role​

Establece la etiqueta de rol bajo el nombre. Es solo visual, admite códigos de color y se registra en el CSV de traducciones.

ClaveValoresPredeterminado
roleTextocadena vacía
Ejemplo
role: "&c<Red Fellow>"

create_npc_role.jpg


profession​

Establece la profesión del aldeano y su apariencia cuando no utiliza ni disfraz ni modelo personalizado.

ClaveValoresPredeterminado
professionProfesiónNITWIT
Ejemplo
profession: NITWIT

create_npc_profession.jpg


greetings​

Define los saludos que se intentan cuando un escaneo detecta por primera vez al jugador dentro de activationRadius. Se elige uno al azar para un bocadillo flotante visible solo para ese jugador durante unos 5 segundos. La lista se registra en el CSV de traducciones. Se requiere canTalk y que haya terminado la espera compartida entre diálogos.

ClaveValoresPredeterminado
greetingsLista de textosninguno

El saludo solo se intenta al detectar la entrada. Si la espera compartida lo bloquea, permanecer dentro no vuelve a intentarlo.

Ejemplo
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog​

Define las líneas del bocadillo flotante. Cada vez se elige una al azar, sin seguir el orden de la lista. Se registra en el CSV de traducciones.

Cuándo se dispara depende del interactionType:

  • Los NPC CHAT intentan hablar al interactuar, normalmente con clic derecho. FreeMinecraftModels también envía los clics izquierdos sobre el modelo al controlador de interacciones.
  • Los demás tipos intentan dialogar en los escaneos posteriores mientras el jugador permanece dentro de activationRadius; el primer escaneo intenta un saludo.

Un \n literal divide el bocadillo en líneas apiladas. Usa comillas simples en YAML para conservarlo, o escribe \\n dentro de comillas dobles. También se aplica a saludos y despedidas.

ClaveValoresPredeterminado
dialogLista de textosninguno
Ejemplo
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell​

Define las despedidas. Se elige una al azar para un bocadillo flotante. La lista se registra en el CSV de traducciones.

ClaveValoresPredeterminado
farewellLista de textosninguno

Cerrar cualquier vista de inventario con un título no vacío intenta activar las despedidas de los NPC cercanos. La búsqueda abarca 5 bloques por cada eje alrededor del jugador; no se limita al NPC cuyo menú se abrió. Pueden hablar varios NPC. Salir de activationRadius no activa una despedida.

Ejemplo
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk​

Controla los bocadillos integrados. false suprime greetings, dialog y farewell, pero no desactiva menús, comandos, scripts Lua, diálogos de misión, detección de proximidad ni indicadores de misión.

ClaveValoresPredeterminado
canTalkBooleanotrue
Ejemplo
canTalk: true

activationRadius​

Establece el radio, en bloques, en el que un NPC puede detectar a un jugador acercándose.

ClaveValoresPredeterminado
activationRadiusDecimal3.0

La proximidad se comprueba cada 100 ticks, unos 5 segundos, con distancia tridimensional y sin comprobar la línea de visión. Los NPC quietos pueden mirar al jugador, saludar al detectar su entrada y dialogar en escaneos posteriores. 0 o menos desactiva estas interacciones, incluidos los hooks Lua de proximidad. Los indicadores de QUEST_GIVER y CUSTOM_QUEST_GIVER usan un radio independiente de 30 bloques y pueden aparecer con activationRadius: 0; reflejan las misiones disponibles y entregas de cada jugador.

El escaneo y los bocadillos se suspenden mientras una patrulla se mueve o se edita. patrol.pauseNearPlayersRadius y patrol.faceNearbyPlayers controlan la pausa y la orientación ante jugadores; consulta Patrullas.

Ejemplo
activationRadius: 3.0

scripts​

Establece los scripts Lua adjuntos a este NPC. Los archivos de script se cargan desde plugins/EliteMobs/npc_scripts/. La extensión .lua es opcional: se añade automáticamente si la omites.

ClaveValoresPredeterminado
scriptsLista de textosninguno

El motor Lua compartido de MagmaCore admite on_spawn, on_game_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter y on_zone_leave. El hook de tick de NPC es on_game_tick. Cada NPC tiene sus propias instancias; las prioridades menores se ejecutan primero. Un script que solo tenga el hook de tick necesita también un on_spawn, que puede estar vacío, para inicializarse. Consulta Scripts Lua de NPC para ver la API y los ejemplos.

Si el nombre no corresponde a una definición de script cargada, se omite con una advertencia y el NPC aparece igualmente. Respeta las mayúsculas del archivo y recarga tras editar los scripts.

Un diálogo de misión puede consumir el clic antes de on_npc_interact. En caso contrario, el hook se ejecuta antes de la interacción configurada y no la cancela.

Ejemplo
scripts:
- wave.lua

interactionType​

Establece el tipo de interacción que realizará el NPC.

ClaveValoresPredeterminado
interactionTypeEspecial [1]NONE
Ejemplo
interactionType: TELEPORT_BACK

noPreviousLocationMessage​

Mensaje de TELEPORT_BACK cuando no existe una ubicación de retorno guardada. Esta ubicación es el origen guardado por un teletransporte de EliteMobs desde fuera de un mundo de EliteMobs; no es la última posición caminada ni el lugar de muerte. El retorno usa el proceso normal de teletransporte de EliteMobs, con sus reglas de demora y cancelación. Admite códigos de color y se registra en el CSV de traducciones.

ClaveValoresPredeterminado
noPreviousLocationMessageTextocadena vacía
Ejemplo
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout​

Tiempo en minutos antes de retirar el NPC. 0 o menos desactiva el temporizador. No borra la ubicación guardada ni deshabilita la definición: el NPC puede regresar al recargar, reiniciar o restaurar el chunk.

Para eliminar una ubicación, activa /em remove, golpea el NPC y vuelve a ejecutar /em remove para salir del modo. Requiere elitemobs.remove. En una lista se elimina la entrada correspondiente; una definición con la antigua ubicación única se deshabilita. Al migrar a spawnLocations, elimina la clave antigua spawnLocation, o podría volver a activarse al vaciar la lista.

ClaveValoresPredeterminado
timeoutDecimal0 (nunca)
Ejemplo
timeout: 0

questFileName​

Lista archivos de plugins/EliteMobs/customquests/, con .yml, para CUSTOM_QUEST_GIVER. La clave singular acepta una lista. El menú ofrece misiones elegibles y acepta entregas asignadas al nombre de archivo de este NPC; un NPC de entrega puede tener la lista vacía. Todas las ubicaciones del mismo archivo comparten esta identidad. Se siguen aplicando los permisos y requisitos individuales de cada misión.

ClaveValoresPredeterminado
questFileNameLista de textosninguno
Ejemplo
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise​

Establece el disfraz y requiere LibsDisguises. Un modelo personalizado cargado correctamente tiene prioridad.

ClaveValoresPredeterminado
disguiseFormato de LibsDisguisesninguno
Ejemplo
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData​

Establece los datos de un disfraz personalizado de LibsDisguises.

ClaveValoresPredeterminado
customDisguiseDataFormato de LibsDisguisesninguno
Ejemplo
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​

Establece un modelo de FreeMinecraftModels o ModelEngine. Instálalo en el proveedor seleccionado antes de indicar su ID. Si ambos están disponibles, se prefiere FreeMinecraftModels; un modelo FMM ausente no hace que se seleccione ModelEngine. Si ningún modelo se carga, se usa el disfraz configurado o la apariencia de aldeano. Consulta Modelos personalizados.

ClaveValoresPredeterminado
customModelTextoninguno
Ejemplo
customModel: MY_MODEL_ONE

Entrenadores de clase y transporte​

Usa interactionType: CLASS_TRAINER con classRoot para seleccionar la rama de clase. Parte de las definiciones incluidas class_trainer_*.yml. Las pruebas y la progresión se explican en Advanced Combat System.

Con interactionType: TRANSPORT, transportRoutes es una lista de IDs de ruta sin .yml; hacer clic abre la selección de destinos. Consulta Rutas de transporte.

arena​

Establece el nombre de archivo de la arena para la que el NPC abrirá un menú (requiere el interactionType ARENA_MASTER).

ClaveValoresPredeterminado
arenaNombre de archivoninguno
Ejemplo
arena: my_arena.yml

command​

Comando para COMMAND. Se ejecuta como el jugador que hace clic en el tick siguiente y exige sus permisos normales. Omite la barra inicial (/). Este campo no sustituye automáticamente marcadores del jugador ni usa el formato de comandos de consola de EliteMobs.

ClaveValoresPredeterminado
commandTextoninguno
Ejemplo
command: say Look at me running a command, how cool!

create_npc_command.jpg


spawnLocation​

Establece una única ubicación de aparición para el NPC. Esta es la clave antigua de ubicación única: solo se lee cuando spawnLocations está ausente o vacía. Las nuevas ubicaciones colocadas dentro del juego se escriben en spawnLocations, así que es preferible usar esa clave.

El formato recomendado es world,x,y,z,yaw,pitch. El mundo debe estar cargado; este ajuste no lo carga.

ClaveValoresPredeterminado
spawnLocationTextoninguno
Ejemplo
spawnLocation: my_world,10,50,10,0,0

spawnLocations​

Define varias ubicaciones para el mismo NPC. /em place npc <npcfilename.yml> añade tu posición y orientación, redondeadas a dos decimales, y establece isEnabled: true. Repetir una ubicación serializada idéntica no crea otra entrada. Los NPC se restauran cuando sus chunks pueden procesar entidades.

El formato de cada entrada es world,x,y,z,yaw,pitch.

ClaveValoresPredeterminado
spawnLocationsLista de textosninguno
Ejemplo
spawnLocations: 
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0

instanced​

Establece si el NPC debe estar instanciado (para uso en mazmorras instanciadas). Cuando se establece en true, el NPC no aparece en el mundo plantilla; en su lugar se registra como plantilla y se clona para cada instancia de mazmorra, y cada clon existe en el mundo de instancia correspondiente.

ClaveValoresPredeterminado
instancedBooleanofalse
Ejemplo
instanced: false

syncMovement​

Establece si el modelo personalizado del NPC debe tener su movimiento sincronizado con la entidad subyacente. Esto solo tiene efecto cuando customModel está establecido y el modelo está cargado: se ignora en los NPC normales y en los de LibsDisguises.

Una patrol válida habilita la sincronización incluso cuando está pausada o este valor es false. La opción sigue siendo útil para modelos que no patrullan.

ClaveValoresPredeterminado
syncMovementBooleanotrue
Ejemplo
syncMovement: true

patrol​

Añade al NPC una ruta nativa con búsqueda automática de caminos. Los nodos son desplazamientos desde su punto de aparición configurado, o coordenadas exactas en su mundo con patrol.relative: false. Los tramos largos se dividen automáticamente y no se fuerza la carga de chunks. patrol.startNodeWaitSeconds hace que el NPC descanse en el primer nodo una vez por vuelta, patrol.pauseNearPlayersRadius (solo para NPCs) lo detiene cerca de los jugadores y patrol.faceNearbyPlayers lo gira hacia ellos mientras está detenido. Consulta Patrullas de NPCs y jefes para ver el esquema, el editor, el comportamiento a larga distancia y los controles Lua.


Ejemplo de configuración de NPC
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
spawnLocations:
- my_world,584,55,127,90,10

create_npc_npc.jpg


Especial [1]​

La siguiente es la lista de tipos de interacción de NPC válidos:

TipoDescripción
GUILD_GREETERAbre las bonificaciones de habilidades de armas. Requiere elitemobs.skill.npc.
CLASS_TRAINERAbre la rama de classRoot. Requiere elitemobs.command.
TRANSPORTAbre los destinos de transportRoutes.
CHATIntenta decir una línea aleatoria de dialog al interactuar.
CUSTOM_SHOPAbre la tienda personalizada. Requiere elitemobs.shop.custom.npc.
PROCEDURALLY_GENERATED_SHOPAbre la tienda generada. Requiere elitemobs.shop.dynamic.npc.
BARSin implementar. Indica al jugador que la característica llegará pronto.
ARENANo hace nada. Usa ARENA_MASTER en su lugar.
QUEST_GIVERAbre misiones generadas. Requiere elitemobs.quest.npc.
CUSTOM_QUEST_GIVEROfrece misiones elegibles de questFileName y acepta entregas asignadas.
NONESin acción integrada; aún pueden ejecutarse scripts, proximidad y diálogos de misión.
SELLAbre ventas. Requiere elitemobs.shop.sell.npc.
TELEPORT_BACKUsa la ubicación de retorno guardada por EliteMobs. Requiere elitemobs.back.npc.
SCRAPPERAbre desguace. Requiere elitemobs.scrap.npc.
REPAIRMANAbre reparaciones. Requiere elitemobs.repair.npc.
ENCHANTERAbre encantamientos. Requiere elitemobs.enchant.npc.
REFINERREEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC
SMELTERREEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC
ENHANCERREEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC
UNBINDERAbre desvinculación. Requiere elitemobs.unbind.npc.
ARENA_MASTERAbre el menú de la arena establecida en arena
COMMANDEjecuta el comando establecido en command
SCROLL_APPLIERAbre pergaminos de objeto élite. Requiere elitemobs.scroll.npc; no aparece con useEliteItemScrolls desactivado.
ARROW_SHOPAbre la tienda de flechas. Requiere elitemobs.shop.arrow.npc.
GAMBLING_BLACKJACKAbre blackjack. Requiere elitemobs.gambling.npc.
GAMBLING_COINFLIPAbre cara o cruz. Requiere elitemobs.gambling.npc.
GAMBLING_SLOTSAbre tragaperras. Requiere elitemobs.gambling.npc.
GAMBLING_HIGHERLOWERAbre mayor/menor. Requiere elitemobs.gambling.npc.

Para más información sobre lo que hacen el SCRAPPER y tipos de interacción similares haz clic aquí.

Notas sobre el comportamiento de los NPCs​

El comportamiento integrado también incluye:

  • Movimiento: normalmente permanecen quietos y miran a jugadores cercanos. Las patrullas y los scripts pueden moverlos; la patrulla controla la ruta en lugar del comportamiento normal del aldeano.
  • Orden de interacción: un diálogo de misión puede consumir el clic antes de Lua y de la acción integrada. En otro caso se ejecuta Lua, seguido de la acción y sus comprobaciones de permisos. Una protección de un tick impide interacciones repetidas del mismo jugador entre NPC. Editar una patrulla bloquea las interacciones; su movimiento normal no.
  • Protección: los cuerpos no colisionan normalmente. EliteMobs cancela daños, transformaciones de aldeano y la apertura del inventario normal de comercio.
  • Etiquetas: nombre y rol usan la disposición fija descrita arriba. Los NPC normales y disfrazados usan su altura actual, de modo que la escala también puede desplazar las etiquetas. Los modelos FMM compatibles gestionan nombre y rol juntos.
  • Bedrock: la presentación depende de la integración de modelos y etiquetas activa. El renderizador actual no utiliza la clave conservada bedrockNPCRoleYOffset.
  • Espera de diálogo: cada NPC comparte una espera de 3 segundos entre todos los jugadores. Un saludo para uno puede impedir el saludo de otro durante ese intervalo. Los bocadillos individuales desaparecen tras unos 5 segundos.
  • Invisibilidad: Un NPC bajo el efecto de poción de invisibilidad no mostrará bocadillos de chat.
  • Chunks: desaparecen al descargar el chunk y se restauran cuando vuelve a procesar entidades. No se guardan entidades NPC en el mundo; las ubicaciones proceden de la configuración.
  • Renombrado: el clic derecho normal sobre el aldeano con una etiqueta de nombre en la mano principal se cancela y muestra un mensaje. Los modelos usan sus propios callbacks; FreeMinecraftModels envía tanto clics izquierdos como derechos al controlador del NPC.