Публичный тест · demo.en.cx
Портал переписан
целиком
Новый интерфейс на десктопе, планшете и телефоне. Новый игровой движок с живым состоянием по WebSocket. Открытое документированное API. Всё это уже работает на демо-домене — и до переключения сети мы просим проверить его в бою.
Ниже — что появилось, что изменилось и на что смотреть в первую очередь.
перенесён
открытого API
1920 · 768 · 360
из приложения
в движке
и загружается обратно
Статус
Работа ещё идёт Прямо сейчас мы правим мелкие ошибки и возвращаем то, что при переносе осталось за кадром. Ничего из того, чем вы пользовались, не потеряется — весь привычный функционал портала будет перенесён к моменту переключения. Если чего-то не хватает или что-то ведёт себя не так — это ровно то, ради чего идёт тест: напишите нам в бот @encounter_bugs_bot.
Что изменилось по сути
Портал остался тем же Encounter: те же игры, те же правила, те же рейтинги и звания. Изменилось то, как он устроен изнутри и как ощущается снаружи.
Меню, вкладки, фильтры и списки открываются мгновенно, позиция и введённое не теряются.
Десктоп, планшет и телефон — три полноценных макета, а не урезанная «мобильная версия».
Код сокомандника, смена уровня, правка сценария автором — движок сообщает об этом сам.
Единый контракт для сайта, мобильных приложений и партнёрских клиентов.
Двухфакторный вход по приложению-аутентификатору: QR при подключении, код-подтверждение при входе, отключение в профиле.
Уровни собираются так же быстро, как правится таблица: коды и бонусы вставляются десятками.
Что видит участник
Главная, календарь, карточка игры и вход собраны заново по единому дизайну: одна сетка, один набор элементов, одинаковое поведение во всех разделах.
Карточки игр
- Обложка есть всегда. Если автор не загрузил постер, карточка берёт иллюстрацию зоны игры — «Схватка», «Точки», «Кэшинг» и другие. Вариант закреплён за игрой, поэтому одна и та же игра всегда узнаётся, а соседние карточки в списке различаются.
- Статус читается сразу: тип игры, онлайн или офлайн, командами или в одиночку, обратный отсчёт до конца приёма заявок.
- Подтверждение участия — с карточки, без захода в игру.
- Автор игры — ссылка на профиль, а не просто подпись.
Блок «Важное об игре»
- Конструктор вкладок. Автор сам решает, из каких пунктов состоит блок: добавляет, переименовывает и удаляет их — жёсткого набора полей больше нет.
- Содержимое — с оформлением: в каждом пункте свой текст со ссылками и разметкой.
- Читается с одного взгляда: слева список пунктов, справа текст выбранного; на телефоне пункт раскрывается на месте.
Разделы вокруг игры тоже переехали: команды и профили, рейтинги и звания, правила и FAQ, история проекта, карта сайта. Пополнение баланса — YooMoney и Xsolla.
Телефон и планшет — не «версия для мобильных»
Раскладка перестроена под три ширины: 1920, 768 и 360. Это один и тот же сайт с одними и теми же данными — меняется только компоновка. На телефоне действия входа вынесены в нижнюю панель, меню и поиск живут в шапке, списки становятся одноколоночными.
Игра идёт в реальном времени
Главное изменение внутри игры: браузер больше не «спрашивает сервер, не изменилось ли что-нибудь». Соединение держится открытым, и состояние уровня приходит само — сразу после того, как оно изменилось.
Состояние приходит само
Сразу после подключения сервер присылает снимок уровня — ничего запрашивать не нужно. Дальше приходят только изменения: код сокомандника, закрытый сектор, смена уровня, финиш, автопереход по таймауту, правка сценария автором по ходу игры.
Обрыв связи не стоит попытки
У каждой отправки кода есть собственный идентификатор. Если связь оборвалась и непонятно, дошёл код или нет, клиент повторяет отправку с тем же идентификатором — в течение пяти минут сервер вернёт прежний результат и не спишет вторую попытку.
Таймеры не плывут
Блокировка ответов, автопереход и открытие подсказок считаются от абсолютных меток времени, а не от «сколько прошло с загрузки страницы». Свернули приложение, вернулись через час — отсчёт верный.
Связь под наблюдением
Канал проверяется служебными сигналами, разрыв виден в интерфейсе, переподключение происходит автоматически. Технические тексты вроде «сетевая ошибка» игроку не показываются — вместо них понятная плашка о потере связи.
Контракт задания для скриптов
Авторы оживляют задания своим JavaScript. Раньше такой скрипт разбирал вёрстку страницы. Теперь у движка есть документированный объект window.EN: снимок состояния уровня, подписка на обновления, серверное время, отправка кода и взятие подсказки. Сектора, подсказки и бонусы приходят готовыми данными, обновления — событиями на документе, время задано абсолютными метками, поэтому таймер рисуется локально и не плывёт.
Старые скрипты не заработают. Движок больше не подключает jQuery, и вёрстка у него другая — код, написанный под прежнюю страницу, придётся переписать на чистом JavaScript по контракту. Взамен появляется опора, которая не поедет от следующей правки дизайна: у контракта есть номер версии. Описание контракта
Всё на месте в игровом экране
Задание, сектора и коды, бонусы, подсказки и штрафные подсказки, сообщения автора, история ввода, счётчик оставшихся попыток и подсказка «осталось закрыть N секторов» — с разбором «верно / неверно» после каждой отправки.
Тем, кто пишет свой клиент: тот же адрес движка работает и как обычный HTTP-запрос — WebSocket включается апгрейдом соединения. Ядро обработки у обоих транспортов одно, поэтому результат отправки кода не зависит от того, как вы подключились. Полное описание кадров — https://api.en.cx/docs/engine-websocket. Тем, кто пишет скрипты в заданиях, — контракт задания.
Сценарий собирается быстрее
Самая заметная часть работы автора — забить в редактор сотни кодов и десятки бонусов. Здесь появилось три способа делать это быстро, и все три работают поверх привычного редактора уровня.
Табличный вид
Переключатель «классический / таблица» в каждом блоке уровня. В таблице объекты правятся, добавляются и удаляются прямо в сетке, без диалогов.
Правка применяется сразу, сохранение уходит фоном; у строки видно состояние «сохраняется / сохранено / ошибка». Удаление можно отменить в течение десяти секунд.
Вставка пачкой
Сценарии пишут в таблицах — значит, вставлять надо прямоугольный кусок листа, а не строку. Выделили в Google Sheets колонку кодов, скопировали, вставили в редактор — получили N секторов или N бонусов.
Есть предварительная проверка: сначала видно, что получится, и только потом запись.
Обмен через XLSX
Вся игра или отдельный уровень выгружаются в книгу с листами «Уровни», «Задания», «Подсказки», «Бонусы», «Сектора+Ответы» — правите в Excel и загружаете обратно.
Есть готовые образцы файлов, а импорт показывает ход обработки построчно и предупреждает о спорных местах.
И ещё в работе с игрой
- Копирование и перенос игры между доменами. Игра со всеми уровнями, авторами и судьями переносится на другой ваш домен — раньше сменить домен у игры было нельзя вообще.
- Сессии игроков. Отчёт по каждому участнику: сколько было сессий, из скольких сетей и с какого числа устройств играли. Отдельный фильтр показывает только помеченные записи — инструмент для разбора спорных ситуаций и честной игры.
- Статистика — по уровням и по игрокам, сортировка по моменту прохождения или времени на уровне, полноэкранный режим для проектора.
- Коррекции результатов, бонусы и штрафы, снятия и призовой фонд живут в тех же вкладках игры.
Открытый и документированный контракт
Сайт не имеет привилегий: он ходит в то же API, что доступно мобильным приложениям и партнёрским клиентам. Документация открыта и всегда соответствует работающему серверу — она собирается из самого кода. Адрес API — https://api.en.cx.
| Что | Как устроено |
|---|---|
| api.en.cx | Единый адрес API для всех доменов сети: https://api.en.cx, интерактивная документация — /swagger, протокол движка — /docs/engine-websocket. |
| 476 маршрутов | 603 операции в 35 разделах — игры, участие, движок, статистика, мониторинг, команды, пользователи, финансы, магазин, объявления, медиа, форум, гостевая, рейтинги, поиск, локализация и администрирование. |
| X-En-Domain | Почти все данные принадлежат конкретному домену сети. Домен передаётся заголовком — один и тот же клиент работает с любым сайтом сети без пересборки. |
| Bearer JWT | Для мобильных и машинных клиентов: получили токен при входе, передаёте заголовком. |
| Cookie-сессия | Для браузера: ключ хранится в защищённой cookie, недоступной скриптам страницы. |
| Единый ответ об ошибке | Один формат для всех разделов — клиенту не нужно разбирать десяток вариантов. |
Вход и доступ
Скрипты в контенте ограничены
Оформление домена, описания игр и письма портала по-прежнему могут содержать свой HTML и скрипты — но им закрыт доступ к вашим данным через API портала.
Защита входа
Капча после нескольких неудачных попыток, ограничение частоты запросов, разблокировка входа с незнакомого адреса по письму или одноразовому коду из приложения-аутентификатора.
На что смотреть в первую очередь
Тест идёт на demo.en.cx — это отдельный демо-домен, боевые домены сети он не затрагивает. Пробуйте как обычно: заходите, записывайтесь, играйте, ломайте. Замечания присылайте в бот @encounter_bugs_bot. Особенно ценны наблюдения по этим сценариям.
Куда писать: телеграм-бот @encounter_bugs_bot. Просто отправьте сообщение — оно попадёт к команде. Регистрироваться и заполнять форму не нужно.
Что сообщать: адрес страницы, что делали, что ожидали увидеть и что увидели, устройство и браузер. Скриншот экрана целиком помогает больше всего — по нему сразу видно и раздел, и состояние игры; его можно приложить прямо к сообщению в боте.