Deseos personalizados

De DragonMineZ Wiki
Esta página es una versión traducida de la página Custom Wishes. La traducción está completa al 100 %.

Los deseos personalizados cambian lo que concede un dragón al invocarlo, solo con JSON y sin Java. El JSON de los deseos está en dos lugares distintos, según lo que quieras hacer:

Objetivo Dónde Formato
Reemplazar la lista de deseos de un dragón (Shenron, Porunga o un dragón de un addon) en un mundo. <world save>/dragonminez/wishes/<dragon_id>.json Un array JSON simple de objetos de deseo.
Distribuir un dragón nuevo, o deseos como parte de un paquete distribuible. Un paquete de addon (carpeta o .zip) en <game dir>/dragonballs/ Un objeto JSON con los campos dragon y wishes.

Ambos formatos usan por dentro los mismos objetos de deseo; solo cambia el contenedor exterior. Los datapacks normales no se leen para dragones ni deseos: usa un paquete de addon. Para ver cómo los jugadores invocan dragones y eligen deseos, consulta Dragones y deseos.

Cómo se combinan las listas de deseos

  1. Primero se cargan las listas de deseos de los paquetes de addon (una lista por dragón).
  2. Cada dragón conocido que no tenga lista recibe una vacía.
  3. Después, cada archivo de <world save>/dragonminez/wishes/ reemplaza la lista completa del dragón cuyo nombre lleva el archivo.

Campos base de todo deseo

{
  "type": "attributes",
  "name": "wish.shenron.attributes.name",
  "description": "wish.shenron.attributes.desc",
  "amount": 100
}
Campo Tipo Qué hace
type Texto Uno de los tipos de deseo de abajo.
name Texto Clave de traducción del nombre que se muestra del deseo.
description Texto Clave de traducción de la descripción del deseo.
repeatable Booleano Opcional. Los dragones que conceden varios deseos (Porunga) permiten que un jugador elija el mismo deseo más de una vez por invocación. Ponlo en false para permitir el deseo una sola vez. Si no está, el deseo se puede repetir.

Origen: Wish.java (clase base), WishTypeAdapterFactory.java (asignación de tipo a clase).

Tipos de deseo

type Campos extra Qué hace
item_list_wish items: lista de objetos de ítem Concede uno o más objetos descritos como objetos de ítem con tipo (ver abajo). Ejemplo: { "type": "item_list_wish", "name": "wish.shenron.senzu.name", "description": "wish.shenron.senzu.desc", "items": [{ "itemType": "generic_item", "itemId": "dragonminez:senzu_bean", "count": 16 }] }
item itemId, count Concede una pila de objetos. Ejemplo: { "type": "item", "name": "...", "description": "...", "itemId": "dragonminez:senzu_bean", "count": 16 }
multi_wish items: lista de { "a": "<item_id>", "b": <count> } Concede varias pilas de objetos. Ejemplo: { "type": "multi_wish", "name": "...", "description": "...", "items": [{ "a": "dragonminez:kikono_shard", "b": 32 }, { "a": "minecraft:iron_ingot", "b": 64 }] }
attributes amount Concede amount Atributos, repartidos entre Puntos de Atributo y los TP que esos puntos le costarían al jugador en ese momento (consulta Estadísticas y atributos). Lo usan los deseos Aumento de Poder por defecto. Ejemplo: { "type": "attributes", "name": "...", "description": "...", "amount": 100 }
attributepoints amount Concede solo amount Puntos de Atributo. Ejemplo: { "type": "attributepoints", "name": "...", "description": "...", "amount": 50 }
tps amount Concede una cantidad fija de Puntos de Entrenamiento. Ejemplo: { "type": "tps", "name": "...", "description": "...", "amount": 5000 }
skill skill, level Sube una habilidad al menos hasta level, por ejemplo { "type": "skill", "name": "...", "description": "...", "skill": "kaioken", "level": 2 }. Se ignora si el jugador ya tiene ese nivel.
command commands: array de textos, donde %player% se reemplaza por el nombre del jugador Ejecuta comandos. Ejemplo: { "type": "command", "name": "...", "description": "...", "commands": ["effect give %player% minecraft:regeneration 60 1"] }
revive maxTargets (por defecto 1) Revive de verdad hasta maxTargets jugadores muertos, elegidos en la pantalla de deseos. Consulta Otro Mundo.
passivereset Ninguno Reinicia las bonificaciones de las habilidades pasivas raciales (Zenkai, Asimilación y Absorción).
recustomize Ninguno Abre la pantalla de personalización del personaje.
relocatestats Ninguno Permite al jugador redistribuir los puntos de estadísticas que gastó.
changedifficulty Ninguno Permite al jugador volver a elegir la dificultad de la historia.
resetstory Ninguno Reinicia todo el progreso de las misiones de la historia.

item_list_wish es el tipo que usan los deseos por defecto. Cada entrada de items es un objeto de ítem con tipo, así que un deseo también puede conceder equipo encantado, pociones o armaduras con adornos:

{
  "type": "item_list_wish",
  "name": "wish.shenron.strongest.name",
  "description": "wish.shenron.strongest.desc",
  "items": [
    { "itemType": "enchanted_item", "itemId": "minecraft:diamond_sword", "count": 1, "enchantments": { "minecraft:sharpness": 5 } },
    { "itemType": "potion", "itemId": "minecraft:potion", "count": 1, "potion": "minecraft:strong_healing" }
  ]
}

Los campos de cada objeto de ítem (generic_item, enchanted_item, enchanted_book, potion, splash_potion, lingering_potion, tipped_arrow, trimmed_armor) están en Misiones personalizadas.

Origen: las clases de src/main/java/com/dragonminez/common/wish/wishes/ y la tabla de despacho de WishTypeAdapterFactory.java.

Reemplazar los deseos de un dragón

Coloca un archivo con el id del dragón como nombre en <world save>/dragonminez/wishes/, por ejemplo shenron.json o porunga.json. Es un array simple, sin objeto contenedor:

[
  {
    "type": "item_list_wish",
    "name": "wish.shenron.senzu.name",
    "description": "wish.shenron.senzu.desc",
    "items": [ { "itemType": "generic_item", "itemId": "dragonminez:senzu_bean", "count": 16 } ]
  },
  {
    "type": "attributes",
    "name": "wish.shenron.attributes.name",
    "description": "wish.shenron.attributes.desc",
    "amount": 100
  },
  {
    "type": "revive",
    "name": "wish.shenron.revive.name",
    "description": "wish.shenron.revive.desc",
    "maxTargets": 3
  }
]
El archivo reemplaza toda la lista Este archivo reemplaza por completo la lista de deseos de ese dragón; no se suma a los deseos de los paquetes de addon. Si solo quieres añadir un deseo y conservar el resto, primero copia la lista de deseos completa actual del dragón y luego añade el tuyo.

Si shenron.json o porunga.json todavía no existen, DragonMineZ los crea con la lista de deseos por defecto la primera vez que se cargan los deseos, así siempre tienes un ejemplo funcional para empezar. Cualquier otro nombre de archivo que crees aquí define la lista de deseos de ese id de dragón; solo aparece si existe un dragón con ese id (consulta Añadir un dragón nuevo).

Cada deseo se comprueba al cargar el archivo: un type desconocido o una clave desconocida se informa en el reporte de carga de JSON. Un archivo que no se puede analizar (JSON roto, un objeto de ítem no válido) se omite entero y se informa, así que el dragón conserva los deseos de su paquete de addon hasta que lo corrijas.

Origen: WishManager.loadWishes() y loadWishConfig().

Añadir un dragón nuevo

Un archivo de reemplazo de deseos por sí solo únicamente funciona para un id de dragón que ya tenga una definición de dragón (entidad, conjunto de esferas y reglas de invocación). Un dragón, conjunto de esferas o radar nuevo viene de un paquete de addon en <game dir>/dragonballs/: una carpeta o un archivo .zip con esta estructura:

<pack_name>/
  definitions/
    dragon.json
    ballset.json
    radar.json
    wishes.json
  assets/
    dragon.json
    ballset.json
    radar.json

Los paquetes se cargan en orden alfabético y se combinan por id sobre las definiciones incluidas: un paquete cuyo dragon.json usa un id de dragón existente sobrescribe la definición de ese dragón. Los dragones, conjuntos de esferas y radares registran su entidad, bloques y objetos al iniciar el juego, así que los nuevos necesitan reiniciar el juego. Consulta Encontrar carpetas para ver el mapa completo de carpetas.

Definición del dragón

definitions/dragon.json:

{
  "id": "my_dragon",
  "entity_registry_name": "my_dragon",
  "entity_width": 3.0,
  "entity_height": 17.0,
  "dimensions": ["minecraft:overworld"],
  "ball_set": "my_ball_set",
  "wish_screen_id": "my_dragon",
  "wish_count": 1,
  "asset_definition": "my_dragon"
}
Campo Qué hace
id Id del dragón.
entity_registry_name Nombre de registro de la entidad del dragón (dragonminez:<name>). Mantenlo igual a id: la invocación busca la entidad por el id del dragón.
entity_width, entity_height Tamaño de la entidad.
dimensions Dimensiones en las que se puede invocar al dragón.
ball_set Id del conjunto de esferas que lo invoca.
wish_screen_id Id de la lista de deseos que ofrece el dragón (el valor dragon en wishes.json y el nombre de archivo de un reemplazo por mundo).
wish_count Cuántos deseos se conceden por invocación.
asset_definition Id opcional de una entrada de assets/dragon.json (id, renderer_type, model, texture, animation).

Definición del conjunto de esferas

definitions/ballset.json acepta estas claves: id, dimensions, copies (por defecto 5), spawn_range, summon_radius (qué tan cerca deben estar las demás esferas de la que haces clic derecho), blocks (número de estrellas a nombre de registro del bloque), asset_definition, display_name y natural_spawn (opcional, por defecto true).

  • Un conjunto está completo cuando todas las estrellas listadas en blocks están colocadas dentro de summon_radius, así que un conjunto no tiene por qué tener siete esferas.
  • Con "natural_spawn": false, las esferas del conjunto nunca se reparten por el mundo (ni al crear el mundo, ni después de un deseo, ni con /dmzdragonballs): solo existen si las entregas tú, por ejemplo como recompensas de misiones o de jefes de mundo.

Definición del radar

definitions/radar.json acepta estas claves: id, item_registry_name, dimensions, ball_set, tooltip_key, ranges, recipe_definition, chip_item, cpu_item, chip_model_item, cpu_model_item, asset_definition y display_name. Un radar con chip_item y cpu_item y sin recipe_definition recibe una receta de fabricación con esos dos objetos. Consulta Radar del Dragón para ver el radar incluido.

Lista de deseos del paquete

definitions/wishes.json usa un objeto contenedor. Es el formato de paquete de addon, distinto del formato de array por mundo de arriba:

{
  "dragon": "my_dragon",
  "wishes": [
    { "type": "tps", "name": "wish.my_dragon.tps.name", "description": "wish.my_dragon.tps.desc", "amount": 5000 }
  ]
}

Cada clave de estos archivos se comprueba contra las listas de arriba, y las claves desconocidas se informan en el reporte de carga de JSON.

Origen: DragonBallPackManager.java, DragonDefinition.java, DragonBallSetDefinition.java, DragonRadarDefinition.java, DragonWishRegistry.java.

Claves de traducción

La convención es wish.<dragon_id>.<wish_key>.name / wish.<dragon_id>.<wish_key>.desc, por ejemplo wish.shenron.senzu.name. Añade estas claves a tu en_us.json o a tu propio archivo de idioma. Las traducciones personalizadas se combinan con las de Crowdin igual que en las razas personalizadas.

Recargar y validar

  1. Guarda tus archivos de reemplazo de deseos en <world save>/dragonminez/wishes/, o tu paquete de addon en <game dir>/dragonballs/.
  2. Valida la sintaxis JSON (consulta Cómo usar JSON).
  3. Para los reemplazos por mundo, ejecuta /dmzreload wishes (o /dmzreload all); consulta Recargar y actualizar cambios. Las listas de deseos de los paquetes de addon se vuelven a leer con el /reload de vanilla; después ejecuta /dmzreload wishes para que los reemplazos por mundo se vuelvan a aplicar encima. Los dragones, conjuntos de esferas y radares nuevos necesitan un reinicio completo.
  4. Invoca al dragón en el juego y comprueba que la lista de deseos sea la que esperas.