NPC Placement and Alignment/es: Difference between revisions
Translation sync from dragonminez-wiki repository |
Updating to match new version of source page |
||
| Line 195: | Line 195: | ||
| <code>hostile_above</code> || Entero || Lo mismo, pero para un alineamiento por encima de este valor. | | <code>hostile_above</code> || Entero || Lo mismo, pero para un alineamiento por encima de este valor. | ||
|- | |- | ||
| <code>interaction.min_alignment</code> || Entero || El jugador necesita al menos este alineamiento para hablar con el NPC. Aunque el NPC no sea hostil, un alineamiento lo bastante bajo sigue bloqueando la interacción. También se puede escribir directamente en la regla, sin el contenedor <code>interaction</code>. | | <code>interaction.min_alignment</code> || Entero || <span class="mw-translate-fuzzy">El jugador necesita al menos este alineamiento para hablar con el NPC. Aunque el NPC no sea hostil, un alineamiento lo bastante bajo sigue bloqueando la interacción. También se puede escribir directamente en la regla, sin el contenedor <code>interaction</code>.</span> | ||
|- | |- | ||
| <code>interaction.max_alignment</code> || Entero || Lo mismo, pero como límite superior. | | <code>interaction.max_alignment</code> || Entero || Lo mismo, pero como límite superior. | ||
|} | |} | ||
<div class="mw-translate-fuzzy"> | |||
Los cuatro campos de umbral son opcionales: omite los que no apliquen. Tomando como ejemplo la entrada <code>goku</code> de arriba: con menos de 25 de alineamiento, Goku es hostil; de 25 a 60 está presente pero no habla (el alineamiento está por debajo del <code>min_alignment</code> de 61); con 61 o más es amistoso y se puede hablar con él. | Los cuatro campos de umbral son opcionales: omite los que no apliquen. Tomando como ejemplo la entrada <code>goku</code> de arriba: con menos de 25 de alineamiento, Goku es hostil; de 25 a 60 está presente pero no habla (el alineamiento está por debajo del <code>min_alignment</code> de 61); con 61 o más es amistoso y se puede hablar con él. | ||
</div> | |||
<code>NpcDispositionService.getRelation()</code> comprueba la relación en este orden: | <code>NpcDispositionService.getRelation()</code> comprueba la relación en este orden: | ||
Revision as of 01:08, 22 October 2026
Ubicación y alineamiento de NPCs trata de los archivos que deciden dónde están los NPCs maestros y entrenadores y cómo el alineamiento de un jugador cambia la forma en que cada NPC lo trata. De esto se encargan dos archivos JSON relacionados de cada mundo, ambos en <world save>/dragonminez/npcs/, más un formato de datapack para los NPCs que viven dentro de estructuras.
| Archivo | Qué controla |
|---|---|
placements.json |
Dónde aparecen los NPCs maestros y entrenadores (posición, dimensión, alineamiento o relación inicial). |
alignment_rules.json |
Cómo el alineamiento del jugador afecta la hostilidad, la amabilidad y la disponibilidad para interactuar de cada NPC. |
Ambos archivos se cargan al iniciar el servidor y se recargan con /dmzreload config (o /dmzreload all); consulta Recargar y actualizar cambios. Una recarga también vuelve a aplicar las ubicaciones en todas las dimensiones cargadas.
/dmzreload config.
Ubicación de NPCs
placements.json lista todos los NPCs que coloca DragonMineZ y dónde.
Código fuente: src/main/java/com/dragonminez/server/world/npc/NPCPlacementManager.java.
{
"schema": 1,
"placements": [
{
"id": "master_roshi",
"entity": "dragonminez:master_roshi",
"dimension": "minecraft:overworld",
"structure": "roshi_house",
"x": 0.0,
"y": 0.0,
"z": 0.0,
"yaw": 225.0,
"pitch": 0.0,
"surface": true,
"relative_to_spawn": false,
"enabled": true,
"override": false
}
]
}
| Campo | Tipo | Qué hace |
|---|---|---|
id |
Texto | Id único de la ubicación. Se etiqueta en la entidad generada para que DragonMineZ pueda encontrarla y actualizarla después. Si dos ubicaciones comparten id, gana la última del archivo (se registra una advertencia). |
entity |
Texto | Id de registro del tipo de entidad. |
dimension |
Texto | Por defecto minecraft:overworld.
|
npc_id |
Texto | Solo tiene sentido para entidades dragonminez:quest_npc: enlaza con el id de NPC del sistema de misiones.
|
model / texture |
Texto | Solo se usa para entidades quest_npc.
|
structure |
Texto | Si se define, x, y y z pasan a ser un desplazamiento desde el origen de esa estructura en lugar de coordenadas del mundo. Valores válidos: roshi_house, goku_house, elder_guru, timechamber, kamilookout, gero_lab. Un valor no reconocido hace que x, y y z se traten como coordenadas del mundo sin más (con una advertencia en el log).
|
x, y, z |
Número | Coordenadas del mundo, o el desplazamiento desde la estructura (ver arriba). Por defecto: 0.5, 64.0, 0.5.
|
yaw, pitch |
Número | Dirección a la que mira, en grados. |
surface |
Booleano | Si es true, ajusta la Y a la superficie del terreno al cargar en lugar de usar la Y indicada.
|
relative_to_spawn |
Booleano | Si es true, suma el punto de aparición del mundo a x y z (se aplica después de cualquier desplazamiento de estructura).
|
enabled |
Booleano | Si es false, esta ubicación se omite por completo.
|
override |
Booleano | Si es true, la entidad siempre se vuelve a generar, aunque ya exista una para este id. Si no, la entidad existente solo se actualiza en su lugar.
|
alignment |
Entero (0–100) | Alineamiento opcional para este NPC concreto: por encima de 60 es amistoso, de 41 a 60 neutral, y con 40 o menos hostil (salvo que una regla de alineamiento lo vuelva hostil antes, ver abajo). |
relation |
Texto | Reemplazo opcional para esta instancia (HOSTILE, NEUTRAL o FRIENDLY), guardado en la propia entidad en lugar de buscarse en las reglas de alineamiento.
|
Las claves desconocidas se reportan en el informe de carga del JSON.
Ubicaciones por defecto
El archivo por defecto genera de forma activa estos NPCs:
| Id de ubicación | Entidad | Dónde |
|---|---|---|
master_roshi |
dragonminez:master_roshi |
Kame House |
master_goku |
dragonminez:master_goku |
Casa de Goku |
master_karin, master_dende, master_popo |
dragonminez:master_karin, master_dende, master_popo |
La Atalaya de Kami |
master_gero |
dragonminez:master_gero |
Laboratorio del Dr. Gero |
master_guru |
dragonminez:master_guru |
Casa del Gran Anciano (Namek) |
master_kaiosama |
dragonminez:master_kaiosama |
Otro Mundo, 54.5 299 1031.5
|
master_toribot |
dragonminez:master_toribot |
Otro Mundo, 50.5 298 1030.5
|
master_enma |
dragonminez:master_enma |
Otro Mundo, 0.5 150 17.5
|
master_baba |
dragonminez:master_uranai |
Otro Mundo, 9.5 150 3.5
|
master_grandkai |
dragonminez:master_grandkai |
Otro Mundo, -30.5 150 12.5
|
npc_hell_ogre |
dragonminez:quest_npc (npc_id hell_ogre) |
Otro Mundo, 9.5 150 16.5
|
master_otherworld_announcer |
dragonminez:master_otherworld_announcer |
Recinto del Torneo del Otro Mundo, -25.5 352 -1164.5 (solo se coloca una vez construido el recinto del torneo)
|
NPCs de misiones y NPCs maestros
Los NPCs de misiones (Bulma, Krilin, Yamcha, Ten Shin Han, Piccolo, Gohan, Vegeta, Trunks, Chi-Chi, Videl, Shin y el Anciano Namekiano) también aparecen en el archivo por defecto, pero con "enabled": false: este sistema ya no los genera durante la partida. Están incluidos directamente en el NBT de la estructura, así que viven en lugares fijos colocados a mano en lugar de amontonarse en el punto de aparición del mundo. Sus entradas aquí son solo de referencia. Los NPCs añadidos a una estructura después de crear su NBT vienen, en cambio, de los archivos de NPCs de estructuras (Chi-Chi en la Casa de Goku es uno de ellos).
Los NPCs del Otro Mundo (master_kaiosama, master_enma, master_baba, master_toribot, master_grandkai, master_otherworld_announcer y npc_hell_ogre) siempre fuerzan override: true internamente, diga lo que diga el archivo, ya que necesitan existir de forma fiable en una dimensión generada. Consulta Otro Mundo.
NPCs de estructuras
Los archivos de NPCs de estructuras colocan NPCs dentro de una estructura de DragonMineZ sin editar su archivo .nbt. A diferencia de los archivos anteriores, estos son archivos de datapack: data/<namespace>/structure_npcs/*.json, uno por estructura, cargados con los datapacks (y con /reload).
{
"structure": "dragonminez:goku_house",
"npcs": [
{
"id": "npc_chi_chi",
"entity": "dragonminez:quest_npc",
"npc_id": "chi_chi",
"model": "saga_videl",
"texture": "saga_chichi",
"pos": [67.5, 5.0, 50.5],
"yaw": 90.0
}
]
}
| Campo | Obligatorio | Qué hace |
|---|---|---|
structure |
Sí | Id de la estructura a la que pertenecen los NPCs. |
id |
Sí | Id único de este NPC dentro de la estructura. También es la clave de seguimiento, así que no le cambies el nombre una vez que los mundos lo usen. |
entity |
Sí | Tipo de entidad que se genera (por ejemplo dragonminez:quest_npc o el id de entidad de un maestro).
|
npc_id |
No | Id del NPC de misiones, para dragonminez:quest_npc.
|
model, texture |
No | Nombres de modelo y textura para los NPCs de misiones. |
template |
No | La plantilla de la estructura respecto a la que se mide la posición, para estructuras formadas por varias piezas. |
pos |
Sí | Posición relativa a la plantilla de la estructura, así que queda bien sea cual sea la rotación con la que apareció la estructura. |
yaw |
No | Orientación, también relativa a la plantilla (por defecto 0).
|
alignment, relation |
No | Alineamiento y relación iniciales, como en placements.json.
|
Cada NPC aparece una vez por estructura generada cuando se carga su chunk, incluidas las estructuras que se generaron antes de que existiera el archivo, y la aparición se recuerda: un NPC que muere no vuelve.
Para obtener las coordenadas, ponte donde debería estar el NPC y ejecuta /dmzstructure here: muestra la estructura, su plantilla y tu posición y yaw relativos a la plantilla, con un botón Copy NPC JSON que copia una entrada lista para usar. /dmzstructure npcs lista los NPCs de la estructura en la que estás y si cada uno ya apareció. Ambos comandos requieren el permiso dragonminez.dmzstructure (consulta Permisos).
Reglas de alineamiento de NPCs
alignment_rules.json decide cómo reacciona cada NPC al alineamiento del jugador.
Código fuente: src/main/java/com/dragonminez/common/alignment/NpcAlignmentRules.java.
{
"npcs": {
"goku": {
"default_relation": "FRIENDLY",
"interaction": { "min_alignment": 61 },
"hostile_below": 25
},
"gero": {
"default_relation": "NEUTRAL",
"interaction": { "max_alignment": 60 }
}
}
}
Las claves de npcs son ids de NPC sin ningún namespace (dragonminez:roshi pasa a ser la clave roshi).
| Campo | Tipo | Qué hace |
|---|---|---|
default_relation |
HOSTILE / NEUTRAL / FRIENDLY |
Relación base cuando ninguno de los umbrales de abajo la reemplaza. Por defecto NEUTRAL.
|
hostile_below |
Entero | Si el alineamiento del jugador está por debajo de este valor, el NPC se vuelve hostil sin importar default_relation.
|
hostile_above |
Entero | Lo mismo, pero para un alineamiento por encima de este valor. |
interaction.min_alignment |
Entero | El jugador necesita al menos este alineamiento para hablar con el NPC. Aunque el NPC no sea hostil, un alineamiento lo bastante bajo sigue bloqueando la interacción. También se puede escribir directamente en la regla, sin el contenedor interaction.
|
interaction.max_alignment |
Entero | Lo mismo, pero como límite superior. |
Los cuatro campos de umbral son opcionales: omite los que no apliquen. Tomando como ejemplo la entrada goku de arriba: con menos de 25 de alineamiento, Goku es hostil; de 25 a 60 está presente pero no habla (el alineamiento está por debajo del min_alignment de 61); con 61 o más es amistoso y se puede hablar con él.
NpcDispositionService.getRelation() comprueba la relación en este orden:
- Gana una
relationdefinida en la ubicación (placements.json). - Los umbrales
hostile_belowyhostile_abovede la regla. - Un
alignmentdefinido en la ubicación. - El
default_relationde la regla.
NPCs maestros
Para los NPCs maestros y entrenadores el archivo de reglas decide la hostilidad, pero su filtro de alineamiento es una regla fija en lugar de interaction: siempre se puede hablar con los maestros, pero Goku, Gohan, Kaiosama, Kaioshin Anciano, Roshi y Krilin solo desbloquean sus Habilidades, Entrenar y las misiones nuevas con un alineamiento de al menos 61, y Cell y Freezer con 40 o menos. Ningún otro maestro tiene filtro de alineamiento. Consulta Maestros.
Ids de NPC incluidos por defecto
El archivo por defecto incluye goku, roshi, karin, guru, dende, popo, kingkai, gero, enma, baba, toribot, grandkai, otherworld_announcer, bulma, krillin, yamcha, tien, chiaotzu, gohan, trunks, chi_chi, videl, namek_elder, shin, piccolo y vegeta.
- La mayoría usa por defecto
FRIENDLYconmin_alignment: 41(o61para Goku, Gurú, Dendé, Kaiosama y el Anciano Namekiano) yhostile_below: 25. gerousa por defectoNEUTRALconmax_alignment: 60.enma,baba,toribot,grandkai,otherworld_announceryvegetausan por defectoNEUTRALsin umbrales.piccolousa por defectoNEUTRALcon sus propios umbrales (min_alignment: 41,hostile_below: 20).
Recarga y validación
- Edita los archivos en
<world save>/dragonminez/npcs/. - Valida la sintaxis JSON (consulta Cómo usar JSON).
- Ejecuta
/dmzreload config(o/dmzreload all); consulta Recargar y actualizar cambios. - Comprueba que el NPC apareció o se movió como esperabas, y que la hostilidad y la interacción según el alineamiento se comportan como configuraste (prueba con un par de valores de alineamiento si puedes).