Игровые системы

Магазин в игре: витрины, товары и цены

Как работает готовый магазин iDos Games - витрины с ротацией товаров, цены в валюте игры или реальными деньгами, бесплатные подарки и лимиты покупок - и как настроить его в кабинете без кода.

Обновлено: English

Магазин - готовая система: экран магазина в игре и серверная логика покупок. Вы настраиваете витрины и товары в кабинете, а сервер при каждой покупке сам проверяет цену, лимиты и ротацию. Поэтому подделать покупку из игры нельзя, а свой сервер для магазина не нужен.

Что видит игрок

  • Витрины вкладками. Первая секция витрины - карусель, остальные - сетки карточек.
  • Бесплатный подарок дня, который подсвечивается, пока его не забрали.
  • Таймеры на карточках: «обновится через», «откроется через», «распродано».
  • Окно подтверждения покупки (на телефоне выезжает снизу).
  • Анимацию «Получено»: награды летят к счётчикам балансов.
  • Значок на вкладке магазина, когда игрока ждёт бесплатный товар.
Магазин
12 450
320
Дня1
Валюта
Наборы
Предложения дня Обновится через 15:40:12
Подарок дня
ДАРОМ
Меч героя
1 200
Сундук
90
Распродано
500 монет
$0.99
Выгодно1 200 монет
$1.99
x2 первая покупка
Витрины - вкладками; значок считает ждущие бесплатные товары.
Таймер ротации: когда он кончится, сервер сменит товары в слоте.
Бесплатный подарок дня подсвечен, пока его не забрали.
«Распродано»: лимит на это окно исчерпан.
Метки и бонус первой покупки задаются в настройках товара.
Пример. Экран магазина глазами игрока, вид по умолчанию. Вид меняется в src/ui.config.ts.

Как устроен магазин

Магазин - это дерево: витрина → секции → слоты → товар.

  • Товар - что продаётся: цена, награды, лимиты, метки («выгодно», «x2»). Товары лежат в общем каталоге.
  • Слот - место на полке витрины. Только через слот товар можно купить: товар, который не стоит ни в одном слоте, не продаётся вовсе.
  • Ротация: слот может показывать товар из набора и менять его по расписанию, как в ежедневном магазине. Ротацию считает сервер, поэтому у игрока на всех устройствах один и тот же магазин.
Витрина«Магазин дня»
Секция«Предложения дня»
Слоты
Слот 1: всегда подарок дня
Слот 2: один из 6 товаров, новый каждые 24 ч
Слот 3: пуст, пока не откроется окно
Каталог товаровцена, награды, лимиты
Товар без слота не продаётся
Пример. Как устроена витрина в кабинете: товар продаётся только через слот.

Цены

Чем платит игрокКак это работает
Валюта игры, предметыСписываются с баланса игрока
Реальные деньгиПокупка в магазине приложений, сервер проверяет чек
Просмотр рекламыИгрок тратит заработанный просмотр ролика (сборки с рекламой)
НичегоБесплатный товар; обязателен лимит, иначе сервер его не продаст

Можно показать зачёркнутую «старую» цену, процент скидки сервер посчитает сам. У одного товара может быть несколько вариантов цены: например, за монеты или за кристаллы.

Лимиты покупок

  • За всё время - например, стартовый набор один раз.
  • В сутки - сбрасывается в полночь по UTC.
  • Перезарядка - следующая покупка через заданное время.
  • На одно окно ротации - лимит слота, пока на полке стоит этот товар.

Метку «первая покупка», «распродано» и таймеры сервер считает для каждого игрока сам.

Шаг 01Добавьте магазин в проект

В шаблоне idle-RPG магазин уже есть, с примером витрины. В любой другой проект его добавляет ИИ-кодер: напишите в чате «Добавь магазин». Он поставит готовую систему, а не будет писать магазин с нуля. Вкладка магазина появится у игроков, когда в нём будет что продавать.

Шаг 02Настройте товары и витрину

Откройте кабинет, выберите проект и перейдите в LiveOps → v2 → Магазин.

  • На вкладке Товары создайте товар: название, цена, что получает игрок и лимит.
  • На вкладке Витрины создайте витрину, добавьте в неё секцию и слоты и поставьте товары в слоты.
  • Пресеты - общие настройки, которые можно применить ко многим товарам сразу.

Кабинет предупреждает о товарах без слота и о бесплатных товарах без лимита. Кнопка ИИ на странице открывает помощника: опишите словами, что продавать («набор из 500 монет за 0,99 $ и ежедневный бесплатный сундук»), он предложит правки, а вы проверите их и нажмёте Сохранить.

Шаг 03Проверьте и выпустите

Проверьте магазин в тестовой версии приложения. В живое приложение настройки уходят отдельным действием, поэтому выпуск кода их не перезапишет. Подробнее - публикация и ссылки.

Для разработчиков

Магазин работает через client.store из @idosgames/core. Экран рисуйте из getStorefront(): это витрина, уже посчитанная для этого игрока (ротация, лимиты, таймеры). getDefinitions() - только конфиг, одинаковый для всех.

TypeScript
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 при каждой покупке. Игра только показывает витрину и просит купить.

Работают ли скидки для премиум-игроков?

Да. Скидки и бонусы премиум-уровня сервер применяет сам. Что на самом деле списано и выдано, игра читает из ответа покупки.

Смотрите также

Сделайте свою игру

Опишите идею одним предложением - ИИ-кодер соберёт её, и она откроется по своей ссылке.