Перейти к содержимому

Донат-ранги по уровням

Стандартная раскладка донат-магазина: плитки рангов по возрастанию, у каждой два варианта - “Куплено”, если у игрока уже есть нужное право, и цена + список бонусов, если права нет. Сделано на паттерне дублирующих предметов: по одному варианту на каждое состояние ранга.

  • Как масштабировать паттерн двух предметов на много уровней
  • Алиасы команд через command: [..., ...] (так что меню открывают и /ame_donate, и /ame_support)
  • Список бонусов в lore у каждого ранга
  • Куда вставить реальную логику покупки (в этом примере просто отправляется сообщение в чат)

В каждом слоте ранга объявлено по два предмета. Вариант HAS_RANK имеет rules { permission: "myserver.rank.knight" } и показывает “Куплено” + “Подумайте об апгрейде ниже”. Вариант NO_RANK без правил, показывает бонусы и цену.

Правило отрисовки то же, что и у Магазина с проверкой ранга: предметы обходятся в порядке объявления; в каждом слоте отрисовывается первый предмет, у которого правила прошли. HAS_RANK объявлен первым, поэтому если у игрока есть право - выигрывает он.

Настоящие донат-магазины интегрируются с платёжкой. Типичные варианты:

  • Внешний URL: в click-действии отправляем &aЗайдите на https://example.org/donate, чтобы купить. Игрок покупает на сайте, ранг выдаётся через API.
  • Внутриигровая валюта: ставим правило money и действие takeMoney, как в обычном магазине, потом выдаём ранг через addGroup: "knight".
  • Player Points / токены: то же самое, что money, но через другой провайдер. Можно прямо указать провайдера: takeMoney: { amount: 5, provider: "playerpoints" }.

В этом примере используется вариант с URL, потому что он самый универсальный. Заменяйте блок click под свой магазин.

Скопируйте пару (HAS_RANK + NO_RANK) для нового уровня, поменяйте слот на свободную позицию (хорошо подходят слоты 27 или 29 в 4-м ряду), обновите имя права, бонусы и цену.

  1. Закиньте бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. Введите /ame_donate или /ame_support в игре.
  4. Выдайте себе право (например, lp user <you> permission set myserver.rank.knight true), чтобы увидеть вариант HAS_RANK.