NPC Placement and Alignment/es: Difference between revisions

From DragonMineZ Wiki
Shokkoh (talk | contribs)
Translation sync from dragonminez-wiki repository
 
Shokkoh (talk | contribs)
Translation sync from dragonminez-wiki repository
 
(One intermediate revision by one other user not shown)
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 || Por debajo de este alineamiento el NPC sigue hablando con el jugador, pero lo saluda con frialdad, y sus misiones secundarias aparecen bloqueadas (las misiones de saga, las que tienen su propia condición de alineamiento y las que ya están en curso siguen disponibles). También se puede escribir directamente en la regla, sin el contenedor <code>interaction</code>.
|-
|-
| <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.
|}
|}


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 sigue hablando contigo, pero con frialdad, y sus misiones secundarias siguen bloqueadas (el alineamiento está por debajo del <code>min_alignment</code> de 61); con 61 o más es amistoso y todo queda disponible.


<code>NpcDispositionService.getRelation()</code> comprueba la relación en este orden:
<code>NpcDispositionService.getRelation()</code> comprueba la relación en este orden:

Latest revision as of 01:24, 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.

Los mundos antiguos conservan sus archivos antiguos Ambos archivos solo se escriben con los valores por defecto de DragonMineZ cuando no existen. Un mundo creado con una versión anterior de DragonMineZ conserva sus archivos antiguos, así que no recibe las nuevas entradas por defecto (por ejemplo, los NPCs del Otro Mundo de la v2.2 y sus nuevas coordenadas). Para obtener los valores por defecto actuales, borra el archivo (respáldalo antes si lo editaste) y ejecuta /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

Véase también: Alineamiento, Maestros

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 Por debajo de este alineamiento el NPC sigue hablando con el jugador, pero lo saluda con frialdad, y sus misiones secundarias aparecen bloqueadas (las misiones de saga, las que tienen su propia condición de alineamiento y las que ya están en curso siguen disponibles). 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 sigue hablando contigo, pero con frialdad, y sus misiones secundarias siguen bloqueadas (el alineamiento está por debajo del min_alignment de 61); con 61 o más es amistoso y todo queda disponible.

NpcDispositionService.getRelation() comprueba la relación en este orden:

  1. Gana una relation definida en la ubicación (placements.json).
  2. Los umbrales hostile_below y hostile_above de la regla.
  3. Un alignment definido en la ubicación.
  4. El default_relation de 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 FRIENDLY con min_alignment: 41 (o 61 para Goku, Gurú, Dendé, Kaiosama y el Anciano Namekiano) y hostile_below: 25.
  • gero usa por defecto NEUTRAL con max_alignment: 60.
  • enma, baba, toribot, grandkai, otherworld_announcer y vegeta usan por defecto NEUTRAL sin umbrales.
  • piccolo usa por defecto NEUTRAL con sus propios umbrales (min_alignment: 41, hostile_below: 20).

Recarga y validación

  1. Edita los archivos en <world save>/dragonminez/npcs/.
  2. Valida la sintaxis JSON (consulta Cómo usar JSON).
  3. Ejecuta /dmzreload config (o /dmzreload all); consulta Recargar y actualizar cambios.
  4. 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).