StrangeCraft CMS PlaVER

Магазин

Модуль «Магазин» — донат-магазин вашего сервера: привилегии (ранги), предметы и игровая валюта с онлайн-оплатой (ЮKassa, FreeKassa, Platega) или оплатой с баланса сайта. Покупки выдаются на сервер автоматически.

Включение модуля

  1. Откройте Админка → Модули.
  2. Включите модуль «Магазин» переключателем.
  3. В меню сайта появится вкладка «Магазин», в админ-меню — раздел Магазин (доступен админам с правом «Управление магазином»).

Чтобы выдача покупок работала, у вас должен быть настроен хотя бы один игровой сервер в Админка → Серверы (выдача идёт по RCON или через очередь команд cms-plugin).

Категории и товары

Раздел Админка → Магазин — это две страницы: «Товары и категории» и «Заказы».

Категории

В карточке «Категории» добавьте категории (например, «Привилегии», «Кейсы», «Валюта»). Категории необязательны: товар можно создать и без раздела — в каталоге он попадёт во вкладку «Без категории». Удаление категории товары не трогает — они остаются в продаже без раздела. Пустые категории в каталоге не показываются.

Товары

Нажмите «Добавить товар» и заполните форму:

  • Категория (необязательно), название, описание, картинка (до 2 МБ) и порядок сортировки;
  • Цена — в рублях (от 1 до 1 000 000);
  • Тип товара — главное поле, от него зависит способ выдачи:
    • Привилегия — выдача группы LuckPerms. Укажите группу LuckPerms (обязательно) и, при желании, срок в днях (пусто = навсегда) и уровень ступени (см. ниже про донат-лестницу);
    • Предмет — выдача командами: впишите команды выдачи, по одной на строку. Плейсхолдеры: %player% — ник игрока, %uuid% — его UUID (пример: give %player% diamond 64);
    • Валюта — пополнение баланса сайта: укажите сумму начисления. Такой товар нельзя оплатить с баланса (иначе получилась бы перекачка денег).
  • Включён — выключенный товар в каталоге не виден;
  • Команды выдачи можно добавить и к привилегии — они выполнятся после выдачи группы.

Донат-лестница (ранги) и скидки на апгрейд

Если у привилегии заполнен уровень ступени (1, 2, 3…), она становится ступенью донат-лестницы:

  • игроку, у которого уже есть ступень, старшая продаётся с доплатой разницы (в каталоге видна зачёркнутая полная цена и цена доплаты);
  • своя и младшие ступени владельцу не продаются и в каталоге скрываются;
  • при покупке старшей ступени младшая снимается с игрока автоматически;
  • владельцам вечных рангов доступен месячный буст (кнопка в личном кабинете): раз в 30 дней временная группа boost на 24/48/72 часа в зависимости от ступени.

Отдельного поля «скидка» у товара нет — скидки в магазине это именно апгрейд-цены лестницы.

Привязка к серверу

В форме товара есть список серверов: отметьте те, где товар продаётся. Ничего не отмечено — товар общий (виден всегда, выдаётся на первом доступном сервере). Подробнее — в разделе «Категории и серверы у товара» ниже.

Кейсы

Кейс — набор призов со своими шансами, который игрок покупает и открывает на сайте с анимацией рулетки.

Настройка — Админка → Магазин → Кейсы: создайте кейс и добавьте призы. Приз бывает двух видов:

  • Команды в игру — произвольные консольные команды с подстановками %player% и %uuid% (предметы, наборы, что угодно);
  • Сумма на баланс — зачисление на счёт игрока на сайте.

Кейсу и каждому призу можно загрузить иконку (JPG/PNG/WEBP/GIF до 2 МБ): у кейса — в его карточке, у приза — кликом по картинке в столбце «Иконка» списка призов, файл сохраняется сразу. Иконки видны в списке кейсов, в содержимом кейса и крутятся в самой рулетке; без картинки показывается стандартный значок.

У каждого приза задаётся вес: шанс = вес приза ÷ сумма весов активных призов кейса; проценты показываются рядом и в содержимом кейса на сайте. Приз можно временно выключить — он исчезнет из ротации, не ломая историю.

Чтобы кейс продавался, создайте во вкладке Товары товар типа «Кейс» и выберите в нём нужный кейс. Дальше это обычный товар: работают корзина, оплата с баланса и онлайн, распродажи, промокоды и подарки. Купленные кейсы не открываются автоматически — они складываются на аккаунт игрока (раздел Кейсы) и открываются когда он захочет, по одному или до 5 сразу (столько же рулеток крутится одновременно).

Исход определяется на сервере до начала анимации и сразу пишется в историю открытий — подкрутить результат из браузера нельзя, а закрытая вкладка не отменяет выигрыш. Денежные призы зачисляются мгновенно, призы-команды уходят на сервер; если сервер недоступен, выдача повторится автоматически (та же очередь, что у заказов).

Распродажи, промокоды и подарки

РаспродажиАдминка → Магазин → Распродажи: процентная скидка на все товары, отдельные категории или конкретные товары, с необязательными датами начала и конца. В каталоге такие товары показываются с зачёркнутой старой ценой и бейджем «−N%». Несколько распродаж на один товар не суммируются — применяется максимальный процент.

ПромокодыАдминка → Магазин → Промокоды: код вводится игроком в корзине. Настраивается всё: тип скидки (процент или фиксированная сумма), область действия (все товары / категории / товары), срок действия, общий лимит использований и лимит на одного игрока. Скидка применяется только к позициям в области действия; фиксированная скидка не может превысить сумму этих позиций. Лимиты защищены от одновременного использования двумя игроками — «последний» промокод достанется только одному. Если скидка покрывает заказ полностью, оформление проходит без оплаты.

Промокод и распродажа складываются: сначала цена товара уменьшается распродажей, затем промокод считает скидку от получившейся суммы. На пополнение баланса никакие скидки не действуют.

Подарки — в корзине есть галочка «Купить в подарок» и поле для ника получателя. Покупает и платит один игрок, а привилегия, предметы и команды выдаются другому: лестница рангов считается от получателя, %player%/%uuid% в командах подставляются его. Дарить самому себе и дарить пополнение баланса нельзя. Подарок виден в истории заказов покупателя.

Категории и серверы у товара

Категория необязательна. Можно завести товары вообще без разделов — в каталоге они попадут во вкладку «Без категории». Категории нужны, только когда товаров много и их удобно разложить по группам. Удаление категории больше не удаляет товары: они остаются в продаже и переезжают в «Без категории».

Привязка к серверам. У каждого товара можно отметить, на каких серверах он продаётся (список серверов из Админка → Серверы):

  • ничего не отмечено — товар общий: виден всегда и выдаётся на первом доступном сервере (прежнее поведение);
  • отмечены серверы — товар показывается только при выборе этих серверов в каталоге, а команды выдачи выполняются именно на них. Если ни один из указанных серверов недоступен, выдача не «съезжает» на чужой сервер, а повторится позже автоматически.

Игроку над каталогом появляется переключатель серверов (когда серверов больше одного): выбрав сервер, он видит товары этого сервера плюс общие. Привилегии LuckPerms и пополнение баланса общие для всей сети, поэтому привязка к серверам осмысленна прежде всего для товаров-предметов и кейсов с командами.

Платёжные системы

Реквизиты вводятся в Админка → Настройки → Платежи (группа настроек модуля «Магазин»). Способ оплаты появляется у игроков, когда он включён и реквизиты заполнены. Валюта платежей — рубли.

ЮKassa (СБП, карты)

  1. Зарегистрируйте магазин в ЮKassa и в личном кабинете ЮKassa возьмите shopId и секретный ключ (раздел «Интеграция → Ключи API»).
  2. В CMS заполните «ЮKassa Shop ID» и «ЮKassa секретный ключ», включите переключатель «ЮKassa включена».
  3. В кабинете ЮKassa в настройках уведомлений (HTTP-уведомления/webhook) укажите адрес: https://ваш-сайт/api/payments/yookassa/webhook и включите события об успешном и отменённом платеже (payment.succeeded, payment.canceled).
  4. Настройка «Фильтр вебхука по IP ЮKassa» дополнительно принимает уведомления только с адресов ЮKassa. Если сайт стоит за прокси и реальный IP не доходит — выключите её.

Безопасность: CMS не доверяет телу уведомления — перед выдачей заказа она сама перепроверяет платёж запросом к API ЮKassa.

FreeKassa

  1. В кабинете FreeKassa возьмите ID магазина и задайте секретное слово 1 (подпись формы оплаты) и секретное слово 2 (проверка уведомлений).
  2. В CMS заполните «FreeKassa ID магазина», оба секретных слова и включите «FreeKassa включена». API-ключ — необязателен: с ним страница заказа умеет синхронно сверять статус платежа.
  3. В кабинете FreeKassa укажите:
    • URL оповещения (webhook): https://ваш-сайт/api/payments/freekassa/webhook (проверку доступности URL из кабинета CMS проходит автоматически);
    • Success URL и Fail URL: https://ваш-сайт/shop/freekassa/return — игрок после оплаты вернётся на страницу своего заказа.
  4. Настройка «Фильтр уведомлений по IP FreeKassa» — как у ЮKassa: выключите, если сайт за прокси.

Выдача покупки не зависит от возврата игрока на сайт — она происходит по webhook-уведомлению с проверкой подписи (секретное слово 2) и суммы.

Platega (СБП, карты)

  1. В кабинете Platega возьмите Merchant ID и секрет (X-Secret).
  2. В CMS заполните «Platega Merchant ID» и «Platega секрет», включите «Platega включена». Код способа оплаты — из кабинета Platega (по умолчанию 2 — СБП).
  3. В кабинете Platega укажите адрес уведомлений: https://ваш-сайт/api/payments/platega/webhook.

Как и с ЮKassa, телу уведомления CMS не доверяет: перед выдачей платёж перепроверяется запросом к API Platega под вашими ключами.

Как покупает игрок: корзина и баланс

  • Игрок складывает товары в корзину (до 10 штук одной позиции; привилегия — всегда 1 шт.; ступень лестницы — только одна за раз).
  • В корзине выбирает способ оплаты: включённые платёжки или «с баланса сайта». Оплата балансом требует явного подтверждения в диалоговом окне; если денег не хватает — покупка не пройдёт.
  • Баланс пополняется покупкой товара типа «Валюта» (онлайн-оплатой) или начислением от администрации. Текущий баланс виден в личном кабинете.
  • После онлайн-оплаты игрок попадает на страницу заказа со статусом; если уведомление платёжки запоздало, страница сама сверится с провайдером.

Промокодов в магазине нет.

Выдача покупок

После подтверждения оплаты заказ выдаётся автоматически:

  • привилегия — игроку выдаётся группа LuckPerms (на срок или навсегда), при апгрейде снимаются младшие ступени; если включена синхронизация групп — подтягиваются роль сайта и роли Discord;
  • предмет — команды товара выполняются на первом доступном сервере (по RCON или через плагин), количество — повторением команд;
  • валюта — сумма начисляется на баланс сайта.

Если игровой сервер в момент оплаты недоступен, заказ остаётся в статусе «оплачен», и CMS сама повторяет выдачу каждые 5 минут, пока не выдаст — ничего терять и выдавать вручную не нужно. Привилегия игроку без привязанного игрового аккаунта выдастся после его первого входа в игру (тем же повтором). Выдача идемпотентна: при частичном сбое уже выданные позиции корзины не дублируются.

Заказы в админке и у игрока

Админка → Магазин → Заказы — история всех заказов: номер, игрок, состав, сумма, способ оплаты, статус (ожидает оплаты / оплачен / выдан / отменён) и дата. У оплаченного, но не выданного заказа есть кнопка ручной выдачи — на случай, если хотите не ждать автоповтора.

Игрок видит свою историю заказов в личном кабинете и страницу статуса каждого заказа. На главную можно вывести блок «Последние покупки» (конструктор страниц / Настройки → Сайт).

Возвраты и отмена

Кнопки возврата денег в CMS нет: возврат делается в кабинете платёжной системы, а выданное снимается вручную (группу — через LuckPerms, баланс — правкой в карточке пользователя: Админка → Пользователи, поле «Баланс»). Незавершённое чистится само: несостоявшиеся платежи (в т.ч. отменённые) и брошенные неоплаченные заказы старше 3 часов автоматически удаляются из истории (ежечасная очистка); оплаченные и выданные заказы не удаляются никогда.

Внутриигровой магазин (/shop)

Игроки могут покупать товары, не выходя из игры: команда /shop открывает меню магазина (инвентарь-интерфейс на Paper/Spigot, чат-меню на модовых серверах). Покупка списывает баланс сайта и выдаётся той же очередью команд, что и покупки с сайта.

  • Иконка товара в игровом меню задаётся полем «Материал-иконка» (например DIAMOND или GOLD_INGOT) в форме товара.
  • Работает на серверах с подключённым плагином и привязкой аккаунтов.

Награды за голосования (Votifier)

CMS принимает голоса с мониторингов по протоколу Votifier (ключ генерируется автоматически и доставляется плагину). Команды-награды настраиваются в Настройках → Игровой плагин; голоса попадают в статистику игрока и топ по голосам.