Pular para o conteúdo principal

Runs e isolamento de mundo

Uma run é uma partida de uma dungeon por um grupo. Esta página explica o que uma run possui, como o mundo dela é feito e qual modo de isolamento escolher.

O que uma run possui​

Toda run tem o seu próprio:

  • membros: os jogadores do grupo. Um jogador está em uma run por vez.
  • mundo ou slot: o lugar onde a dungeon existe só para esta run.
  • limite de tempo: o campo cooldownSeconds da dungeon (uma duração máxima; vazio ou 0 significa sem limite).
  • estado: a sala em que cada membro está, as salas once já usadas, os baús, os mobs já invocados.
  • audiência: os NPCs e baús de uma run são exibidos apenas aos seus membros.

Várias runs da mesma dungeon podem existir ao mesmo tempo, até maxSimultaneousInstances. Esse número também é o número de lobbies da dungeon. Quando todos estão ocupados, o próximo grupo recebe "All the runs of this dungeon are taken."

Grupos​

Um grupo é quem entra junto em um lobby, ou o único jogador de uma action Dungeon Enter. Se o jogador tem uma party no MMOCore, no Parties ou na extensão de party do Typewriter, essa party inteira entra junta no lobby quando há vaga para todos. O Dungeon apenas lê essas parties: ele nunca cria nem altera uma.

O tamanho do grupo deve estar entre minPartySize e maxPartySize, e todo membro deve corresponder aos criteria da dungeon. Um administrador usando /typewriter dungeon force-start pula o tamanho mínimo e os criteria.

Escolhendo um modo de isolamento​

Defina o campo isolation da Dungeon Instance.

ModoIsoladoCustoRequer
SLIME_CLONESimBaixo: um clone em memóriaAdvanced Slime Paper e um modelo que seja um mundo slime carregado.
WORLD_PER_RUNSimAlto: copia a pasta do modelo e depois apaga a cópiaUma pasta de mundo modelo na raiz do servidor.
SHARED_WORLD_SLOTSNãoMais baixo: nada é copiadoUm mundo construído de forma idêntica em cada slot.
AUTO (padrão)SLIME_CLONE quando o Advanced Slime Paper está instalado, caso contrário WORLD_PER_RUN.

Um modo que não pode rodar no servidor recusa a run; ele nunca recorre a outro modo. O jogador lê "The dungeon cannot be started on this server." e o log do servidor diz por quê.

SLIME_CLONE​

Cada run recebe um clone em memória de um mundo slime. É o modo mais barato que é totalmente isolado. Ele exige o Advanced Slime Paper, e templateWorld deve nomear um mundo slime carregado.

WORLD_PER_RUN​

Cada run recebe uma cópia da pasta do mundo modelo, que é um mundo novo de verdade. A cópia é feita fora das threads do servidor, o novo mundo é nomeado pela extensão e marcado com um arquivo marcador para que apenas mundos criados por ela possam ser apagados. No fim da run, o mundo é descarregado sem salvar e sua pasta é apagada.

  • O modelo nunca é carregado, gravado ou apagado pela extensão.
  • Um link (link simbólico, junction) em qualquer lugar da pasta do modelo faz a cópia ser recusada.
  • O nome do modelo só pode usar letras, dígitos, _ e - (até 64 caracteres). O mundo principal do servidor e nomes que se parecem com mundos de run são recusados.
  • Se um mundo não pode ser descarregado porque um jogador continua nele, ele permanece carregado e é apagado na próxima inicialização.

Este também é o único modo que comporta uma dungeon gerada: a extensão cria um mundo vazio para a run e cola as salas nele. Com um gerador, AUTO e WORLD_PER_RUN funcionam, enquanto SLIME_CLONE e SHARED_WORLD_SLOTS são recusados.

SHARED_WORLD_SLOTS​

Todas as runs da dungeon acontecem no próprio mundo modelo, cada uma em seu próprio slot de uma grade. A extensão desloca toda posição que você definiu (spawn, salas, baús, NPCs, posições de mobs) pelo deslocamento do slot da run, então você constrói a dungeon uma vez no slot de origem e depois a constrói de forma idêntica em todos os outros slots (por exemplo, colando-a).

O campo sharedSlots define a grade:

CampoSignificadoPadrão
spacingX, spacingZBlocos entre dois slots. No mínimo a pegada.512
columnsSlots por fileira. 0 = todos os slots em uma fileira ao longo de X.0
footprintX, footprintZTamanho do modelo, em blocos.256
Este modo não é isolado

Mobs, itens soltos e blocos são compartilhados por todos os slots do mundo. Quando uma run termina, seus mobs, baús e NPCs são removidos, mas o mundo em si não é reparado: itens largados no chão e blocos quebrados por jogadores ou mobs permanecem. Os jogadores de outros slots ficam ocultos uns dos outros, e os baús, NPCs e mobs de uma run são filtrados para os seus membros, mas uma dungeon com mobs destrutivos ou edições no mundo deixará marcas. Em um mundo compartilhado, mantenha blockDamage e dropVanillaLoot desativados nas entries Dungeon Mob Spawn.

Duas dungeons construídas no mesmo mundo compartilhado dividem os slots dele. Use o mesmo maxSimultaneousInstances para ambas.

Iniciando uma run​

O lançamento é tudo ou nada:

  1. Os criteria e o tamanho do grupo são verificados, e o modo de isolamento é resolvido.
  2. Um lugar é reservado, então um clique duplo gera uma run, não duas.
  3. Para uma dungeon gerada, o layout é feito e depois colado no novo mundo algumas salas por tick.
  4. O mundo é preparado (clone, cópia ou slot).
  5. O custo de entrada é cobrado, tudo ou nada.
  6. A origem de cada membro é registrada e todos são teletransportados.
  7. A run fica ativa, e então baús, onStart, modifiers (e os affixes de uma dungeon gerada) são executados para cada membro.

Se qualquer etapa falhar, os jogadores ficam onde estavam, o custo é devolvido, o mundo é liberado e o lugar é devolvido.

Terminando uma run​

O primeiro destes vence, e apenas um fim é executado mesmo quando vários acontecem juntos:

  • Dungeon Complete (a dungeon foi concluída).
  • O limite de tempo (cooldownSeconds) se esgotou.
  • Dungeon Close ou /typewriter dungeon close <instance>.
  • Todos os membros saíram, trocaram de mundo ou se desconectaram.

O fim executa onEnd para cada membro online, limpa os baús, NPCs e mobs da run, envia os membros de volta (para o exitPoint de Complete e Close quando definido, caso contrário para onde cada um veio) e então libera o mundo. Um jogador que se desconecta em uma run é trazido de volta para onde veio no próximo login. Se ele voltar dentro do prazo de reconexão (reconnectGrace, 2 minutos por padrão), mantém o lugar em vez disso: veja Desconexões.

Reload e reinicialização​

EventoO que acontece com as runs
typewriter reload, PublishAs runs são adotadas de novo: membros, mundo, prazo, estado das salas, baús abertos e mobs invocados voltam. onStart e modifiers não são executados de novo.
Reinicialização do servidorAs runs terminam: seus mundos desaparecem. Os jogadores são enviados para casa no próximo login e as pastas de mundo órfãs são limpas.

Para que a adoção funcione, vincule um Active Dungeon Instance Artifact no campo runtimeArtifact. Sem ele, as runs são gravadas em um arquivo runs.json da extensão, e o log do servidor avisa você ao carregar. Várias dungeons podem compartilhar um artifact.

Uma run que não pode ser adotada (sua dungeon foi apagada, seu mundo não está carregado, seu layout gerado não pode ser reconstruído) é fechada na inicialização e seus jogadores são enviados para casa. O log diz por quê.

Os lobbies não são restaurados por um reload nem por uma reinicialização: eles voltam vazios, exceto os lobbies das runs que foram adotadas.

Relacionado​