Pular para o conteúdo principal

Dungeon

Dungeons instanciadas com lobbies de grupo, menus GUI, baús de saque e um editor de salas no jogo.

Pagasv1.2Combate e mobs
RequerTypeWriter0.9Quest (TypeWriter extension)GUIMMOCoreopcionalPartiesopcionalAdvanced Slime PaperopcionalPlaceholderAPIopcional

Visão geral​

O Dungeon permite que uma party jogue uma cópia privada de uma dungeon. Cada partida é uma run: ela tem seu próprio mundo (ou seu próprio slot de um mundo compartilhado), seus próprios membros, seu próprio limite de tempo, seus próprios baús, NPCs e mobs, e termina de forma limpa, enviando todos de volta para onde vieram.

Uma dungeon é descrita por uma única entry Dungeon Instance. Os jogadores a escolhem em um menu global (um navegador de dungeons agrupadas em uma categoria), entram em um lobby no menu de party, marcam-se como prontos e são teletransportados quando a contagem regressiva termina. A equipe e as quests também podem enviar um jogador direto para dentro com a action Dungeon Enter ou com um comando.

Existem dois tipos de dungeon:

  • Fixa: você constrói a dungeon uma vez em um mundo modelo. As salas são zonas que você desenha no jogo, e tudo acontece nos lugares que você definiu. É a dungeon clássica.
  • Gerada: você constrói modelos de sala (pequenas estruturas com portas e marcadores) e um gerador monta um novo layout a cada run, da sala inicial até a sala do chefe. A mesma seed sempre gera a mesma dungeon. Veja Dungeons geradas.

Os dois tipos compartilham as mesmas runs, menus, baús, NPCs, mobs, eventos e facts.

Somente Paper

O Dungeon tem o Paper como alvo. Ele não é compatível com o Folia: o plugin oficial do Typewriter não roda lá.

Recursos​

  • Runs e grupos: uma run por grupo, várias runs da mesma dungeon ao mesmo tempo (maxSimultaneousInstances), um limite de tempo, custos de entrada, fim da run por conclusão, tempo esgotado, run vazia ou fechamento por um administrador. Veja Runs e isolamento de mundo.
  • Três modos de isolamento: SLIME_CLONE, WORLD_PER_RUN e SHARED_WORLD_SLOTS, escolhidos por dungeon com o campo isolation.
  • Dungeons fixas: salas com triggers onEnter / onLeave, modifiers, criteria e prioridade.
  • Dungeons geradas: modelos de sala, tipos de conector, pools de salas, um gerador, affixes e um editor no jogo para capturar salas e colocar portas e marcadores.
  • Menu global e menu de party: layouts da extensão GUI, atualizados ao vivo enquanto os jogadores entram e saem dos lobbies.
  • Baús de loot: baús de bloco ou ancorados em NPC, reais ou do lado do cliente, um inventário por jogador ou compartilhado, loot ponderado ou independente.
  • NPCs por run: um NPC exibido apenas para os membros de uma run, a partir de qualquer entity definition do Typewriter. Veja Entidades nas dungeons.
  • Mobs de combate: mobs vanilla reais que aparecem uma vez por run, com equipamento, atributos, regras de drop e triggers na morte, limitados por um teto.
  • Eventos, facts e actions: eventos de início, conclusão, entrada em sala, saída de sala e morte de mob; facts para "está em uma dungeon" e "mobs vivos"; actions para concluir uma run, limpar uma sala e invocar uma onda.
  • Estatísticas: 22 estatísticas por jogador (runs, melhor tempo, abates de mobs, dano causado e sofrido, mortes, ondas limpas...), legíveis com placeholders e um fact, e classificáveis em um ranking do GUI. Veja Estatísticas.
  • Seguro em reloads: um typewriter reload ou um Publish mantém as runs em andamento. Uma reinicialização do servidor as encerra.
  • Parties de outros plugins: lê a party do MMOCore, do Parties ou da extensão de party do Typewriter para que os amigos entrem juntos.

Instalação​

  1. Instale a extensão GUI a partir da página dela. Os dois menus do Dungeon usam os layouts dela.
  2. Verifique se a extensão Quest do TypeWriter está instalada.
  3. Prepare o que o seu modo de isolamento exige (veja Runs e isolamento de mundo):
    • Dungeon fixa: um mundo modelo, como uma pasta na raiz do servidor (ao lado de world), por exemplo dungeon_temple. O nome pode usar letras, dígitos, _ e -, com até 64 caracteres.
    • Dungeon gerada: nenhum mundo modelo. A extensão cria um mundo vazio para cada run.
    • Slime clone: Advanced Slime Paper com o modelo como um mundo slime carregado.
  4. Baixe o Dungeon nas lojas (veja os botões no painel acima) e coloque o JAR em plugins/Typewriter/extensions/.
  5. Reinicie o servidor.
  6. Opcional: instale o MMOCore ou o Parties para suporte a parties externas, e o PlaceholderAPI para os placeholders.

Atualizando da 0.10? Leia primeiro a nota de migração.

Primeiros passos​

Este passo a passo constrói uma dungeon fixa com um menu de lobby e um baú. Para uma dungeon gerada, comece por Dungeons geradas.

  1. No painel web, abra uma página manifest e adicione um Dungeon Room Config. Fique onde os jogadores devem chegar, clique no editor de conteúdo de spawnPoint e confirme. O mundo, as coordenadas e a direção do olhar são capturados.
  2. Adicione um Dungeon Instance. Defina templateWorld com o nome da pasta do mundo, adicione o room config em roomConfigurations e defina minPartySize e maxPartySize.
  3. Adicione um Dungeon Artifact (estatísticas) e um Active Dungeon Instance Artifact (estado das runs), e vincule-os em artifact e runtimeArtifact. Sem o segundo, as runs ficam em um arquivo runs.json da extensão e um aviso é registrado no log ao carregar. O campo partyLobbyArtifact não é mais usado: deixe-o vazio.
  4. Adicione uma Dungeon Category. Em instances, adicione um slot, defina dungeonInstance e escolha os itens de desbloqueado e bloqueado.
  5. Em uma página sequence, adicione um Dungeon Global Menu e um Dungeon Party Menu. Desenhe os dois layouts como descrito em Menus.
  6. Dispare o menu global a partir de um diálogo de NPC, de um command event ou de qualquer outro trigger. Publique.
  7. Adicione um Dungeon Loot Chest para a instance. Fique onde o baú deve ficar, capture location e preencha lootTable.
  8. Adicione uma action Dungeon Complete onde a dungeon deve terminar (por exemplo, no fim de um diálogo depois do último baú).
  9. Teste: abra o menu, clique na dungeon, clique no lobby, aperte o botão de pronto.
dica

Para pular os menus e enviar um jogador direto para dentro, use Dungeon Enter ou /typewriter dungeon enter <instance>. Isso pula o lobby, mas não as regras: o tamanho do grupo (um jogador precisa ser permitido por minPartySize), os criteria, o custo de entrada e o número de runs simultâneas são todos verificados.

Como funciona​

Uma run começa quando um lobby é lançado ou quando uma action Dungeon Enter é executada. A extensão verifica os criteria e o tamanho do grupo de cada jogador, reserva um lugar (um clique duplo gera uma única run), prepara o mundo, cobra o custo de entrada (tudo ou nada), teletransporta os jogadores e então dispara onStart e aplica os modifiers para cada membro. Se algo falhar no caminho, nada é mantido: os jogadores ficam onde estavam, o custo é devolvido e o mundo é descartado.

Uma run termina quando Dungeon Complete é executada, quando o limite de tempo chega a zero, quando Dungeon Close ou /typewriter dungeon close é executado, ou quando o último jogador sai, troca de mundo ou se desconecta. onEnd é disparado para cada membro, os baús, NPCs e mobs da run são removidos, os jogadores são teletransportados para o ponto de saída (ou para onde vieram) e o mundo é liberado.

Só um fim vale quando vários acontecem ao mesmo tempo, então você nunca recebe dois onEnd nem um reembolso duplo.

Reloads e reinicializações​

Um typewriter reload ou um Publish não perde as runs: elas são adotadas de novo com seus membros, mundo, prazo, estado das salas (uma sala once continua gasta), baús abertos e os mobs já invocados. onStart, modifiers e baús não são reexecutados. Uma dungeon gerada é reconstruída em memória a partir da seed.

Uma reinicialização do servidor encerra as runs: os mundos das runs desaparecem, os jogadores são enviados para casa no próximo login e as pastas de mundo restantes são limpas. Os lobbies não são restaurados por nenhum dos dois.

Desconexões​

Um membro que se desconecta de uma dungeon em andamento mantém seu lugar durante o reconnectGrace da Dungeon Instance (2 minutos por padrão). Enquanto isso, a run não fecha e as estatísticas desse membro não são pagas. Um membro que volta a tempo reaparece onde estava, com sua sidebar, seus ocultamentos e seu modo de jogo como antes. Quando o prazo acaba, ele sai da run e, na próxima conexão, é enviado de volta ao lugar por onde entrou. O limite de tempo da run continua correndo.

Um membro que está sendo esperado continua sendo membro: se a run terminar nesse meio-tempo, ele recebe o resultado como os outros, conclusão e melhor tempo incluídos, enquanto os gatilhos onEnd só rodam para os membros online. 0 significa sem prazo: uma desconexão remove o jogador na hora. Um typewriter reload durante o prazo o encerra para os jogadores esperados.

Com o MMOProfiles instalado, o retorno é verificado de novo depois que o jogador escolhe um perfil. Um jogador que não está em nenhuma run e que o perfil coloca em um mundo de dungeon é enviado de volta ao lugar por onde entrou, e o modo de jogo que uma dungeon havia mudado é devolvido, seja qual for o modo restaurado pelo perfil. Um jogador que está na sua run (no prazo de graça) simplesmente retoma. Sem o MMOProfiles, nada muda.

O Dungeon tem dois menus. Ambos são actions com um layoutPool de GUI e um mainLayoutId. Os itens dos layouts funcionam como qualquer item de GUI. Os itens cujo buttonType é um dos valores abaixo são preenchidos pelo Dungeon: o seu item (material, nome, lore) é mantido e um comportamento de clique é adicionado. Escreva buttonType em maiúsculas, exatamente como listado. Deixe buttonPrefix vazio.

Os dois menus são redesenhados a cada autoRefreshTicks (20 por padrão, mantido entre 10 e 1200) e imediatamente, para todo jogador que os tenha abertos, sempre que um lobby das dungeons exibidas muda. Um jogador vê outro entrar sem clicar.

Para os tipos de layout, os campos dos itens (x, y, count, direction, gap, repeatY) e as ações de clique, leia o guia do GUI. Uma construção passo a passo está em Desenhando os menus.

O Dungeon Global Menu mostra as dungeons de uma category. Ele abre quando a action é disparada, ou com /typewriter dungeon global-menu <category>.

buttonTypeComportamento
DUNGEON_INSTANCE_SLOTMarca onde uma dungeon aparece. Coloque um por dungeon, ou use count, direction, gap e repeatY para marcar uma fileira ou um bloco. Cada marcador é substituído pela próxima dungeon da categoria. Marcadores a mais ficam vazios.
DUNGEON_FIND_PARTYO clique esquerdo entra no primeiro lobby não vazio que ainda tem vaga, entre as dungeons desbloqueadas da categoria, e abre o menu de party. Se o jogador já está em um lobby da categoria, ele sai dele.
DUNGEON_INFOApenas exibição. Use-o para um item de ajuda.

Como as dungeons são desenhadas:

  • As dungeons são ordenadas por categoryPriority (menor primeiro) e depois pelo id da entry.
  • Um slot é exibido com unlockedItem, unlockedName e unlockLore quando seus criteria correspondem ao jogador (uma lista vazia sempre corresponde). Clicar nele abre o menu de party daquela dungeon.
  • Um slot cujos criteria não correspondem é exibido com o visual de bloqueado e não pode ser aberto. Os criteria são avaliados para cada jogador que abre o menu, e de novo quando o jogador clica.
  • Nomes e lore podem usar {dungeon_name}, {players} e {max}, além de placeholders do PlaceholderAPI. {players} é o tamanho do primeiro lobby da dungeon.
  • Coloque os marcadores DUNGEON_INSTANCE_SLOT em layouts simple, paginated ou scrollable. Se o layout base for scrollable, as dungeons rolam junto com ele.
  • Sem nenhum marcador DUNGEON_INSTANCE_SLOT, nenhuma dungeon é exibida.

O Dungeon Party Menu é o lobby. Ele abre quando um jogador clica em uma dungeon no menu global, e com /typewriter dungeon instance-menu <instance>. Disparar a própria action não faz nada além de exibir uma dica, então não a ligue a um NPC.

Qual menu atende qual dungeon. Um menu de party cujo dungeonInstance nomeia a dungeon a atende. Um menu de party com dungeonInstance vazio atende todas as dungeons que nenhum outro menu nomeia. Um menu escrito para outra dungeon nunca é aberto no lugar: quando nenhum serve, o jogador é avisado e o log do servidor diz No dungeon_party_menu serves '<instance>'. Assim você pode ter um menu por dungeon, um menu compartilhado, ou os dois.

Uma dungeon tem tantos lobbies quanto o seu maxSimultaneousInstances. Cada lobby é um item: lobbyItem nomeado com lobbyName e descrito com lobbyLore. Onde os lobbies são desenhados:

  • Com marcadores DUNGEON_LOBBY_SLOT em um layout simple (do mesmo modo que DUNGEON_INSTANCE_SLOT, use count, direction e gap para marcar vários), cada marcador é substituído pelo próximo lobby.
  • Sem nenhum marcador, o lobby n é colocado na coluna lobbyOffsetX + (n mod 9) e na linha lobbyOffsetY + (n div 9), contando a partir de 0.

Clicar em um lobby entra nele.

Placeholder em lobbyName e lobbyLoreValor
{index}Número do lobby, a partir de 1.
{players}, {max}Jogadores no lobby, e maxPartySize.
{player_names}Nomes dos membros, envolvidos pelo prefixo e sufixo de pronto ou não pronto. Somente na lore.
{ready_players}, {not_ready_players}Contagens. Somente na lore.

readyPlayerPrefix, readyPlayerSuffix, notReadyPlayerPrefix e notReadyPlayerSuffix colorem os nomes em {player_names}.

buttonTypeComportamento
DUNGEON_LOBBY_SLOTMarca onde um lobby aparece.
DUNGEON_READYAlterna o estado de pronto. Se o jogador não tem o custo de entrada, ninguém é marcado como pronto e o lobby recebe o missingItemsMessage da dungeon.
DUNGEON_LEAVESai do lobby e volta ao menu global de onde o jogador veio.
DUNGEON_AUTO_FILLEntra no primeiro lobby não vazio com vaga livre.

Quando a run começa:

  1. Todos no lobby devem estar prontos e o lobby deve ter pelo menos minPartySize jogadores.
  2. Uma contagem regressiva de startCooldownSeconds corre. Ela para se alguém desmarcar o pronto. Com 0, a run começa imediatamente.
  3. Os criteria são verificados para cada jogador, depois os custos de entrada. Com entryCostMode LEADER, o primeiro jogador do lobby paga. Com GROUP, todos pagam. Os itens só são retirados se ninguém estiver sem nada.
  4. A run é criada e os jogadores são teletransportados para o ponto de spawn.

Um lobby que espera sem contagem regressiva por lobbyIdleKickSeconds (120 segundos por padrão) é esvaziado. Um administrador pode iniciar um lobby manualmente com /typewriter dungeon force-start <instance>, que dispensa o tamanho mínimo do grupo e os criteria.

Enquanto os jogadores esperam, o menu de party pode exibir um scoreboard de espera (enableWaitingScoreboard, scoreboardTitle, scoreboardWaiting com {missing}, scoreboardCountdown com {time}).

Parties de outros plugins. Se o MMOCore (usando seu próprio módulo de party), o Parties ou a extensão de party do Typewriter estiver instalado, o Dungeon lê as parties deles e nunca as cria, mescla ou altera. Quando um jogador entra em um lobby, toda a party dele entra junto se o lobby tiver vaga para todos. O MMOCore é usado sozinho quando está presente.

Comandos usados pelos botões​

Os botões não usam um comando do servidor: eles chamam um handler interno do sistema de menus, então os jogadores não precisam de permissão e não há nada para digitar à mão.

Configuração​

A extensão não tem arquivo de configuração. A maioria dos ajustes fica nas entries. As mensagens das entries de action (Enter, Leave, Close, Complete) e da dungeon instance (missingItemsMessage) são campos. O tempo de inatividade de um lobby é o campo lobbyIdleKickSeconds da dungeon instance (padrão 120, 2 minutos).

Todo outro texto que um jogador lê é um snippet do Typewriter, então nada é fixo no código: altere ou traduza-os no painel web (snippets). Os valores são MiniMessage, e os placeholders {...} são substituídos como listado. Mantenha os padrões e nada muda.

FamíliaChaves (após o prefixo)
content.dungeon_menu.invalid_action, action_failed, in_instance, party_in_instance, global_in_instance, locked, lobby_unavailable, left_lobby, not_in_lobby, no_lobby_available, left_party, no_party_found, no_party_menu ({dungeon}), no_category, party_needs_dungeon
content.dungeon_lobby.idle_kick ({seconds}, {minutes}), party_sync, missing_items_fallback ({PlayerName}, {MissingQuantity}, {ItemName}; usado quando missingItemsMessage está vazio), scoreboard_syncing
content.dungeon_run.sidebar.time_left ({seconds}), quest ({number}). Uma linha da sidebar é texto simples: as tags MiniMessage são removidas.
content.dungeon_chest.default_title (título de um baú cujo containerTitle está vazio), trigger_chest_missing, trigger_not_manual
content.dungeon_launch.prefix (colocado antes de cada texto da família), no_online_member, already_in_run ({player}), no_room_configuration, group_size ({size}, {min}, {max}), criteria_not_met ({player}), missing_cost e missing_cost_leader ({player}, {amount}, {item}), max_runs_reached, isolation_unavailable, generation_failed ({text}), failed
content.dungeon_stats.Como os placeholders de estatísticas escrevem: duration_format (tokens {h}, {m}, {mm}, {ss}, {SSS}; padrão {mm}:{ss}) e missing_value (o que é escrito para um valor que ainda não existe; padrão -).
content.dungeon_command.As respostas dos comandos /typewriter dungeon ...: only_players.close, only_players.enter, only_players.leave, only_players.menu, only_players.force_start, only_players.edit_room (enviado ao console), not_in_run, close.done, close.already_closing, enter.done ({dungeon}), leave.done ({dungeon}), instance_menu.join_failed, instance_menu.joined ({dungeon}), global_menu.not_configured ({category}), force_start.not_in_lobby, force_start.done ({dungeon}), room.invalid_index ({index})
content.dungeon_room., content.dungeon_room_template., content.dungeon_generated.Editores de sala e recusas de dungeons geradas.

As respostas dos comandos /typewriter dungeon ... também são snippets, embora os comandos sejam só para a equipe. As respostas do editor de salas (addnode, removenode, save...) estão em content.dungeon_room., e o texto de um enter recusado é um snippet de content.dungeon_launch..

Os artifacts guardam dados em plugins/Typewriter/:

ArtifactConteúdo
Dungeon ArtifactEstatísticas por dungeon e por jogador (artifactId padrão dungeon_data).
Active Dungeon Instance ArtifactEstado das runs em andamento, para que um reload não as perca.
Dungeon Room TemplateA estrutura salva de uma sala de uma dungeon gerada.
Dungeon Party Lobby ArtifactInerte. Mantido para que páginas antigas ainda carreguem.

Comandos​

Todos os comandos do Dungeon ficam em /typewriter dungeon (/tw dungeon). Cada um exige a permissão typewriter.dungeon.admin e deve ser executado por um jogador.

ComandoDescrição
/typewriter dungeon enter <instance>Cria uma run só para você e teletransporta para ela. O tamanho do grupo, os criteria, o custo de entrada e o limite de runs continuam valendo.
/typewriter dungeon leave <instance>Remove você da sua run daquela dungeon e volta para onde você veio.
/typewriter dungeon close <instance>Encerra a sua própria run daquela dungeon (fechamento por administrador).
/typewriter dungeon global-menu <category>Abre o menu global configurado para a categoria.
/typewriter dungeon instance-menu <instance>Entra no primeiro lobby com vaga para o seu grupo e abre o menu de party.
/typewriter dungeon force-start <instance>Inicia o lobby em que você está sem esperar o pronto, a contagem regressiva, o tamanho mínimo do grupo nem os criteria.
/typewriter dungeon room <room> editAbre o editor de sala no jogo para um Dungeon Room.
/typewriter dungeon room <room> addnodeAdiciona um nó aos seus pés.
/typewriter dungeon room <room> removenodeRemove o último nó.
/typewriter dungeon room <room> removenodeat <index>Remove um nó pelo seu número, a partir de 1.
/typewriter dungeon room <room> saveSalva a sala.
/typewriter dungeon room <room> cancelDescarta a edição.

leave e close exigem que você esteja em uma partida do dungeon indicado; caso contrário, respondem "You are not in a run of this dungeon" (o snippet content.dungeon_command.not_in_run). O antigo subcomando start não existe mais: use enter.

Os modelos de sala das dungeons geradas são editados no painel web (o editor de conteúdo do campo artifactId), não com um comando. Veja Dungeons geradas.

Editor de sala (dungeons fixas)​

edit abre um editor com uma barra de ferramentas na sua hotbar: a vara de blaze no slot 1 adiciona um nó (no bloco para o qual você olha, ou aos seus pés quando agachado), a redstone no slot 2 remove o último nó, e o corante verde-limão no slot 8 salva e sai. Tocar duas vezes em agachar sai sem salvar. Os nós são exibidos como blocos com um contorno de partículas; agache e clique em um nó para apagá-lo. Um nó forma uma sala pontual (raio de 0,5 bloco), dois formam uma linha, três ou mais um polígono. A extensão vertical vem do nó mais baixo e do mais alto, mais verticalMargin.

Permissões​

PermissãoConcede
typewriter.dungeon.adminTodos os comandos /typewriter dungeon, incluindo o editor de sala.

Os jogadores não precisam de permissão para usar os menus.

Estatísticas​

O Dungeon conta o que cada jogador faz durante uma run e guarda isso, para cada Dungeon Artifact, na forma de 22 estatísticas. Os contadores de uma run são mantidos enquanto ela dura e cada membro é pago uma única vez, quando sai da run ou ela termina; nada é gravado em disco golpe a golpe, e um typewriter reload mantém os contadores das runs em andamento. Uma dungeon que compartilha o artifact com outra alimenta as mesmas estatísticas.

ChaveUnidadeConteúdo
runs_startedcontagemRuns iniciadas, contadas no início mesmo que a run seja perdida.
runs_completedcontagemRuns concluídas com o jogador ainda dentro.
best_timeduraçãoMenor tempo de uma run concluída (um recorde: sem valor antes da primeira conclusão).
runs_timed_outcontagemRuns cujo limite de tempo acabou com o jogador ainda dentro.
runs_leftcontagemRuns que o jogador deixou por conta própria, ou cujo prazo de reconexão acabou. Uma morte que tira o jogador da run não é contada aqui (fica em deaths).
mob_killscontagemMobs abatidos.
damage_dealtvidaDano causado a mobs, como realmente tirou vida: um golpe de 100 em um alvo que tinha 2 de vida conta 2.
damage_takenvidaDano sofrido, com o mesmo limite (a vida e a absorção que o jogador tinha).
deathscontagemMortes.
time_playedduraçãoTempo passado em runs.
completion_ratetaxaruns_completed sobre runs_started, calculado na leitura e escrito como porcentagem.
current_healthvidaVida atual do jogador. Só tem valor durante uma run: nunca é guardada.
best_run_killscontagemMaior número de mobs abatidos em uma única run (um recorde).
best_run_damagevidaMaior dano causado em uma única run (um recorde).
flawless_completionscontagemRuns concluídas sem nenhuma morte.
solo_completionscontagemRuns concluídas que começaram com um único membro.
best_time_soloduraçãoMenor tempo de uma run solo concluída.
health_regainedvidaVida realmente recuperada, nunca mais do que faltava.
rooms_enteredcontagemSalas em que se entrou; uma sala visitada duas vezes em uma run conta uma vez.
rooms_clearedcontagemSalas limpas com Dungeon Clear Room, para os membros que estão na sala.
chests_openedcontagemBaús de loot abertos, uma vez por baú para o jogador que gerou o loot.
waves_clearedcontagemOndas limpas. Só contam as ondas de verdade: os grupos de um Dungeon Mob Spawn que definem waves.

Unidades: uma vida é em pontos de vida (um coração são dois), uma duração é escrita como mm:ss, a menos que os snippets digam outra coisa, e uma taxa é escrita como porcentagem.

O que conta:

  • Só os membros de uma run ativa, dentro do mundo da run, em SURVIVAL ou ADVENTURE. Um jogador em CREATIVE ou SPECTATOR não conta para nada, para que um admin que observa uma run não consiga liderar um ranking.
  • Os mobs que contam são definidos por statsMobScope na Dungeon Instance. MARKED_ONLY (padrão): só os mobs criados pela run (marcados dungeon_mob_run); os pedaços de um slime que se divide nunca contam como abates. ANY_MOB_IN_RUN_WORLD: também os outros mobs do mundo da run, como um chefe colocado por outro plugin. É recusado com SHARED_WORLD_SLOTS, cujo mundo contém outras runs: lá MARKED_ONLY é usado e um aviso é escrito no carregamento.
  • As estatísticas são contadas por artifact. Entre vários artifacts, os totais somam os contadores e mantêm o melhor recorde; dois artifacts com o mesmo artifactId são um só arquivo e contam uma vez.

Leia-as com os placeholders, com o fact Player Dungeon Statistic, ou classifique-as em um ranking do GUI com uma Dungeon Leaderboard Source (GUI 0.20 ou posterior).

Placeholders​

Os placeholders do PlaceholderAPI usam o prefixo %typewriter_dungeon_…%. Os placeholders sobre a run atual retornam 0 ou um valor vazio quando o jogador não está em uma run. Exceção: %typewriter_dungeon_stat_KEY% e sua forma _raw só são resolvidos durante uma run; fora dela, continuam exibidos como foram escritos. Só dungeon_total_KEY e dungeon_inst_ID_KEY funcionam fora de uma run.

PlaceholderRetorna
%typewriter_dungeon_remaining%Segundos restantes na run do jogador.
%typewriter_dungeon_remaining_formatted%Tempo restante como mm:ss.
%typewriter_dungeon_players%Jogadores na run do jogador.
%typewriter_dungeon_max%maxPartySize da dungeon do jogador.
%typewriter_dungeon_list%Nomes dos jogadores da run, separados por vírgulas.
%typewriter_dungeon_player_N_name%Nome do N-ésimo jogador da run (a partir de 1).
%typewriter_dungeon_player_N_health%, …_maxhealth%, …_healthpercent%Vida, vida máxima e porcentagem do N-ésimo jogador.
%typewriter_dungeon_player_health_N%Name: health/max do N-ésimo jogador.
%typewriter_dungeon_lobby_time%Segundos restantes na contagem regressiva do lobby do jogador. Adicione _formatted para mm:ss.
%typewriter_dungeon_attempts%, %typewriter_dungeon_completions%, %typewriter_dungeon_best%Runs, conclusões e melhor tempo do jogador na dungeon em que ele está.
%typewriter_dungeon_total_attempts%, …_total_completions%, …_total_ratio%Totais de todas as dungeons e a porcentagem de conclusão.
%typewriter_dungeon_inst_ID_attempts%, …_completions%, …_best%As mesmas estatísticas para a dungeon cujo id de entry é ID. O id não pode conter sublinhado.
%typewriter_dungeon_stat_KEY%, …_stat_KEY_raw%Qualquer estatística do jogador, no artifact da dungeon em que ele está. KEY é a chave da tabela, por exemplo %typewriter_dungeon_stat_mob_kills%. _raw dá o número puro da unidade (milissegundos, pontos de vida, por mil), 0 se não houver valor.
%typewriter_dungeon_total_KEY%, …_total_KEY_raw%A mesma estatística em todas as dungeons.
%typewriter_dungeon_inst_ID_KEY%, …_inst_ID_KEY_raw%A mesma estatística para a dungeon cujo id de entry é ID.

current_health só tem valor em dungeon_stat_current_health, durante uma run. Uma duração é escrita com o snippet content.dungeon_stats.duration_format e um valor ausente com content.dungeon_stats.missing_value.

As estatísticas vêm do Dungeon Artifact vinculado no campo artifact da dungeon. O Dungeon as grava por conta própria (tentativas quando uma run começa, conclusões e melhor tempo quando uma run é concluída). O melhor tempo de um jogador é guardado uma vez por artifact, entre todas as dungeons que o compartilham: dê a cada dungeon o seu próprio artifact quando cada uma precisar do seu próprio melhor tempo. As estatísticas são guardadas por perfil do MMOProfiles quando esse plugin está instalado e, caso contrário, por jogador. Não há nada para configurar.

Entries​

39 entradas, geradas a partir do código-fonte da extensão.

Ações9
Eventos6
Fatos4
Audiências1
Entidades1
Grupos1
Artefatos4
Manifestos13

Solução de problemas​

O menu não abre. A extensão GUI está ausente, ou mainLayoutId não corresponde ao id de um layout em layoutPool. Instale o GUI e depois confira o id.

As dungeons não aparecem no menu global. O layout não tem nenhum item com buttonType definido como DUNGEON_INSTANCE_SLOT, ou os marcadores estão em um tipo de layout diferente de simple, paginated ou scrollable.

Um botão não faz nada ou não parece um botão. buttonType diferencia maiúsculas de minúsculas e deve ser DUNGEON_FIND_PARTY, DUNGEON_INFO, DUNGEON_INSTANCE_SLOT, DUNGEON_LOBBY_SLOT, DUNGEON_READY, DUNGEON_LEAVE ou DUNGEON_AUTO_FILL. Um botão global no menu de party, ou o contrário, é ignorado.

Uma dungeon aparece como bloqueada. Os criteria do slot dela na categoria não correspondem a este jogador. Confira-os com os facts do jogador, ou esvazie a lista.

Clicar em uma dungeon não mostra nada e nenhum menu abre. Nenhum menu de party atende a dungeon. Procure No dungeon_party_menu serves no log do servidor e depois crie um com dungeonInstance vazio ou um que nomeie a dungeon.

"The dungeon cannot be started on this server." O modo de isolamento da dungeon não pode rodar aqui (por exemplo, SLIME_CLONE sem o Advanced Slime Paper), ou ele não pode conter uma dungeon gerada. Não há fallback para outro modo. Veja Runs e isolamento de mundo.

"The group has N player(s): this dungeon needs X to Y." O lobby ou o comando enter foi usado com um grupo fora do intervalo de minPartySize a maxPartySize. Um administrador pode usar force-start a partir de um lobby.

"All the runs of this dungeon are taken." Já há maxSimultaneousInstances runs ativas.

Os jogadores chegam a um novo mundo vazio. templateWorld não corresponde a uma pasta de mundo na raiz do servidor. O log diz Cannot teleport player … world '…' not found quando o mundo não pode ser carregado de modo algum.

Os jogadores são expulsos da run o tempo todo. Sair do mundo da run, mesmo por um comando, remove o jogador dela. O último jogador a sair encerra a run.

Um baú de loot disparado por Loot Chest Trigger nunca volta. O triggerMode padrão ONCE vale uma vez por run. Use REPEATABLE para disparar várias vezes na mesma run. A próxima run começa limpa.

Um NPC nunca aparece. Em uma dungeon gerada, o NPC aparece apenas por um marcador NPC de uma sala da run. Em uma dungeon fixa, confira allowedDungeonIds e spawnLocation. Veja Entidades nas dungeons.

Uma sala está sem mobs mesmo sem nenhum mob vivo. O teto maxAliveMobs pode ter retido alguns, e um reload faz a extensão contar de novo. Não use Dungeon Mobs Alive para decidir que uma sala foi limpa: use o evento de morte de mob.

Extensões relacionadas​