Dungeon
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.
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_RUNeSHARED_WORLD_SLOTS, escolhidos por dungeon com o campoisolation. - 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 reloadou 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
- Instale a extensão GUI a partir da página dela. Os dois menus do Dungeon usam os layouts dela.
- Verifique se a extensão Quest do TypeWriter está instalada.
- 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 exemplodungeon_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.
- Dungeon fixa: um mundo modelo, como uma pasta na raiz do servidor (ao lado de
- Baixe o Dungeon nas lojas (veja os botões no painel acima) e coloque o JAR em
plugins/Typewriter/extensions/. - Reinicie o servidor.
- 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.
- 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
spawnPointe confirme. O mundo, as coordenadas e a direção do olhar são capturados. - Adicione um Dungeon Instance. Defina
templateWorldcom o nome da pasta do mundo, adicione o room config emroomConfigurationse definaminPartySizeemaxPartySize. - Adicione um Dungeon Artifact (estatísticas) e um Active Dungeon Instance Artifact (estado das runs), e vincule-os em
artifacteruntimeArtifact. Sem o segundo, as runs ficam em um arquivoruns.jsonda extensão e um aviso é registrado no log ao carregar. O campopartyLobbyArtifactnão é mais usado: deixe-o vazio. - Adicione uma Dungeon Category. Em
instances, adicione um slot, definadungeonInstancee escolha os itens de desbloqueado e bloqueado. - Em uma página sequence, adicione um Dungeon Global Menu e um Dungeon Party Menu. Desenhe os dois layouts como descrito em Menus.
- Dispare o menu global a partir de um diálogo de NPC, de um command event ou de qualquer outro trigger. Publique.
- Adicione um Dungeon Loot Chest para a instance. Fique onde o baú deve ficar, capture
locatione preenchalootTable. - Adicione uma action Dungeon Complete onde a dungeon deve terminar (por exemplo, no fim de um diálogo depois do último baú).
- Teste: abra o menu, clique na dungeon, clique no lobby, aperte o botão de pronto.
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.
Menus
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.
Menu global
O Dungeon Global Menu mostra as dungeons de uma category. Ele abre quando a action é disparada, ou com /typewriter dungeon global-menu <category>.
buttonType | Comportamento |
|---|---|
DUNGEON_INSTANCE_SLOT | Marca 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_PARTY | O 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_INFO | Apenas 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,unlockedNameeunlockLorequando seuscriteriacorrespondem ao jogador (uma lista vazia sempre corresponde). Clicar nele abre o menu de party daquela dungeon. - Um slot cujos
criterianã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_SLOTem layoutssimple,paginatedouscrollable. Se o layout base for scrollable, as dungeons rolam junto com ele. - Sem nenhum marcador
DUNGEON_INSTANCE_SLOT, nenhuma dungeon é exibida.
Menu de party
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_SLOTem um layoutsimple(do mesmo modo queDUNGEON_INSTANCE_SLOT, usecount,directionegappara marcar vários), cada marcador é substituído pelo próximo lobby. - Sem nenhum marcador, o lobby
né colocado na colunalobbyOffsetX + (n mod 9)e na linhalobbyOffsetY + (n div 9), contando a partir de 0.
Clicar em um lobby entra nele.
Placeholder em lobbyName e lobbyLore | Valor |
|---|---|
{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}.
buttonType | Comportamento |
|---|---|
DUNGEON_LOBBY_SLOT | Marca onde um lobby aparece. |
DUNGEON_READY | Alterna 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_LEAVE | Sai do lobby e volta ao menu global de onde o jogador veio. |
DUNGEON_AUTO_FILL | Entra no primeiro lobby não vazio com vaga livre. |
Quando a run começa:
- Todos no lobby devem estar prontos e o lobby deve ter pelo menos
minPartySizejogadores. - Uma contagem regressiva de
startCooldownSecondscorre. Ela para se alguém desmarcar o pronto. Com0, a run começa imediatamente. - Os criteria são verificados para cada jogador, depois os custos de entrada. Com
entryCostModeLEADER, o primeiro jogador do lobby paga. ComGROUP, todos pagam. Os itens só são retirados se ninguém estiver sem nada. - 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ília | Chaves (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/:
| Artifact | Conteúdo |
|---|---|
| Dungeon Artifact | Estatísticas por dungeon e por jogador (artifactId padrão dungeon_data). |
| Active Dungeon Instance Artifact | Estado das runs em andamento, para que um reload não as perca. |
| Dungeon Room Template | A estrutura salva de uma sala de uma dungeon gerada. |
| Dungeon Party Lobby Artifact | Inerte. 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.
| Comando | Descriçã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> edit | Abre o editor de sala no jogo para um Dungeon Room. |
/typewriter dungeon room <room> addnode | Adiciona um nó aos seus pés. |
/typewriter dungeon room <room> removenode | Remove o último nó. |
/typewriter dungeon room <room> removenodeat <index> | Remove um nó pelo seu número, a partir de 1. |
/typewriter dungeon room <room> save | Salva a sala. |
/typewriter dungeon room <room> cancel | Descarta 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ão | Concede |
|---|---|
typewriter.dungeon.admin | Todos 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.
| Chave | Unidade | Conteúdo |
|---|---|---|
runs_started | contagem | Runs iniciadas, contadas no início mesmo que a run seja perdida. |
runs_completed | contagem | Runs concluídas com o jogador ainda dentro. |
best_time | duração | Menor tempo de uma run concluída (um recorde: sem valor antes da primeira conclusão). |
runs_timed_out | contagem | Runs cujo limite de tempo acabou com o jogador ainda dentro. |
runs_left | contagem | Runs 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_kills | contagem | Mobs abatidos. |
damage_dealt | vida | Dano causado a mobs, como realmente tirou vida: um golpe de 100 em um alvo que tinha 2 de vida conta 2. |
damage_taken | vida | Dano sofrido, com o mesmo limite (a vida e a absorção que o jogador tinha). |
deaths | contagem | Mortes. |
time_played | duração | Tempo passado em runs. |
completion_rate | taxa | runs_completed sobre runs_started, calculado na leitura e escrito como porcentagem. |
current_health | vida | Vida atual do jogador. Só tem valor durante uma run: nunca é guardada. |
best_run_kills | contagem | Maior número de mobs abatidos em uma única run (um recorde). |
best_run_damage | vida | Maior dano causado em uma única run (um recorde). |
flawless_completions | contagem | Runs concluídas sem nenhuma morte. |
solo_completions | contagem | Runs concluídas que começaram com um único membro. |
best_time_solo | duração | Menor tempo de uma run solo concluída. |
health_regained | vida | Vida realmente recuperada, nunca mais do que faltava. |
rooms_entered | contagem | Salas em que se entrou; uma sala visitada duas vezes em uma run conta uma vez. |
rooms_cleared | contagem | Salas limpas com Dungeon Clear Room, para os membros que estão na sala. |
chests_opened | contagem | Baús de loot abertos, uma vez por baú para o jogador que gerou o loot. |
waves_cleared | contagem | Ondas 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
SURVIVALouADVENTURE. Um jogador emCREATIVEouSPECTATORnã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
statsMobScopena Dungeon Instance.MARKED_ONLY(padrão): só os mobs criados pela run (marcadosdungeon_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 comSHARED_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
artifactIdsã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.
| Placeholder | Retorna |
|---|---|
%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
- Dungeon Clear RoomDungeon Clear Room
- Dungeon CloseDungeon Close
- Dungeon CompleteDungeon Complete
- Dungeon EnterDungeon Enter
- Dungeon Global MenuDungeon Global Menu
- Dungeon LeaveDungeon Leave
- Dungeon Party MenuDungeon Party Menu
- Dungeon Spawn MobsDungeon Spawn Mobs
- Loot Chest TriggerLoot Chest Trigger
Eventos6
- On Dungeon CompleteWhen a dungeon run is completed
- On Dungeon Mob DeathWhen a dungeon mob dies
- On Dungeon Mobs ClearedWhen dungeon mobs are cleared
- On Dungeon Room EnterWhen a player enters a dungeon room
- On Dungeon Room LeaveWhen a player leaves a dungeon room
- On Dungeon StartWhen a dungeon run starts
Fatos4
- Dungeon Mobs AliveDungeon Mobs Alive
- Dungeon StatPlayer Dungeon Statistic
- IndungeonPlayer Inside Dungeon
- Indungeon InstancePlayer Inside Specific Dungeon
Audiências1
- Dungeon Run AudiencePlayers in a dungeon run
Entidades1
- Dungeon NPC InstanceDungeon NPC Instance
Grupos1
- Dungeon Run GroupPlayers of a dungeon run
Artefatos4
- Active Dungeon Instance ArtifactActive Dungeon Instance Artifact
- Dungeon ArtifactUnified Dungeon Data Artifact
- Dungeon Party Lobby ArtifactDungeon Party Lobby Artifact
- Dungeon Room TemplateDungeon Room Template
Manifestos13
- Dungeon AffixDungeon Affix
- Dungeon CategoryDungeon Category
- Dungeon Connector TypeDungeon Connector Type
- Dungeon GeneratorDungeon Generator
- Dungeon InstanceDungeon Instance
- Dungeon Leaderboard SourceDungeon Leaderboard Source
- Dungeon Loot ChestDungeon Loot Chest
- Dungeon Loot TableDungeon Loot Table
- Dungeon Mob SpawnDungeon Mob Spawn
- Dungeon RestrictionsDungeon Restrictions
- Dungeon RoomDungeon Room
- Dungeon Room ConfigDungeon Room Config
- Dungeon Room PoolDungeon Room Pool
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
- FakeBlock: seu modo de posição
INSTANCE_DIMENSIONfoi pensado para as runs do Dungeon. - GUI: layouts do menu global e do menu de party.
- MMOCore: fonte de parties para os lobbies.
- Changelog e Migração da 0.10.