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

Кулдаун на голосование

Меню голосования с двумя кусками состояния: глобальный счётчик, который инкрементят все (общее количество голосов сервера за всё время), и персональная временная переменная, которая блокирует игрока на 24 часа после голоса. Связка incVar (глобальный) с setVarp ::1d (персональный временный) - типичный паттерн “голосуй раз в сутки”.

  • incVar для глобальных счётчиков, общих для всех игроков
  • setVarp с временным суффиксом ::1d
  • Плейсхолдер %var_:name:default% для глобальных переменных (синтаксис двоеточия и дефолта тот же, что у varp)
  • Связка глобальных и персональных переменных в одном click-обработчике
  • Dual-item для кнопки голосования (состояния ON_COOLDOWN и READY)

Два семейства переменных:

  • var_* / setVar / incVar - глобальные, на весь сервер. Все читают и пишут одно и то же значение. Здесь - для общего количества голосов.
  • varp_* / setVarp / incVarp - персональные. У каждого игрока своя копия. Здесь - для блокировки кулдауна.

При клике трогаются оба внутри одного блока actions:

actions {
incVar: "ame_vote_total" # глобальный счётчик +1
setVarp: "ame_vote_cd::1::1d" # персональная блокировка на 24 часа
...
}

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

Этот пример - самостоятельная демка. Чтобы привязать к настоящему голосованию (Votifier, MinecraftPocket и т.д.):

  1. Не давайте игроку кликать по кнопке голосования - награда триггерится внешним vote-сайтом/прокси.
  2. Используйте ту же связку incVar + setVarp внутри Bukkit-листенера, который обрабатывает входящие голоса.
  3. Поставьте перму вроде iconmenu.canclaim или другой гейт, и это меню превратится в “забрать награду за голос”, а не в “проголосовать”.

В разделе документации про переменные описаны опции персистентности, если нужны гарантии после рестарта на глобальном счётчике.

  1. Положите бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. Введите /ame_vote в игре.
  4. Кликните на лаймовую кнопку “Голосовать!”. Счётчик растёт, кнопка становится серой с обратным отсчётом 23ч 59м.