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

Система азартных игр

Система азартных игр добавляет в EliteMobs казино. Игроки могут ставить Элитные монеты в четырёх мини-играх, брать в долг при нехватке денег и столкнуться со Сборщиком долгов. Администраторы могут менять многие настройки, включая множители выплат Блэкджека, Подбрасывания монеты и «Больше или меньше». Выплаты игрового автомата и максимальный долг фиксированы в коде.


Настройка​

Игроки открывают игры через настроенных NPC. Требуется разрешение elitemobs.gambling.npc, выдаваемое по умолчанию. У четырёх игр свои типы взаимодействия, а табло доходов выбирается по имени файла NPC.

Чтобы настроить NPC азартных игр, создайте конфигурационный файл NPC и задайте interactionType одно из следующих значений:

Тип взаимодействияОписание
GAMBLING_BLACKJACKОткрывает меню ставок для Блэкджека
GAMBLING_COINFLIPОткрывает меню ставок для Подбрасывания монеты
GAMBLING_SLOTSОткрывает меню ставок для Игрового автомата
GAMBLING_HIGHERLOWERОткрывает меню ставок для «Больше или меньше»

NPC «Владелец игорного дома» не использует специальный тип взаимодействия. Чтобы настроить его, создайте NPC с именем файла gambling_den_owner.yml. Табло доходов заведения появится над NPC автоматически на основании этого имени файла.

EliteMobs содержит готовые конфигурации NPC для всех пяти ролей; обычно достаточно разместить их:

ФайлРоль
blackjack_dealer.ymlБлэкджек (дилер Vincent)
coin_flipper.ymlПодбрасывание монеты (Lucky Pete)
slot_machine_operator.ymlИгровой автомат (Spinner Sam)
card_shark.yml«Больше или меньше» (карточный игрок Ace Morgan)
gambling_den_owner.ymlТабло доходов заведения

Игры​

Блэкджек​

Цель — набрать как можно ближе к 21, не превысив это число. В этой реализации действуют следующие правила.

Правила​

  • И игроку, и дилеру раздаётся по две карты.
  • Вторая карта дилера скрыта, пока игрок не спасует.
  • Тузы считаются как 11 или 1 (автоматически корректируется, чтобы по возможности избежать перебора).
  • Фигурные карты (Валет, Дама, Король) считаются как 10.
  • Дилер останавливается на 17.
  • Карты выбираются независимо с возвращением: конечной колоды для подсчёта карт нет. Достижение 21 после Hit автоматически вызывает Stand.
  • Меню показывает пять мест для карт каждой руки. Дополнительные карты учитываются в сумме, даже если уже не помещаются на экране.
  • Натуральный Блэкджек игрока оплачивается сразу, даже если у дилера тоже натуральный Блэкджек.

Действия​

ДействиеОписание
HitВзять ещё карту.
StandОставить текущую руку; далее играет дилер.
Double DownОплатить ещё одну такую же ставку, удвоить общую сумму, взять ровно одну карту и остановиться, если нет перебора. Доступно только первым действием с 2 картами, если остаток баланса и доступный кредит покрывают дополнительную ставку.

Выплаты​

ИсходМножитель по умолчанию
Обычная победа (сумма игрока превосходит дилера, либо у дилера перебор)2.0x
Блэкджек (21 первыми двумя картами)2.5x
Ничья (push)1.0x (ставка возвращается)
Проигрыш (у игрока перебор либо сумма дилера выше)0x (ставка потеряна)

Закрытие меню​

Если игрок закрывает меню во время хода дилера, рука дилера разыгрывается автоматически, и результат подводится. Если игрок закрывает меню до того, как спасовал, ставка теряется.


Подбрасывание монеты​

Простая игра 50/50. Выберите «орла» или «решку», и монета решит вашу судьбу.

Как играть​

  1. Игра открывается с кнопками «орёл» и «решка».
  2. Нажмите одну из них, чтобы сделать выбор.
  3. Проигрывается анимация подбрасывания монеты.
  4. Показывается результат.

Выплаты​

ИсходМножитель по умолчанию
Верная догадка1.9x
Ребро (монета встаёт на ребро)5.0x
Неверная догадка0x (ставка потеряна)

Исход «ребро»​

Существует 1% вероятность, что монета встанет на ребро вместо «орла» или «решки». Когда это происходит, игрок всегда выигрывает независимо от своего выбора и получает выплату 5x от своей ставки. Для этого редкого события показываются особое сообщение в чате и визуальное оформление.

При этих настройках орёл и решка выпадают с вероятностью 49,5% каждый. Ожидаемая выплата равна 0.495 × 1.9 + 0.01 × 5 = 0.9905 ставки, то есть суммарное преимущество заведения составляет 0,95%. Преимущество 5% при обычной выплате 1,9x действует только при отключённом исходе «ребро». Множители включают исходную ставку.

Закрытие меню​

Если игрок закрывает меню до того, как сделал выбор, ставка теряется.


Игровой автомат​

Крутите три барабана и собирайте совпадающие символы, чтобы выиграть. Более редкие символы платят больше.

Как играть​

  1. Игра открывается сеткой барабанов 3x3 и кнопкой «Spin».
  2. Нажмите «Spin», чтобы запустить барабаны.
  3. Каждый барабан останавливается по очереди с анимацией.
  4. Результат определяется средним рядом (линией выплат).

Символы и выплаты​

Каждый барабан независимо выбирает символ по весам ниже. Три одинаковых символа дают множитель 100 / weight. Ровно два одинаковых символа в любых местах среднего ряда, включая первое и третье, оплачиваются в размере 25% выплаты за три таких символа. Это полная возвращаемая сумма со ставкой: пара вишен или лимонов возвращает меньше исходной ставки, хотя меню показывает победу.

СимволВесШансВыплата за 3 совпаденияВыплата за 2 совпадения
Вишня3535%2.86x0.71x
Лимон2828%3.57x0.89x
Апельсин2020%5.0x1.25x
Золотой колокольчик1010%10.0x2.5x
Серебряный слиток55%20.0x5.0x
Счастливая семёрка22%50.0x12.5x

Три счастливые семёрки — это Джекпот, который сопровождается особым визуальным и звуковым эффектом.

Закрытие меню​

Если игрок закрывает меню до того, как раскрутил барабаны, ставка теряется.

После результата Spin Again списывает новую ставку того же размера и возвращает экран подготовки. Затем нужно нажать Spin; закрытие меню между этими действиями приводит к потере только что списанной ставки.


Больше или меньше​

Карточная игра, основанная на серии. Угадайте, будет ли следующая карта больше или меньше текущей, и наращивайте множитель. Забирайте выигрыш в любой момент или рискуйте всем.

Как играть​

  1. Вытягивается и показывается карта (значения от 2 до 14, где Туз = 14).
  2. Угадайте, будет ли следующая карта больше или меньше текущей.
  3. Если вы угадали, ваш множитель растёт, а открытая карта становится новой текущей.
  4. Вы можете забрать выигрыш в любой момент после хотя бы одной верной догадки.
  5. Если вы не угадали, вы теряете всю свою ставку.
  6. Если следующая карта равна текущей, это считается проигрышем.

Множитель серии​

Каждая верная догадка умножает ваш выигрыш на настроенный множитель (по умолчанию 1.3x). Множитель накапливается:

СерияМножитель (по умолчанию)Выплата при ставке 100 монет
11.3x130
21.69x169
32.197x219.7
42.856x285.6
53.713x371.3
.........
12~23.3x~2,330

Максимальная серия и автоматический забор выигрыша​

Максимальная серия — 12. Когда игрок достигает 12 верных догадок, выигрыш забирается автоматически и начисляется ему. Это предотвращает неконтролируемый рост множителей.

Закрытие меню​

Если игрок закрывает меню при наличии выигрышной серии, выигрыш забирается автоматически, и игрок получает текущую сумму. Если он закрывает меню до того, как сделал хоть одну догадку, ставка теряется.


Ставки​

Перед началом любой игры игроку показывается меню ставок для выбора размера ставки.

Лимиты ставок​

НастройкаЗначение по умолчанию
Минимальная ставка10

Настраиваемой максимальной ставки нет. Меню использует целое число монет; All In отбрасывает дробную часть суммы баланса и доступного кредита.

minBet задаёт сумму Reset и нижний предел кнопок уменьшения. Начальная сумма равна max(minBet, 10). Это не общая проверка транзакций: All In может установить положительную сумму ниже minBet, и текущий Play принимает её, если игрок может заплатить. Не рассчитывайте на эту настройку как на обязательный минимум для всех способов ставки.

Элементы управления в меню ставок​

Меню ставок предоставляет несколько элементов управления:

  • Кнопки шага -- три размера увеличения и уменьшения. При балансе от 100 монет и отсутствии долга шаги равны 5%, 10% и 25% баланса с отбрасыванием дробной части, но не менее 1. Иначе используются 10, 50 и 100.
  • All In -- устанавливает ставку на максимум, который игрок может себе позволить (включая доступный кредит).
  • Reset -- сбрасывает ставку до минимума.
  • Play -- начинает игру с текущей ставкой. Активна, только если игрок может позволить себе ставку.
  • Cancel -- закрывает меню без ставки.

Меню показывает текущий баланс. Строки долга и доступного кредита появляются при положительном долге, хотя игроки без долга тоже могут пользоваться кредитом.


Система долгов​

Игроки могут ставить сверх своего баланса, залезая в долг. Казино предоставляет кредит до фиксированного лимита.

Как работают долги​

  1. Когда игрок делает ставку, превышающую его баланс, оставшаяся сумма добавляется как игорный долг.
  2. Максимальный долг, который может накопить игрок, составляет 500 монет. Это значение задано жёстко в коде и не настраивается.
  3. Игроки не могут делать ставки, которые вывели бы их долг за пределы максимума.
  4. Выигрыш сначала идёт на погашение долга, а остаток добавляется к балансу. Другие денежные поступления через EliteMobs тоже сначала гасят этот долг, в том числе при включённой интеграции Vault. Возврат средств за покупку зачарований обходит взыскание долга.

Доступный кредит​

При конечном значении долга доступный кредит равен max(0, maxDebt - currentDebt). Меню ставок показывает его при наличии долга.

Предупреждение о долге​

Когда игрок залезает в долг, он получает предупреждающее сообщение. Пока у него есть непогашенный долг, за ним может прийти Сборщик долгов.


Босс «Сборщик долгов»​

Сборщик долгов — это кастомный босс, который появляется, чтобы выследить игроков, имеющих игорный долг.

Условия появления​

  • У игрока должен быть непогашенный игорный долг.
  • Периодическая проверка выполняется каждые 60 минут (настраивается) для всех игроков в сети.
  • Первая проверка ждёт полный интервал после инициализации. С последней попытки появления для этого игрока также должен пройти хотя бы один интервал; этот таймер сбрасывается при выключении плагина.
  • Каждая проверка имеет 50% вероятность (настраивается) породить Сборщика долгов для подходящего игрока.
  • Одновременно на одного игрока может быть активен только один Сборщик долгов.
  • Сборщик долгов использует файл кастомного босса debt_collector.yml.

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

Масштабирование уровня​

Поставляемый debt_collector.yml использует динамический уровень и scaledCombat: true, поэтому боевые расчёты подстраиваются под каждого игрока. Множители здоровья и урона берутся из этого файла. Процедура спавна не присваивает боссу боевой уровень преследуемого игрока напрямую; изменения конфигурации босса меняют его масштабирование.

Поведение​

  • Сборщик проверяет десять точек поверхности на горизонтальном расстоянии 5–10 блоков. Если ни одна не подходит, используется точка на высоте игрока со смещением до 5 блоков по каждой горизонтальной оси.
  • Он немедленно берёт в цель того игрока, ради которого был порождён.
  • По умолчанию у него тайм-аут 600 секунд (10 минут). Если его не убить за это время, он исчезает и предупреждает игрока, что вернётся.

Исходы​

ИсходЭффект
Сборщик долгов убитЕго записанная цель получает сообщение о возвращении, если находится в сети, даже если босса убил другой игрок. Долг не уменьшается.
Игрок погибает от прямого удара сборщикаДолг погибшего уменьшается на 50 монет (настраивается). При полном погашении приходит уведомление. Сборщик удаляется через 5 секунд. Последняя нанёсшая урон сущность должна сама быть боссом debt_collector.yml; обработчик не отслеживает стрелков снарядов или последующую смерть от окружения.
Тайм-аут менеджераСборщик удаляется и отправляет предупреждение. Позднейшая периодическая проверка может создать нового, если игрок всё ещё подходит и проверка вероятности успешна.

Владелец игорного дома​

Владелец игорного дома показывает доходы заведения парящим текстом над головой. Это записанные ставки минус выплаты, включая ставки, оплаченные в долг. Это не отдельный банковский баланс и не сумма уже взысканных с должников денег.

  • Положительные доходы показываются зелёным (например, +1234.56).
  • Отрицательные доходы (когда игроки выигрывают больше, чем проигрывают) показываются красным (например, -567.89).
  • Табло обновляется каждую секунду.
  • Доходы заведения сохраняются в house_earnings.yml и переживают перезапуски сервера.

Конфигурация​

Все настройки азартных игр хранятся в GamblingSettings.yml. Ниже приведены ключевые настройки, влияющие на игровой процесс.

Общие настройки​

КлючОписаниеПо умолчанию
gamblingEnabledВключает или отключает всю систему азартных игр. При отключении NPC азартных игр не работают, а Сборщик долгов не появляется.true
minBetСумма Reset и нижний предел кнопок уменьшения; см. ограничение All In выше.10

Примечание: максимальный долг (500.0) задан жёстко и не настраивается.

Загрузчик требует положительные целые числа для minBet, интервала проверки сборщика и тайм-аута. Вероятности должны быть конечными и находиться между 0 и 1. Множители выплат и уменьшение долга при смерти должны быть конечными и неотрицательными. Неверные значения вызывают предупреждение и заменяются значениями по умолчанию в загруженной конфигурации.

Множители выплат​

КлючОписаниеПо умолчанию
payouts.blackjack.normalМножитель выплаты за обычную победу в Блэкджеке.2.0
payouts.blackjack.blackjackМножитель выплаты за натуральный Блэкджек (21 первыми двумя картами).2.5
payouts.coinFlip.normalМножитель за верный выбор орла/решки. Выплата 1,9x даёт преимущество заведению 5% только при отключённом исходе «ребро».1.9
payouts.coinFlip.edgeChanceВероятность (от 0.0 до 1.0), что монета встанет на ребро (бонусный выигрыш). Установите 0.0, чтобы отключить.0.01
payouts.coinFlip.edgePayoutМножитель выплаты, когда монета встаёт на ребро.5.0
payouts.higherLower.multiplierV2Множитель, применяемый за каждую верную догадку в «Больше или меньше». Накапливается мультипликативно.1.3
Ограничение настройки Подбрасывания монеты

Настройки Подбрасывания монеты находятся в одном разделе YAML:

payouts:
coinFlip:
normal: 1.9
edgeChance: 0.01
edgePayout: 5.0

Если в вашем существующем файле число записано прямо в payouts.coinFlip, перенесите это значение в normal и добавьте две настройки ребра. EliteMobs отключает азартные игры и сообщает о необходимом исправлении, не переписывая файл. После исправления выполните перезагрузку.

Выплаты игрового автомата​

Выплаты игрового автомата не настраиваются. Они рассчитываются автоматически из весов символов по формуле 100 / weight:

СимволВесВыплата за 3 совпаденияВыплата за 2 совпадения
Вишня352.86x0.71x
Лимон283.57x0.89x
Апельсин205.0x1.25x
Колокольчик1010.0x2.50x
Слиток520.0x5.00x
Счастливая семёрка250.0x12.50x

Ключей payouts.slots.* в GamblingSettings.yml вообще нет — единственные записи слот-машины в файле — это UI-строки slots.* (названия кнопок, подписи, заголовки результатов). Выплаты всегда выводятся из жёстко заданных весов символов.

Настройки Сборщика долгов​

КлючОписаниеПо умолчанию
debtCollector.spawnChanceВероятность (от 0.0 до 1.0), что Сборщик долгов появится при каждой проверке.0.5
debtCollector.checkIntervalMinutesКак часто (в минутах) проверять, должен ли появиться Сборщик долгов для игроков в долгу.60
debtCollector.timeoutSecondsЧерез какое время (в секундах) Сборщик долгов исчезает, если его не убили.600
debtCollector.debtReductionOnPlayerDeathРазмер уменьшения долга, когда Сборщик долгов убивает игрока.50.0

Безопасность экономики​

Ставки списываются до открытия игры. Подбрасывание монеты и Игровой автомат рассчитывают выплату до анимации результата; «Больше или меньше» записывает каждую догадку до анимации и платит при получении выигрыша. Блэкджек подводит итог после завершения добора дилером либо немедленно доигрывает его руку, если меню закрыто во время его хода. Выплаты округляются до двух знаков после запятой и включают исходную ставку. Общий обработчик результатов не позволяет выдать одну ожидающую выплату дважды.

Описанные правила закрытия меню также действуют при закрытии инвентаря из-за отключения игрока. Эти меры не восстанавливают незавершённую сессию после сбоя сервера или выключения плагина; избегайте перезапусков во время активных игр.