История обновлений

Все обновления сайта и серверного мода, самые новые сверху

Здесь собрана вся история сайта CloudRidge и серверного мода, от новых к старым, чтобы ты мог посмотреть, когда появилась какая-то функция и когда починили какой-то баг.

По месяцу 2026-114 2026-1066 2026-0957
По версии
v1.9.90 Сайт 2026-11-01

v1.9.90 · Новая раскладка первого экрана, 3D снова перетаскивается

  • Первый экран перекомпонован: заголовок занимает свою строку, 3D-проекция слева, а карточки «присоединиться к серверу» и «сейчас онлайн» стоят справа. На телефоне всё складывается в одну колонку.
  • Исправлено перетаскивание 3D-сцены: поверх холста лежали два прозрачных слоя-заглушки и перехватывали все события указателя. Теперь клики принимают только кнопки и ссылки, в остальных местах можно тянуть.
  • Модель на первом экране теперь — твоя проекция чёрной дыры, запечённая прямо из файла (больше не собрана руками): стекло, стены и плиты рендерятся реальной толщины, и сквозная структура наконец видна.
v1.9.89 Сайт 2026-11-01

v1.9.89 · Чёрная дыра пересобрана

  • Чёрная дыра на первом экране пересобрана заново: двухслойный диск, гораздо более глубокий конус, настоящее отверстие в центре, светящееся кольцо горизонта событий и четыре спиральных рукава. Сверху это теперь воронка, а не торт.
  • Угол камеры поднят с 0.62 до 0.78, чтобы смотреть внутрь воронки, а модель сдвинута вверх и больше не закрывает заголовок и кнопки.
  • Исправлено наложение в первом экране: полоса облаков пересекала блок с адресом сервера, теперь у неё есть собственное место.
v1.9.88 Сайт 2026-11-01

Главный экран отцентрован, чёрная дыра теперь собрана вручную

  • Главный экран: заголовок сверху, модель по центру, кнопки снизу; карточка онлайна переехала под первый экран.
  • Схема чёрной дыры — 13,8 млн блоков на 565×565; на главном экране это только цветовой шум. Поэтому она собрана заново вручную: концентрические кольца, тёмный зрачок и механический обод, 5 700 блоков и 33 КБ.
  • На телефонах по-прежнему статичный постер (новое изображение чёрной дыры, 54 КБ), рендерер загружается только по нажатию «Войти в 3D».
v1.9.87 Сайт 2026-11-01

Дозаполните аккаунт: смена данных теперь с подтверждением

  • Аккаунты, созданные через QQ, при первом входе должны задать пароль и подтвердить почту или телефон, прежде чем пользоваться сайтом.
  • Смена почты или телефона теперь требует код, отправленный на текущий адрес или номер.
  • Чтобы сменить привязанный QQ, теперь нужен текущий пароль.
  • Если в аккаунт войдут с нового устройства, на подтверждённую почту придёт письмо.
v1.9.86 Сайт 2026-10-31

换页不再白屏一下、注册页的「手机号注册」能点了

  • 点站内链接时,旧页面不再先淡成一片白底 —— 之前新页面要等网络往返才到,中间那一下就是白屏。现在旧页面保持原样,换页后新页面照旧淡入、内容依次上滑。
  • 注册页的「手机号注册」原来点了像是没反应:它只是把单选按钮选中,页面上的提示文案与「发验证码」的去向都没变。现在切一下就整页重渲染,提示、去向、表单都跟着变。
  • 如果站点没有配置短信服务,注册页不会再把你留在「手机号注册」这个空壳上,而是自动退回邮箱注册。
v1.9.85 Сайт 2026-10-31

В шапке только «Вход», а 3D-герой подобран по размеру

  • Вход через QQ убран из шапки: раньше рядом стояли две кнопки, теперь только «Вход». QQ показывается лишь на страницах входа и регистрации.
  • Камера 3D теперь считает расстояние от высоты модели: в высоком окне сцена не заполняет всё, а в низком не сжимается в пятно.
  • Цвета блоков приведены к вишнёвой гамме: багровые доски, адский нарост и кораллы заменены на вишнёвое дерево, лепестки и листву — цветного шума больше нет. Ни один блок не сдвинут.
v1.9.84 Сайт 2026-10-31

Главный экран теперь — вращаемая 3D-сцена

  • Весь главный экран — это 3D-сцена сада: тяните для вращения, колесо для масштаба, клик по блоку его ломает — через десять секунд он возвращается.
  • Телефоны и браузеры без WebGL2 не загружают 3D принудительно: им показывается статичный постер с того же ракурса и кнопка Смотреть в 3D в углу.
  • Переходы между страницами стали плавными: текущая страница гаснет, новая появляется, а её блоки поднимаются один за другим. При включённом уменьшении движения ссылки работают как раньше.
  • Кричащий синий квадрат QQ убран — теперь там официальная самая маленькая иконка Tencent 16×16, наравне с остальными.
v1.9.83 Сайт 2026-10-31

Одна кнопка QQ на всём сайте

  • Вход, регистрация, шапка и личный кабинет теперь используют одну и ту же кнопку QQ: официальный значок Tencent в нашей собственной обводке-пилюле. Tencent допускает вариант «маленький значок плюс текст», и значок остаётся официальным оригиналом.
  • В разделе «Аккаунт и безопасность» появилась строка QQ: привязать, перепривязать, отвязать. Аккаунты без пароля отвязать нельзя — у аккаунта, созданного только через QQ, пароля нет, и он потерял бы доступ навсегда.
  • Типографика и фактура: заголовки плотнее и весомее, больше воздуха между блоками, а по карточкам следует мягкое свечение за курсором.
  • Анимация: первый экран поднимается строка за строкой, числа отсчитываются, сверху идёт полоса прочитанного, карточки на главной слегка плывут. Если в системе включено «уменьшить движение», всё это отключается; на устройствах без наведения свечения нет.
v1.9.82 Сайт 2026-10-31

Вход через QQ теперь на официальной кнопке Tencent — на странице входа, регистрации и в верхнем меню

  • На страницах входа и регистрации раньше были нарисованный вручную пингвин и подпись «вход через QQ в один клик». Требования Tencent к страницам сайтов предписывают использовать официальный знак «QQ登录» и запрещают его изменять, поэтому теперь в обоих местах стоит оригинальное изображение Tencent 230×48 в натуральном размере — без растягивания и масштабирования.
  • В верхнем меню тоже появилась кнопка: официальная 76×24 «QQ登录» на широких экранах и официальная иконка 24×24 ниже 375 px, чтобы шапке не требовалась горизонтальная прокрутка.
  • Попутно исправлены две мелочи. Официальная кнопка никогда не становится серой: если галочка согласия не стоит, нажатие прокручивает страницу к флажку и подсвечивает его красным, а не отключает кнопку (серая кнопка выглядит ровно как «кнопка стоит не там»). А фраза «сайт использует вход по почте и паролю» устарела — во всех десяти языках осталась только часть про регистрацию.
v1.9.81 Сайт 2026-10-18

На телефоне текст Руководства по серверу перекрывался собственным оглавлением — исправлено

  • На компьютере боковая колонка руководства — узкая полоса, закреплённая вверху слева. Когда раскладка схлопывается в одну колонку, она становится во всю ширину и выше экрана, но по-прежнему была закреплена сверху: статья прокручивалась под ней, текст выглядел наложенным, белые блоки плавали поверх слов, а содержимое словно отсутствовало. На узких экранах (900 px и меньше) она теперь прокручивается вместе со страницей; на компьютере остаётся закреплённой. Ошибка существовала и раньше, просто на телефоне её не замечали.
v1.9.80 Сайт 2026-10-18

Инструменты починены: полоса вкладок работает, градиент стал свободнее, а калькулятор выдаёт список, который можно заполнить и запускать

  • Раньше все десять инструментов лежали на одной странице, а нажатие на капсулу сверху всего лишь перепрыгивало к якорю — казалось, что ничего не происходит. Теперь это настоящая полоса вкладок, и показывается только один инструмент; адрес с #t-xxx по-прежнему сразу открывает нужный инструмент, а на телефоне полосу можно листать вбок. Градиентный текст вместо двух жёстко заданных цветов получил 2~6 цветовых точек: нажатие на полосу добавляет точку, перетаскивание меняет её позицию, выбор точки и «Удалить этот цвет» убирают её; цвета интерполируются посимвольно по позиции, поэтому §-коды / MiniMessage / tellraw / MOTD меняются вместе, а слишком длинный MOTD выдаёт предупреждение
  • Калькулятор конфигурации сервера вырос с трёх уровней бюджета до девяти полей. Можно указать число модов, дальность прорисовки, дальность симуляции, работу редстоуна, целевой TPS и версию. На выходе больше не несколько строк с числами: память объясняет, почему она растёт, а ещё выдаются готовая к копированию команда запуска с Aikar’s flags, построчные советы для server.properties и spigot.yml и список модов и плагинов по стилю игры. Три самых переменчивых коэффициента — память на игрока, коэффициент модов и коэффициент редстоуна — перенесены в админский раздел «Инструменты», и после правки достаточно обновить страницу
  • Проверка лагов теперь считает по пунктам и сравнивается с живыми данными сайта. Добавлены четыре поля: постоянные сущности, загрузчики чанков, редстоун-проводка и автоматические фермы. Результат раскладывает MSPT на семь пунктов с долей и миллисекундами и называет «вот это и тянет» только тогда, когда пункт действительно забирает большую часть (свыше 45%); иначе честно говорит, что самый большой — он, но в целом нагрузка невысокая. К каждому пункту прилагается выполнимое исправление, а ещё инструмент подтягивает живые данные сайта, чтобы сказать, сколько в теории съедает ваш масштаб и сколько здесь сейчас осталось запаса; если данные недоступны, остаётся локальная оценка и никакой ошибки не выскакивает
v1.9.79 Сайт 2026-10-18

Жидкое стекло сделано заново по-эппловски: оно преломляет, бликует и держится на белом

  • ① В прошлой версии стекло было почти одной белой заливкой и пропадало, стоило положить его на белую карточку. Сейчас материал переделан по образцу iOS 26: светлая линия сверху, тёмная снизу, кольцо-хайрлайн в 1px снаружи, мягкое свечение внутри и совсем лёгкая тень; на десктопе по-прежнему настоящее преломление (фон слегка изгибается, вся пластина приподнимается на 1 пиксель при наведении и опускается обратно при нажатии). Основная и опасная кнопки раньше были целиком исключены из стекла, теперь они в нём: фирменный градиент остаётся на самой кнопке, контраст белого текста не меняется, а стеклянный слой отвечает только за блик и обводку, без наложения преломления. Тот же материал разложен на поля ввода, выпадающие списки, теги, значки игры, инструмента и игрока и верхнюю навигацию.
  • ② Телефоны больше не считают преломление (это самый дорогой шаг) и сами переходят на размытие с бликом по контуру: выглядит по-прежнему как стекло, но почти не тратит GPU. Заодно исправлен настоящий баг: мобильная ветка просто выходила и даже не включала упрощённый вариант, то есть на телефонах стекла не было вовсе. На десктопе сделано ещё две вещи: пластины одного размера получают одну карту смещения (у 7 пластин на главной их всего 4), а ушедшие за экран больше не рассчитываются; кроме того, новые не создаются, если пластина больше 300 тысяч пикселей или на странице их больше 80 — лучше одной пластиной меньше, чем подтормаживающей прокруткой.
  • ③ В админке в разделе Оформление остаётся тот же переключатель, теперь включённый по умолчанию; браузеры без backdrop-filter (Safari, Firefox) откатываются к матовой заливке, а не выглядят сломанными. Цветовая схема и вёрстка в этот раз не тронуты, тема по-прежнему Cloudridge Blue; эппловский белый фон из прошлой версии откатан по всему сайту (админка, форум, галерея и карта вернулись к прежнему виду), остались только два настоящих исправления: у диалога подтверждения опасных действий в админке вообще не было стилей (все 43 подтверждения удаления выпадали голой коробкой без затемнения), а заголовки галереи на узких экранах появлялись только при наведении мыши.
v1.9.78 Сайт 2026-10-17

Весь сайт в стиле Apple: белый фон, волосяные линии, кнопки-капсулы, а заодно исправлена пачка неверных чисел

  • Внешний вид сайта переделан целиком по лекалам Apple: белый фон, почти чёрный текст, одна линия в 1px вместо теней, кнопки и фильтры приведены к капсулам высотой 44, а верхняя панель при прокрутке переходит из полупрозрачной в плотную. Матовое стекло убрано полностью — размытые слои на карточках данных, таймлайне и карточках состояния исчезли, остался только один очень бледный полупрозрачный слой на верхней панели. Китайские заголовки больше не получают отрицательный трекинг: китайские знаки и так занимают всю свою ширину, от сжатия они сбиваются в кучу и выглядят жирными, сжимать нужно только цифры. Заодно перестроена админка, и исправлен настоящий баг: у диалогов подтверждения опасных действий в админке вообще не было стилей — они выпадали голой коробкой без затемнения и без позиционирования, и это задевало все 51 место с подтверждением удаления на сайте; теперь это центрированная карточка с затемнением и красным заголовком. Всё это висит на цветовой схеме Apple (выбирается в Admin → Оформление), и возврат к Cloudridge Blue откатывает всё целиком, без правки кода.
  • В мобильной версии на этот раз целились ровно в то, что ощущалось неудобным: четыре большие цифры на странице данных занимали по целой строке каждая, теперь они укладываются 2×2 на один экран; поле поиска игрока и кнопка Поиск были наложены друг на друга (кнопка перекрывала почти 70 пикселей текста-подсказки), теперь они стоят рядом в одной строке; в рейтинге серая линия сверху и снизу каждой строки сливались в толстую полосу, теперь это одна линия в 1px; двойная рамка карточки внутри карточки на таймлайне, разные пунктирные рамки и толстый тёмно-серый скроллбар Windows убраны разом; в боковой колонке страницы руководства подпись и значение состояния сервера были слипшимися (показывалось Version1.21.1), теперь они разведены по краям с разделительной линией.
  • Исправлено десять проблем с данными из аудита. Две самые важные: суммарное время в сети на главной показывало секунды как часы (стояло 35,7 млн ч, а настоящее значение — 9907 часов, разница в 3600 раз); и четыре человека в списке блокировок значились снятыми, хотя блокировка продолжала действовать — когда heartbeat сообщал, что запись уже есть, тихо возвращался только статус, без записи в историю и без восстановления отметки блокировки у игрока. Остальное: число установленных модов на странице состояния показывалось как 0 / 12 / 160 в трёх местах (настоящее значение 160), а операционная система — прочерком, и причина у обоих одна: лежащий в основе запрос отдаёт белый список, в котором этих двух полей нет; вереница UUID занимала рейтинг вместо имён, теперь она показывается как Неизвестный игрок · 87274f; потолок доступности был жёстко прописан как 99,2 процента (считался по фиксированному интервалу 30 секунд, а реальный heartbeat приходит раз в 31 секунду); и K/D при отсутствии смертей выдавал астрономические числа, теперь там прочерк. Ещё два пункта относятся к политике рейтинга (два способа слияния, по роли и по аккаунту, и теневой аккаунт, у которого есть только убийства) и насильно не правились — различия и их цена записаны в комментариях в коде, решать владельцу сайта.
v1.9.77 Сайт 2026-10-11

Подделать настоящий IP больше нельзя: путь закрыт от nginx до прикладного слоя

  • ① Сначала измеряем, потом меняем: живой зонд на сервере дал два факта — nginx от BaoTa использует протокол PROXY, поэтому настоящий адрес клиента и так уже лежит в REMOTE_ADDR (замерено 222.212.76.94, а не 127.0.0.1); а подставленные самим клиентом X-Real-IP / X-Forwarded-For / CF-Connecting-IP nginx передаёт в PHP как есть: все три поддельных заголовка доходят без изменений, и ни один из них nginx не перезаписывает. ② Укрепляем оба конца: nginx подставляет секрет, известный только своему прокси (даже если клиент подделает этот заголовок, nginx его перезапишет), а прикладной слой добавляет ещё один заслон — если REMOTE_ADDR публичный, он берётся напрямую и прокси-заголовки больше не смотрятся вовсе, — так что даже если trust_proxy когда-нибудь включат по ошибке, IP в ограничении частоты, блокировках и аудите не станет значением, которое выбрал сам посетитель.
  • Заодно три вещи: вводящий в заблуждение комментарий в site/config/config.php («включать true за CDN / обратным прокси») заменён на результат замера и предупреждение — если последовать ему на этом сайте, подделываемый заголовок только станет авторитетным значением; у этого изменения появились автотесты (trust_proxy включён + публичный REMOTE_ADDR + поддельные заголовки ⇒ всё равно возвращается настоящий адрес), набор вырос с 81 проверки до 83 и весь зелёный; временный зонд для разбора на живом сервере удалён, как и договаривались, и теперь запрос к нему даёт 404.
v1.9.76 Сайт 2026-10-11

Плавнее прокрутка на телефоне, несколько дыр в безопасности закрыто, а история чата больше не теряет середину

  • Четыре места по плавности на телефоне: матовое стекло верхней панели при прокрутке, матовое стекло всех карточек на узких экранах, слой композиции, который анимация появления держала постоянным для каждого элемента, и полоса прогресса чтения, вызывавшая пересчёт раскладки на каждый прокрученный пиксель — всё заменено на равноценные, но более дешёвые приёмы (у прокрученной панели фон и так непрозрачный, так что размытие было чистой тратой; а когда анимация действительно начинается, браузер сам поднимает слой). Замерено во вьюпорте телефона шириной 390 при 20-кратном замедлении CPU: худший кадр упал с 364 миллисекунд до 57 миллисекунд. Разница в общем числе кадров тонет в шуме этой машины, устойчивого вывода по ней не сделать — поэтому каждый пункт выше трогали только тогда, когда он объясним механически.
  • Три места по безопасности (высокий/средний риск, исправлены сразу): ① локальный отладочный _admlogin.php теперь обязан отдавать 404 в проде (он мог сделать посетителя администратором напрямую), и ?to= больше не может увести за пределы сайта; ② ping / dns на странице теста скорости передавал доменное имя для проверки порта, и DNS rebinding мог увести это во внутреннюю сеть — теперь подключение идёт только к уже проверенному IP; ③ подделка X-Real-IP / CF-Connecting-IP позволяла обойти ограничение по IP; теперь такие заголовки принимаются, только если запрос действительно пришёл с loopback. Чтобы закрыть ③ полностью, нужно внедрить X-CDR-Proxy-Secret в nginx и прописать security.proxy_secret в site/config/config.php — это уже настройка сервера, так что жду вашего согласия.
  • Три настоящих бага в истории чата: ① как только за день набиралось больше 200 сообщений, весь этот средний кусок на странице не показывался никогда (в самый занятый день 2796 сообщений, а старый путь листал только до 500, так что 2296 посередине не видел никто); ② сортировка смотрела только на первичный ключ id, поэтому в дни, пересекающие границу, сообщения после полуночи выталкивались из окна (замерено: 53 более новых сообщения пропускались навсегда); ③ при неудачной отправке интерфейс делал вид, что сообщение уже ушло. Теперь выборка идёт по времени, появилась кнопка «загрузить более ранние» для листания назад, а неудача честно сообщается и позволяет повторить.
  • Заодно: страницы для посетителей больше не запрещены к кешированию поголовно (назад и вперёд работают быстрее), а состояние входа по-прежнему не кешируется вообще. Все 218 PHP-файлов сайта проходят проверку синтаксиса без ошибок, все 59 самопроверок прогнаны — 15 наборов, связанных с этим изменением, дали результат в точности как до него (ни одного лишнего сбоя в локальном окружении).
v1.6.7 Мод 2026-10-10

Версия, которая бережнее относится к главному потоку сервера

  • Отчёт по карте перешёл от «собрать JSON на 197 тысяч точек внутри серверного тика» к «тот тик только отдаёт данные, а сборка идёт в фоновом потоке». Это единственное место во всём моде, которое могло давать «сотни миллисекунд за один тик», и оно точно соответствует редкому всплеску раз в полчаса.
  • Остальные места, растущие с числом игроков или сущностей, тоже оптимизированы: форматирование чисел TAB кешируется на тик, поиск игроков по имени использует индекс имён, перестраиваемый раз в тик, список достижений больше не строит строку на каждую запись, файлы конфигурации и список блокировок, читавшиеся каждые 30 секунд, переехали в фон, проверка длины очереди чата использует счётчик, сетевой замер больше не создаёт поток каждые 20 секунд, а таблица ограничения команд больше не только растёт. Формат отчёта, имена полей и момент снятия значений не изменились.
v1.9.75 Сайт 2026-10-10

Мод на сервере похудел: расходы, растущие с числом игроков, вынесены из главного потока

  • Самый крупный блок в отчёте мода — это карта: три карты по 256×256, около 197 тысяч точек. Раньше эти точки собирались в JSON прямо внутри серверного тика, и сервер продолжал работу только после сборки — раз в полчаса, что точно совпадает с теми редкими всплесками «иногда на миг подвисает». Теперь тот тик только отдаёт данные, а сборка уходит в фоновый поток: данные и так были готовы, а сборка JSON никогда не требовала занимать главный поток.
  • Заодно убраны несколько расходов, которые растут с числом игроков онлайн: числа в списке TAB (время игры, число игроков и прочее) пересчитывались для каждой строки каждого игрока, хотя меняются раз в 30 секунд; поиск игрока по имени в худшем случае построчно перебирал всю таблицу (10 игроков — это 100 поисков); список достижений каждые 10 минут проходил и по тысяче с лишним рецептов; а каждые 30 секунд только ради подсчёта сущностей полностью обходились все миры, причём файлы конфигурации и список блокировок читались в главном потоке. Теперь это соответственно кеш, индекс, однократный расчёт и фоновое чтение — в том, что отправляется на сайт, не изменилось ни одного байта, и страницы выглядят точно так же, как раньше.
v1.9.74 Сайт 2026-10-05

Улучшены админка и приватность профиля

  • Счётчик ожидающих проверки в боковом меню учитывал только форум и галерею, тогда как панель администратора считала пять очередей; теперь всё берётся из одной функции, и у каждого пункта меню своё число. Опасные действия (удалить группу пользователей, удалить пункт навигации, очистить журнал чата, очистить кеш) выполнялись без вопросов — теперь они просят подтверждение. Списки скинов, фонов аватара и журнала чата ограничивались 200 и 60 строками, теперь по ним можно листать.
  • Переключатель «разрешить другим видеть мой профиль» влиял только на страницу команды, а сам профиль был виден всем; теперь он действительно работает, кроме вас самих. Смена пароля и выход на других устройствах тоже попадают в журнал аудита.
v1.9.73 Сайт 2026-10-05

Красные кнопки подтверждения и удаления снова видны

  • Кнопка подтверждения при отзыве сообщения была пустой: при включённом жидком стекле правило стекла убирает фон кнопки, но оставляет белый текст, и красная кнопка становилась белым на белом. Теперь красные сплошные кнопки, как и синяя основная, не участвуют в стекле.
  • Та же проблема была у всех красных кнопок сайта (отзыв, удаление, отвязка и другие) — исправлены все сразу.
v1.9.72 Сайт 2026-10-05

Перелистывание больше не бросает наверх

  • Нажатие «следующая страница» внизу страницы возвращало вас в самый верх. Теперь пагинатор выравнивает список над собой и вообще ничего не делает, если этот список уже виден. Назад и вперёд возвращают к прежней позиции прокрутки.
  • Заодно мелочи: карта сида появилась в меню «Серверы», якоря больше не прячутся под липкой шапкой, карточки галереи показывают автора, а онлайн-игроки на главной ведут в профиль.
v1.9.71 Сайт 2026-10-05

Ужесточены права в админке и исправлены мелочи

  • Настройки, смена ключа, резервные копии и системные инструменты теперь доступны только владельцу — у администраторов сервера остаются контент, жалобы и белый список.
  • Исправлены мелкие проблемы при перелистывании без перезагрузки: тёмная тема сохраняется, формы не отправляются дважды, отсчёт идёт с обычной скоростью, а выбор сортировки больше не перезагружает страницу.
v1.9.70 Сайт 2026-10-05

Перелистывание без полной перезагрузки

  • Постраничный переход, фильтры, поиск и сортировка теперь подменяют только содержимое — адрес по-прежнему меняется, кнопка «Назад» работает.
  • Сохранение, проверка и удаление по-прежнему открывают новую страницу.
v1.9.69 Сайт 2026-10-05

Список подсказок поиска перекрывался карточками

  • У анимированных элементов есть will-change, а will-change создаёт контекст наложения, поэтому z-index списка работал только внутри своей карточки и проигрывал карточкам статистики, стоящим позже в DOM
  • Теперь поднята вся карточка поиска, и список полностью отображается сверху
v1.9.68 Сайт 2026-10-04

Исправлено: профиль не прокручивался на телефоне

  • 3D-просмотр скина жёстко задавал touch-action:none и безусловно вызывал preventDefault на touchstart/touchmove — палец на нём блокировал всю страницу. Теперь вертикальный жест отдаётся браузеру, а модель вращается только горизонтальным
  • Перетаскивание фона в шапке тоже теперь только мышью
v1.9.67 Сайт 2026-10-04

Руководство по серверу переписано: текста вдвое больше, а команды теперь разделены на игровые и админские

  • Все четыре страницы — начало игры, правила, частые вопросы и о сервере — переписаны заново: объясняется, зачем нужен каждый шаг и что делать, если не получилось
  • Страница команд начинается с раздела «Команды для игроков», сгруппированного по темам: первые шаги, перемещение, чат и состояние; полная таблица из 435 строк осталась ниже
v1.9.66 Сайт 2026-10-04

Подсказка о прокрутке больше не липнет к таблице

  • Подсказка над таблицей упиралась в её верхнюю границу и выглядела наложенной; теперь есть отступ
  • Шапка становится полностью непрозрачной при прокрутке (раньше была полупрозрачной)
v1.9.65 Сайт 2026-10-04

Закрыта уязвимость в загружаемых SVG

  • Раньше специально подготовленный SVG в качестве аватара или фона мог раскрыть IP-адрес и данные браузера всех, кто его просматривал. Теперь такие внешние ссылки удаляются, а само изображение не меняется.
  • Также добавлены HSTS и несколько осторожных правил безопасности содержимого.
v1.9.64 Сайт 2026-10-04

Значок проверки больше не горит постоянно + на странице статуса нет внутренних адресов

  • Значок «проверка» в админке считал пять очередей, а панель «управление сервером» умеет только две — значок горел, хотя проверять было нечего. Теперь критерий один, а в панели появилась строка «ещё ждут проверки»: галерея / скины / форум со ссылками на существующие страницы админки.
  • Строка «веб-карта» на странице статуса показывала 127.0.0.1:8100 (внутренний адрес, нужен только для проверки). Теперь выводится публичный адрес веб-карты.
v1.9.63 Сайт 2026-10-04

Видео видно прямо в админке

  • У фонов с фоновым видео карточка проверки теперь проигрывает это видео: нажмите play, по умолчанию загружается только начало (трафик не тратится), плюс метка «есть видео».
  • Раньше в карточке была только отдельно выбранная обложка, которая могла быть вообще не связана с видео. Больше не одобрим вслепую.
  • Заодно исправлено «время загрузки 1970-01-01»: мой инструмент загрузки писал неверный формат. Данные и инструмент исправлены.
v1.9.62 Сайт 2026-10-04

Исправлена ошибка 500 + две правки вида

  • Исправлена ошибка 500: в прошлой версии я перепутал позиции аргументов журнала аудита после входа, из-за чего любой успешный вход вызывал внутреннюю ошибку. Теперь вход перенаправляет как надо.
  • Строка «Я прочитал и принимаю Условия использования и Политика конфиденциальности» переехала в самый низ формы (под кнопкой входа), как на обычных страницах входа. Без галочки войти по-прежнему нельзя.
  • Затемнение в шапке страницы игрока стало плавным градиентом: заметная горизонтальная линия исчезла, переход выглядит естественно.
v1.9.61 Сайт 2026-10-04

Для входа нужно принять условия

  • На странице входа появился флажок: «Я прочитал и принимаю Условия использования и Политика конфиденциальности» — без него войти нельзя. Это касается обоих способов (QQ в один клик и почта с паролем), и сервер тоже это проверяет: отключённая кнопка никого не остановит.
  • Мы написали две настоящие страницы — Условия использования и Политика конфиденциальности, — где по пунктам перечислено, что сайт хранит: ник и openid от QQ, почту и хеш пароля, привязанных персонажей, игровую статистику, загруженные изображения, а также IP и время входа.
  • Там же прямо сказано, с кем мы делимся данными — только три стороны: QQ Connect (вход), mc-heads.net (аватар скина, если свой не загружен) и 126 Mail (коды подтверждения). Никаких рекламных сетей и продажи данных.
  • Также описаны сроки хранения, как запросить удаление или выгрузку и как мы поступаем с несовершеннолетними. Обе страницы есть и в подвале сайта.
v1.9.60 Сайт 2026-10-04

Текст в шапке теперь читается и на светлых кадрах

  • После замены фото на видео белый текст шапки оказался на светлом небе и облаках с худшим значением 1,16:1, то есть практически нечитаемым. Причина — порядок отрисовки: видео является настоящим дочерним элементом, а затемняющий градиент лежал на body.cdr-body::before (генерируемое содержимое), а генерируемое содержимое всегда рисуется раньше настоящих детей, поэтому видео полностью перекрывало градиент и он ни на что не влиял
  • Исправление делает затемнение собственным фоном шапки: один вертикальный градиент (62 процента сверху, исчезает к 350px), который накрывает только полосу шапки и не трогает ни пикселя персонажа, земли и воды; новый фиксированный слой не добавлялся, высота страницы осталась 6816px
  • На самом светлом кадре контраст шапки вырос с 1,16 и 2,63 до 4,85 и 6,91 к 1 (норма для белого текста — 4,5 к 1). Заодно исправлена регрессия, заметная только онлайн: под жидким стеклом у кнопки «Назад» полупрозрачная поверхность, и затемнение гасило и её (5,19 к 1 падало до 2,14 к 1); теперь и её надпись белая, худший случай 6,04 к 1
  • Это касается только страниц с баннером; страницы без баннера не изменились ни на байт. Колесо, кнопки и воспроизведение видео перепроверены
v1.9.59 Сайт 2026-10-04

Анимированные фоны: найдена настоящая причина неработающего колеса и кликов

  • Причина — совпадение имён классов: .pub-bg-video был и классом видеоэлемента, и классом-переключателем на <html>. Из-за этого всё правило полноэкранного фиксированного видеослоя применилось к корневому элементу: корень стал position: fixed, высота страницы схлопнулась до одного экрана, и колесу стало нечего прокручивать
  • Ещё коварнее то, что pointer-events: none наследуется: всё дерево документа перестало получать мышь, её ловил только <html>, и кнопка «Назад» стала недосягаемой
  • Исправление: класс состояния переименован в pub-bg-on, а правило элемента сужено до video.pub-bg-video, чтобы они больше никогда не совпадали
  • Фоновый материал возвращён к первой версии (4,50 МБ → 4,41 МБ) без затемнения, вшитого в кадры, поэтому цвета снова нормальные; также исправлены три локальных стенда — они измеряли <html>, думая, что измеряют видеослой
v1.9.58 Сайт 2026-10-04

Анимированные фоны: убрали лишний экран высоты, перетаскивание заметнее

  • Новое видео (15,98 МБ → 4,50 МБ), затемнение вшито прямо в кадры; статичная картинка на телефоне — тот же кадр
  • Удалён невидимый слой маски, который при этом добавлял больше экрана высоты
  • Курсор над шапкой становится «хватающей» рукой; условие ослаблено, чтобы работали ноутбуки с сенсорным экраном
  • Проблема с колесом ещё разбирается; этот выпуск исправляет три пункта выше
v1.9.57 Сайт 2026-10-04

В профиле теперь может быть анимированный фон

  • Загрузите беззвучный клип от 5 секунд до 1 минуты: на компьютере он зациклится, а телефон оставит статичную картинку и не потратит ни байта лишнего
  • Видео принимает только ячейка «баннер», и оно проходит ту же проверку, что и картинки; лимит — 6 МБ, выше — понятный отказ, а не тихий провал
  • Статичная картинка на телефоне — это ваш баннер, поэтому выберите ту, что подходит клипу
  • По умолчанию функция выключена: включите её в настройках админки, и поле загрузки появится
v1.9.56 Сайт 2026-10-03

Исправлено: «выбрал изображение, сохранил — и ничего не произошло»

  • Игрок загрузил аватар и баннер — даже прислал видео — а в модерации ничего не появилось. Изображение так и не дошло до сервера: $_FILES был пуст от начала до конца
  • Причина — HEIC с iPhone: браузер не может его декодировать, окно обрезки сочло это отменой, а отмена стирает файл из формы. Файла нет — сервер мог только решить, что «изображение не меняется», и отвечал зелёным сообщением об успехе
  • Теперь нечитаемые изображения не выбрасываются — оригинал загружается как есть (просто без обрезки), и вам объясняют причину
  • Плюс появилась страховка на стороне сервера: если браузер сообщает, что изображение выбрано, а файл не пришёл, выводится ошибка вместо имитации успеха. Настоящая отмена тоже сообщается явно
v1.9.55 Сайт 2026-10-03

Исправление имён «неизвестных игроков» переехало в админку

  • Скрипт .tools/_backfill-names.php теперь кнопка в разделе «Системные инструменты»
  • Он читает usercache.json из исторических резервных копий, возвращает настоящие имена строкам, названным по UUID, и переносит вместе с ними историю сессий / достижения / скины
  • Страница сначала показывает, какие строки и на что изменятся; перед записью автоматически снимается снимок базы
  • Затрагиваются только строки, имя которых целиком является UUID; если настоящее имя занято, строки объединяются, а обычные игроки никогда не переименовываются
v1.9.54 Сайт 2026-10-03

Рейтинги: десятка лучших в девяти категориях на одном экране

  • Это те «подробные рейтинги», о которых ты просил. Выпадающий список сортировки в списке игроков показывает только одно измерение за раз, поэтому сравнить «кто больше всех накопал» и «кто больше всех умирал» можно было только переключаясь. /ranking собирает десятку лучших в девяти категориях на одном экране
  • По одной карточке на категорию: место, аватар, имя и значение этой категории —
  • числа совпадают со списком игроков символ в символ, потому что оба читают один и тот же код форматирования. Нажми на имя, чтобы открыть страницу игрока
  • Ссылка «Смотреть все» в шапке карточки открывает полный список, уже отсортированный по этой колонке (?sort=). Вход — кнопка «Рейтинги» под заголовком списка игроков. Категории без данных не создают пустую карточку, а боты по-прежнему исключены
v1.9.53 Сайт 2026-10-03

Фон профиля теперь можно перетаскивать

  • На профилях с баннером фотографию фона можно зажать мышью и двигать — как будто сдвигаешь отпечаток пейзажа, а шапка, аватар и имя остаются на месте
  • Реагирует только верхняя область (шапка страницы). Карточки, таблицы и кнопки ниже работают как обычно, выделять текст по-прежнему можно, а нажатие кнопки никогда не начинает перетаскивание
  • При отпускании всё возвращается на место; у края движение останавливается (по кругу остаётся небольшой запас), поэтому фото никогда не уходит за экран и не открывает цвет фона
  • Только мышь и тачпад. Сенсорные экраны и те, у кого включено «уменьшить движение», исключены и ведут себя как раньше
v1.9.52 Сайт 2026-10-03

«Неизвестные игроки» теперь исправляются сами

  • Несколько строк в списке показывают «Неизвестный игрок · 87274f» — на самом деле это его UUID. Кэш имён на сервере хранится около месяца, поэтому после долгой паузы мод не может определить имя и отправляет UUID
  • Проблема была в том, что такая строка не могла исправиться никогда: когда игрок возвращался и сервер снова узнавал его имя, переименование упиралось в ограничение уникальности (строка с настоящим именем обычно уже существовала), ошибка проглатывалась, и UUID оставался
  • Теперь работают оба пути: если настоящее имя свободно — переименовываем и переносим сессии, достижения и скин; если занято — объединяем: время складывается, прогресс объединяется, первое/последнее посещение расширяются
  • От вас ничего не требуется — всё исправится при следующем входе. В журнале синхронизации появится «adopted=N», это видно в «Системных инструментах»
v1.9.51 Сайт 2026-10-03

Аватар теперь виден везде; история входов разбита на страницы; светлые кнопки исправлены

  • Загруженный аватар показывался только в вашем профиле — все остальные аватары на сайте шли другим путём, который ничего не знал о загрузке. Теперь его используют и списки игроков, и комментарии, и навигация. У тех, кто ничего не загружал, всё как было
  • История последних входов показывала 30 строк сразу. Теперь по 10 на страницу, с той же постраничной навигацией, что и в остальных списках сайта (скрыта, если страница одна)
  • Кнопка «развернуть все значки» выглядела серой и неактивной — проблема специфичности: синяя подложка светлой кнопки проигрывала базовому белому слою, а её собственный фон тоже стирался. Исправлено
  • Пустое место под левой колонкой профиля: теперь левая колонка растягивается до высоты правой, а карточка рейтинга заполняет остаток. Пропасти не остаётся независимо от того, развёрнуты значки или нет. Пояснения к радару тоже свёрнуты по умолчанию
v1.9.50 Сайт 2026-10-03

Жидкое стекло переписано по образцу: теперь это настоящее стекло

  • Прошлая версия была лишь «карта градиента + смещение», и никакая настройка не делала её похожей. Построчное сравнение с образцом показало три недостающих части — все три теперь есть
  • Преломление теперь считается по настоящей оптике: толщина стекла, ширина фаски, показатель преломления (1,0–3,0) и скруглённая поверхность — всё участвует в расчёте, и именно это даёт кромке эффект лупы «толстого стекла»
  • Добавлен слой блика — отражение по краю, направленное в одну сторону. Это самая узнаваемая черта жидкого стекла, а в прошлой версии его не было вовсе
  • Насыщенность возвращается после смещения (преломление обесцвечивает), плюс лёгкое сглаживание. Размытие остаётся 0,3 px: больше — и соседние пиксели перестают различаться, а преломление исчезает совсем
v1.9.49 Сайт 2026-10-03

Аватар теперь можно обрезать самому: потяните — что в рамке, то и получится

  • Раньше вы загружали картинку целиком, и сайт сам масштабировал её от центра — если лицо оказалось сбоку, так и оставалось. Теперь при выборе картинки открывается рамка: тяните, чтобы сдвинуть, колесо или ползунок — чтобы приблизить, и то, что внутри рамки, становится итоговым аватаром
  • Экспорт — 512×512 (тот же предел, что и на сервере) в WebP. Маленькие картинки не увеличиваются — от этого они только мутнеют, поэтому обрезаются в своём размере. На узких экранах рамка автоматически уменьшается, так что и на телефоне всё работает
  • Два типа изображений намеренно не трогаются: анимированные GIF (при обрезке остался бы один кадр и анимация пропала бы) и SVG — они идут прежним путём. Если на любом шаге что-то сорвётся (браузер не умеет, не хватило памяти), отправится исходный файл — застрять на «выбрал файл и ничего не происходит» невозможно
  • Баннеры не обрезаются — они широкие по своей природе, и делать их квадратными бессмысленно. Рамка появляется только при загрузке аватара в разделе «Моё → Мой профиль».
v1.9.48 Сайт 2026-10-03

Матовое стекло на узких экранах стало на ступень легче — рывки на телефоне должны уйти

  • Рывки на мобильной странице профиля возникали не из-за плохо написанной анимации, а потому что само размытие стоило слишком дорого: на каждой карточке висело blur(32px) saturate(180%), а на этой странице одновременно видно семь-восемь стеклянных поверхностей — каждый прокрученный кадр должен был заново пересэмплировать все пиксели за ними
  • Разница между 32px и 14px почти незаметна глазу — карточки и так лежат на белом .70–.78, а размытие лишь смягчает фотографию позади; зато стоимость сэмплирования растёт примерно как квадрат радиуса. Насыщенность тоже снижена с 180% до 150%; на этой странице более яркие цвета нигде не нужны
  • На ступень ниже только узкие экраны: на десктопе не сдвинулся ни один пиксель. Это чисто производительное изменение, которое вы почти не заметите — но прокрутка на телефоне станет заметно плавнее
  • Понижение затрагивает только узкие экраны; на десктопе не изменился ни один пиксель. Это чисто производительная правка, почти незаметная глазу, — но прокрутка на телефоне станет заметно плавнее
v1.9.47 Сайт 2026-10-03

Мобильная страница состояния стала заметно короче; список блокировок больше не повторяет «QQ не привязан» в каждой строке

  • На телефоне каждая строка сервиса переносилась на две-три строки. Причина конкретна: строка была сеткой из трёх колонок, минимальные ширины которых в сумме давали 504 px, а вьюпорт телефона — всего 492 px, то есть чуть-чуть не хватало, и каждая строка принудительно переносилась. На узких экранах теперь две колонки, а примечание вынесено в отдельную строку — страница стала короче более чем на 500 px
  • Заодно на узких экранах подтянуты отступы панелей, полоса доступности и карточки узлов. Эти изменения живут только в блоке стилей внутри самой страницы состояния — на остальных страницах не сдвинулся ни один пиксель
  • В списке блокировок в каждой строке под именем игрока стояла одна и та же надпись «QQ не привязан», из-за чего таблица выглядела сломанной. Оказалось, переключатель «скрывать QQ на странице блокировок» в админке вычислялся и никогда не использовался — настройка всё время была мёртвой
  • Теперь все три места слушают этот переключатель: строка списка, значок QQ и подсказка на аватаре, а также раскрытая подробность. Причины блокировки по-прежнему зашиты по-китайски (во всех десяти языках отображается китайский); этим займусь отдельно
v1.9.46 Сайт 2026-10-03

Фоновые изображения ожили и мягко уступают курсору

  • Теперь поддерживаются анимированные GIF-фоны. Дело было не в отсутствии поддержки, а в том, что её убивало сжатие: каждая загрузка перекодировалась в WebP, а декодирование GIF даёт только первый кадр —— анимация приходила статичной картинкой
  • Решение: многокадровый GIF сохраняется байт в байт, без перекодирования, и анимация выживает. Плата за это — анимированный фон не уменьшается до 1920x1080 (перекодирование убило бы анимацию), это осознанный выбор
  • Фон теперь следует за курсором: при движении указателя слой фона смещается до 10 пикселей в обратную сторону, и фотография читается как объёмная
  • За кадр меняется только одна переменная CSS, поэтому сама фотография не перерисовывается ни разу; когда указатель останавливается, цикл завершается, и неподвижная страница стоит ровно столько же, сколько раньше. Только мышь и трекпад, и полностью отключено при уменьшенной анимации
v1.9.45 Сайт 2026-10-03

Крестик на кнопке «Назад»: четыре захода, а причина оказалась внутри комментария

  • Крестик исчез. Это было светлое пятно, которое браузер оставляет у верхней кромки по центру, когда сэмплирует фон маленького блока —— кнопка всего 58x35, поэтому пятно занимает заметную её часть; на большой карточке то же пятно размывается и не видно
  • Решение: эта маленькая кнопка больше не сэмплирует фон, а её подкраска поднята с 8 % до 14 %, чтобы сохранить прозрачность. Цена нулевая: с преломлением и без него кнопка отличается на 0 из 1 766 688 пикселей (максимальная разница по каналу — 1)
  • По-настоящему каверзный слой был следующим: правила верные, но не работают. Дословно цитируя эталонный CSS внутри комментария, я написал /* 6% */ —— комментарии CSS не вкладываются, этот */ закрыл внешний комментарий раньше времени, следующая } закрыла правило раньше времени, и парсер проглотил все последующие правила
  • Этот испорченный комментарий жил там с 1.9.42, так что целых три версии у стекла кнопок не было внутреннего свечения и внешней тени —— теперь оба вернулись. Урок стал тестом: никогда не писать в комментарий то, что закрывает его раньше времени (в PHP эта же ловушка поймала меня уже дважды)
v1.9.44 Сайт 2026-10-03

Та мигающая линия при движении мыши: восемь версий спустя — причина в подъёме карточки на 2px при наведении

  • Причина была не в блике и не в площади матового стекла, а в общем правиле наведения: каждый раз, когда курсор проходил по карточке, она приподнималась на 2px. У карточек матовый фон, поэтому в момент движения браузер обязан заново пересэмплировать изображение позади — а этот сэмплинг режется на тайлы; стыки тайлов и есть та линия
  • По пути было пять тупиков (перенести блик с фона в псевдоэлемент, перевести на transform, сделать настоящим дочерним элементом, вынести из стекла, удалить целиком). Каждый выглядел так, будто «должен» сработать, и ни один не задевал причину
  • Исправление: стеклянные поверхности больше не смещаются при наведении — они отвечают рамкой и тенью. Две матовые полосы во всю ширину (панель навигации и закреплённая строка с именем) тоже лишились размытия; сэмплинг по большой площади — самый дорогой
  • Из той же партии вышли две заметные вещи: блик, следящий за мышью, удалён полностью (слишком мельтешит), а стекло кнопок переписано в три слоя как в референсе (преломление и тонировка раздельно)
v1.9.43 Сайт 2026-10-03

Кнопка входа в админку исчезла: баг специфичности, который я внёс в прошлой версии

  • В стекле кнопок из v1.9.42 была ошибка специфичности: базовый слой с 8 % белой окраски считался как «пять классов плюс два элемента», а тёмно-синий градиент главной кнопки —— всего как «три класса». Поэтому базовый слой всегда побеждал, и градиент вообще не рисовался. Вдобавок background: none в том же блоке стирал собственный градиент главной кнопки. Тёмно-синий фон с белым текстом превратился в белое на белом, и кнопка исчезла полностью
  • Исправление: сплошные фирменные кнопки (главная кнопка) больше не участвуют в стекле. Это тёмно-синяя кнопка с белым текстом; такое стекло подходит только светлым кнопкам. Главная кнопка вернулась к исходному сплошному виду
  • Тот же баг тихо съедал и подсветку при наведении (она считалась как «четыре класса» и проигрывала пяти) —— то есть обещание прошлой версии «наведение теперь заметно» никогда не работало. Теперь работает
  • Ещё один побочный эффект: background: none стирал и загружающиеся кнопки, а слои стекла их исключают —— на эти секунды кнопка становилась полностью прозрачной. Теперь фон к ним возвращается
v1.9.41 Сайт 2026-10-02

Свечение, следовавшее за курсором, удалено

  • Что удалено: холодное синее свечение, которое ходило за курсором по карточкам. Убрано целиком — переменные, переключатель, слой, скрипт, не осталось ни одного фрагмента
  • Почему: вы четыре раза сообщали об одном и том же — «стоит двинуть мышью, и этот участок мигает» / «горизонтальная линия». Я переписывал это четырьмя способами (рисовал в фоне карточки, переносил в псевдоэлемент, делал настоящим дочерним элементом, выносил в отдельный слой на всю страницу) — ничего не помогло. Вашими последними словами было «удали свечение за курсором, слишком уж трясёт» — значит, удалено
  • Побочный эффект: без него движение указателя больше не вызывает ни одной перерисовки. Это и оказалось последним кусочком головоломки с мигающей линией — пока внутри элемента с матовым стеклом что-то меняется кадр за кадром, браузер вынужден снова и снова пересчитывать картинку позади него, а считает он её плитками: стыки плиток и есть та линия, которую вы видели
  • Всё остальное не изменилось: прозрачность стекла, первый экран только с фотографией, закреплённая строка с именем и кнопки с жидким стеклом остались как были. Посетители без мыши и на сенсорных экранах этого свечения и не видели, так что для них это обновление — ноль перемен
v1.9.36 Сайт 2026-10-02

Свечение больше не прыгает между элементами, а жидкое стекло кнопок стало сильнее

  • Свечение за курсором больше не «прыгает»: при переходе курсора с одной карточки на другую свечение телепортировалось —— старое исчезало, новое появлялось мгновенно. Теперь старое гаснет на месте, а новое проявляется под курсором, и центр плавно смещается; всё занимает около 180ms
  • Почему не CSS-переход: transition заменяет объявление целиком, и добавить переход только к одному свойству нельзя; для этого понадобился бы селектор, который заодно перекрыл бы анимации появления и наведения карточек, и появление при прокрутке превратилось бы из «проявления с подъёмом» в резкий скачок. Поэтому скрипт покадрово сглаживает одно число (интенсивность свечения) и останавливается, как только оно устоялось
  • Жидкое стекло кнопок стало сильнее: смещение преломления выросло с 14 до 50, полоса фаски расширена, и добавлено то, что действительно делает поверхность похожей на стекло —— зеркальный блик по верхнему краю, тёплая и холодная дисперсионные каёмки по левому и правому краям, а также внутренний отблеск. Заодно размытие уменьшено с 1,5px до 0,8px (размытие как раз стирает ту детализацию, которой питается смещение)
  • Честная оговорка в силе: отрисовывают только Chrome и Edge, к тому же преломление видно лишь тогда, когда есть что преломлять —— на белой карточке это практически ноль, а на контрастном фото баннера заметно. Переключатель находится в админке, «Системные настройки → Визуальные эффекты», и по умолчанию выключен
v1.9.35 Сайт 2026-10-02

Первый экран теперь только фото, контент поднимается при прокрутке, а у кнопок появилось жидкое стекло

  • Первый экран стал «хиро»: на странице игрока с баннером при входе видно только шапку страницы и фоновое фото на весь экран — область контента не показывается вообще. Один щелчок колесом вниз проявляет весь блок контента с плавным появлением и приподнимает его (прозрачность по-прежнему 28 %); при возврате наверх он снова убирается, сколько угодно раз
  • Почему двигаются сами блоки контента, а не обёртка: любой предок с непрозрачностью меньше 1 создаёт новый backdrop-root, и все поверхности backdrop-filter внутри начинают брать пробу из пустого фона — матовое стекло полностью ломается. При поблочном появлении такого предка нет. Единственные два position: fixed в body (фоновый слой и закреплённая строка с именем) в этот набор не входят, поэтому сдвигать их безопасно
  • Преломление «жидкое стекло» на кнопках (новый переключатель в админке «Системные настройки → Визуальные эффекты», по умолчанию выключен): край кнопки теперь слегка искривляет узор за ней, как это делал бы толстый кусок стекла. Используется карта смещения SVG плюс backdrop-filter; карта рисуется один раз через canvas при открытии страницы, и никакого скрипта на каждый кадр нет
  • Рисуют только Chrome и Edge: Safari и Firefox не поддерживают эту возможность CSS и отказывают молча (ни ошибки, ни отрисовки), поэтому возвращаются к нынешнему матовому стеклу. И преломлению нужно что преломлять — над ровной поверхностью вроде белой карточки эффект практически нулевой; он заметен только там, где есть светотень, например на фото баннера
v1.9.34 Сайт 2026-10-02

Карточки стали чуть прозрачнее, свечение за курсором меньше, а закреплённая строка выезжает

  • Что изменилось: на странице игрока с баннером большие карточки теперь пропускают около 28 % фото вместо 5-10 % (его действительно видно), а ячейки статистики и карточка радара осветлены соответственно
  • Почему ячейки статистики выглядели двумя разными цветами: свечение за курсором было пятном холодно-синего цвета радиусом 320px при alpha .22. Когда оно накрывало левую половину карточки, первая ячейка измерялась как rgb(189,193,197), а четвёртая, вне пятна, —— rgb(245,246,247): разброс 56 уровней в одном ряду. Теперь пятно 200px при alpha .10, и ячейки больше не подсвечиваются сами (подсвечивается всегда самая внешняя карточка); в том же ряду разброс 3 уровня
  • Вторая половина «мерцания»: при переходе курсора с пустого места карточки на ячейку цель скрипта прыгала между всей карточкой и этой ячейкой, и свечение мгновенно превращалось из большого пятна в маленькую точку. Если убрать ячейки из подсветки, этот прыжок исчезает
  • У закрепления появился выезд: строка с именем опускается на 10px и проявляется под навигацией за 180ms. Если включено «уменьшить движение», эта анимация и пружина кнопок отключаются (свечение за курсором остаётся)
v1.9.33 Сайт 2026-10-02

Строка с именем теперь прилипает под навигацией при прокрутке

  • Что изменилось: на странице игрока с баннером при прокрутке вниз строка «аватар + имя + уровень + значки» закрепляется сразу под навигацией сайта, а карточки проходят под ней. Подпись в эту строку не входит и уезжает как раньше; кнопка «Назад» закрепляется вместе с именем
  • Почему `position: sticky` тут не годится: родитель этой строки —— .cdr-container, а он высотой только с шапку страницы, поэтому ход sticky заперт внутри него: за шапкой строка уезжает вместе со всем остальным. Поэтому строка сделана position: fixed, а скрипт вставляет на её прежнее место заполнитель той же высоты (fixed выводит её из потока; без заполнителя вся страница подпрыгивает на 86px в момент закрепления)
  • При закреплении приходится ещё и переворачивать цвет текста: обычно эта строка несёт белый текст поверх фото баннера, но закреплённая оказывается на светлом стекле, а белое на белом не видно (в измеренной сборке аватар и значок «в сети» были на месте, а ячейка имени полностью пустой). Поэтому закреплённое состояние переводит имя, уровень и значки в цвет чернил, используемый на стеклянных поверхностях
  • Затрагивает только страницы игроков, загрузивших баннер —— страницы без баннера (например, /players/zlc) не тронуты ни на байт
v1.9.32 Сайт 2026-10-02

Блик за курсором теперь подсвечивает только ту поверхность, которую должен

  • Причина была в наследовании пользовательских свойств. Скрипт ставит .is-lit на карточку под курсором, и --glass-spot спускается по цепочке наследования в каждый .stat-mini этой карточки —— один переключатель превращался в семь-восемь светящихся поверхностей. Именно это вы и увидели: «мышь в другом месте, почему всё загорелось?». Доказательство: в жёлтой строке пробы появился счётчик spot=, который считает не элементы с .is-lit, а сколько вычисленных значений --glass-spot не прозрачны —— до исправления курсор на пустой зоне заголовка карточки давал lit=1 spot=8/27
  • Исправление: каждая стеклянная поверхность теперь сама сбрасывает --glass-spot в transparent, и цепочка наследования обрывается на ней; .is-lit от скрипта получает только та поверхность, над которой действительно находится курсор. После изменения: spot=1/27
  • Вторая ловушка, исправленная попутно: у этого сброса та же специфичность, что и у правила .is-lit, и он написан ниже —— по принципу «побеждает последний» простой body.cdr-body .is-lit был бы полностью перекрыт и блик исчез бы совсем (измерено lit=1 spot=0/27). Поэтому правило .is-lit должно перечислить все четыре селектора и поднять специфичность. Пропустите этот шаг —— и ошибка из «светится слишком много» превратится в «не светится вообще»
  • Координаты теперь записываются синхронно при входе в новый элемент, а не только по requestAnimationFrame: иначе у первого кадра нет координат и блик вспыхивает в центре карточки, прежде чем перескочить к курсору. Теперь один .is-lit —— это одна светящаяся поверхность: где курсор, там и свет
v1.9.31 Сайт 2026-10-02

Жидкое стекло получило две тактильные детали: блик за курсором и пружинящие кнопки

  • Блик, следующий за курсором: когда курсор движется по стеклянной поверхности, за ним следует небольшое пятно холодного сине-белого света —— подсвечивается только карточка под курсором, остальное остаётся как было. Это слой radial-gradient, нарисованный в фоне карточки, который читает --glass-mx / --glass-my, записываемые скриптом на лету. Никаких лишних узлов, никакого вмешательства в контекст наложения и никаких помех размытию карточки. В светлой теме используется не белый, а холодный сине-белый: белую карточку (rgb 229~245) белым светом можно поднять лишь на 6 уровней, глаз этого не замечает
  • Более высокая фотополоса в шапке: нижний отступ .page-head вырос с 30px до 160px (около 317px всего), сдвигая весь ряд белых карточек вниз: аватар, имя и значок уровня теперь лежат прямо на изображении баннера —— это и есть «показать больше фона». Только высота, без нового содержимого, на маленьких экранах — 72px. Содержимое намеренно не сдвигалось целиком: это потратило бы самую тёмную часть верхней маски и сделало бы побелевшие строки нечитаемыми
  • Пружинящие кнопки: при нажатии сжимается до .955, при отпускании возвращается через cubic-bezier(.34, 1.56, .64, 1) —— у второй контрольной точки y = 1.56 > 1, поэтому кривая проскакивает цель и возвращается; этот заброс и есть «пружина». Чистый CSS, без JavaScript и без физического движка
  • Резервный режим prefers-reduced-motion теперь гасит только самостоятельное движение: пружина кнопки (которая сама отскакивает после отпускания) превращается в обычный короткий переход, отклик на нажатие сохраняется, а блик за курсором остаётся —— слежение за курсором это прямое управление: движется курсор, а не страница. Ваш собственный референс по жидкому стеклу говорит ровно это: убрать displacement, оставить blur и блик. Это ещё и единственный способ увидеть блик на этой машине: эффекты анимации Windows здесь выключены (MinAnimate = 0 / DragFullWindows = 0 / VisualFXSetting = 2), и браузеры честно сообщают об этом как reduce —— если завязать блик на это, он исчезнет навсегда
  • Всё перечисленное действует только на профили с загруженным баннером (блок по-прежнему внутри $pubBgCss !== ''); любая другая страница —— включая профили без баннера —— не изменилась ни на байт, и за этим следят четыре проверки в наборе тестов
  • Честное замечание: оба эффекта — про «ощущение», и на статичном скриншоте их не видно —— нужно действительно провести курсором по карточке и действительно нажать кнопку. Ещё стоит вернуть анимации Windows (Параметры → Специальные возможности → Визуальные эффекты → Эффекты анимации), иначе браузер сообщает всем сайтам, что пользователь просит меньше движения
v1.9.30 Сайт 2026-10-02

Жидкое стекло переделано: цвет карточек больше не меняется при прокрутке

  • Причина не в движке отрисовки. Страницы профиля вешали изображение баннера на body через background-attachment: fixed. Эта запись означает «изображение прикреплено к вьюпорту», и оно не является отдельным композитным слоем —— браузер обязан пересэмплировать его каждый кадр для backdrop-filter каждой карточки; когда окно сэмплирования и позиция прокрутки расходятся, цвет «прыгает». Одновременно карточки движутся, а изображение нет, поэтому каждая полупрозрачная карточка проезжает по всей фотографии. Вместе это и давало «то темнее, то светлее, то нормально»
  • Лечим мерцание при прокрутке: фон переехал с body в отдельный слой position: fixed (body::before, z-index: -1, pointer-events: none, will-change: transform). Отдельный слой может быть повышен до композитного, поэтому источник сэмплирования на протяжении всей прокрутки —— одна уже скомпонованная битмапа
  • Лечим разницу в покое: теперь карточки задают цвет сами. В основе линейная экстраполяция из измерений —— разброс ≈ (1−alpha)×53, чтобы удержаться в пределах 4 уровней нужно alpha ≥ .925. Большие карточки: 72 % → 95 % сверху и 60 % → 90 % снизу; плитки статистики: 80 %/70 % → 97 %/94 %; карточка радара: 76 %/66 % → 96 %/92 %. Фотография по-прежнему просвечивает на 5~10 % —— именно оттуда берётся оттенок стекла
  • Стекло теперь многослойный материал: слой шума + вертикальный градиент + скользящий блик по краю + внутренняя фаска преломления; все параметры вынесены в переменные (--glass-blur --glass-sat --glass-highlight --glass-displacement --glass-noise). Честное замечание: настоящее преломление через SVG feDisplacementMap здесь недостижимо —— Chromium и Safari принимают в backdrop-filter только функции фильтров, но не url(#svgfilter); внутренняя фаска лишь приближает этот вид, а не имитирует его
  • Результат: в одной и той же точке разброс при прокрутке теперь всего 3~6 уровней (18 в прошлой версии, 100 изначально), общая яркость 229~245, в тёмной теме — всего 1~3 уровня. Заодно убрано свечение text-shadow на стеклянных поверхностях —— при стабильной карточке оно уже не помогает и лишь съедает штрихи 12-пиксельного текста
  • Также исправлено «подписи радара способностей плохо читаются»: прозрачность не тронута вовсе. Подписи «среднее по серверу» просто перешли с .76rem на .84rem основной строки, с приглушённого серого на цвет основного текста, плюс немного насыщенности. Настоящая причина в том, что CJK 12 px и 13 px в Windows идут по разным путям сглаживания. Всё перечисленное затрагивает только профили с загруженным баннером; на страницах без баннера не изменился ни один байт
v1.9.29 Сайт 2026-10-02

Яркость карточек больше не меняется при прокрутке

  • Причина — не ошибка отрисовки. На страницах профиля для баннера задан background-attachment: fixed: изображение прикреплено к вьюпорту, а карточки прокручиваются поверх него —— каждая полупрозрачная карточка «проезжает» по всей фотографии: на тёмном небе тускнеет, на светлых зданиях выцветает. Одна и та же карточка в зависимости от положения давала от rgb(99,107,125) до rgb(201,197,200) —— разброс в 100 уровней
  • Исправление — сделать само стекло плотнее, ведь alpha это единственный рычаг, сохраняющий и прозрачность, и стабильность: большие карточки — с 56 % → 72 % сверху и с 34 % → 60 % снизу; плитки статистики — с 76 %/60 % → 80 %/70 %; карточка радара — с 70 %/52 % → 76 %/66 %. Порядок плотности (большие карточки самые светлые, плитки самые плотные) не изменился
  • Результат: в одной и той же точке разброс при прокрутке теперь всего 14 уровней вместо 47, а общая яркость держится в диапазоне 163~206 —— явно светлая матовая поверхность вместо мутно-серой. Тёмная тема уплотнена соответственно (уровень 82 %/72 %), там остаточный разброс — всего 4~8 уровней
  • Затронуты только профили с загруженным баннером. Страницы без баннера (например, /players/zlc) этот стиль стекла вообще не выводят —— там не изменился ни один байт
v1.9.28 Сайт 2026-10-02

«86 часов игры в сутки» исправлено

  • Прежняя формула была «общее время игры ÷ дни с записями сессий» —— числитель охватывает десять лет, а знаменатель — только 11 дней после 2026-09-12. Деление двух разных эпох давало «86 часов в сутки». Числитель не был ошибочным; в знаменателе не хватало большей части
  • Теперь знаменатель — это общее число активных дней: сообщения чата, полученные достижения и игровые сессии объединяются по дням —— для этого аккаунта 423 дня. 941 час ÷ 423 дня = 2 часа в сутки, порядок величины наконец верный
  • Заодно исправлены ещё две вещи: число входов теперь берётся за всё время (1 655, тогда как у 929 старых игроков показывался 0), а самая долгая сессия больше не может показывать невозможную пару «в среднем 21 минута, максимум 0 часов»
  • Также разблокированы три достижения: 7 / 30 / 100 активных дней были недостижимы из-за того же знаменателя —— на всём сервере записи сессий покрывали лишь 16 дней, пороги оставались вне пределов досягаемости
  • Аудит безопасности, часть первая: закрыт ряд реально эксплуатируемых уязвимостей —— CSS-экранирование позволяло спрятать внешнюю ссылку внутри загруженного SVG (через аватар можно было узнать IP посетителей), из админпанели можно было удалить файлы за пределами uploads, у входа была открытая переадресация, скрипт внутри архива резервной копии мог установиться как веб-оболочка, а два локальных отладочных скрипта были доступны в интернете
  • Аудит безопасности, часть вторая: усиление API и админпанели —— пустой список больше не может одним запросом снять все блокировки на сервере, у отчётов появились ограничения по строкам, имена в белом списке проверяются, одна сбойная строка чата больше не роняет всю партию, а ошибки базы данных не показывают подробности посетителям
v1.9.27 Сайт 2026-10-02

Мелкий текст в блоке радара теперь читается

  • Мелкий текст в блоке «радар способностей» (названия осей, числа справа, строки «среднее по серверу» и примечание ниже) лежал на стекле 34 %, самые тёмные участки которого давали всего 3,3 : 1 контраста —— меньше 4,5 : 1, необходимых для мелкого шрифта. Это и есть ваше «не читается», и это моя недоработка в прошлой версии
  • Две правки: цвет вторичного текста стал на ступень темнее, а блок радара получил собственную подложку —— почти все строки этой карточки набраны мелким шрифтом, поэтому она не должна делить одну прозрачность с большими карточками
  • Большие карточки не тронуты: карточка скина, карточка достижений и подвал по-прежнему на 34 %, картинка за ними так же просвечивает, а плитки статистики сохранили свою более плотную подложку
  • Тёмная тема получила то же самое. И это по-прежнему происходит только на страницах, владельцы которых загрузили баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.26 Сайт 2026-10-02

Ещё на ступень прозрачнее —— и текст по-прежнему читается

  • Профили: верх с 62 % до 56 %, низ с 40 % до 34 %. Изображение позади теперь действительно видно —— вертикальные полосы огней, линия горизонта и блочные силуэты просвечивают, а не сплошная матовая плита
  • «Видеть картинку» и «читать текст» мешают друг другу, поэтому они разведены: плитки статистики (места скопления мелкого текста вроде «всего наиграно» и «входов») сохраняют собственную более плотную подложку (76 % → 60 %), а крупные карточки остаются очень прозрачными. Малое плотнее, большое прозрачнее —— обратный обычной иерархии Apple порядок, и намеренно
  • У текста появился очень слабый ореол в ту же сторону (text-shadow) —— незаметный на светлом фоне и проявляющийся только на тёмном: так шрифт несёт собственную локальную подложку. Именно это позволяет опуститься до 34 %
  • Тёмная тема получила соответствующие тёмное стекло и тёмный ореол. И всё это по-прежнему происходит только на страницах, владелец которых загрузил баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.25 Сайт 2026-10-01

Стекло стало прозрачнее и больше похоже на Apple

  • Профили: вместо ровных «68 % белого» теперь вертикальный градиент —— светлый сверху и более прозрачный снизу (62 % → 40 %), размытие по Гауссу выросло с 22 px до 32 px, добавлены saturate(180%) и brightness(1.12). Стекло в стиле Apple подхватывает цвет позади и слегка его поднимает; одно лишь размытие даёт просто матовость
  • У стекла появился преломляющий край по всему периметру —— скользящий блик 1 px сверху и очень слабый внутренний контур. Тень разделена на два слоя (плотная контактная и широкая рассеянная), чтобы пластина казалась парящей над изображением, а не наклеенной на него, как бумага
  • Исправлено то, что вылезло только после осветления стекла: второстепенные подписи вроде «всего наиграно» и «входов» были почти не видны —— их серый на полупрозрачном белом даёт всего 2,5:1. Теперь внутри стекла они темнее на ступень, а мелкий текст прямо на баннере не тронут
  • Тёмная тема получила свой набор значений для тёмного стекла. И всё это по-прежнему происходит только на страницах, владелец которых загрузил баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.24 Сайт 2026-10-01

Профили стали «жидким стеклом»

  • Карточки, панель скина, шесть плиток статистики и весь подвал теперь полупрозрачное стекло (68 % белого + размытие по Гауссу 22 px), сквозь которое просвечивает размытый баннер. Текст остался тёмным и читается поверх картинки; в тёмной теме стекло становится тёмным
  • В заголовке карточки достижений появились «Свернуть все» / «Развернуть все» —— все 8 категорий сразу, больше не нужно прокручивать до самого низа стены из 98 значков
  • В панели управления справа внизу появилась четвёртая вкладка «Аватары / Фоны», где можно одобрить или отклонить ожидающие загрузки. Это те же данные, что и в «Игроки и данные → Аватары / фоны» —— проверять можно откуда угодно
  • Всё это происходит только на страницах, владелец которых загрузил баннер —— страницы персонажей без баннера не сдвинулись ни на пиксель (я сравнил снимки до и после попиксельно)
  • Там, где стекло недоступно (старые браузеры), возвращаются прежние непрозрачные карточки. А вот системную настройку «уменьшить прозрачность» мы намеренно не соблюдаем —— на Windows у владельца сайта эффекты прозрачности отключены, и если её соблюдать, он сам никогда не увидит стекло
v1.9.23 Сайт 2026-10-01

Страница профиля теперь может занимать весь экран

  • Фон —— если вы загрузили баннер, страница персонажа использует это изображение, чтобы заполнить всё окно браузера, а аватар, имя, уровень и местоположение ложатся сверху. Страницы без баннера не меняются ни на пиксель
  • Местоположение —— в разделе «Я» → «Персонализация» можно выбрать страну (а для Китая ещё и провинцию); оно появится в профиле рядом с «не в сети / место #8». Не выбрали —— ничего не показывается
  • Аватары в списке игроков теперь предпочитают загруженный вами. Раньше всегда запрашивался официальный аватар скина с зарубежного хоста, который здесь почти никогда не загружается —— отсюда и цветные квадратики с буквами
  • Загруженные аватары и фоны проходят проверку перед публикацией. Пока новая ждёт, показывается прежняя картинка, поэтому «наполовину новой» страницы не бывает; а удаление действует сразу
  • Лимит загрузки расширен: баннеры до 3840×2160 (было 1920×1080), и теперь принимается SVG —— SVG очищается: скрипты, внешние ссылки и встроенный HTML удаляются
v1.9.22 Сайт 2026-10-01

Новые окна · и старые баны вернулись

  • Все 16 всплывающих окон сайта теперь используют собственный диалог. Раньше это были окна самого браузера с заголовком «cloudridge.cn сообщает» —— на телефоне они особенно выбивались, а стиль сайта не соблюдался вовсе. Теперь заголовки, текст и кнопки наши; опасные действия помечены красной кнопкой, Esc отменяет, Enter подтверждает, а фокус возвращается на нажатую кнопку
  • 8 игроков и 3 IP, всё ещё забаненные к моменту закрытия старого сервера, возвращены в список: публичная страница теперь показывает 12 игроков и 7 IP. Имена, IP, время бана и исполнители перенесены из архивов дословно, ничего не выдумано. Оговорка: мод лишь читает файлы банов сервера и передаёт их —— кого реально блокируют в игре, по-прежнему решает список сервера, поэтому ему нужно перечитать файлы
v1.9.21 Сайт 2026-10-01

Тот «неизвестный игрок» — это тот же человек

  • В списке игроков всегда висела строка «未知玩家 · 000000» (неизвестный игрок), будто четвёртый, никем не посчитанный человек. Причина выяснена: floodgate старого сервера выдавал игрокам Bedrock UUID из служебного диапазона 00000000-0000-0000-0009-…, а мод мог сообщить только *имя* —— и в тот момент именем оказался сам этот UUID. На самом деле это был birdzhonghuifei, игравший с Bedrock; строку присоединили к её владельцу
  • Правило объединения: счётчики (время игры, входы, смерти, добытые и поставленные блоки, расстояние) складываются, достижения объединяются, а первый вход берёт более раннюю из двух дат, последний визит — более позднюю —— складывать метки времени нельзя. Все девять значков с этой строки у владельца уже были, дубликаты отброшены. В таблице стало на строку меньше, а цифры birdzhonghuifei теперь полнее
v1.9.20 Сайт 2026-10-01

В календаре можно сразу перейти к любому месяцу

  • В окне календаря слева вверху появились два списка — год и месяц: выбрали год, выбрали месяц, и вы в два щелчка от любого месяца —— больше не нужно листать по одному месяцу кнопкой ‹. Кнопки «назад/вперёд» и «Сегодня» остались, а списки следуют за перелистыванием
  • Заодно исправлена ошибка сортировки: при сортировке по «первому входу» строки с неизвестной датой поднимались на 1–4 места, и вся таблица выглядела сломанной —— «нет значения» не то же самое, что «самый ранний». Теперь такие строки уходят в конец списка при любом направлении
v1.9.19 Сайт 2026-10-01

Восстановлено ещё 229 сообщений чата

  • Журнал плагина TrChat начинается только с 2023-09-01, поэтому часть второй половины 2024 года отсутствовала. В трёх никогда не импортированных базах CoreProtect со старых серверов нашлось 34 417 сообщений за 2024-07 — 2024-12; после удаления дублей это чистые 229 сообщений за 37 дней, самое раннее — 2024-07-11
  • Дубли определяются по правилу «этот игрок уже сказал то же самое в пределах ±5 секунд» —— одно и то же сообщение записано и в TrChat, и в CoreProtect, их метки времени обычно различаются на секунду и иногда переходят через минуту; сравнение по минутам пропустило бы эти несколько десятков как дубли
  • Эти 37 дней не были пустыми изначально —— TrChat записал большую часть; вернулись отдельные строки, которые он пропустил. Теперь при просмотре этих дней с июля по декабрь 2024 года разговор виден полнее
v1.9.18 Сайт 2026-10-01

Персонажи одного аккаунта теперь раскрываются

  • Строки списка игроков, у которых больше одного персонажа, теперь начинаются со стрелки: по умолчанию свёрнуто, одно нажатие разворачивает каждого персонажа в отдельную строку с его временем игры, числом входов, последним входом и статусом (главная строка — сумма, вложенные — отдельные значения). Повторное нажатие сворачивает обратно
  • Поиск по имени дополнительного персонажа автоматически разворачивает эту строку —— поиск Winter сразу показывает его цифры рядом с Fruity_oxygen, и не нужно угадывать, под чьим именем он прячется. Попутно исправлена старая ошибка: при сортировке по имени игрока в шапке было на одну колонку меньше, чем в теле, и вся таблица съезжала
v1.9.17 Сайт 2026-10-01

Рейтинг по аккаунтам · три года переписки восстановлены

  • Список игроков теперь показывает одну строку на аккаунт сайта: персонажи одного аккаунта суммируются (Fruity_oxygen и Winter объединяются в одну строку, ElfinLettuc и Faithe — в другую), а те, кто не привязывал аккаунт, сохраняют свою строку. Значок «N персонажей» рядом с именем показывает, кто с кем объединён, — прежний рейтинг разносил основной и дополнительный аккаунты по разным строкам, и казалось, что на дополнительном время потрачено зря
  • Новая страница аккаунта (/accounts/<id>): каждый персонаж аккаунта перечислен отдельно со своим временем игры и числом входов, а сводные цифры сверху — их сумма. Страница полностью публична, вход не нужен. Попутно исправлена одна некорректная запись: персонаж ссылался на несуществующий идентификатор аккаунта
  • Заполнены три поля, которые застряли на фиктивных значениях: последний вход (929 персонажей указывали 2026-09-13), первый вход (936 столь же ложных 2026-09-13) и число входов (всего 291 по сайту, у 928 игроков стояло «—»). Последний вход берётся из времени изменения файлов сохранения сервера, первый вход и число входов — из журналов всех поколений сервера. Теперь wwwsum честно показывает 2024-08-22, а 7Strawberry — 2024-03-07, и суммарное число входов выросло с 291 до 21 766
  • Панель чата вернула всю переписку с момента открытия сервера: от первой строки 2022-12-16 до момента, когда 2026-09-25 эстафету приняла передача данных от мода, — это 174 457 сообщений и записей о входе/выходе (124 024 сообщения, 25 424 входа, 25 009 выходов). Раньше история была только за те несколько дней, когда стоял мод; теперь любой день, выбранный на веб-карте, показывает переписку того дня
  • Календарь делал кликабельными только последние 400 дней, поэтому 492 из 729 восстановленных дней не открывались — восстановлены, но недоступны. Теперь каждый день с записями кликабелен. Кроме того, число «зарегистрированных игроков» различалось на 2 между главной страницей и списком (791 против 789); теперь оба используют подсчёт по аккаунтам
v1.9.16 Сайт 2026-09-30

Исходящие запросы теперь проверяют сертификаты TLS

  • Все исходящие HTTPS-запросы сайта — сервер скинов, определение местоположения по IP, SMS-шлюз, почтовый сервер, вход через QQ и кнопки проверки в админке — раньше отправлялись с отключённой проверкой сертификатов, поэтому любой на пути мог ответить самоподписанным сертификатом и перехватить запрос целиком. Теперь все они проверяются как положено — по набору корневых сертификатов, который поставляется вместе с сайтом (набор Mozilla, 121 корень).
  • Важнее всего была почта: без проверки человек на пути мог получить и пароль от почтового ящика, и полный текст всех писем. Сертификат ящика 126 действителен, так что на отправку это не влияет.
  • Есть и цена: если сертификат на той стороне действительно сломан, запрос теперь падает с ошибкой, а не подключается молча. Кнопки проверки в админке выделяют этот случай отдельно — «сертификат не прошёл проверку». А если набор корневых сертификатов когда-нибудь пропадёт, код всё равно откажется возвращаться к работе без проверки — он просто упадёт с более понятной ошибкой.
  • Заодно исправлена старая мелочь: у записей v1.9.6 и mod 1.6.0 в журнале обновлений заголовком служило слово «title» — у них никогда не было ничего, кроме текста, а страница выводит заголовок безусловно, поэтому отсутствующий ключ откатывался к последнему сегменту имени. Теперь заголовки заполнены
v1.6.6 Мод 2026-09-30

Список банов больше не заявляет «никто не забанен», когда его не удаётся прочитать

  • Пустой список банов, пришедший на сайт, стирал все сохранённые баны. Мод возвращал пустой массив всякий раз, когда чтение файла не удавалось или формат был неверным, — именно это и срабатывало. Теперь он всегда возвращает null (реально отсутствующий файл по-прежнему означает «никто не забанен») и объявляет bans_authoritative=true только если были прочитаны и banned, и banned_ips. На стороне сайта добавлена соответствующая защита; чтобы это было исправлено как следует, нужны обе половины
v1.9.15 Сайт 2026-09-30

Проверка безопасности: исправлено шесть проблем

  • У админки оставалась приоткрытая дверь: любой из групп Владелец / Админ / Управляющий мог войти на сайт со своим обычным паролем и сразу попасть в /admin/** — шаг с проверкой кода из письма полностью пропускался (закрыта была только сама страница входа в админку). Теперь есть отдельное подтверждение «эта сессия действительно прошла ввод кода», так что вход на сайт больше не равен входу в админку. На сайте всегда было написано, что /admin/** принимает только учётные записи из таблицы admins; теперь реализация наконец совпадает с описанием
  • Когда мод не мог прочитать список банов, он сообщал пустой список, а сайт понимал «список пуст» как «все баны сняты» — перезаписывал всю таблицу банов, создавал фиктивную запись о разбане в истории и заодно очищал players.is_banned. Теперь мод объявляет список достоверным только тогда, когда действительно его прочитал, и сайт выполняет сверку разбанов только при получении такого заявления (или непустого списка). Полностью это заработает с mod 1.6.6; на стороне сайта защита уже стоит
  • Адрес баннера в профиле вводит сам игрок, и он подставлялся прямо в style="…url(URL)". Достаточно одной ) в этом адресе, чтобы добавить любые CSS-объявления — а профили открыты всем, так что под удар попадает каждый посетитель (position:fixed для фишинга на весь экран или следящий пиксель, сливающий IP и браузер каждого посетителя). Экранирование тут не спасёт: HTML превращает &quot; обратно в кавычку раньше, чем её увидит CSS. Теперь адреса проходят через белый список, а всё остальное просто остаётся без баннера
  • Карточка на /whitelist под названием «Мои заявки» на самом деле выбирала 5 последних заявок по всему сайту — любой авторизованный пользователь мог прочитать чужие игровые ID, номера QQ и заметки проверяющих. Теперь она фильтруется по владельцу; страницы админки и управления сервером по-прежнему показывают общий список
  • DNS-запрос на странице инструментов был единственным местом, где не блокировались внутренние адреса: 127.0.0.1 и внутренние имена разрешались без проблем, а запись SRV (цель которой определяет чужой DNS) давала способ это обойти. К тому же проверка порта host:port выполнялась до разделения по двоеточию, так что 8.8.8.8:53 мог прощупать любой порт. Все три дыры закрыты, заодно под блокировку попали AAAA-записи, указывающие на ::1
  • И ещё три: ① значение javascript:… в параметре next= при перенаправлении после входа давало XSS в одну строку (Url::ensure() пропускал что угодно без изменений, как только в строке встречалось index.php, вообще не глядя на схему); ② после запуска скрипта восстановления пароля страница входа в админку показывала новый пароль в открытом виде любому, кто её открыл — этот пароль и так печатается в консоли сервера, так что копию на странице убрали; ③ при включённом переключателе CDR_DEBUG_CSRF в лог записывались первые 160 байт запроса на вход, то есть пароль в открытом виде — теперь пишутся только имена полей и их длина
v1.9.14 Сайт 2026-09-26

Исправлено «то больше, то меньше достижений»

  • Достижения игрока горели, пока он был в игре, и гасли сразу после выхода: когда мод не может прочитать файл прогресса, он отправляет пустой список, а сайт воспринимал это как «у игрока нет достижений» и записывал в базу, стирая уже сохранённое. Теперь пустой список не записывается никогда: лучше сохранить старые данные, чем обнулить их (то же для adv_done — принимается только значение больше нуля)
  • Заодно исправлена сортировка, разрывавшая одну серию внутри категории: правило «сначала полученные» растаскивало 跳跃 10 000 / 100 000 (получены) и 跳跃 500 000 (не получено) по разным концам группы, а между ними оказывались достижения Края и Нижнего мира. Теперь сначала группировка по серии (1 км / 10 км …, 10 тыс. прыжков / 100 тыс. прыжков …), а внутри серии полученные идут первыми — сворачивание по-прежнему скрывает неполученные на месте, поэтому полученные сразу видны
v1.6.5 Мод 2026-09-26

Исправлено: достижения офлайн-игроков не читались

  • Файлы прогресса мира названы с дефисами (077e53e3-c49c-362b-87ee-12457397e38c.json), а мод строил путь из 32 символов без дефисов, поэтому не находил ни одного файла. Игроки в сети идут через живой снимок сервера и работали, а выход из игры считался «нет прогресса». Это затрагивало все 1859 файлов прогресса и 963 игрока и было прямой причиной «то больше, то меньше достижений» (сайт теперь тоже не записывает пустой список). Теперь пробуются оба варианта имени; отсутствие засчитывается только при реальном отсутствии
v1.9.13 Сайт 2026-09-26

Исправлено, кому достаётся восстановленное имя

  • Одно и то же имя может встречаться в таблице восстановления несколько раз — у игрока может быть и старый офлайн-UUID (00000000-0000-...), и настоящий, оба указывают на него. Изначальный код работал по принципу кто первый, того и имя, в порядке файла: здесь birdzhonghuifei соответствует и строке с 106,4 часа, и строке с 1,9 часа, и всё вышло правильно лишь потому, что длинная строка случайно шла первой. При другом порядке имя досталось бы не тому человеку. Теперь оно уходит строке с наибольшим временем игры, независимо от порядка
v1.9.12 Сайт 2026-09-26

Все 863 «неизвестных игрока» вернули свои имена

  • Серверный usercache.json хранит данные лишь около месяца, поэтому в мире, поднятом с выживательного сервера 1.21 до 1.21.11, имена старых игроков давно истекли — сайт мог использовать только UUID и показывал «Неизвестный игрок · xxxxxx». Поэтому мы полезли в архив бэкапов: хронологическое объединение usercache / whitelist / ops / banned-players всех прошлых серверов вернуло все 863 имени, без пропусков (запись на 395 часов в рейтинге — это iRXC). Обновление до v13 заполняет их один раз: затрагиваются только строки, где имя всё ещё UUID; существующее настоящее имя не меняется ни на байт
  • Закрыт и краевой случай: players.name — уникальный индекс, поэтому если нужное имя уже занято другой строкой, эта строка пропускается и отмечается — конфликт уникальности никогда не сорвёт всё обновление. Лучше оставить одного игрока «Неизвестным», чем застопорить миграцию
v1.9.11 Сайт 2026-09-26

Исправлены имена игроков в админке · настоящие имена больше не перезаписываются

  • Страницы админки — список игроков / панель / баны / белый список / скины / пользователи — показывали игроков, чьё имя не удалось определить, сырым UUID. Публичный сайт всегда показывал «Неизвестный игрок · xxxxxx»; в админке просто не хватало нескольких мест, теперь всё единообразно. Таких игроков 863: серверный usercache.json хранит данные лишь около месяца, имена, доставшиеся от этого старого мира, давно истекли, и сайт может использовать как идентификатор только полный UUID (не ошибка отображения — показывать действительно нечего)
  • Заодно устранена угроза потери данных: когда мод не может определить имя, он отправляет пустое, а старый код записывал вместо него UUID. Ветеран, не заходивший больше месяца, при следующей синхронизации терял бы настоящее имя навсегда. Теперь уже известное настоящее имя сохраняется, а UUID используется как запасной вариант только тогда, когда имени действительно нет
v1.9.10 Сайт 2026-09-26

Исправлено «225 часов за один день» на страницах игроков

  • Исправлена абсурдная цифра на графике «последние 30 дней» на страницах игроков: если сервер падает или теряется событие выхода, остаётся запись о входе, которая никогда не закрывается, а при закрытии время окончания бралось из «последний раз замечен», поэтому сессия, открытая 13.09, считалась до 23.09, и все эти 225 часов падали на день входа. Теперь у закрытия три ограничения: потолок в 6 часов, начало следующей сессии этого игрока и «последний раз замечен», которое может только сократить оценку, но не растянуть её
  • Несколько уже сохранённых в базе ошибочных строк теперь отображаются правильно без правки базы (то же правило применяется при чтении), а «последние входы», «суммарное время», «за эту неделю» и «время по серверам» используют одно общее правило — раньше каждое место суммировало секунды само по себе, и одна и та же цифра противоречила себе на странице
v1.9.9 Сайт 2026-09-26

Исправлен выход календаря за панель на телефоне · годовой график теперь по дневному пику

  • Выбор даты в чате больше не выходит за рамку панели на телефоне (на узких экранах календарь не плавает поверх панели, а занимает отдельную строку, поэтому его ширина равна ширине контейнера)
  • Годовой показатель онлайна перешёл с среднего за 6 дней на максимум за день — сервер, оживающий только вечером, может иметь в среднем 2 игроков, хотя в тот момент онлайн было с десяток; нарисованное средним, всё годовое значение вырождается в линию, которая ничего не говорит. 24 часа / 7 дней / 30 дней по-прежнему используют среднее: там одна точка покрывает лишь десятки минут
v1.6.4 Мод 2026-09-26

Свой плейсхолдер задержки: %cloudridge:ping%

  • Встроенный %player:ping% возвращает 0 для всех игроков в строках TAB (в подвале той же конфигурации тот же плейсхолдер работает — в контексте строки просто нет живого игрока). Новый плейсхолдер пробует оба пути: сначала игрока из контекста, затем имя из GameProfile по списку игроков онлайн. Если не вышло ни то ни другое, остаётся пусто вместо обманчивого 0
v1.6.3 Мод 2026-09-26

Сообщать о запуске и остановке

  • Мод сообщает «запущен» при старте сервера и «остановлен» при штатном завершении. Сообщение об остановке отправляется синхронно — процесс вот-вот завершится, и передача его фоновому потоку означала бы, что оно не уйдёт. Падение или отключение питания не создаёт выдуманной записи об остановке
v1.9.8 Сайт 2026-09-26

Чат: запуск и остановка сервера теперь попадают в живой чат

  • Запуск и остановка сервера (со временем) теперь отображаются строкой в панели чата: вместо аватара — маленькая вертикальная черта, а цвет отличает их от сообщений игроков
  • Текст журнала теперь поддерживает разметку код и жирный (раньше обрабатывались только обратные кавычки, поэтому жирный показывал свои звёздочки как есть)
v1.9.7 Сайт 2026-09-25

Чат: просмотр по датам, свободнее высказывания, настоящие диалоги

  • История чата теперь просматривается по датам: нажмите на день в календаре, чтобы прочитать чат этого дня, а дни с записями выделены жирным. Переключение даты больше не перезагружает страницу целиком.
  • Писать стало проще: достаточно войти, привязывать игрового персонажа заранее больше не нужно. Если персонаж привязан, показывается его имя; если нет — никнейм с сайта, и в игре он помечается как [Веб · не привязан], чтобы его отличали от настоящих персонажей.
  • Никнейм на сайте можно менять раз в 15 дней (самая первая установка без ограничения), и в «Мой аккаунт» видно, сколько дней осталось; никнейм не может совпадать с существующим игровым персонажем или администратором, чтобы никто не мог переименоваться и выдать себя за другого.
  • Жалобы теперь отправляются через настоящее окно: поле причины со счётчиком символов вместо крошечного окна браузера; подтверждение отзыва и несколько подтверждений в админке тоже заменены — встроенные окна браузера блокируют всю страницу.
  • В управлении чатом в админке отправители без привязки помечаются; удаление, разбор жалоб и запрет писать работают как раньше.
v1.6.2 Мод 2026-09-25

Починен фильтр ботов + приставка веб-сообщений у каждого сообщения

  • Починен фильтр ботов, который ничего не делал: значение по умолчанию в списке было bot_, а без * оно понимается как точное совпадение, поэтому не отфильтровался ни один фальшивый игрок. Теперь по умолчанию bot_*, и при запуске сервера действующий список пишется в журнал, чтобы «прописано, но не работает» больше не проходило незаметно.
  • Приставка сообщений с сайта теперь передаётся для каждого сообщения: у пользователей с привязанным персонажем — [Веб], у остальных — [Веб · не привязан], так что игроки сразу видят, написал это игровой персонаж или нет.
  • Дополнение к 1.6.1: входы, выходы, смерти и достижения вообще не отображались, потому что распределение опиралось только на ключи перевода, а некоторые моды полностью заменяют исходное сообщение, и ключ не находится; теперь есть запасное распределение по отрисованному тексту и диагностический журнал для первых 25 системных сообщений каждого запуска.
v1.6.0 Мод 2026-09-25

Синхронизация чата: публичный чат и события передаются в реальном времени

  • Новая синхронизация чата: сообщения в общем чате игры, входы и выходы, смерти и достижения передаются на сайт в реальном времени
  • Сообщения пользователей сайта объявляются в игре с приставкой [网页] голубым цветом; они отправляются каждому игроку отдельно в обход события системных сообщений, поэтому повторов не бывает
  • Смерти и достижения разбираются по ключу перевода, а не по отрисованному тексту, поэтому смена языка сервера на китайский ничего не ломает
  • Входы, выходы и смерти фальшивых игроков (ботов Carpet) не передаются; список меняется в chat_bot_names файла cloudridge.json, по умолчанию bot_
  • Собирается только общий чат — личные сообщения (/msg, /tell, /w) не собираются никогда, и никакого переключателя для этого нет
  • Новые параметры upload_chat / chat_bot_names / chat_poll_ms; старые файлы конфигурации работают без изменений и берут значения по умолчанию
v1.9.6 Сайт 2026-09-25

Веб-чат запущен: двусторонняя связь с игровым чатом

  • Под веб-картой появился чат: сообщения в общем чате игры, входы и выходы, смерти и полученные достижения показываются на сайте в реальном времени, у каждого — время отправки
  • Работает в обе стороны: написанное в веб-чате появляется в общем чате игры с приставкой [网页]; внутри игры и на сайте видно одно и то же имя (привязанного персонажа), так что выдать себя за другого не получится
  • Без входа чат не виден — не спрятан в интерфейсе, а сервер не отдаёт ни одного байта; писать можно только после входа и привязки игрового персонажа
  • Чат сгруппирован по раундам работы сервера: можно переключаться между прошлыми раундами, и записи переживают перезапуск
  • У каждого сообщения есть аватар и время отправки; свои сообщения можно отозвать, на чужие — пожаловаться
  • В админке появилось «управление чатом»: удаление сообщений (сразу и на сайте, и в игре), разбор жалоб, запрет писать и журнал действий (при удалении исходный текст сохраняется для разбирательства)
v1.9.5 Сайт 2026-09-25

Фильтр истории по типу, месяцу и версии

  • Историю обновлений теперь можно фильтровать: три счётчика сверху (сайт / мод / сервер) стали кликабельными — один клик показывает только этот тип, второй снимает фильтр
  • Добавлены фильтр по месяцу и поиск по версии — ввод «1.9» выводит с 1.9.0 по 1.9.4, условия можно совмещать
  • Состояние фильтра хранится в адресе, поэтому ссылку можно передать — открывший увидит тот же результат
  • Счётчики остаются общими числами (при фильтрации не уменьшаются), плюс новое сообщение «по этим фильтрам обновлений нет»
v1.5.2 Мод 2026-09-25

Метрики сервера прямо в списке TAB

  • Новое семейство подстановок %cloudridge:*% (18 штук: TPS, MSPT, чанки, сущности, память, CPU, скорость сети, время работы) — список TAB может показывать эти данные напрямую
  • Используется тот же сбор, который мод уже ведёт — ничего не собирается дважды; подстановки читают кэш в момент отрисовки, потому что отрисовка идёт постоянно, и чтение файлов или запуск процессов там подвесили бы сервер
  • Без мода TAB всё безопасно: регистрация изолирована, а отсутствующие значения показываются пустыми, а не обманчивым 0
v1.5.1 Мод 2026-09-25

Счётчики сети работают, лог стал тише

  • Сетевой трафик всегда показывал 0: двух искомых интерфейсов нет ни в одном стандартном JDK, поэтому этот код не мог работать в принципе. Теперь используется источник, который система действительно даёт, а разбор идёт по структуре, а не по подписям — работает и в неанглийской системе
  • Сбор перенесён в фоновый поток: этому источнику нужен подпроцесс, а в основном потоке он давал бы всплески тиков
  • Добавлен переключатель «записывать снимок каждого heartbeat», по умолчанию выключен; включённый, пишет только при реальном изменении значений
v1.9.4 Сайт 2026-09-25

Исправление входа, страховка бэкапов и документация API

  • Двухэтапная аутентификация в панели снова работает. Причина была в транзакции записи, подтверждение которой молча пропускалось на используемой сервером версии PHP: коды просто не попадали в базу. Письмо приходило, но при вводе кода появлялось «сначала запросите код», а ограничение на повторную отправку тоже не срабатывало
  • Исправлены ещё три случая той же ошибки (поиск игроков, метрики heartbeat, журнал сессий)
  • Очистка бэкапов теперь использует отдельные квоты: снимки перед обновлением и перед восстановлением больше не вытесняются обычными бэкапами, а выгруженные вручную не удаляются автоматически
  • Публичный API игроков игнорировал параметр поиска: при более чем 500 игроках никого ниже 500-го места найти было нельзя. Теперь поиск по подстроке, заодно закрыта дыра с подстановочными знаками
  • Слишком большие запросы больше не показывают пустую страницу, а выдают понятное сообщение
  • Документация API теперь описывает все 5 публичных эндпоинтов только для чтения
  • Ссылка «вернуться к логину и паролю» в панели ведёт на нужный шаг
v1.21.11 Сервер 2026-09-25

Сервер обновлён до Minecraft 1.21.11

  • Сервер обновлён с 1.21.1 до 1.21.11 вместе с Fabric Loader, Fabric API и всеми модами
  • Веб-карта снова открывается: конфигурация BlueMap оставалась в старом формате, из-за чего весь плагин отказывался загружаться
  • Все видимые игроку номера версий на сайте и в моде теперь 1.21.11
  • Список TAB переработан: цвета теперь соответствуют сайту (голубой / зелёный), у каждого игрока показан пинг в миллисекундах, а в подвале — TPS, MSPT, память, чанки, сущности и CPU разом
  • MOTD переработан: градиент в фирменных цветах, убраны два оставшихся английских текста, а во всплывающей подсказке теперь сайт и группа QQ
  • Все видимые обозначения версии теперь 1.21.11
v1.5.0 Мод 2026-09-24

Поддержка Minecraft 1.21.11

  • Мод теперь рассчитан на Minecraft 1.21.11 (Fabric Loader 0.19.5 / Fabric API 0.141.6+1.21.11)
  • Проверка прав на команды переведена на список операторов сервера: прежний интерфейс удалён в 1.21.11. Консоль и командные блоки сохраняют доступ как раньше
  • Подсчёт загруженных чанков переведён на новый интерфейс, написанный так, чтобы собираться и на старых, и на новых версиях
  • Остальные изменившиеся интерфейсы тоже перенесены, каждый сверен с официальными маппингами
v1.9.3 Сайт 2026-09-23

Сворачиваемая стена значков, пояснения к графикам и исправление 24-часового тренда

  • Система достижений выросла с 28 значков до 98 и разбита на 8 групп (выживание / строительство / исследование / редстоун / фермерство / бой / общение / коллекции), в каждой видно, сколько получено из общего числа; 35 из них напрямую соответствуют реальным игровым достижениям, а дата — это момент, когда игра их выдала
  • У каждой оси пятимерной радар-диаграммы появилось пояснение: что она измеряет, как считается и сколько считается максимумом, так что больше не нужно угадывать по форме; добавлена легенда — залитая фигура это вы, серая пунктирная линия это среднее по серверу
  • Исправлено расхождение на графике 24-часового тренда: в истории хранилось «сырое» число игроков от мода (вместе с постоянно подключённым ботом), а страница показывала уже отфильтрованное значение, поэтому они не совпадали; теперь heartbeat и график используют одно и то же число, а при наведении на линию видно время и число игроков
  • Графики теперь переключают период: 24 часа / 7 дней / 30 дней / 1 год, так что состояние сервера видно с первого взгляда; пока сервер закрыт, линия разрывается, а не рисует эти дни как 0 игроков
  • Стену значков на странице игрока можно сворачивать: полученные показываются всегда (это ваш результат), а неполученные прячутся за заголовком группы или кнопкой «показать все» внизу; выбор запоминается, поэтому после перезагрузки вид тот же, а без JavaScript по-прежнему видны все 98
  • Исправлены записи сессий: метка «сейчас в игре» раньше смотрела только на наличие времени окончания, поэтому падение сервера или потерянное событие выхода оставляли её висеть, вплоть до «один человек онлайн в двух сессиях сразу». Теперь ориентир — список, который сервер сообщает в реальном времени; несовпадающие сессии показываются как «завершена аварийно» и закрываются автоматически, а повторное событие выхода больше не создаёт вторую сессию
  • Исправлено: значки «игрового прогресса» не загорались ни разу. Ключ, по которому шла проверка, содержал лишний префикс и не совпадал с названиями прогресса, которые присылает игра, поэтому все 35 реальных достижений всегда отображались как неполученные — они просто выглядели серыми, как те, что вы ещё не получили, и по странице это было незаметно. Теперь ключи совпадают: полученные загораются и показывают реальный день, когда игра их выдала
v1.9.2 Сайт 2026-09-22

Усилены безопасность и приватность, доработаны загрузки и интерфейс

  • Вход через QQ подключён: AppID, AppKey и адрес возврата настроены, он заработает сразу после одобрения приложения Tencent и включения переключателя в админке; до этого кнопка на странице входа не показывается, чтобы не было входа, который ничего не делает
  • Безопасность: каталог /storage/ больше нельзя открыть напрямую (там резервные копии базы, кеш скинов и другие файлы, которые не должны быть публичными)
  • Пароли администраторов в открытом виде, оставшиеся в базе, удалены — остался только зашифрованный хеш
  • Подтверждение персонажа теперь ограничивает неудачи: после нескольких неверных коротких кодов попытки временно блокируются, так что перебор не пройдёт
  • Фильтры игроков, проверка SVG и валидация полей переведены на белые списки и привязку параметров: проходит только явно разрешённое, а внешние данные больше не подставляются в запросы напрямую
  • Все 74 места вывода JSON на сайте получили флаги безопасного экранирования: данные, встроенные в страницы, больше не могут быть разобраны как разметка
  • Приватность: у переключателей видимости в профиле оставалось ещё 5 мест, где их можно было обойти (включая публичный API игроков, которому не нужен ключ); теперь всё закрыто — выключено значит выключено, в том числе в публичном API
  • Загрузка WebP: аватар, баннер, библиотека изображений, форум и другие — 8 мест принимают WebP напрямую
  • Исправлена настройка админки, где список разрешённых форматов сохранялся испорченным — строкой "array": именно из-за этого форматы загрузки переставали работать; теперь сохранение ничего не ломает
  • Время в игре везде показывается в часах (часы — основное число, дни — мелкой подписью); таблица лидеров показывает ровно тот столбец, по которому идёт сортировка
  • Поддержка старых браузеров: тепловая карта активности, полосы прогресса и светлый фон / кольцо фокуса в области загрузки больше не становятся прозрачными там, где нет color-mix()
  • На публичной странице игрока рядом с именем появился значок уровня (Lv.N), на узких телефонах он не вылезает за экран
  • Изображения бренда: логотип и иконки, перезаписанные тестовой картинкой, восстановлены; для брендовых изображений появились офлайн-архив и инструмент brand-restore.php, так что случайную перезапись теперь можно откатить сразу
v1.9.0 Сайт 2026-09-19

Центр игрока и переделанная загрузка изображений

  • Страница профиля переделана: прогресс, активность за эту неделю, значки достижений, след в сообществе и лента последних событий собраны на одной странице
  • Появился игровой уровень: он считается по общему времени в игре, один уровень за каждые 10 часов и начиная с Lv.1, и виден и на странице профиля, и на публичной странице игрока
  • Новые переключатели видимости: общее время в игре, последний вход, первое подключение и список игроков онлайн решаете вы сами, а выключенное не найти и на других страницах
  • Аватар и баннер теперь принимают картинку напрямую и хранятся в WebP (файлы меньше, загрузка быстрее); аватар обрезается по центру в квадрат, а баннер пропорционально уменьшается до 1920×1080
  • Картинки могут быть в PNG / JPG / WebP / GIF; для AVIF появится подсказка сначала сохранить файл как PNG или WebP
  • Появилась библиотека изображений: загруженные картинки управляются в одном месте в админке, видно размеры, вес и где они используются
  • Загрузка стала безопаснее: тип определяется по настоящему содержимому файла, поэтому подделки с переименованным расширением отклоняются всегда; попытки выйти за пределы папки загрузок блокируются, SVG проходит только по списку разрешённых, а нигде не используемые осиротевшие файлы убираются
  • Привязка игрового персонажа теперь такая: заявка на сайте, затем в игре /cdr claim с коротким кодом, и подтвердить может только сам этот персонаж
  • На странице профиля появился 3D-просмотр скина; карта сида и карта сервера теперь работают по HTTPS
v1.9.1 Сайт 2026-09-19

Таблица прав переделана (по модам, которые реально стоят на сервере)

  • Таблицу прав переделали по модам, реально установленным на этом сервере: остались только пункты с настоящим нодом прав, и галочка действительно работает
  • Возможности, для которых мода нет (регионы, /hat, /back, цвета чата и так далее), убраны из таблицы; ниже честно написано, чего не хватает и какой нод вписать в будущем
  • У каждого права теперь прямо сказано, что оно реально даёт в игре, так что режим наблюдателя, например, никогда не открывает заодно творческий режим
  • Творческий режим стал отдельным пунктом: у владельца и команды он сохраняется без второго подтверждения, у остальных групп сначала появляется окно подтверждения. Аккаунты сайта владельца и команды теперь тоже могут входить в админку напрямую
v1.8.2 Сайт 2026-09-18

CloudRidge синий и более надёжный вход

  • Палитра сайта стала «синий CloudRidge»: цвета взяты прямо из логотипа сервера, сайт и логотип больше не спорят друг с другом
  • Починена проверка на человека, которая не проходила вообще ни у кого в продакшене (за обратным прокси не было настоящего IP, и ограничение запросов считало всех посетителей одним человеком)
  • Если проверка уже пройдена, а страница не переходит, кнопка отправки больше не залипает; через 8 секунд она оживает
  • Кнопки на первом экране главной больше не вылезают за экран на телефоне
v1.8.1 Сайт 2026-09-18

Проверка на человека обновилась

  • Проверка на человека перешла на ALTCHA 2.x, а как запасной вариант появилась картинка с кодом: если браузер не может посчитать решение, просто введи символы с картинки
  • Регистрация, заявки в вайтлист и повторная отправка кодов тоже под проверкой на человека, это мешает тратить наш лимит через чужую почту
  • На главной появилась кнопка «вступить в нашу группу QQ» в один клик, QQ открывается и на компьютере, и на телефоне
  • Иконки сайта теперь есть во всех размерах, так что «добавить на главный экран» на телефоне получит нормальную иконку
v1.8.0 Сайт 2026-09-18

Достижения, запоминание устройств и новый вид

  • На страницах игроков появились значки достижений и радар способностей, сразу видно, в чём человек силён
  • Появилось «запомнить это устройство»: отмечаешь галочку и 30 дней не надо входить заново (смена пароля или выход на всех устройствах сразу это отменяют)
  • У входа в админку появился второй шаг с кодом на почту и офлайн-ключ восстановления на случай, если почта не доходит
  • Страница заявки в вайтлист теперь показывает разное в зависимости от статуса: на рассмотрении, одобрена или причина отказа и форма для повторной отправки
  • Весь сайт перешёл на палитру зелёного и туши, взятую из логотипа сервера, заголовки стали с засечками, стало спокойнее и просторнее
  • Иконки разделов форума больше не emoji (на некоторых системах они показывались пустыми квадратами), теперь это свои иконки
v1.7.0 Сайт 2026-09-18

Поиск по гайду и живые данные

  • В гайде по серверу появился поиск по заголовку или тексту
  • В боковой панели гайда появился блок «сервер в реальном времени»: версия, загрузчик и версии модов видны, не уходя со страницы
  • У списка команд и списка модов есть свой адрес, так что их удобно скидывать новичкам
  • На телефоне боковая панель гайда встаёт над текстом, и блок с живыми данными больше не занимает весь экран
v1.6.0 Сайт 2026-09-18

Синхронизация с сайтом скинов

  • Подключена синхронизация с сайтом скинов: регистрируешься там под тем же ником, загружаешь скин, и сайт может забрать его сам
  • Когда страница игрока впервые встречает незнакомый ник, она ищет его на сайте скинов и сразу показывает результат
  • В профиле появилась кнопка «синхронизировать скин заново», после смены скина там хватит одного нажатия
  • Адрес сайта скинов задаётся в админке (по умолчанию LittleSkin), так что для смены сайта код править не нужно
v1.4.0 Сайт 2026-09-18

Аккаунт и безопасность

  • Профиль переделан: появились разделы «Аккаунт и безопасность» и «Персонализация», там история входов, смена привязок и пароля
  • Поддерживается «выйти на всех устройствах»: после смены пароля или выхода в другом месте остальные устройства разлогиниваются сразу
  • У кодов подтверждения появилась привязка к устройству: не больше 5 в день с одного устройства, так скрипты не выжигают лимит SMS и почты
  • Если почта или телефон ещё не подтверждены, сверху один раз появится напоминание; без этого нельзя подать заявку в вайтлист, писать на форуме и привязывать персонажа
  • В профиле видно сводку по твоим следам на всех серверах
v1.5.0 Сайт 2026-09-18

Пересобранный релиз

  • Полностью совпадает с v1.4.0, просто заново собрали релизный пакет, ничего не изменилось
v1.3.8 Сайт 2026-09-17

Описаны способы входа

  • На странице входа по паролю перечислены все три вида аккаунта (почта, телефон, привязанный игровой ник), ровно как оно и работает
  • Переводы подтянуты
v1.3.7 Сайт 2026-09-17

Фоновые картинки для страниц входа

  • Страницы входа, регистрации и восстановления пароля поддерживают свою фоновую картинку (загружается из админки), карточки сделаны матовым стеклом
  • В разделе «Внешний вид» можно загрузить большую картинку главной, логотип сайта, иконку браузера и фон страниц входа
  • Кроме почты и телефона, войти можно по уже привязанному игровому нику
v1.3.6 Сайт 2026-09-17

Проверка ключа SMS вернулась

  • Проверка ключа вернулась, но предупреждает только в том случае, когда действительно ошибка: вписали 32 шестнадцатеричных символа, то есть MD5, а не KEY в открытом виде
  • В предупреждении прямо написано, где заново скопировать KEY, а не просто «неверный ключ»
v1.3.5 Сайт 2026-09-17

Исправлена подсказка про ключ SMS

  • Убрано ложное предупреждение о длине ключа SMS (требовалось 32 символа, хотя настоящий ключ платформы — 16)
  • Правильный ли ключ, теперь отвечает сама платформа SMS, а не догадки по длине
v1.3.4 Сайт 2026-09-17

Вход починен и усилен

  • Починен вход по почте и телефону с паролем, который всегда падал с ошибкой (раньше отдавал 500)
  • Слишком много неудачных попыток теперь даёт временную блокировку, так что скрипты с подбором пароля не пройдут
  • Если текущая страница входит в группу навигации, кнопка группы тоже подсвечивается, и сразу видно, где ты
  • Разделитель на странице входа отделяет вход через QQ от входа по почте, перепутать их больше не получится
v1.3.3 Сайт 2026-09-16

Самопроверка настроек SMS

  • В настройках SMS появилась бесплатная самопроверка: проверяет логин, ключ и шаблон, не отправляя ни одного сообщения
  • Она прямо говорит, что не так: логин с ключом или шаблон ещё не прошёл модерацию, гадать не нужно
  • Плановая задача периодически проверяет статус шаблона SMS и напоминает включить его после одобрения
v1.3.2 Сайт 2026-09-16

Поддержка нескольких серверов

  • Несколько серверов: у каждого можно задать тип (выживание, креатив, мини-игры), и сайт показывает разное содержимое по типу
  • Креативные серверы показывают панель строительства, серверы мини-игр показывают информацию о матчах и рейтинг PvP
  • Изменения вайтлиста и банов подтверждаются по каждому серверу, так что молча не синхронизироваться больше не получится
  • В админке можно отправить изменение только на один конкретный сервер
v1.1.6 Мод 2026-09-16

Поддержка типов сервера

  • Новая настройка server_type: выживание, креатив, мини-игры, лобби или другое, и сайт показывает разное в зависимости от типа
  • Отправка накопленной статистики снова исправлена, итоги на сайте точнее
  • Описания настроек и игровые сообщения дописаны
v1.3.1 Сайт 2026-09-16

Журнал действий и центр сообщений

  • В админке появился журнал действий: кто, когда и что менял, всё можно найти, а не копаться в базе данных
  • Появился центр сообщений: история отправки писем и SMS, так что на «мне не пришёл код» можно ответить сразу
  • Новые массовые инструменты для вайтлиста: добавить, убрать или вычистить устаревшие записи разом
  • Починены права групп пользователей, которые никогда не совпадали; теперь настройки прав группы реально работают
  • На главной админки появился график за 14 дней: новые пользователи, заявки в вайтлист, посещения и новые игроки
v1.3.0 Сайт 2026-09-16

Скины игроков и сгруппированная навигация

  • Скины игроков: загружаешь скин 64×64, и профиль со страницей игрока показывают его в 3D (без подключения внешних библиотек)
  • В профиле появился раздел «Мой скин», где его можно в любой момент загрузить или удалить
  • Навигация в шапке теперь сгруппирована в выпадающие меню (Серверы, Сообщество) и больше не переносится на две строки на телефоне
  • Починены блоки вроде [[mods]] и [[server-facts]], которые на некоторых страницах гайда показывались сырыми скобками
  • В подвале появились номер регистрации ICP и значок регистрации в полиции
v1.2.3 Сайт 2026-09-13

Канал SMS и целая пачка исправлений

  • Подключены коды подтверждения по SMS: регистрация по телефону и восстановление пароля работают (достаточно заполнить настройки платформы в админке)
  • Починено «поменял настройку в админке, а сайт её игнорирует»: настройки почты, SMS, бота и вайтлиста теперь действительно применяются
  • Починена страница подробностей узла в статусе, которая отдавала 500; для неизвестных узлов теперь нормальное сообщение
  • Починены причины бана, которые показывались по-английски как «Banned by an operator.»; теперь они выводятся переведёнными
  • Если нажать на заявку в вайтлист без входа, сайт сначала предложит войти и потом вернёт обратно на заявку
v1.2.2 Сайт 2026-09-13

Аккаунты и заявки в вайтлист онлайн

  • Система аккаунтов: регистрация по коду на почту или телефон, вход по паролю и восстановление забытого пароля
  • Заявки в вайтлист онлайн: заполняешь игровой ID и хотя бы один способ связи, а после одобрения всё само попадает на сервер
  • Если указан номер QQ, ты в группе и уровня QQ хватает, бот в QQ одобряет заявку автоматически
  • Владелец и команда одобряют заявки, добавляют и удаляют вайтлист и правят конфиг сервера из плавающего шарика в углу
  • В админке появилась кнопка «опубликовать новость об обновлении», теперь каждое обновление записывается само
v1.1.5 Мод 2026-09-13

Синхронизация вайтлиста и прокси конфига

  • Синхронизация вайтлиста: одобренные на сайте заявки сами попадают в вайтлист сервера, вручную добавлять не нужно
  • Файлы конфига сервера можно править из админки сайта, перед изменением оригинал автоматически сохраняется
  • Появилась очередь задач: сайт передаёт операции моду, а тот возвращает результат выполнения
v1.2.1 Сайт 2026-09-13

Инструменты и переделанная страница статуса

  • Новая страница инструментов: генератор градиентного текста, проверка статуса сервера, проверка адреса сервера, перевод тиков и поиск игрока
  • Страница статуса переделана: доступность за 24 часа, список сервисов и состояние машины, а каждый узел открывается в подробностях
  • Один аккаунт может привязать несколько игровых персонажей и выбрать основного (в игре тоже переключается через /cdr main)
  • Галерея построек перешла на просмотр большими картинками, так гораздо приятнее листать
  • Список команд и список модов в гайде теперь подтягиваются с сервера сами, вручную их переписывать не надо
v1.1.4 Мод 2026-09-13

Больше правил сервера и двуязычные сообщения

  • Правила сервера отправляются полнее: игровые правила вроде сохранения вещей и выпадения при смерти идут вместе со статусом, так что страница гайда точнее
  • Сообщения игровых команд есть на китайском и английском и подстраиваются под язык клиента игрока
v1.1.3 Мод 2026-09-13

Более точные данные игроков

  • Исправлены чтение и отправка накопленной статистики, итоги на сайте больше не расходятся с сохранением
  • AFK-болванки и боты отсеиваются ещё на этапе сбора, в рейтингах сайта они не появляются
v1.2.0 Сайт 2026-09-13

Данные игроков с самого открытия

  • Подключена статистика из сохранения сервера: время в игре, смерти, убийства, добытые и поставленные блоки, пройденное расстояние с момента открытия
  • Список игроков можно сортировать по общему времени в игре, а каждая запись открывает подробную страницу
  • AFK-болванки и боты определяются и исключаются, так что больше не занимают места в рейтинге
  • В списке банов появился раздел с забаненными IP и указанием, откуда адрес
  • Починено отображение MSPT; теперь у TPS и MSPT своя отдельная шкала
v1.1.2 Мод 2026-09-13

Статистика игроков и список модов

  • Игроки онлайн теперь отправляются с UUID, так что после смены ника один человек не превращается в двух
  • Читает статистику из сохранения и отправляет итоги с открытия сервера: время в игре, смерти, убийства, добытые и поставленные блоки, пройденное расстояние
  • Автоматически отправляет список установленных модов и список доступных команд (десятки подмодулей Fabric API отфильтрованы)
  • Забаненные IP тоже отправляются и показываются на сайте отдельным разделом
v1.1.1 Сайт 2026-09-13

Запасные аватары и новая админка

  • Больше никаких экранов с битыми картинками, когда аватар не загрузился: если внешний аватар недоступен, мы рисуем его из первой буквы ника
  • Новый вид админки: верхняя панель и боковое меню с поиском, нужную настройку находишь по ключевому слову
  • Починена проверка на человека, которая падала с ошибкой, и страницы, которые не открывались на некоторых серверах
  • Починена ловушка с редиректом адреса API мода: API выглядел рабочим, а данные не приходили; теперь самопроверка в админке прямо об этом пишет
  • Живая карта теперь показывает понятное сообщение, когда не может подключиться, а не пустое поле
v1.1.1 Мод 2026-09-13

Защита от редиректа адреса API

  • Если адрес API перенаправляется через 301 или 302, мод теперь сообщает об ошибке и показывает правильный адрес, а не теряет данные молча
  • Причину неудачной отправки видно прямо в игре через /cdr status
v1.1.0 Сайт 2026-09-13

Аккаунты и галерея построек

  • Новая галерея построек: загружаешь скриншоты того, что построил, а остальные могут поставить лайк или открыть картинку в полном размере
  • Новый список игроков и страницы игроков: время в игре, смерти, добытые блоки и пройденное расстояние сразу видно
  • Появилась админ-панель: новости, страницы, галерея, пользователи и настройки редактируются прямо в браузере
  • Несколько языков и цветовых схем, а светлую и тёмную тему можно переключать самому
  • Записи о банах открыты, включая результат по каждому случаю
v1.1.0 Мод 2026-09-12

Первая версия мода наблюдения

  • Каждые 30 секунд отправляет на сайт состояние сервера: онлайн, TPS, MSPT, CPU, память, диск и сеть
  • Отправляет список банов и события входа и выхода игроков, по ним сайт считает время в игре
  • Добавляет игровую команду /cdr bind <code> для привязки аккаунта, а также /cdr status и /cdr reload для админов
  • Все сетевые запросы идут в фоновом потоке, так что недоступный сайт никогда не тормозит сервер
v1.0.0 Сайт 2026-09-12

Сайт официально запущен

  • Сайт открыт для всех: главная, статус сервера, гайд для игроков, список банов, новости и форум
  • На главной в реальном времени видны онлайн, TPS и нагрузка на машину, данные присылает серверный мод каждые 30 секунд
  • Вход через QQ в один клик: после входа можно привязать игрового персонажа и писать на форуме
  • Никаких внешних CDN, проверка на человека тоже хостится у нас, поэтому страницы открываются быстрее
  • Нормально работает и на телефоне, и на компьютере, а на узком экране меню сворачивается само

Даты — это дата выхода соответствующей версии. Нашёл новую проблему — напиши на форуме или сразу владельцу сервера.