Aller au contenu principal

Classement de MegaBlock Survivors

MegaBlock Survivors enregistre les parties admissibles dans un classement persistant, stocké dans plugins/MegaBlockSurvivors/leaderboard.yml. Toute partie dans laquelle /mbs cheat a été utilisé est explicitement exclue.

Le plugin lit et valide le fichier existant avant d'ajouter un résultat. Si la lecture échoue, il refuse le nouveau résultat et affiche les dernières entrées chargées correctement. La sauvegarde remplace le fichier de manière atomique ; en cas d'échec, le fichier précédent est conservé et le nouveau résultat n'est pas appliqué. Consultez les logs du serveur pour ces erreurs.

Résultats enregistrés​

Une seule issue par mode produit une entrée :

ModeEnregistrementAucun enregistrement
ChallengeVictoire : mort du boss final de WORLD_4Mort pendant la partie, abandon ou déconnexion
EndlessMort : le mode Endless n'a pas de condition de victoireAbandon ou déconnexion

Une tentative Challenge terminée par une mort n'entre pas dans le classement. Les parties marquées par /mbs cheat sont ignorées dans les deux modes. Toutefois, /mbs skipworld ne nécessite actuellement aucune permission et n'active pas cet indicateur. Ce filtre ne garantit donc pas que toutes les parties classées ont suivi la progression normale des mondes.

Catégories​

Chaque entrée indique un mode de jeu et une difficulté. Le classement se répartit donc en six catégories indépendantes :

ModeDifficulté
ChallengeFacile
ChallengeMoyenne
ChallengeDifficile
EndlessFacile
EndlessMoyenne
EndlessDifficile

Chaque catégorie possède son propre classement et conserve jusqu'à 100 entrées sur disque. Les 10 premières sont présentées aux joueurs.

Règles de classement​

ModeCritère principalDépartage
ChallengeTemps de réussite le plus court, par ordre croissantL'entrée la plus récente l'emporte à égalité
EndlessVague la plus élevée atteinte, par ordre décroissantDurée de survie (la plus longue est mieux classée), puis entrée la plus récente

Le mode Challenge ayant une fin fixe, le boss final, la durée de réussite permet de comparer les performances. Endless n'ayant pas de fin, la vague la plus élevée atteinte constitue le critère pertinent.

Comme highestWave découle du temps écoulé, les entrées Endless à égalité de vague ont survécu pendant des durées proches. La plus longue de ces parties est classée en premier. MegaBlock Survivors trie les entrées à chaque lecture ; les parties déjà enregistrées dans leaderboard.yml suivent donc aussi cet ordre.

Hologramme dans le monde​

Un hologramme TextDisplay unique apparaît dans le monde du lobby mbs_spawn, vers les coordonnées 4.5, 67, -14.5. Il est ancré par le bas : le bord inférieur du texte reste à la coordonnée Y de l'ancrage. Ajouter des sections étend donc l'affichage vers le haut, plutôt que vers le bas à travers le sol.

L'hologramme présente jusqu'à six sections : Challenge × {Facile, Moyenne, Difficile}, puis Endless × {Facile, Moyenne, Difficile}. Les sections sans entrée sont omises, pour éviter six catégories vides sur un serveur neuf. Si elles sont toutes vides, une seule ligne « no highscores yet » apparaît.

L'hologramme est géré automatiquement :

  • à l'activation ou au rechargement du plugin
  • après une nouvelle entrée, le texte de l'affichage existant est actualisé ; une entité suivie devenue invalide est recréée, mais cette actualisation ne crée aucun hologramme s'il n'en existait pas auparavant
  • lorsque le chunk d'ancrage de mbs_spawn est rechargé ; Paper supprime les entités d'affichage non persistantes au déchargement des chunks, donc l'écouteur recrée l'hologramme à chaque retour du chunk du lobby

Si mbs_spawn n'est pas chargé, la création de l'hologramme est ignorée et un message d'information est écrit dans les logs.

Affichage dans le chat après une partie​

Lorsqu'une partie admissible et non marquée comme trichée est enregistrée, le joueur voit les 10 premières entrées de sa catégorie dans le chat. Les abandons et les tentatives Challenge échouées ne déclenchent pas cet affichage. La ligne du joueur est mise en évidence avec > #N. S'il est classé entre la 11e et la 100e place, une ligne de points de suspension précède son rang. Une entrée retirée parce qu'elle dépasse les 100 places conservées n'a pas de ligne de classement.

Les victoires marquées comme trichées affichent plutôt « Leaderboard not updated (cheating detected) ».

Structure d'une entrée​

Chaque entrée conserve :

ChampDescription
playerNameNom du compte Bukkit, obtenu avec Player.getName(), à la fin de la partie.
playerUUIDUUID du joueur.
timeSecondsDurée totale de la partie en secondes.
killsNombre total d'éliminations. Les boss comptent ; les mobs de l'armée fantôme, privés de récompenses, ne donnent aucun crédit d'élimination.
levelNiveau final du joueur.
highestWaveNiveau de vague à la fin de la partie : max(1, secondsSurvived / 36). Critère principal du mode Endless.
gameModeCHALLENGE ou ENDLESS.
difficultyEASY, MEDIUM ou HARD.
timestampDate de fin en secondes depuis l'époque Unix, via Instant.now().getEpochSecond(). Sert également au départage.

Les entrées antérieures à cette répartition reçoivent automatiquement Challenge / Medium à la lecture, pour que les anciens classements restent affichables.

Réinitialiser le classement​

Aucune commande en jeu ne permet de vider le classement. Pour le réinitialiser, arrêtez le serveur et supprimez plugins/MegaBlockSurvivors/leaderboard.yml.