Магазин
Модуль «Магазин» — донат-магазин вашего сервера: привилегии (ранги), предметы и игровая валюта с онлайн-оплатой (ЮKassa, FreeKassa, Platega) или оплатой с баланса сайта. Покупки выдаются на сервер автоматически.
Включение модуля
- Откройте Админка → Модули.
- Включите модуль «Магазин» переключателем.
- В меню сайта появится вкладка «Магазин», в админ-меню — раздел Магазин (доступен админам с правом «Управление магазином»).
Чтобы выдача покупок работала, у вас должен быть настроен хотя бы один игровой сервер в Админка → Серверы (выдача идёт по 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 (СБП, карты)
- Зарегистрируйте магазин в ЮKassa и в личном кабинете ЮKassa возьмите shopId и секретный ключ (раздел «Интеграция → Ключи API»).
- В CMS заполните «ЮKassa Shop ID» и «ЮKassa секретный ключ», включите переключатель «ЮKassa включена».
- В кабинете ЮKassa в настройках уведомлений (HTTP-уведомления/webhook) укажите адрес:
https://ваш-сайт/api/payments/yookassa/webhookи включите события об успешном и отменённом платеже (payment.succeeded, payment.canceled). - Настройка «Фильтр вебхука по IP ЮKassa» дополнительно принимает уведомления только с адресов ЮKassa. Если сайт стоит за прокси и реальный IP не доходит — выключите её.
Безопасность: CMS не доверяет телу уведомления — перед выдачей заказа она сама перепроверяет платёж запросом к API ЮKassa.
FreeKassa
- В кабинете FreeKassa возьмите ID магазина и задайте секретное слово 1 (подпись формы оплаты) и секретное слово 2 (проверка уведомлений).
- В CMS заполните «FreeKassa ID магазина», оба секретных слова и включите «FreeKassa включена». API-ключ — необязателен: с ним страница заказа умеет синхронно сверять статус платежа.
- В кабинете FreeKassa укажите:
- URL оповещения (webhook):
https://ваш-сайт/api/payments/freekassa/webhook(проверку доступности URL из кабинета CMS проходит автоматически); - Success URL и Fail URL:
https://ваш-сайт/shop/freekassa/return— игрок после оплаты вернётся на страницу своего заказа.
- URL оповещения (webhook):
- Настройка «Фильтр уведомлений по IP FreeKassa» — как у ЮKassa: выключите, если сайт за прокси.
Выдача покупки не зависит от возврата игрока на сайт — она происходит по webhook-уведомлению с проверкой подписи (секретное слово 2) и суммы.
Platega (СБП, карты)
- В кабинете Platega возьмите Merchant ID и секрет (X-Secret).
- В CMS заполните «Platega Merchant ID» и «Platega секрет», включите «Platega включена». Код способа оплаты — из кабинета Platega (по умолчанию 2 — СБП).
- В кабинете 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 (ключ генерируется автоматически и доставляется плагину). Команды-награды настраиваются в Настройках → Игровой плагин; голоса попадают в статистику игрока и топ по голосам.