Zum Hauptinhalt springen

MegaBlock Survivors Bestenliste

MegaBlock Survivors zeichnet qualifizierte Durchläufe in einer dauerhaften Bestenliste auf, die in plugins/MegaBlockSurvivors/leaderboard.yml gespeichert wird. Gecheatete Durchläufe (jedes Match, in dem /mbs cheat verwendet wurde) sind ausdrücklich ausgeschlossen.

Vor dem Hinzufügen eines Ergebnisses liest und prüft das Plugin die vorhandene Datei. Schlägt das Lesen fehl, wird das neue Ergebnis abgelehnt und die zuletzt erfolgreich geladene Bestenliste angezeigt. Beim Speichern wird die Datei atomar ersetzt. Ein Speicherfehler bewahrt die bisherige Datei; das neue Ergebnis wird nicht übernommen. Prüfe das Serverlog auf solche Fehler.

Was aufgezeichnet wird​

Nur ein einziges Ergebnis pro Modus erzeugt einen Eintrag:

ModusAufgezeichnet beiNicht aufgezeichnet
ChallengeSieg (der Endboss in WORLD_4 stirbt)Tod mitten im Durchlauf, Verlassen oder Verbindungsabbruch
EndlessTod (Endless hat keinen Siegpfad)Verlassen oder Verbindungsabbruch

Ein durch Tod gescheiterter Challenge-Versuch wird nicht gewertet. Durchläufe, die /mbs cheat markiert hat, werden in beiden Modi übersprungen. /mbs skipworld verlangt derzeit keine Berechtigung und setzt dieses Flag nicht. Der Filter garantiert deshalb nicht, dass jeder gewertete Durchlauf die Welten regulär durchlaufen hat.

Kategorien​

Jeder Eintrag enthält einen Spielmodus und einen Schwierigkeitsgrad. Dadurch entstehen 6 unabhängige Kategorien:

ModusSchwierigkeit
ChallengeEasy
ChallengeMedium
ChallengeHard
EndlessEasy
EndlessMedium
EndlessHard

Jede Kategorie wird separat sortiert und speichert bis zu 100 Einträge. Die besten 10 werden den Spielern angezeigt.

Ranking-Regeln​

ModusPrimäre SortierungTiebreaker
ChallengeSchnellste Abschlusszeit (aufsteigend)Bei Gleichstand gewinnen neuere Einträge
EndlessHöchste erreichte Welle (absteigend)Überlebenszeit (länger steht weiter oben), bei weiterem Gleichstand gewinnen neuere Einträge

Der Challenge-Modus endet beim Endboss und vergleicht die Zeit bis zum Abschluss. Endless hat kein Ende und vergleicht deshalb die höchste erreichte Welle.

Da highestWave aus der verstrichenen Zeit berechnet wird, haben Endless-Einträge mit gleicher Welle ähnlich lange überlebt. Der längere dieser Durchläufe steht weiter oben. MegaBlock Survivors sortiert die Einträge bei jedem Lesen neu, daher folgen auch Durchläufe, die bereits in leaderboard.yml gespeichert sind, dieser Reihenfolge.

Hologramm in der Welt​

Ein einzelnes TextDisplay-Hologramm wird in der Lobby-Welt mbs_spawn (an den Weltkoordinaten ca. 4.5, 67, -14.5) erzeugt. Das Hologramm ist unten verankert -- die untere Kante des Textes liegt stets auf dem Anker-Y, sodass das Hinzufügen neuer Sektionen die Anzeige nach oben wachsen lässt, anstatt sich nach unten durch den Boden zu schieben.

Das Hologramm rendert bis zu sechs Sektionen (Challenge x {Easy, Medium, Hard} gefolgt von Endless x {Easy, Medium, Hard}). Sektionen mit null Einträgen werden stillschweigend übersprungen, damit ein frischer Server nicht sechs leere Buckets anzeigt. Ist jeder Bucket leer, wird stattdessen eine einzelne Zeile "no highscores yet" gezeigt.

Das Hologramm wird automatisch gepflegt:

  • Beim Aktivieren / Reload des Plugins.
  • Nach einem neuen Eintrag wird der Text der vorhandenen Anzeige aktualisiert. Eine ungültig gewordene, noch registrierte Entity wird neu erzeugt. Wurde noch nie eine Anzeige erzeugt, erstellt diese Aktualisierung keine.
  • Wenn der Anker-Chunk in mbs_spawn neu geladen wird (Paper entfernt nicht-persistente Display-Entities beim Entladen von Chunks, daher erzeugt der Listener das Hologramm jedes Mal neu, wenn der Lobby-Chunk zurückkehrt).

Ist mbs_spawn nicht geladen, wird kein Hologramm erzeugt und eine Informationsmeldung protokolliert.

Chat-Anzeige pro Durchlauf​

Wenn ein qualifizierter, nicht gecheateter Durchlauf aufgezeichnet wird, sieht der Spieler die Top 10 seiner Kategorie als Chat-Block. Beim Verlassen und nach gescheiterten Challenge-Versuchen wird diese Bestenlistenanzeige nicht aufgerufen. Die eigene Zeile des Spielers ist hervorgehoben (> #N). Bei einem Rang von 11 bis 100 erscheinen Auslassungspunkte und danach die eigene Rangzeile. Ein Eintrag, der aus den gespeicherten Top 100 herausfällt, erhält keine Rangzeile.

Gecheatete Siege zeigen stattdessen den Hinweis "Leaderboard not updated (cheating detected)".

Eintrags-Schema​

Jeder Eintrag speichert:

FeldBeschreibung
playerNameDer Bukkit-Kontoname (Player.getName()) am Ende des Durchlaufs.
playerUUIDDie UUID des Spielers.
timeSecondsGesamtdauer des Durchlaufs in Sekunden.
killsGesamtzahl der Kills im Durchlauf. Bosse zählen mit; Mobs der Geisterarmee nicht (sie sind belohnungsdeaktiviert und geben keine Kill-Gutschrift).
levelFinales Level des Spielers.
highestWaveWellenlevel am Ende des Durchlaufs -- max(1, secondsSurvived / 36). Primärer Wert für Endless.
gameModeCHALLENGE oder ENDLESS.
difficultyEASY, MEDIUM oder HARD.
timestampEpoch-Sekunden, zu denen der Durchlauf endete (Instant.now().getEpochSecond()). Wird außerdem als Tiebreaker-Schlüssel verwendet.

Altdaten-Einträge aus der Zeit vor dieser Aufteilung werden beim Lesen automatisch mit Challenge / Medium getaggt, damit alte Bestenlisten weiterhin gerendert werden.

Bestenliste leeren​

Es gibt keinen In-Game-Befehl, um die Bestenliste zu leeren. Zum Zurücksetzen den Server stoppen und plugins/MegaBlockSurvivors/leaderboard.yml löschen.