Перейти к основному содержимому

Таблица рекордов MegaBlock Survivors

MegaBlock Survivors записывает каждый завершённый без читов забег в постоянную таблицу рекордов, хранящуюся в plugins/MegaBlockSurvivors/leaderboard.yml. Читерские забеги (любой матч, в котором использовалась /mbs cheat) явно исключаются.

Категории

Каждая запись несёт теги режима игры и сложности, поэтому таблица рекордов разделена на 6 независимых корзин:

РежимСложность
ChallengeEasy
ChallengeMedium
ChallengeHard
EndlessEasy
EndlessMedium
EndlessHard

Корзины ранжируются независимо, и каждая корзина хранит на диске до 100 записей. Игрокам показывается верхние 10.

Правила ранжирования

РежимОсновная сортировкаТай-брейкер
ChallengeСамое быстрое время прохождения (по возрастанию)При равенстве выигрывают более новые записи
EndlessНаивысшая достигнутая волна (по убыванию)Время выживания (длиннее — лучше), затем временная метка

Такое разделение логично, поскольку у режима Challenge есть фиксированная конечная точка (финальный босс), так что «самое быстрое прохождение» — очевидная метрика мастерства. У Endless конца нет, поэтому осмысленный показатель — «наивысшая достигнутая волна».

Голограмма в мире

В мире лобби mbs_spawn (примерно в координатах 4.5, 67, -14.5) появляется одна голограмма TextDisplay. Голограмма привязана нижним краем — нижняя кромка текста всегда находится на якорном Y, так что добавление новых секций наращивает дисплей вверх, а не вниз сквозь пол.

Голограмма отрисовывает до шести секций (Challenge × {Easy, Medium, Hard}, затем Endless × {Easy, Medium, Hard}). Секции с нулевым числом записей молча пропускаются, чтобы свежий сервер не показывал шесть пустых корзин. Если все корзины пусты, вместо этого показывается одна строка «no highscores yet».

Голограмма автоматически респавнится:

  • При включении / перезагрузке плагина.
  • После каждой новой записи в таблице рекордов.
  • Когда якорный чанк в mbs_spawn перезагружается (Paper удаляет non-persistent display-сущности при выгрузке чанка, поэтому слушатель респавнит голограмму при каждом возвращении чанка лобби).

Если mbs_spawn отсутствует на диске, голограмма молча пропускается, а в лог пишется WARN.

Отображение результата забега в чате

Когда заканчивается не-читерский забег, игрок видит топ-10 своей корзины в виде блока в чате. Строка самого игрока выделена (> #N). Если ранг игрока вне топ-10, показывается строка с многоточием, а за ней — строка с его фактическим рангом.

Читерские победы вместо этого показывают уведомление «Leaderboard not updated (cheating detected)».

Схема записи

Каждая запись содержит:

ПолеОписание
playerNameОтображаемое имя Bukkit на момент окончания забега.
playerUUIDUUID игрока.
timeSecondsОбщая длительность забега в секундах.
killsОбщее число убийств без боссов.
levelФинальный уровень игрока.
highestWaveНаивысшая достигнутая волна. Основной показатель для Endless.
gameModeCHALLENGE или ENDLESS.
difficultyEASY, MEDIUM или HARD.
timestampЭпохальные миллисекунды на момент окончания забега.

Старые записи, сделанные до этого разделения, при чтении автоматически помечаются как Challenge / Medium, чтобы старые таблицы рекордов продолжали отображаться.

Очистка таблицы рекордов

Внутриигровой команды для обнуления таблицы рекордов нет. Чтобы сбросить, остановите сервер и удалите plugins/MegaBlockSurvivors/leaderboard.yml.