Partidas y aislamiento de mundo
Una partida (run) es un recorrido de una mazmorra por un grupo. Esta página explica qué posee una partida, cómo se crea su mundo y qué modo de aislamiento elegir.
Qué posee una partida
Cada partida tiene sus propios:
- miembros: los jugadores del grupo. Un jugador está en una partida a la vez.
- mundo o hueco: el lugar donde la mazmorra existe solo para esta partida.
- límite de tiempo: el campo
cooldownSecondsde la mazmorra (una duración máxima; vacío o0significa sin límite). - estado: la sala en la que está cada miembro, las salas
onceya usadas, los cofres, los mobs ya aparecidos. - audience: los NPCs y cofres de una partida se muestran solo a sus miembros.
Pueden existir varias partidas de la misma mazmorra a la vez, hasta maxSimultaneousInstances. Ese número es también el número de lobbies de la mazmorra. Cuando todos están ocupados, al siguiente grupo se le dice "All the runs of this dungeon are taken."
Grupos
Un grupo es quien se une junto a un lobby, o el único jugador de una acción Dungeon Enter. Si el jugador tiene una party en MMOCore, Parties o la extensión de party de Typewriter, toda esa party se une junta al lobby cuando hay sitio para todos. Dungeon solo lee esas parties: nunca crea ni modifica ninguna.
El tamaño del grupo debe estar entre minPartySize y maxPartySize, y todos los miembros deben cumplir los criteria de la mazmorra. Un administrador que use /typewriter dungeon force-start se salta el tamaño mínimo y los criteria.
Elegir un modo de aislamiento
Fija el campo isolation de la Dungeon Instance.
| Modo | Aislado | Coste | Necesita |
|---|---|---|---|
SLIME_CLONE | Sí | Bajo: un clon en memoria | Advanced Slime Paper y una plantilla que sea un mundo slime cargado. |
WORLD_PER_RUN | Sí | Alto: copia la carpeta de la plantilla y luego borra la copia | Una carpeta de mundo plantilla en la raíz del servidor. |
SHARED_WORLD_SLOTS | No | El más bajo: no se copia nada | Un mundo construido de forma idéntica en cada hueco. |
AUTO (por defecto) | SLIME_CLONE cuando Advanced Slime Paper está instalado; si no, WORLD_PER_RUN. |
Un modo que no puede ejecutarse en el servidor rechaza la partida; nunca recurre a otro modo. El jugador lee "The dungeon cannot be started on this server." y el log del servidor indica por qué.
SLIME_CLONE
Cada partida recibe un clon en memoria de un mundo slime. Es el modo más barato que está totalmente aislado. Necesita Advanced Slime Paper, y templateWorld debe nombrar un mundo slime cargado.
WORLD_PER_RUN
Cada partida recibe una copia de la carpeta del mundo plantilla, que es un mundo nuevo real. La copia se hace fuera de los hilos del servidor, el mundo nuevo lo nombra la extensión y lo marca con un archivo marcador para que solo se puedan borrar los mundos que ella creó. Al final de la partida el mundo se descarga sin guardar y su carpeta se borra.
- La extensión nunca carga, escribe ni borra la plantilla.
- Un enlace (enlace simbólico, junction) en cualquier parte de la carpeta de la plantilla hace que la copia se rechace.
- El nombre de la plantilla solo puede usar letras, dígitos,
_y-(hasta 64 caracteres). Se rechazan el mundo principal del servidor y los nombres que parezcan mundos de partida. - Si un mundo no se puede descargar porque un jugador sigue en él, permanece cargado y se borra en el siguiente arranque.
Este es también el único modo que admite una mazmorra generada: la extensión crea un mundo vacío para la partida y pega las salas en él. Con un generador, AUTO y WORLD_PER_RUN funcionan, mientras que SLIME_CLONE y SHARED_WORLD_SLOTS se rechazan.
SHARED_WORLD_SLOTS
Todas las partidas de la mazmorra ocurren en el propio mundo plantilla, cada una en su propio hueco de una cuadrícula. La extensión desplaza cada posición que escribiste (aparición, salas, cofres, NPCs, posiciones de mobs) según el desfase del hueco de la partida, así que construyes la mazmorra una vez en el hueco de origen y luego la construyes de forma idéntica en cada otro hueco (por ejemplo pegándola).
El campo sharedSlots fija la cuadrícula:
| Campo | Significado | Por defecto |
|---|---|---|
spacingX, spacingZ | Bloques entre dos huecos. Al menos la huella. | 512 |
columns | Huecos por fila. 0 = todos los huecos en una fila a lo largo de X. | 0 |
footprintX, footprintZ | Tamaño de la plantilla, en bloques. | 256 |
Los mobs, los ítems soltados y los bloques los comparten todos los huecos del mundo. Cuando termina una partida, se retiran sus mobs, cofres y NPCs, pero el mundo en sí no se repara: los ítems soltados en el suelo y los bloques rotos por jugadores o mobs permanecen. Los jugadores de otros huecos se ocultan entre sí, y los cofres, NPCs y mobs de una partida se filtran para sus miembros, pero una mazmorra con mobs destructivos o ediciones del mundo dejará marcas. En un mundo compartido, mantén blockDamage y dropVanillaLoot desactivados en las entradas Dungeon Mob Spawn.
Dos mazmorras construidas sobre el mismo mundo compartido comparten sus huecos. Usa el mismo maxSimultaneousInstances para ambas.
Iniciar una partida
El lanzamiento es todo o nada:
- Se comprueban los criteria y el tamaño del grupo, y se resuelve el modo de aislamiento.
- Se reserva un lugar, de modo que un doble clic da una partida, no dos.
- En una mazmorra generada, se crea el diseño y después se pega en el mundo nuevo unas pocas salas por tick.
- Se prepara el mundo (clon, copia o hueco).
- Se cobra el coste de entrada, todo o nada.
- Se registra el origen de cada miembro y todos son teletransportados.
- La partida pasa a estar activa, y después se ejecutan los cofres,
onStarty los modifiers (y los afijos de una mazmorra generada) para cada miembro.
Si falla cualquier paso, los jugadores se quedan donde estaban, se reembolsa el coste, se libera el mundo y se devuelve el lugar.
Terminar una partida
Gana la primera de estas, y solo se ejecuta un final aunque varias ocurran juntas:
- Dungeon Complete (la mazmorra se terminó).
- Se agotó el límite de tiempo (
cooldownSeconds). - Dungeon Close o
/typewriter dungeon close <instance>. - Todos los miembros se fueron, cambiaron de mundo o se desconectaron.
El final ejecuta onEnd para cada miembro conectado, limpia los cofres, NPCs y mobs de la partida, devuelve a los miembros (al exitPoint de Complete y Close cuando está fijado; si no, al lugar de donde venía cada uno) y después libera el mundo. Un jugador que se desconecta en una partida es devuelto al lugar de donde vino en su siguiente conexión. Si vuelve dentro del plazo de reconexión (reconnectGrace, 2 minutos por defecto), conserva en cambio su sitio: consulta Desconexiones.
Recarga y reinicio
| Evento | Qué ocurre con las partidas |
|---|---|
typewriter reload, Publish | Las partidas se readoptan: vuelven los miembros, el mundo, la fecha límite, el estado de las salas, los cofres abiertos y los mobs aparecidos. onStart y los modifiers no se ejecutan de nuevo. |
| Reinicio del servidor | Las partidas terminan: sus mundos desaparecen. Los jugadores son enviados a casa en su siguiente conexión y las carpetas de mundo huérfanas se purgan. |
Para que la readopción funcione, enlaza un Active Dungeon Instance Artifact en el campo runtimeArtifact. Sin él, las partidas se escriben en un archivo runs.json de la extensión, y el log del servidor te avisa al cargar. Varias mazmorras pueden compartir un artifact.
Una partida que no se puede readoptar (su mazmorra fue borrada, su mundo no está cargado, su diseño generado no se puede reconstruir) se cierra al arrancar y sus jugadores son enviados a casa. El log indica por qué.
Los lobbies no se restauran con una recarga ni con un reinicio: vuelven vacíos, salvo los lobbies de las partidas que se readoptaron.