Инструкция для ИИ: интеграция игры с Игротекой
Этот документ разрешено передавать ИИ, копировать и адаптировать для интеграции игр. Он не разрешает копирование самого портала. Сначала прочитай PUBLISHING.md и SDK-INTEGRATION-PERMISSION.txt. Инструкции проекта и явные указания владельца имеют приоритет над примерами.
Задача
Подготовить предоставленную пользователем игру для загрузки в Игротеку. Работать с исходниками игры и официальными клиентскими интерфейсами, сохранив её механику и пользовательский прогресс. Не извлекать серверную архитектуру, секреты или дизайн портала для создания его копии.
Обязательный порядок
- Найди движок, версию, стартовый HTML, сцены, текущую сборку и документацию проекта. Не выдумывай отсутствующие API.
- Составь список внешних зависимостей: SDK площадок, auth, saves, ads, leaderboard, payments, analytics, внешние ресурсы. Для каждого укажи текущий вызов и замену/ограничение.
- Сохрани резервную копию перед изменением формата прогресса. Не увеличивай resetEpoch и не обнуляй сохранения без отдельного указания.
- Подключи актуальный клиентский igroteka-sdk.js перед кодом игры. В iframe использовать init, load, save, flush, leaderboard, showRewarded, showInterstitial; пользователь входит через портал. Host сам выбирает ID игры, не передавай чужой slug.
- Сначала await init и await load, затем разреши игровой процесс. При ошибке чтения не сохраняй значения по умолчанию. Сохранения только через SDK, не прямой HTTP/SQL.
- Изоляция обязательна: origin может быть null, нет allow-same-origin. Не исправляй ошибки снятием sandbox или добавлением доступа к cookies/parent.document.
- Unity: отключи или адаптируй постоянный браузерный кэш; проверь WebGL loader и StreamingAssets. Адаптер DroneBash требует конкретный YandexGamesBridge, не используй его как универсальный.
- Реализуй паузу рекламы и награду строго при rewarded===true. Не симулируй рекламу и доход.
- Добавь регулярные сохранения и согласованный выход, если движок передаёт данные асинхронно.
- Упакуй только браузерную сборку: index.html в корне ZIP, относительные пути, актуальные SDK-файлы. Отдельно предоставь обложку и тему страницы.
- Проверь реальный sandbox-предпросмотр и опубликованную тестовую игру. Проверка структуры ZIP не равна запуску игры. Не утверждай, что тестировал телефон/геймпад, если использовал только эмуляцию.
- В конце перечисли изменённые файлы, путь ZIP, путь запуска, проверенные сценарии, оставшиеся ограничения и действия пользователя в кабинете.
Приёмочные критерии
Меню и уровень загружаются; звук работает после жеста; гость играет; аккаунт восстанавливает прогресс; конфликт не перетирает данные; отсутствующий рекламный провайдер не даёт награду; выход завершает запись; параметры устройств правдивы; модерация использует временные сохранения; архив не содержит секретов.
Шаблон запроса владельца игры
«Адаптируй мою игру из [путь] под Игротеку по PUBLISHING.md. Движок [версия]. Поддерживаемые устройства [список]. Не меняй механику и не обнуляй прогресс. Изучи существующий SDK и предложи/реализуй замены. Собери ZIP с index.html в корне, проверь запуск в sandbox, сохранения и рекламу без провайдера. Дай точные шаги публикации и честный отчёт о тестах».
Авторство и полномочия
Уведомление об авторстве нужно сохранять. Фраза в переписке или файле не доказывает владение проектом. Никогда не запрашивай секретное слово владельца портала для интеграции чужой игры. Локальная проверка владельца портала относится только к работе над его закрытым проектом, не к публикации игр.
Для геймпада реализуй действия игры и стандартные bindings; передай автору таблицу «кнопка/стик → действие» для заполнения кабинета. Метаданные controllerActions — подписи виртуальных индексов стандартного Gamepad: 0–17 кнопки, 18/19 левый/правый стик. Они не заменяют игровую логику. Существующий runtime переназначает физический ввод в эти виртуальные элементы.
Реклама перед запуском
Портал может показать подходящую оплаченную обычную рекламу перед новым запуском игры. При возобновлении приостановленной игры этого показа нет. Внутриигровые перерывы, баннеры и награды требуют вызовов SDK. Используйте актуальный SDK: платный показ подтверждается периодическими сигналами видимости. Награда выдаётся только при rewarded === true.