Saltar para o conteúdo principal

Classificação do MegaBlock Survivors

O MegaBlock Survivors regista as partidas elegíveis numa classificação persistente em plugins/MegaBlockSurvivors/leaderboard.yml. As partidas em que foi usado /mbs cheat são explicitamente excluídas.

O plugin lê e valida o ficheiro existente antes de adicionar um resultado. Se a leitura falhar, rejeita o novo resultado e mostra as últimas entradas carregadas com sucesso. As gravações substituem o ficheiro de forma atómica; uma falha preserva o ficheiro anterior e não aplica o novo resultado. Consulte estas falhas no registo do servidor.

Resultados registados​

Apenas um resultado por modo cria uma entrada:

ModoRegistado quandoNão registado
DesafioVitória: o boss final de WORLD_4 morre.Morte durante a partida, saída voluntária ou desconexão.
InfinitoMorte: este modo não tem vitória.Saída voluntária ou desconexão.

Uma tentativa de Desafio terminada em morte não entra na classificação. As partidas marcadas por /mbs cheat são ignoradas nos dois modos. Atualmente, /mbs skipworld não exige permissão nem aplica essa marca. Por isso, o filtro não garante que todas as partidas classificadas tenham seguido a progressão normal entre mundos.

Categorias​

Cada entrada tem um modo de jogo e uma dificuldade, formando seis categorias independentes:

ModoDificuldade
DesafioFácil
DesafioMédia
DesafioDifícil
InfinitoFácil
InfinitoMédia
InfinitoDifícil

Cada categoria é ordenada independentemente e guarda até 100 entradas em disco. As 10 primeiras são apresentadas aos jogadores.

Regras de ordenação​

ModoCritério principalDesempate
DesafioMenor tempo de conclusão, por ordem crescente.As entradas mais recentes ganham.
InfinitoMaior vaga alcançada, por ordem decrescente.Tempo de sobrevivência (o maior fica mais acima), seguido da entrada mais recente.

O modo Desafio tem um fim fixo, a derrota do boss final, pelo que compara o tempo necessário para concluir a partida. O modo Infinito compara a vaga máxima alcançada, pois não tem um fim.

Como highestWave resulta do tempo decorrido, as entradas do modo Infinito empatadas na vaga sobreviveram durante tempos semelhantes. A mais longa dessas partidas fica em primeiro lugar. O MegaBlock Survivors ordena as entradas sempre que as lê, pelo que as partidas já guardadas em leaderboard.yml também seguem esta ordem.

Holograma no mundo​

Um único holograma TextDisplay aparece no mundo de entrada mbs_spawn, aproximadamente nas coordenadas 4.5, 67, -14.5. Está ancorado pela base: a margem inferior mantém-se na coordenada Y da âncora, pelo que as novas secções fazem o texto crescer para cima.

O holograma apresenta até seis secções: Desafio × {Fácil, Média, Difícil}, seguido de Infinito × {Fácil, Média, Difícil}. As secções vazias são omitidas, para evitar mostrar seis categorias sem resultados num servidor novo. Se todas estiverem vazias, aparece apenas uma linha a indicar que ainda não existem recordes.

O holograma é mantido automaticamente:

  • Ao ativar ou recarregar o plugin.
  • Depois de uma nova entrada, o texto da apresentação existente é atualizado. Uma entidade registada que já não seja válida é recriada; se nunca tiver sido criado um holograma, esta atualização não cria um.
  • Quando o chunk da âncora em mbs_spawn é recarregado. O Paper remove as entidades de apresentação não persistentes ao descarregar o chunk, pelo que o listener recria o holograma quando este volta a carregar.

Se mbs_spawn não estiver carregado, a criação do holograma é ignorada e é registada uma mensagem informativa.

Apresentação no chat após a partida​

Quando uma partida elegível sem batota é registada, o jogador vê no chat os dez melhores resultados da sua categoria. As saídas voluntárias e as tentativas de Desafio falhadas não apresentam esta classificação. A linha do próprio jogador é destacada com > #N. Se estiver entre as posições 11 e 100, aparece uma linha de reticências seguida da sua posição. Uma entrada excluída por ficar abaixo das cem primeiras não tem linha de posição.

As vitórias com batota apresentam uma mensagem a informar que a classificação não foi atualizada por ter sido detetada batota.

Estrutura das entradas​

Cada entrada guarda:

CampoDescrição
playerNameNome da conta Bukkit, obtido por Player.getName(), no fim da partida.
playerUUIDUUID do jogador.
timeSecondsDuração total em segundos.
killsTotal de mortes causadas. Os bosses contam; as criaturas do Exército de Fantasmas não concedem crédito de morte, porque têm as recompensas desativadas.
levelNível final do jogador.
highestWaveNível da vaga no fim da partida: max(1, secondsSurvived / 36). Principal estatística do modo Infinito.
gameModeCHALLENGE ou ENDLESS.
difficultyEASY, MEDIUM ou HARD.
timestampInstante do fim da partida em segundos desde a época Unix, obtido por Instant.now().getEpochSecond(). Também é usado no desempate.

As entradas anteriores a esta divisão recebem automaticamente a categoria Challenge / Medium ao serem lidas, para que as classificações antigas continuem a ser apresentadas.

Limpar a classificação​

Não existe um comando no jogo para apagar a classificação. Para a repor, pare o servidor e apague plugins/MegaBlockSurvivors/leaderboard.yml.