Pular para o conteúdo principal

Placar do MegaBlock Survivors

O MegaBlock Survivors registra as partidas qualificadas em um placar persistente armazenado em plugins/MegaBlockSurvivors/leaderboard.yml. Partidas com trapaça (qualquer partida em que /mbs cheat tenha sido usado) são explicitamente excluídas.

O Que É Registrado

Apenas um desfecho por modo gera uma entrada:

ModoRegistrado emNão registrado
DesafioVitória (o chefe final em WORLD_4 morre)Morrer no meio da partida, ou sair
InfinitoMorte (o modo Infinito não tem caminho de vitória)Sair

Uma tentativa de Desafio que termina em morte não entra no ranking. Partidas com trapaça são ignoradas em ambos os modos.

Categorias

Cada entrada carrega uma tag de modo de jogo e uma de dificuldade, então o placar é dividido em 6 categorias independentes:

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

As categorias são classificadas de forma independente, e cada uma comporta até 100 entradas em disco. As 10 primeiras são mostradas aos jogadores.

Regras de Classificação

ModoCritério principalCritério de desempate
DesafioTempo de conclusão mais rápido (ordem crescente)Entradas mais novas vencem empates
InfinitoOnda mais alta alcançada (ordem decrescente)Tempo sobrevivido (mais longo vence), depois timestamp

Essa divisão faz sentido porque o modo Desafio tem um ponto final fixo (o chefe final), então "conclusão mais rápida" é a métrica de habilidade óbvia. O modo Infinito não tem fim, então "onda mais alta alcançada" é a medida significativa.

Holograma no Mundo

Um único holograma TextDisplay é gerado no mundo de lobby mbs_spawn (em coordenadas mundiais ~4.5, 67, -14.5). O holograma é ancorado pela base -- a borda inferior do texto sempre fica na coordenada Y de âncora, então adicionar novas seções faz a exibição crescer para cima em vez de para baixo, atravessando o chão.

O holograma renderiza até seis seções (Desafio x {Fácil, Médio, Difícil}, seguidas de Infinito x {Fácil, Médio, Difícil}). Seções com zero entradas são silenciosamente puladas, então um servidor novo não exibe seis categorias vazias. Se todas as categorias estiverem vazias, uma única linha "no highscores yet" é exibida no lugar.

O holograma é re-gerado automaticamente:

  • Ao habilitar / recarregar o plugin.
  • Após cada nova entrada de placar ser registrada.
  • Quando o chunk de âncora em mbs_spawn é recarregado (o Paper remove entidades de display não-persistentes ao descarregar chunks, então o listener re-gera o holograma toda vez que o chunk do lobby retorna).

Se mbs_spawn não existir em disco, o holograma é silenciosamente pulado e um WARN é registrado.

Exibição por Partida no Chat

Quando uma partida sem trapaça termina, o jogador vê as 10 melhores entradas da categoria daquela partida em um bloco de chat. A linha do próprio jogador é destacada (> #N). Se o rank do jogador estiver fora do top 10, uma linha de reticências é exibida, seguida da linha de rank real.

Vitórias com trapaça mostram um aviso "Leaderboard not updated (cheating detected)" no lugar.

Esquema da Entrada

Cada entrada acompanha:

CampoDescrição
playerNameO nome de exibição do Bukkit no fim da partida.
playerUUIDO UUID do jogador.
timeSecondsDuração total da partida em segundos.
killsTotal de abates da partida. Chefes contam; mobs do exército de fantasmas não (eles têm recompensas desativadas e não concedem crédito de abate).
levelNível final do jogador.
highestWaveNível de onda no fim da partida -- max(1, secondsSurvived / 36). Estatística principal para o modo Infinito.
gameModeCHALLENGE ou ENDLESS.
difficultyEASY, MEDIUM ou HARD.
timestampEpoch em segundos de quando a partida terminou (Instant.now().getEpochSecond()). Também usado como chave de desempate.

Entradas legadas anteriores a essa divisão são automaticamente marcadas com Challenge / Medium na leitura, então placares antigos continuam sendo renderizados.

Limpando o Placar

Não há comando dentro do jogo para apagar o placar. Para resetar, pare o servidor e exclua plugins/MegaBlockSurvivors/leaderboard.yml.