NPC Dialogue/es: diferenças entre revisões
Updating to match new version of source page |
Translation sync from dragonminez-wiki repository |
||
| Linha 21: | Linha 21: | ||
<code>roshi</code>, <code>goku</code>, <code>karin</code>, <code>dende</code>, <code>popo</code>, <code>gero</code>, <code>guru</code>, <code>kingkai</code> ([[Special:MyLanguage/King Kai|Kaiosama]]), <code>toribot</code>, <code>enma</code>, <code>baba</code>, <code>grandkai</code>, <code>otherworld_announcer</code> | <code>roshi</code>, <code>goku</code>, <code>karin</code>, <code>dende</code>, <code>popo</code>, <code>gero</code>, <code>guru</code>, <code>kingkai</code> ([[Special:MyLanguage/King Kai|Kaiosama]]), <code>toribot</code>, <code>enma</code>, <code>baba</code>, <code>grandkai</code>, <code>otherworld_announcer</code> | ||
Cuando un maestro tiene un árbol, al hacer clic derecho sobre él se muestra el árbol '''en lugar de''' las opciones habituales del maestro (Misiones, Habilidades, Entrenar y servicios; consulta [[Special:MyLanguage/Masters|Maestros]]). El árbol usa la misma ventana de diálogo: la línea aparece en el centro de la franja inferior y las opciones se listan a la derecha. Dale a una de tus opciones la acción <code>OPEN_QUESTS</code> para que los jugadores puedan seguir llegando a las misiones del maestro. El jugador tiene que haber creado un personaje antes. El requisito de alineamiento de un maestro no impide la conversación (un maestro al que no le agradas te saluda con una línea de rechazo); solo bloquea Habilidades, Entrenar y las misiones secundarias nuevas de ese maestro, mientras que las misiones de saga y las que ya están en curso siguen disponibles (consulta [[Special:MyLanguage/Masters|Maestros]] y [[Special:MyLanguage/Alignment|Alineamiento]]). | |||
Cuando un maestro tiene un árbol, al hacer clic derecho sobre él se muestra el árbol '''en lugar de''' las opciones habituales del maestro (Misiones, Habilidades, Entrenar y servicios; consulta [[Special:MyLanguage/Masters|Maestros]]). El árbol usa la misma ventana de diálogo: la línea aparece en el centro de la franja inferior y las opciones se listan a la derecha. Dale a una de tus opciones la acción <code>OPEN_QUESTS</code> para que los jugadores puedan seguir llegando a las misiones del maestro. El jugador tiene que haber creado un personaje antes. El requisito de alineamiento de un maestro no impide la conversación; solo bloquea Habilidades, Entrenar y las misiones nuevas (consulta [[Special:MyLanguage/Masters|Maestros]]). | |||
Los NPCs de misiones por defecto (<code>dragonminez:quest_npc</code>, por ejemplo Bulma) conservan su lista de misiones y no usan árboles de diálogo. | Los NPCs de misiones por defecto (<code>dragonminez:quest_npc</code>, por ejemplo Bulma) conservan su lista de misiones y no usan árboles de diálogo. | ||
Edição atual desde as 01h37min de 22 de outubro de 2026
Los diálogos de NPCs te permiten darles a los NPCs maestros conversaciones ramificadas solo con JSON, sin Java. Un árbol de diálogo es un conjunto de nodos: cada nodo es una línea que dice el NPC, más las opciones con las que el jugador puede responder. Las opciones pueden llevar a otro nodo, quedar ocultas tras condiciones y ejecutar acciones como cambiar el alineamiento, dar TP, ejecutar un comando o iniciar una misión.
Los diálogos son datos de cada mundo, como las misiones y los deseos.
Dónde van los archivos
<world save>/dragonminez/dialogues/*.json
La carpeta se crea la primera vez que arranca el servidor, junto con un _example.json que puedes copiar. Cada archivo .json de la carpeta (sin subcarpetas) contiene un árbol para un NPC. Los archivos se cargan en orden alfabético; si dos archivos apuntan al mismo NPC, gana el último.
Los diálogos se cargan al iniciar el servidor y se recargan con /dmzreload story (o /dmzreload all); consulta Recargar y actualizar cambios.
Código fuente: src/main/java/com/dragonminez/common/dialogue/ (DialogueRegistry, DialogueParser, DialogueService, DialogueAction).
Qué NPCs pueden usarlos
Los árboles de diálogo funcionan con los NPCs maestros: los entrenadores colocados por Ubicación y alineamiento de NPCs, como Roshi o Goku. El campo npc es el id del maestro. Los maestros que DragonMineZ coloca por defecto usan estos ids:
roshi, goku, karin, dende, popo, gero, guru, kingkai (Kaiosama), toribot, enma, baba, grandkai, otherworld_announcer
Cuando un maestro tiene un árbol, al hacer clic derecho sobre él se muestra el árbol en lugar de las opciones habituales del maestro (Misiones, Habilidades, Entrenar y servicios; consulta Maestros). El árbol usa la misma ventana de diálogo: la línea aparece en el centro de la franja inferior y las opciones se listan a la derecha. Dale a una de tus opciones la acción OPEN_QUESTS para que los jugadores puedan seguir llegando a las misiones del maestro. El jugador tiene que haber creado un personaje antes. El requisito de alineamiento de un maestro no impide la conversación (un maestro al que no le agradas te saluda con una línea de rechazo); solo bloquea Habilidades, Entrenar y las misiones secundarias nuevas de ese maestro, mientras que las misiones de saga y las que ya están en curso siguen disponibles (consulta Maestros y Alineamiento).
Los NPCs de misiones por defecto (dragonminez:quest_npc, por ejemplo Bulma) conservan su lista de misiones y no usan árboles de diálogo.
Formato del archivo
{
"npc": "roshi",
"start": "greet",
"nodes": {
"greet": {
"line": "Well, if it isn't %player%! What brings you here?",
"choices": [
{
"text": "I want to get stronger.",
"goto": "training",
"conditions": { "operator": "AND", "conditions": [ { "type": "LEVEL", "minLevel": 5 } ] }
},
{
"text": "Give me your money!",
"goto": "angry",
"actions": [ { "type": "ALIGNMENT", "amount": -5 } ]
},
{ "text": "Show me your quests.", "actions": [ { "type": "OPEN_QUESTS" } ] },
{ "text": "Goodbye." }
]
},
"training": {
"line": "Ha! I like your spirit. Take these training points and come back later.",
"choices": [
{ "text": "Thank you!", "actions": [ { "type": "TPS", "amount": 50 } ] }
]
},
"angry": {
"line": "How dare you! Leave my sight at once!"
}
}
}
Árbol
| Campo | Tipo | Qué hace |
|---|---|---|
npc |
Texto | Obligatorio. El id del maestro al que pertenece el árbol (sin distinguir mayúsculas y minúsculas). Un id que empieza por _ deja el archivo inactivo; así es como _example.json queda desactivado.
|
start |
Texto | Id del primer nodo. Por defecto "start".
|
nodes |
Objeto | Obligatorio. Mapa de id de nodo a nodo. |
Un árbol se omite (y se registra el motivo) cuando falta npc o nodes, o cuando el nodo start no existe.
Nodo
| Campo | Tipo | Qué hace |
|---|---|---|
line |
Texto | Obligatorio. Lo que dice el NPC. Una clave de traducción o texto simple; admite marcadores. Un nodo sin line se omite.
|
choices |
Array | Las respuestas del jugador, listadas como opciones. Un nodo sin opciones solo muestra su línea; el jugador sale con Cerrar o Esc. |
Opción
| Campo | Tipo | Qué hace |
|---|---|---|
text |
Texto | Obligatorio. Texto del botón. Una clave de traducción o texto simple; admite marcadores. Una opción sin text se omite.
|
goto |
Texto | Nodo que se muestra a continuación. Omítelo (o apúntalo a un nodo que no existe) para terminar la conversación. |
conditions |
Objeto | Opcional. La opción solo se muestra cuando se cumplen las condiciones. Mismo formato que los prerequisites de las misiones (ver abajo). Si el bloque no se puede leer, se descarta toda la opción en lugar de mostrarse a todos.
|
actions |
Array | Opcional. Acciones que se ejecutan en orden al elegir la opción (ver abajo). |
Condiciones
conditions usa el formato de árbol de condiciones de las misiones: un operator (AND u OR) y una lista de conditions, que se pueden anidar. Sirve cualquier tipo de condición de misión, por ejemplo:
{ "operator": "OR", "conditions": [
{ "type": "RACE", "race": "saiyan" },
{ "type": "SAGA_QUEST", "sagaId": "saiyan_saga", "questId": 12 },
{ "type": "ALIGNMENT", "max": 40 }
] }
Los tipos disponibles son SAGA_QUEST, QUEST, LEVEL, STAT, RACE, CLASS, SKILL, BIOME, DIMENSION, STRUCTURE, ALIGNMENT y TIME. Los nombres de los campos son los mismos que en las misiones (por ejemplo, LEVEL usa minLevel); consulta Misiones personalizadas.
Las condiciones se vuelven a comprobar en el servidor cuando el jugador elige la opción, así que no se puede forzar una opción oculta.
Acciones
type |
Campos | Qué hace |
|---|---|---|
ALIGNMENT |
amount |
Suma amount al alineamiento del jugador (los valores negativos lo bajan).
|
TPS |
amount |
Da amount puntos de entrenamiento (solo cantidades positivas).
|
COMMAND |
command |
Ejecuta un comando desde el servidor con permisos de operador. %player% se reemplaza por el nombre del jugador.
|
START_QUEST |
quest |
Inicia una misión con las mismas reglas que al iniciarla desde el registro de misiones (prerrequisitos, requisitos de inicio, grupo). Usa el id de la misión secundaria (por ejemplo "bulma_gero_blueprints") o sagaId:questId para una misión de saga (por ejemplo "saiyan_saga:3"). Si la misión no se puede iniciar, no pasa nada.
|
OPEN_QUESTS |
Ninguno | Cambia la misma ventana a la lista de misiones del NPC (aceptar, entregar, ver misiones bloqueadas) y termina el árbol (goto se ignora).
|
value se acepta como alias genérico de command y quest. Una acción con un type desconocido se omite y se registra en el log.
Marcadores
Las líneas y los textos de las opciones pueden contener estos marcadores; se rellenan para el jugador que los lee:
| Marcador | Valor |
|---|---|
%player% |
Nombre del jugador |
%race% |
Id de la raza |
%class% |
Id de la clase |
%level% |
Nivel del jugador |
%alignment% |
Alineamiento |
%deaths% |
Número de muertes |
%form% |
Forma activa (base sin transformarse)
|
%dimension% |
Nombre de la dimensión (por ejemplo overworld)
|
Los marcadores también funcionan dentro de tus propias traducciones. Los addons en Java pueden añadir más con DMZTextPlaceholders.register(...); consulta Implementación y eventos.
Traducciones
line y text se muestran traducidos cuando coinciden con una clave de traducción de un archivo de idioma, y tal cual están escritos en caso contrario. La pestaña de nombre sobre la línea muestra el nombre habitual del NPC (su nombre de entidad, por ejemplo entity.dragonminez.master_roshi). Las traducciones propias se combinan con las de Crowdin igual que en las razas personalizadas.
Recarga y validación
- Guarda tu archivo en
<world save>/dragonminez/dialogues/. - Valida la sintaxis JSON (consulta Cómo usar JSON).
- Ejecuta
/dmzreload story; consulta Recargar y actualizar cambios. - Revisa la consola del servidor: registra cuántos árboles se cargaron e indica cualquier nodo, opción o acción que se haya omitido.
- Habla con el NPC y recorre todas las ramas, incluidas las opciones que dependen de condiciones.