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:
| Modo | Registrado em | Não registrado |
|---|---|---|
| Desafio | Vitória (o chefe final em WORLD_4 morre) | Morrer no meio da partida, ou sair |
| Infinito | Morte (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:
| Modo | Dificuldade |
|---|---|
| Desafio | Fácil |
| Desafio | Médio |
| Desafio | Difícil |
| Infinito | Fácil |
| Infinito | Médio |
| Infinito | Difí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
| Modo | Critério principal | Critério de desempate |
|---|---|---|
| Desafio | Tempo de conclusão mais rápido (ordem crescente) | Entradas mais novas vencem empates |
| Infinito | Onda 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:
| Campo | Descrição |
|---|---|
playerName | O nome de exibição do Bukkit no fim da partida. |
playerUUID | O UUID do jogador. |
timeSeconds | Duração total da partida em segundos. |
kills | Total 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). |
level | Nível final do jogador. |
highestWave | Nível de onda no fim da partida -- max(1, secondsSurvived / 36). Estatística principal para o modo Infinito. |
gameMode | CHALLENGE ou ENDLESS. |
difficulty | EASY, MEDIUM ou HARD. |
timestamp | Epoch 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.