Таблица рекордов MegaBlock Survivors
MegaBlock Survivors записывает каждый завершённый без читов забег в постоянную таблицу рекордов, хранящуюся в plugins/MegaBlockSurvivors/leaderboard.yml. Читерские забеги (любой матч, в котором использовалась /mbs cheat) явно исключаются.
Категории
Каждая запись несёт теги режима игры и сложности, поэтому таблица рекордов разделена на 6 независимых корзин:
| Режим | Сложность |
|---|---|
| Challenge | Easy |
| Challenge | Medium |
| Challenge | Hard |
| Endless | Easy |
| Endless | Medium |
| Endless | Hard |
Корзины ранжируются независимо, и каждая корзина хранит на диске до 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 на момент окончания забега. |
playerUUID | UUID игрока. |
timeSeconds | Общая длительность забега в секундах. |
kills | Общее число убийств без боссов. |
level | Финальный уровень игрока. |
highestWave | Наивысшая достигнутая волна. Основной показатель для Endless. |
gameMode | CHALLENGE или ENDLESS. |
difficulty | EASY, MEDIUM или HARD. |
timestamp | Эпохальные миллисекунды на момент окончания забега. |
Старые записи, сделанные до этого разделения, при чтении автоматически помечаются как Challenge / Medium, чтобы старые таблицы рекордов продолжали отображаться.
Очистка таблицы рекордов
Внутриигровой команды для обнуления таблицы рекордов нет. Чтобы сбросить, остановите сервер и удалите plugins/MegaBlockSurvivors/leaderboard.yml.