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:
| Modo | Registado quando | Não registado |
|---|---|---|
| Desafio | Vitória: o boss final de WORLD_4 morre. | Morte durante a partida, saída voluntária ou desconexão. |
| Infinito | Morte: 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:
| Modo | Dificuldade |
|---|---|
| Desafio | Fácil |
| Desafio | Média |
| Desafio | Difícil |
| Infinito | Fácil |
| Infinito | Média |
| Infinito | Difícil |
Cada categoria é ordenada independentemente e guarda até 100 entradas em disco. As 10 primeiras são apresentadas aos jogadores.
Regras de ordenação
| Modo | Critério principal | Desempate |
|---|---|---|
| Desafio | Menor tempo de conclusão, por ordem crescente. | As entradas mais recentes ganham. |
| Infinito | Maior 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:
| Campo | Descrição |
|---|---|
playerName | Nome da conta Bukkit, obtido por Player.getName(), no fim da partida. |
playerUUID | UUID do jogador. |
timeSeconds | Duração total em segundos. |
kills | Total 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. |
level | Nível final do jogador. |
highestWave | Nível da vaga no fim da partida: max(1, secondsSurvived / 36). Principal estatística do modo Infinito. |
gameMode | CHALLENGE ou ENDLESS. |
difficulty | EASY, MEDIUM ou HARD. |
timestamp | Instante 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.