Mazmorras generadas
Una mazmorra generada no tiene mundo plantilla. Construyes salas pequeñas una vez, describes cómo se conectan, y un generador monta un diseño nuevo para cada partida: desde una sala de inicio, pasando por salas normales, de tesoro y secretas, hasta una sala de jefe.
Las mazmorras fijas y las generadas comparten las mismas partidas, menús, cofres, NPCs, mobs, eventos y facts. Lo que cambia es de dónde salen las salas.
Las piezas
| Pieza | Entrada | Qué es |
|---|---|---|
| Tipo de puerta | Dungeon Connector Type | El tamaño de la abertura de una puerta, el bloque que sella una puerta sin usar y qué tipos se pueden unir. |
| Sala | Dungeon Room Template | Una estructura guardada (una estructura .nbt de Paper guardada como artifact) con su categoría, puertas y marcadores. |
| Pool | Dungeon Room Pool | Una lista ponderada de plantillas de sala. |
| Generador | Dungeon Generator | Las reglas: qué pools, cuántas salas, a qué profundidad está el jefe, con qué frecuencia se ramifica un camino. |
| Afijo | Dungeon Affix | Un modifier de la partida sorteado al azar, como "mobs rápidos". |
| Mazmorra | Dungeon Instance | Su campo generator la convierte en una mazmorra generada. |
Construye una, paso a paso
- Tipos de puerta. Añade al menos un Dungeon Connector Type. Fija su
widthyheight(3 por 3 por defecto), elsealBlockque cierra una puerta sin usar (minecraft:stone_brickspor defecto) y, si tienes varios tipos,compatibleWith. Un tipo siempre se puede unir consigo mismo. - Salas. Para cada sala, añade un Dungeon Room Template y usa el editor en el juego para capturar sus bloques y colocar sus puertas y marcadores. Elige su
category. - Pools. Añade un Dungeon Room Pool para las salas de inicio, uno para las salas de jefe, uno (o más) para las demás salas y, opcionalmente, uno para pasillos. Un pool de inicio, de jefe o de pasillo contiene plantillas de esa categoría únicamente. Un pool normal puede mezclar plantillas
NORMAL,TREASUREySECRET. - Generador. Añade un Dungeon Generator y fija
startPool,bossPool, opcionalmentecorridorPool, ynormalPoolscon un peso cada uno. - Mazmorra. En tu Dungeon Instance, fija
generator. DejatemplateWorldvacío: una mazmorra generada no tiene mundo plantilla. El aislamiento debe serAUTOoWORLD_PER_RUN. - Lógica de juego. Usa los triggers
onEnteryonClearde las plantillas de sala, los marcadores TRIGGER, los eventos de sala, las entradas Dungeon Mob Spawn en marcadores MOB, y termina la partida con Dungeon Complete.
Si los pools y plantillas no pueden formar una mazmorra, el lanzamiento se rechaza y el log del servidor indica por qué (por ejemplo un pool sin ninguna sala de inicio, o una plantilla sin una captura legible). El campo messages del generador contiene los motivos que se te informan a ti, el autor. El jugador solo ve un texto breve tomado de los snippets content.dungeon_generated.refusal.setup (los pools y plantillas no pueden formar una mazmorra) y content.dungeon_generated.refusal.paste (no se pudieron pegar las salas), que puedes editar en el panel web. No se les quita nada. La línea que anuncia los afijos de una partida es el snippet content.dungeon_generated.affix.announcement.
Categorías de sala
La category de una plantilla de sala indica qué papel puede desempeñar.
| Categoría | Papel |
|---|---|
START | La partida empieza aquí. Una por mazmorra. Debe contener un marcador SPAWN. |
NORMAL | Una sala ordinaria. |
TREASURE | Siempre en una rama, nunca en el camino al jefe. |
CORRIDOR | Se inserta entre dos salas que no pueden tocarse directamente. |
SECRET | Siempre un callejón sin salida. |
BOSS | La última sala. Una por mazmorra. |
Las salas se unen de puerta a puerta, así que una sala sin puertas solo puede ser un START sin salida. Una puerta con required activado debe unirse a otra sala: una plantilla que no puede llenar todas sus puertas requeridas nunca se usa. Una puerta por la que nadie pasó se cierra con el sealBlock de su tipo.
Marcadores
Un marcador es un punto de interés dentro de una sala. Cada uno tiene un kind:
| Tipo | Qué hace | Campo a rellenar |
|---|---|---|
SPAWN | Dónde aparecen los jugadores cuando empieza la partida. Solo se usa el primer SPAWN de la sala de inicio. | ninguno |
CHEST | Aquí se coloca un cofre de botín. Su posición y yaw sustituyen la ubicación de la entrada. Un cofre nombrado por un marcador siempre se coloca, incluso si su entrada está en manualMode. | chest: un Dungeon Loot Chest |
TRIGGER | Los triggers se disparan para el jugador que llega a la sala. | triggers |
NPC | Aquí se coloca un Dungeon NPC Instance, mostrado a los miembros de la partida. | npc |
MOB | Un Dungeon Mob Spawn hace aparecer aquí a sus mobs, la primera vez que un miembro de la partida entra en la sala. | mob |
El yaw de un marcador orienta un cofre (mira de vuelta hacia el yaw) y un NPC (mira hacia él). El marcador se enlaza con su entrada por su posición en la lista markers.
Salas en juego
Cuando un jugador entra en una sala de una mazmorra generada, se disparan los triggers onEnter de su plantilla, luego los triggers de sus marcadores TRIGGER y los mobs de sus marcadores MOB. Con enterOnce activado (por defecto en las plantillas), se disparan solo la primera vez que cada jugador entra en la sala en una partida.
Los triggers onClear se disparan una vez por partida cuando se ejecuta una acción Dungeon Clear Room mientras el jugador está en la sala. La plataforma nunca decide por sí sola que una sala está limpia: lo decides tú, por ejemplo desde el evento de muerte de mob cuando muere el último monstruo.
Los triggers de una sala leen estos valores del contexto (con una interaction_context_variable):
| Clave | Valor |
|---|---|
RUN_ID | Id de la partida. |
SEED | Semilla de la mazmorra, en decimal. |
ROOM | Número de la sala: 0 es la sala de inicio, después en el orden en que el generador las colocó. |
ROOM_TEMPLATE | Id de la entrada de la plantilla de sala. |
DIFFICULTY | La difficulty del generador. |
POSITION | El bloque del marcador en un marcador TRIGGER; si no, la posición del jugador. |
Los triggers de un afijo leen solo RUN_ID, SEED y DIFFICULTY. Una mazmorra fija no proporciona ninguna de estas claves.
Semillas, afijos y dificultad
La misma semilla da siempre la misma mazmorra, de modo que un diseño se puede reproducir. Se sortea una semilla nueva para cada partida. La semilla se guarda con la partida, así que una recarga reconstruye la misma mazmorra en memoria. Si no se puede reconstruir, la partida se cierra al arrancar en lugar de readoptarse con salas que nadie conoce.
Los afijos se sortean después del diseño, entre los affixes del generador según su weight, affixCount de ellos sin repetir. El sorteo sigue la semilla pero nunca cambia el diseño. Sus modifiers y triggers se aplican a cada miembro cuando empieza la partida.
difficulty es solo un número que se entrega a tus triggers mediante el contexto: no cambia el diseño por sí mismo.
Ajustes del generador que importan
| Campo | Por defecto | Notas |
|---|---|---|
minRooms, maxRooms | 6, 10 | Salas totales incluidas inicio y jefe, sin contar pasillos. Rango permitido: 2 a 256. |
minBossDepth | 3 | El jefe está al menos a esta cantidad de pasos del inicio. |
branchRatePercent | 40 | Probabilidad, en porcentaje, de que una sala más allá del camino principal abra una rama lateral. |
quotas | ninguno | Límites del número de salas NORMAL, TREASURE y SECRET. Una categoría sin límite es ilimitada. |
trialBudget, replans | 20000, 5 | Cuánto se esfuerza la búsqueda antes de fallar. El presupuesto de intentos por (replans + 1) debe quedar dentro de 5 000 000. |
baseY | 64 | Altura del suelo de la sala de inicio en el mundo de la partida. |
roomsPerTick | 4 | Salas pegadas por tick del servidor. Menos mantiene los ticks cortos; más es más rápido. |
pasteTimeoutSeconds | 120 | Pasado este tiempo, el lanzamiento se cancela, se reembolsa el coste y se descarta el mundo. |
naturalSpawning | desactivado | Monstruos y animales aparecen solos en el mundo de la partida. Desactivado por defecto. |
verticalMargin | 1.0 | Bloques añadidos por encima del techo y por debajo del suelo de cada sala al decidir si un jugador está dentro. |
paster | STRUCTURE | Usa la API de estructuras de Paper: no hace falta otro plugin. |
Una plantilla de sala mide como máximo 256 bloques por cada lado, con un máximo de 64 puertas y 1024 marcadores.
El editor en el juego
Abre un Dungeon Room Template en el panel web y haz clic en el editor de contenido del campo artifactId. Recibes un conjunto de herramientas en tu hotbar:
| Herramienta | Uso |
|---|---|
| Varita de esquinas | Clic izquierdo en un bloque para la esquina A, clic derecho en un bloque para la esquina B. |
| Capturar | Guarda los bloques de la caja como la estructura de la plantilla. |
| Herramienta de puertas | Clic derecho en un bloque de una pared para añadir una puerta (el bloque es el centro inferior de la abertura). Clic izquierdo para eliminar las puertas de ahí. |
| Tipo de puerta | Clic derecho para el siguiente tipo de conector, clic izquierdo para el anterior. |
| Interruptor de requerida | Alterna si las siguientes puertas son requeridas. |
| Herramienta de marcadores | Clic derecho en un bloque para añadir un marcador delante de él. Clic izquierdo para eliminar los marcadores de ahí. |
| Tipo de marcador | Clic derecho para el siguiente tipo, clic izquierdo para el anterior. |
| Guardar | Escribe las puertas y los marcadores en la entrada. |
Una barra de jefe muestra el tamaño de la caja, el número de puertas y marcadores, y si tienes trabajo sin guardar. El tamaño de la sala se lee de la estructura guardada, nunca se escribe. Debes crear y publicar al menos un tipo de conector antes de poder añadir una puerta.
Las capturas omiten las entidades por defecto, porque una entidad viva cambia la sala en cada captura y vuelve como un mob suelto en cada copia. Estos comportamientos y todos los textos del editor son snippets de Typewriter bajo content.dungeon_room_template., así que puedes cambiarlos o traducirlos en el panel web:
| Snippet | Por defecto | Significado |
|---|---|---|
capture.include_entities | false | Si una captura guarda las entidades de la caja. |
capture.max_volume | 262144 | Máximo de bloques que lee una captura. Se lee en un solo tick del servidor: una caja muy grande retiene ese tick. |
capture.timeout_seconds | 30 | Segundos de espera de una captura antes de rendirse. |
sound.confirm | entity.experience_orb.pickup | Sonido tras una captura o un guardado. Vacío: ninguno. |
Límites y buenas prácticas
- Las mazmorras generadas usan solo
WORLD_PER_RUN: cada partida crea un mundo y lo borra después. - El editor de salas fijas (nodos) tiene sus propios snippets bajo
content.dungeon_room.(mensajesnode.*,save.*,editor.*, herramientastool.add,tool.remove,tool.save). - Construye las salas de modo que dos puertas unidas del mismo tipo queden alineadas. Una anchura de abertura par tiene su bloque extra en la x o z más alta de la plantilla. El generador desliza una sala un bloque cuando una abertura par lo necesita.
- Toda la mazmorra debe caber entre el bloque más bajo y el más alto del mundo, contando desde
baseY. - No dependas de un número fijo de salas: usa marcadores y eventos en lugar de números de sala.