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

Промокоды и рефералы (HelgaPromo)

HelgaPromo — свой плагин, исходники лежат в plugins-src/helgapromo. Он показывает, откуда пришёл новый игрок (от друга или от блогера), и награждает обе стороны. Ещё через него идут акции с промокодами и одноразовые коды за опросы.

Виды кодов​

ВидКодКто создаётКогда можно ввести
Реферальныйник игрокаесть у каждого, кто заходил на серверпервые 10 часов игры, один раз за всё время
Блогерскийлюбой, например HELGA_IVANадминтак же — вместо реферального
Акциялюбой, например NEWYEARадминв любое время, каждый код один раз
Одноразовыйслучайные 10 символов из серииадмин, generate / giveпока серия действует; код срабатывает один раз, игрок получает награду серии один раз

От кого пришёл игрок, записывается один раз: реферальный или блогерский код, сменить нельзя. Регистр в кодах не важен; символы — A-Z 0-9 _, длина от 3 до 16.

Как работает приглашение​

  1. Новичок пишет /promo <код> (или вводит код через меню /ref) в первые entry-window-hours часов игры и сразу получает награду invitee.
  2. Приглашение засчитывается, когда новичок наиграет confirm-hours (3 часа). Тогда награду inviter получает пригласивший — если он не в сети, то при следующем входе.
  3. Чем больше засчитанных приглашений у кода, тем выше его уровень и тем больше награды обеим сторонам (levels.yml).

Защита от твинков. Через AuthMe сравниваются IP регистрации и последнего входа новичка с другими аккаунтами и с владельцем кода. При совпадении (authme.strict: false, по умолчанию) код принимается, новичок награду получает, а приглашение помечается «на проверке» и само не засчитывается. Решение принимает админ (suspicious, approve, reject). При strict: true такой код просто не принимается.

Если сервер стоит за прокси, который не передаёт реальные IP, проверка фактически не работает: локальные адреса пропускаются.

Игрокам​

КомандаЧто делает
/promo <код>ввести код
/refменю «Пригласи друга»: свой код, уровень и прогресс, лесенка наград, приглашённые, топ, ввод кода
/ref topтоп-10 в чат

Право helgapromo.use — у всех по умолчанию. В /menu HelgaShop кнопка ставится строчкой в plugins/HelgaShop/menu.yml с command: ref (см. «Главное меню /help»).

Админу​

/promoadmin — право helgapromo.admin, по умолчанию у OP. Коды и ники дополняются по Tab.

ЗадачаКоманды
Код блогеру/promoadmin create blogger HELGA_IVAN Ivan --level max (ник и уровень необязательны; без владельца код только считает приглашённых)
Акция/promoadmin create promo NEWYEAR --uses 100 --expires 2027-01-10, затем /promoadmin addcmd NEWYEAR eco give {player} 1000
Одноразовые коды/promoadmin create onetime OPROS, /promoadmin addcmd OPROS eco give {player} 500, затем /promoadmin generate OPROS 200 или /promoadmin give OPROS Ник
Награды кодаaddcmd <код> <команда>, delcmd <код> <номер>, cmds <код>
Уровень и владелецsetlevel <код|ник> <N|max|auto>, setowner <код> <ник|none>
Включить, выключить, удалитьenable, disable, delete <код> — история приглашений после удаления остаётся
Статистикаstats <код>, list <код> [страница] — приглашённые
Откуда пришёл игрокwho <ник>
Подозрительныеsuspicious, затем approve <ник> или reject <ник>
Перечитать конфигиreload

--level max закрепляет последний уровень лесенки: если позже добавить новые уровни, код получит их сам.

Одноразовые коды нужны для наград за опрос и подобного — такой код бесполезно пересылать друзьям. Имя серии (OPROS) само не вводится. generate пишет коды в файл plugins/HelgaPromo/codes/OPROS-<дата>.txt, по одному на человека; give присылает код игроку в чат, удобно из консоли или другого плагина. Сколько кодов уже активировано — stats OPROS. Удаление серии удаляет и все её коды.

В наградах — обычные консольные команды других плагинов (eco, crazycrates …). Подстановки: {player} — новичок или тот, кто вводит акцию, {inviter} — пригласивший, {code}, {level}. Если команда упала, остальные всё равно выполняются, ошибка пишется в лог.

Файлы​

Всё в plugins/HelgaPromo/, после правки — /promoadmin reload.

ФайлЧто в нём
config.ymlокно ввода (entry-window-hours: 10), порог засчитывания (confirm-hours: 3), топ, authme.strict
levels.ymlлесенка уровней: need, награды invitee / inviter, тексты display-* для меню
promos.ymlакции и серии одноразовых кодов (one-time: true) — можно задавать здесь вместо команд
menu.yml, messages.ymlменю /ref и все тексты
promo.dbбаза SQLite — в бэкап

Сейчас уровни такие: 1 (с нуля), 2 (5 засчитанных), 3 (15), 4 (40). У первого уровня need должен быть 0, дальше по возрастанию — иначе плагин оставит прежнюю лесенку и напишет ошибку в лог.

Плейсхолдеры​

ПлейсхолдерЧто выводит
%helgapromo_top_<1-10>_name%ник на месте, для блогерского кода без владельца — сам код; пустое место — ---
%helgapromo_top_<1-10>_count%засчитанных
%helgapromo_top_<1-10>_level%уровень
%helgapromo_count%, %helgapromo_pending%засчитано и ждут у игрока
%helgapromo_level%, %helgapromo_next%уровень и сколько осталось до следующего (max на последнем)
%helgapromo_source%по какому коду пришёл игрок, или -

Топ пересчитывается раз в минуту. Строка голограммы в DecentHolograms: &e1. %helgapromo_top_1_name% &7— &a%helgapromo_top_1_count%.

Выкладка​

Сборка и установка — в README.md репозитория: mvn clean package → target/HelgaPromo-1.0.0.jar, для сборки нужен AuthMe API в локальном Maven. Работает без AuthMe и PlaceholderAPI, но тогда без проверки твинков и без плейсхолдеров.