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

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

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

Что попадает в запись

Только один исход в каждом режиме создаёт запись:

РежимЗаписывается приНе записывается
ChallengeПобеде (финальный босс в WORLD_4 погибает)Смерть посреди забега или выход
EndlessСмерти (в Endless нет пути к победе)Выход

Провалившаяся попытка в Challenge не попадает в рейтинг. Читерские забеги пропускаются в обоих режимах.

Категории

Каждая запись несёт теги режима игры и сложности, поэтому таблица рекордов разделена на 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Уровень волны на момент окончания забега — max(1, secondsSurvived / 36). Основной показатель для Endless.
gameModeCHALLENGE или ENDLESS.
difficultyEASY, MEDIUM или HARD.
timestampЭпохальные секунды на момент окончания забега (Instant.now().getEpochSecond()). Также используется как ключ тай-брейкера.

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

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

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