Магазин в игре: витрины, товары и цены
Как работает готовый магазин iDos Games - витрины с ротацией товаров, цены в валюте игры или реальными деньгами, бесплатные подарки и лимиты покупок - и как настроить его в кабинете без кода.
Магазин - готовая система: экран магазина в игре и серверная логика покупок. Вы настраиваете витрины и товары в кабинете, а сервер при каждой покупке сам проверяет цену, лимиты и ротацию. Поэтому подделать покупку из игры нельзя, а свой сервер для магазина не нужен.
Что видит игрок
- Витрины вкладками. Первая секция витрины - карусель, остальные - сетки карточек.
- Бесплатный подарок дня, который подсвечивается, пока его не забрали.
- Таймеры на карточках: «обновится через», «откроется через», «распродано».
- Окно подтверждения покупки (на телефоне выезжает снизу).
- Анимацию «Получено»: награды летят к счётчикам балансов.
- Значок на вкладке магазина, когда игрока ждёт бесплатный товар.
Как устроен магазин
Магазин - это дерево: витрина → секции → слоты → товар.
- Товар - что продаётся: цена, награды, лимиты, метки («выгодно», «x2»). Товары лежат в общем каталоге.
- Слот - место на полке витрины. Только через слот товар можно купить: товар, который не стоит ни в одном слоте, не продаётся вовсе.
- Ротация: слот может показывать товар из набора и менять его по расписанию, как в ежедневном магазине. Ротацию считает сервер, поэтому у игрока на всех устройствах один и тот же магазин.
Цены
| Чем платит игрок | Как это работает |
|---|---|
| Валюта игры, предметы | Списываются с баланса игрока |
| Реальные деньги | Покупка в магазине приложений, сервер проверяет чек |
| Просмотр рекламы | Игрок тратит заработанный просмотр ролика (сборки с рекламой) |
| Ничего | Бесплатный товар; обязателен лимит, иначе сервер его не продаст |
Можно показать зачёркнутую «старую» цену, процент скидки сервер посчитает сам. У одного товара может быть несколько вариантов цены: например, за монеты или за кристаллы.
Лимиты покупок
- За всё время - например, стартовый набор один раз.
- В сутки - сбрасывается в полночь по UTC.
- Перезарядка - следующая покупка через заданное время.
- На одно окно ротации - лимит слота, пока на полке стоит этот товар.
Метку «первая покупка», «распродано» и таймеры сервер считает для каждого игрока сам.
Шаг 01Добавьте магазин в проект
В шаблоне idle-RPG магазин уже есть, с примером витрины. В любой другой проект его добавляет ИИ-кодер: напишите в чате «Добавь магазин». Он поставит готовую систему, а не будет писать магазин с нуля. Вкладка магазина появится у игроков, когда в нём будет что продавать.
Шаг 02Настройте товары и витрину
Откройте кабинет, выберите проект и перейдите в LiveOps → v2 → Магазин.
- На вкладке Товары создайте товар: название, цена, что получает игрок и лимит.
- На вкладке Витрины создайте витрину, добавьте в неё секцию и слоты и поставьте товары в слоты.
- Пресеты - общие настройки, которые можно применить ко многим товарам сразу.
Кабинет предупреждает о товарах без слота и о бесплатных товарах без лимита. Кнопка ИИ на странице открывает помощника: опишите словами, что продавать («набор из 500 монет за 0,99 $ и ежедневный бесплатный сундук»), он предложит правки, а вы проверите их и нажмёте Сохранить.
Шаг 03Проверьте и выпустите
Проверьте магазин в тестовой версии приложения. В живое приложение настройки уходят отдельным действием, поэтому выпуск кода их не перезапишет. Подробнее - публикация и ссылки.
Для разработчиков
Магазин работает через client.store из @idosgames/core. Экран рисуйте из getStorefront(): это витрина, уже
посчитанная для этого игрока (ротация, лимиты, таймеры). getDefinitions() - только конфиг, одинаковый для всех.
const res = await client.store.getStorefront()
if (!res.ok) return showError(res.error)
for (const store of res.data.Stores ?? [])
for (const section of store.Sections ?? [])
for (const slot of section.Slots ?? []) {
// Пустой слот приходит с Offer === null: рисуйте пустую рамку, чтобы полка не прыгала.
if (!slot.Offer) continue
drawCard(slot.Offer, slot.RefreshesAtUtc)
}
const buy = await client.store.purchase(offer.OfferID, 1, {
selectedOptionID: option.OptionID,
slot: { storeID: store.StoreID, sectionID: section.SectionID, slotID: slot.SlotID },
})- Если покупка вернула
OFFER_NOT_IN_ROTATION, витрина уже сменилась: перечитайте её без сообщения об ошибке. - Блокируйте кнопку «Купить», пока идёт запрос: каждый вызов
purchase- отдельная покупка. - Таймеры отсчитывайте от
ServerTimeUtcиз ответа, а не от часов устройства. nullв остатке лимита - «без лимита»,0- «закончилось».
Подробное описание полей - в навыке store-system, его отдаёт MCP-сервер SDK.
Частые вопросы
Почему товар есть в каталоге, но его нельзя купить?
Товар покупается только через слот витрины. Если он не стоит ни в одном слоте, купить его нельзя. Кабинет показывает такие товары отдельным предупреждением «Без слота».
Можно сделать бесплатный ежедневный подарок?
Да. Товар без цены - обычный бесплатный товар, но у него обязательно должен быть лимит, например один раз в сутки. Бесплатный товар без лимита сервер не продаст.
Нужно ли проверять покупку на своём сервере?
Нет. Цену, лимиты и ротацию проверяет сервер iDos Games при каждой покупке. Игра только показывает витрину и просит купить.
Работают ли скидки для премиум-игроков?
Да. Скидки и бонусы премиум-уровня сервер применяет сам. Что на самом деле списано и выдано, игра читает из ответа покупки.
Смотрите также
- Квесты в игре: ежедневные задания и наградыКак работают готовые квесты iDos Games - ежедневные, еженедельные и разовые задания, трек очков с сундуками и бонус за группу заданий - и как настроить их в кабинете.
- Лидерборд в игре: рейтинг, раунды и наградыКак работает готовый лидерборд iDos Games - таблицы с раундами, награды за место и за набранные очки, защита от накрутки очков - и как настроить его в кабинете.
- Шаблон idle-RPG: герой, волны и боссыГотовый шаблон idle-RPG на iDos Games - герой сам сражается с волнами монстров и боссами, золото копится даже без игрока, характеристики улучшаются за золото. Что внутри и как переделать под свою игру.
- Что входит в новый проектКаждый новый проект на iDos Games начинается со входа, лобби и шести готовых систем; магазин, лидерборды, ивенты, мультиплеер и другие системы добавляются, когда они нужны.
Сделайте свою игру
Опишите идею одним предложением - ИИ-кодер соберёт её, и она откроется по своей ссылке.