Ежедневная лотерея
Самое заметное меню в категории казино с точки зрения сервера - лотерея с реальным растущим джекпотом. Каждый билет за $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 кулдаунами
В вашей реальной реализации наслаивайте всё это поверх показанного паттерна.
Попробовать
Заголовок раздела «Попробовать»- Положите бандл в
plugins/AbstractMenus/menus/example/. /am reload./eco give <вы> 5000.- Введите
/ame_lotteryв игре. - Купите 20-30 билетов. Джекпот растёт. В какой-то момент один из них выиграет.