Рулетка
Открываете меню, и иконка предмета быстро перебирает алмаз -> изумруд -> золото -> алмаз…, постепенно замедляясь. Когда всё останавливается, игрок получает случайную награду (или не получает ничего). Показывает формат AnimatedMenu с frames, эффект замедления через рост delay и хук onAnimEnd для логики “что происходит после анимации”.
Что показывает
Заголовок раздела «Что показывает»- Блок
framesкак альтернативаitemsдля анимированных меню delay:(в тиках) на каждом кадре иclear: falseдля сохранения статичных предметов- Совместная работа статичного блока
items:иframes - Хук
onAnimEndдля запуска действий по завершении анимации randActionsдля выбора одного из N исходов случайно- Темп анимации - быстро в начале, медленно к концу
Как работает AnimatedMenu
Заголовок раздела «Как работает AnimatedMenu»Если в файле меню в корне есть блок frames:, плагин считает меню анимированным. frames заменяет обычный однопроходный рендеринг items на последовательность кадров, проигрываемых по порядку.
У каждого кадра есть:
delay:задержка перед этим кадром в тиках (по умолчанию 20 = 1 секунда)clear:очищать ли инвентарь перед рендером items этого кадра (по умолчаниюtrue)items:предметы, которые добавляются в этом кадре- Опционально:
rules,onStart,onEnd
Статичный блок items: в корне работает вместе с кадрами. Если у кадров clear: false, эти статичные предметы сохраняются - именно то, что нужно для рамок и кнопки закрытия.
Трюк с замедлением
Заголовок раздела «Трюк с замедлением»Рулетка ощущается правильно, когда замедляется к концу. Делаем это через постепенно растущие значения delay::
frames: [ { delay: 2, ... } # 0.1s - очень быстро { delay: 2, ... } { delay: 2, ... } { delay: 2, ... } { delay: 4, ... } # начинает замедляться { delay: 6, ... } { delay: 10, ... } { delay: 20, ... } # 1s - драматичная пауза на финальном кадре]Всего: примерно 2.4 секунды. Финальный кадр с NETHER_STAR держится целую секунду, пока onAnimEnd выдаёт приз.
Выдача приза
Заголовок раздела «Выдача приза»onAnimEnd запускается после того, как закончится последний кадр. Внутри блок randActions, который случайно выбирает один из четырёх исходов:
onAnimEnd { randActions: [ { sound: ${successSound}, itemAdd { material: DIAMOND }, message: "..." } { sound: ${successSound}, itemAdd { material: EMERALD, count: 2 }, message: "..." } ... { sound: ${failSound}, message: "&7В следующий раз повезёт." } ]}У каждой записи свой блок действий. Один выбирается равномерно случайно. Исход “не выиграл” - просто звук и сообщение, без itemAdd.
Кастомизация
Заголовок раздела «Кастомизация»Чтобы взвешивать исходы по-разному, повторяйте их. Запись, встречающаяся дважды, имеет вдвое больший шанс. Чтобы изменить продолжительность вращения, правьте значения delay: - общее время равно сумме всех задержек.
Чтобы сменить, какие предметы появляются во время вращения, замените material: в items каждого кадра. Они декоративные - реальный приз идёт из onAnimEnd, а не “куда попадёт вращение”.
Попробовать
Заголовок раздела «Попробовать»После установки example pack:
- Положите бандл в
plugins/AbstractMenus/menus/example/. /am reload.- Введите
/ame_rouletteв игре. Смотрите на вращение, узнайте, что выпало.