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

Ежедневная лотерея

Самое заметное меню в категории казино с точки зрения сервера - лотерея с реальным растущим джекпотом. Каждый билет за $100 либо забирает весь банк с шансом 1 к 50, либо отдаёт в него $50. Джекпот копится по всем игрокам и сессиям, пока кто-нибудь не выиграет.

  • Глобальную переменную как постоянный накопитель приза
  • Действие incVar с явной величиной (а не просто +1)
  • Чтение глобальной переменной внутри другого действия: giveMoney: "%var_:ame_lottery_jackpot:0%"
  • Связку bulk с inline-блоками rules { chance: ... } actions { ... } denyActions { ... } для ветвления
  • Серверное объявление через broadcast

Внутри actions { } у клика мы используем bulk, чтобы обернуть одну условную группу под-действий:

bulk: [
{
rules { chance: 2 }
actions {
# Ветка победы
giveMoney: "%var_:ame_lottery_jackpot:0%"
setVar: "ame_lottery_jackpot::0"
...
}
denyActions {
# Ветка проигрыша
incVar { name: "ame_lottery_jackpot", amount: 50 }
...
}
}
]

rules { chance: 2 } бросает 2% вероятность. Если выпало - выполняется actions (выплата + сброс джекпота). Если нет - denyActions (плюс $50 в джекпот).

Обёртка bulk нужна, чтобы вся условная конструкция была одной записью в списке - так можно потом добавить ещё условные исходы (10% шанс на половину джекпота и т.п.), просто дописав в список bulk.

giveMoney: "%var_:ame_lottery_jackpot:0%" - плейсхолдер раскрывается в текущее значение джекпота (например, 5000), и giveMoney получает это число. В связке с setVar: "ame_lottery_jackpot::0" сразу после получается паттерн “выплати, потом сбрось”.

Порядок важен: выплата должна произойти до сброса, иначе игрок получит $0.

Это самостоятельное демо. Реальные лотерейные системы обычно хотят:

  • Сохранение: чтобы переменная джекпота переживала перезапуски сервера (за это отвечает хранилище переменных AbstractMenus, если в конфиге syncVariables: true)
  • Лимиты в день: временная переменная per-player (setVarp ::1d), чтобы ограничить покупки билетов
  • Сброс/аудит для админа: в этом меню есть базовый сброс; в проде нужны логированные транзакции
  • Антифрод: rate limiting + дебаунс кликов уже закрывает плагин своими per-menu кулдаунами

В вашей реальной реализации наслаивайте всё это поверх показанного паттерна.

  1. Положите бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. /eco give <вы> 5000.
  4. Введите /ame_lottery в игре.
  5. Купите 20-30 билетов. Джекпот растёт. В какой-то момент один из них выиграет.