Saltar al contenido principal

Clasificación de MegaBlock Survivors

MegaBlock Survivors registra las partidas que cumplen los requisitos en una clasificación persistente guardada en plugins/MegaBlockSurvivors/leaderboard.yml. Se excluyen expresamente las partidas con trampas, es decir, aquellas en las que se haya usado /mbs cheat.

El plugin lee y valida el archivo existente antes de añadir un resultado. Si la lectura falla, rechaza el nuevo resultado y muestra las últimas entradas cargadas correctamente. Los guardados reemplazan el archivo de forma atómica; si fallan, conservan el archivo anterior y no aplican el nuevo resultado. Consulta estos errores en el registro del servidor.

Qué se registra​

Solo un desenlace por modo produce una entrada:

ModoSe registra alNo se registra al
DesafíoGanar: muere el jefe final de WORLD_4Morir durante la partida, abandonar o desconectarse
Sin finMorir: el modo Sin fin no tiene victoriaAbandonar o desconectarse

Un intento de Desafío que termina en muerte no entra en la clasificación. Las partidas marcadas por /mbs cheat se omiten en ambos modos. /mbs skipworld actualmente no exige permisos ni establece ese indicador, por lo que el filtro no demuestra que todas las partidas clasificadas hayan seguido la progresión normal de mundos.

Categorías​

Cada entrada incluye un modo de juego y una dificultad, por lo que la clasificación se divide en 6 categorías independientes:

ModoDificultad
DesafíoFácil
DesafíoMedia
DesafíoDifícil
Sin finFácil
Sin finMedia
Sin finDifícil

Cada categoría se ordena por separado y guarda hasta 100 entradas en disco. Se muestran las 10 mejores a los jugadores.

Reglas de clasificación​

ModoOrden principalDesempate
DesafíoMenor tiempo de finalización, en orden ascendenteGanan las entradas más recientes
Sin finMayor oleada alcanzada, en orden descendenteTiempo de supervivencia (el más largo queda por encima) y, después, entradas más recientes

El modo Desafío tiene un final fijo, el jefe final, por lo que se mide la rapidez para completarlo. El modo Sin fin no tiene final, por lo que se mide la oleada más alta alcanzada.

Como highestWave se deriva del tiempo transcurrido, las entradas de Sin fin que empatan en oleada han sobrevivido tiempos similares. La más larga de esas partidas queda primero. MegaBlock Survivors ordena las entradas cada vez que las lee, por lo que las partidas ya guardadas en leaderboard.yml también siguen este orden.

Holograma en el mundo​

Se crea un único holograma TextDisplay en el mundo de vestíbulo mbs_spawn, aproximadamente en las coordenadas 4.5, 67, -14.5. El holograma está anclado por su base: el borde inferior del texto permanece en la coordenada Y del anclaje, por lo que añadir secciones lo hace crecer hacia arriba, sin atravesar el suelo hacia abajo.

El holograma muestra hasta seis secciones: Desafío por {Fácil, Media, Difícil}, seguido de Sin fin por {Fácil, Media, Difícil}. Las secciones sin entradas se omiten silenciosamente, para que un servidor nuevo no muestre seis categorías vacías. Si todas están vacías, se muestra una sola línea indicando que aún no hay récords.

El holograma se mantiene automáticamente:

  • Al habilitar o recargar el plugin.
  • Después de registrar una entrada, se actualiza el texto del holograma existente. Si la entidad registrada ya no es válida, se recrea; si nunca se creó un holograma, esta actualización no crea uno.
  • Al recargar el chunk de anclaje de mbs_spawn. Paper elimina las entidades de visualización no persistentes al descargar chunks, por lo que el listener recrea el holograma cada vez que vuelve a cargarse ese chunk del vestíbulo.

Si mbs_spawn no está cargado, se omite la creación del holograma y se registra un mensaje informativo.

Clasificación de la partida en el chat​

Al registrar una partida válida sin trampas, el jugador ve las 10 mejores entradas de su categoría en un bloque de chat. Los abandonos y los intentos fallidos de Desafío no muestran esta clasificación. La fila del propio jugador se resalta con > #N. Si ocupa un puesto del 11 al 100, se muestra una fila de puntos suspensivos seguida de su puesto. Una entrada que quede fuera de las 100 conservadas no tiene línea de posición.

Las victorias con trampas muestran en su lugar un aviso de que no se ha actualizado la clasificación porque se han detectado trampas.

Esquema de las entradas​

Cada entrada registra:

CampoDescripción
playerNameNombre de cuenta de Bukkit, Player.getName(), al terminar la partida.
playerUUIDUUID del jugador.
timeSecondsDuración total de la partida en segundos.
killsTotal de bajas de la partida. Los jefes cuentan; los mobs del ejército fantasma no, porque tienen las recompensas deshabilitadas y no otorgan crédito de baja.
levelNivel final del jugador.
highestWaveNivel de oleada al terminar: max(1, secondsSurvived / 36). Estadística principal del modo Sin fin.
gameModeCHALLENGE o ENDLESS.
difficultyEASY, MEDIUM o HARD.
timestampSegundos desde la época Unix al terminar la partida, Instant.now().getEpochSecond(). También se usa para desempatar.

Al leer entradas antiguas anteriores a esta división, se les asigna automáticamente Challenge / Medium para que las clasificaciones anteriores sigan mostrándose.

Borrar la clasificación​

No hay un comando del juego para vaciar la clasificación. Para reiniciarla, detén el servidor y elimina plugins/MegaBlockSurvivors/leaderboard.yml.