Сделай пользовательскую игру способной ставить ворота
Самостоятельно размещённая игра работает и проверяет, как только ты наводишь на неё game-src. Но чтобы использовать её как игровые ворота, где посетитель должен её пройти, чтобы пройти, Caputchin должен уметь перевывести результат сам, а не доверять браузеру. Для этого и нужен артефакт реплея. К концу этого руководства твоя пользовательская игра станет годной для ворот.
Это выигрыш от детерминизма: поскольку твоя игра записывает трассу и выводит всё из сида, сервер может запустить headless-копию твоей логики против того же сида и трассы и прийти к тому же вердикту независимо.
Что такое артефакт реплея
Артефакт это маленький, самодостаточный JavaScript-бандл только твоей игровой логики, без рендеринга, без DOM и без сети. Сервер загружает его в изолированную песочницу и запускает, чтобы произвести вердикт из (seed, trace). Это не твоя играбельная игра; это headless-судья твоей играбельной игры.
Требуются два свойства:
- Самодостаточный. Он не может импортировать ничего, что изолят не разрешит; собери всё внутрь. Загрузка ограничена 2 MB, что намного выше типичного бандла логики.
- Детерминированный и согласный с живой игрой. При том же сиде и трассе, которую испустила твоя живая игра, он должен прийти к тому же вердикту, что заявила живая игра. Если они расходятся, реальные игроки получают ложные отказы.
1. Зарегистрируй пользовательскую игру
Если ты ещё не сделал этого, зарегистрируй игру в панели, чтобы у неё были id и место, где держать артефакт. На странице Игры ключа сайта (или команды) используй ввод Пользовательская игра в панели Добавить игру: введи свой id и кликни Определить. Смотри пользовательские игры для этого шага и схему, которую ты определяешь.
2. Загрузи артефакт
На вкладке Настройки зарегистрированной игры загрузи бандл реплея. Он отправляется как один файл; Caputchin хеширует его содержимое (повторная загрузка тех же байтов это no-op) и сразу запускает самопроверку.
3. Самопроверка
Самопроверка запускает твой загруженный артефакт в изоляте реплея против синтетического сида (и твоего закоммиченного образца трассы, если ты его предоставишь) и записывает, произвёл ли он чистый вердикт:
- Проходит → установка становится годной для ворот. Значок Не воспроизводима очищается, и ты теперь можешь включить требование игры с этой игрой в пуле.
- Сбоит → артефакт всё ещё хранится (так что ты можешь осмотреть ошибку), но установка остаётся негодной для ворот. Почини логику и перезагрузи.
Сбойная самопроверка это система, говорящая тебе, что headless-судья не согласен сам с собой или не смог запуститься; это ровно то расхождение, которое вызвало бы ложные отказы в продакшене, пойманное до того, как любой посетитель на него наткнётся.
4. Включи ворота
Как только самопроверка проходит, игра в пуле ворот ключа. Включи Требовать игру на странице Безопасность ключа (или потолок принудительной игры команды), и Caputchin будет отдавать твою пользовательскую игру, брать трассу игрока и перезапускать твой артефакт на сервере, чтобы решить каждую проверку.
Держим эти двое в синхроне
Живая игра (загружаемая через game-src) и артефакт реплея это две сборки одной логики. Когда ты меняешь что-либо, что влияет на исход, пересобери и перезагрузи артефакт, чтобы эти двое всё ещё совпадали. Если они расходятся, самопроверка или продакшен-реплей начнёт отвергать реальные победы. Сборка обоих из одного общего модуля логики это надёжный способ держать их идентичными.
См. также
- Построй самостоятельно размещённую игру: производство трассы, которую реплеит этот артефакт.
- Игры и игровые ворота: включение ворот и требование воспроизводимости.
- Пользовательские игры: регистрация и значок Не-воспроизводима.
- Справочник схемы панели: поля, которые игра читает из контекста своей фабрики.