MAATRIX GAMES / Блог / Программа лояльности для постоянных игроков сервера

Программа лояльности для постоянных игроков сервера

MAATRIX GAMES

Полгода растишь сообщество, а половина игроков заходит один раз и пропадает — знакомая картина. Удерживает не реклама и не ивент раз в месяц, а ощущение, что тебя здесь помнят и ценят за то, что ты возвращаешься. Ниже — рабочая схема программы лояльности: playtime rewards за ежедневный вход, звания за стаж, реферальная система за друзей, и как не скатить всё это в банальный pay2win, где решает не скилл, а количество залогиненных часов.

Зачем вообще нужна программа лояльности

Если сервер живёт больше пары месяцев, ты уже видел этот паттерн: новички приходят волнами (обычно после рекламы или вайпа), первую неделю активны, а дальше костяк редеет до 10-20% от изначального наплыва. Программа лояльности не решает проблему притока — это отдельная задача (реклама, SEO, сарафан), но она напрямую бьёт по удержанию: чем дольше игрок в системе поощрений, тем дороже ему уйти на другой сервер и начать «прокачку репутации» заново.

Есть и обратная сторона: криво настроенная система лояльности убивает конкурентность. Если новичок физически не может догнать старожила по ресурсам за разумное время — сервер превращается в клуб по интересам для трёх кланов, а остальные молча уходят. Задача — наградить постоянство, а не создать сословную систему.

Playtime rewards: бонусы за онлайн-время и ежедневный вход

Базовый механизм — учёт наигранного времени и выдача наград за пороги. Для Minecraft самый простой и проверенный вариант — связка EssentialsX + плагин учёта времени, например PlayTimeRewards или AmethystPlaytime (Spigot/Paper, работает через события входа/выхода и хранит накопленное время в SQLite или MySQL). Логика простая: плагин суммирует секунды онлайна на аккаунт, при достижении порога выдаёт команду через консоль (выдача предмета, ранга, доступа к разделу).

Пример конфигурации на Paper-сервере (plugins/PlayTimeRewards/config.yml):

rewards:
  1h:
    time-seconds: 3600
    commands:
      - "give %player% minecraft:diamond 2"
      - "tell %player% Спасибо, что заглянул! Держи алмазы."
  10h:
    time-seconds: 36000
    commands:
      - "lp user %player% permission set essentials.kits.veteran true"
  50h:
    time-seconds: 180000
    commands:
      - "lp user %player% parent add veteran"
      - "eco give %player% 5000"

Отдельно стоит настроить ежедневный вход (daily login streak) — это отличается от playtime тем, что важен факт захода, а не часы онлайна. Для этого подходит DailyRewards или связка с Vault для экономики: игрок заходит раз в сутки — получает нарастающий бонус (день 1 — 100 монет, день 7 — сундук с редкими ресурсами, дальше цикл сбрасывается). Это удерживает даже тех, кто заходит на 10 минут проверить базу — привычка «зайти и получить» работает лучше, чем чистый грайнд часов.

Для Rust аналогичную роль играет Economics + Rewards из экосистемы Oxide/uMod: очки лояльности начисляются за время на сервере и меняются на предметы через /rewards claim. Если тема экономики Rust вообще не знакома — разберись сначала с базовой настройкой в статье про экономику сервера Rust через плагины, программа лояльности логично встраивается поверх неё.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Звания и роли за стаж, а не только за донат

Ранговая система за время на сервере (а не только за донат) — то, что реально формирует статус и мотивирует оставаться. Стандартный стек — LuckPerms для управления группами прав, привязанный к тем же триггерам playtime-плагина.

Примерная лестница для выживание/RP-сервера:

РангУсловиеЧто даёт
Новичоквход на сервербазовые команды, /spawn, /tpa
Знакомый5 часов онлайнадоступ к /kit starter второй раз в неделю
Старожил30 часов ИЛИ 14 дней подряд заходацветной ник, /hat, доп. слот дома
Ветеран100 часовприоритет в очереди на вход, доступ к приватному чату ветеранов
Легенда сервера300 часов + минимум 6 месяцев с регистрациипубличное упоминание на доске почёта, кастомный титул

Важный нюанс: комбинируй условие по часам с условием по календарному времени (не меньше N дней с первого захода). Иначе находится способ фармить чистый онлайн афк-фермой или бустом через несколько клиентов, и ранг «Ветеран» получает не живой игрок, а бот. Настройка через LuckPerms делает это командой:

lp user Steve parent addtemp veteran 90d
lp user Steve permission set essentials.chat.color true

Права привязывай не только к косметике, но и к реальным удобствам — доп. слот /sethome, увеличенный лимит клеймов территории, приоритетный вход при полном сервере. Это то, что игрок физически ощущает, а не просто цветной текст в чате. Если система прав на сервере вообще ещё не настроена — начни с базовой статьи про настройку групп и прав через permissions-плагины, звания за лояльность — это надстройка над готовой иерархией групп.

Реферальная программа: награда за приведённого друга

Рефералка работает по схеме: приглашённый вводит код или ник пригласившего при первом входе, оба получают бонус после того, как приглашённый продержался на сервере оговоренный срок (это критично — без задержки в награде люди будут генерить фейковых «друзей» через мультиаккаунты и сразу же выходить).

Для Minecraft чаще всего собирают это на PlaceholderAPI + командный плагин-обвязку типа AdvancedReferral или самописный скрипт на Skript. Логика:

on first join:
    send player "&aВведи /ref <ник друга> в течение 24 часов, чтобы получить бонус"

command /ref <player>:
    trigger:
        set {referral::%player%} to arg-1
        add 1 to {pending_referrals}

every 1 hour:
    loop all players:
        if {referral_time::%loop-player%} is set:
            if difference between now and {referral_time::%loop-player%} > 3 days:
                if {loop-player}'s playtime > 3 hours:
                    give 1000 coins to {referral::%loop-player%}
                    give 500 coins to loop-player

Для FiveM/RP-серверов рефералку удобнее вести через Discord-бота — приглашённый привязывает Discord-аккаунт к игровому через бота, бот проверяет через RCON, что игрок реально заходил и провёл на сервере минимум N часов, и только потом начисляет награду через базу. Если у тебя уже есть Discord-бот для управления сервером — логика начисления рефералок отлично встраивается в существующую интеграцию Discord-бота с RCON-командами, не нужно городить отдельную систему.

Обязательно ставь лимит на количество рефералов в день/неделю на аккаунт (3-5 достаточно) — иначе находится желающий зарегистрировать 20 пустых аккаунтов и обнулить экономику сервера за вечер.

Как не превратить лояльность в pay2win

Это главная грабля всей темы. Награды за время делятся на три категории — и от того, в какую категорию попадает конкретный бонус, зависит, ломает он баланс или нет:

  • Косметика (безопасно всегда): цветные ники, титулы, частицы, кастомные питомцы-компаньоны без статов, эксклюзивные скины построек. Не влияет на PvP или экономику, чистый статус.
  • Удобство (безопасно в разумных пределах): доп. слоты телепортов, приоритет входа при заполненном сервере, увеличенный радиус клейма territoria, доступ к отдельным зонам без буста статов. Здесь важно не переборщить — если у ветерана впятеро больше складов, чем у новичка, это уже экономическое преимущество.
  • Прямая сила (опасная зона): бесплатное снаряжение, боевые бафы, редкие ресурсы без крафта, деньги/валюта в промышленных объёмах. Именно это превращает лояльность в pay2win — только вместо доната платят временем, что для конкурентного PvP-сервера ничем не лучше.

Практическое правило, которое стоит держать в голове при проектировании каждой награды: если бонус даёт прямое преимущество в бою или экономике — либо делай его временным/расходуемым (не накопительным навсегда), либо ограничивай масштаб так, чтобы разрыв с новичком закрывался за разумные 1-2 недели активной игры. На survival/PvE-сервере планка мягче — там грайнд-эффект в целом ожидаем игроками жанра. На конкурентном PvP или RP с балансом факций — жёстче, там любой перекос быстро замечают и обсуждают в чате.

Хороший тест перед запуском системы: распиши на бумаге, сколько объективных игровых часов новичку нужно, чтобы закрыть разрыв со «Старожилом». Если ответ больше месяца плотной игры — награды слишком щедрые для ранних тиров, стоит их урезать.

Экономика наград: откуда брать монеты и предметы, чтобы не сломать баланс сервера

Тут завязка на общую экономику сервера — если у тебя уже настроен Vault как прослойка между плагинами экономики, добавление наград лояльности не требует отдельной валюты, используешь существующую. Ключевое правило — эмиссия наград не должна быть больше эмиссии из обычного геймплея (крафт, торговля, квесты), иначе инфляция монет за пару недель обесценит внутреннюю экономику полностью.

Практический ориентир (именно ориентир, не точная цифра — подгоняй под свою экономику): суммарная выдача за playtime-награды и рефералку не должна превышать 10-15% от объёма монет, которые игрок в среднем зарабатывает обычной игрой за тот же период. Нет метрик по обычному заработку — временно выдавай предметы вместо валюты, это проще откатить, чем деньги, уже разошедшиеся по рынку.

Для отслеживания перекоса после запуска программы хватит простого лога через RCON раз в сутки (общий баланс валюты на сервере, топ-10 держателей). Если масса валюты растёт линейно без остановки — где-то награды переливают больше, чем экономика поглощает.

Настройка и мониторинг: конфиги, база данных, антифрод

Все перечисленные плагины (PlayTimeRewards, LuckPerms, Economics, реферальные скрипты) хранят данные либо в SQLite (для маленьких серверов до ~50 онлайна), либо в MySQL (рекомендуется от среднего размера сообщества — параллельная запись стабильнее, плюс проще делать бэкапы отдельно от игрового мира). Пример config.yml для подключения к MySQL в PlayTimeRewards:

storage:
  type: MYSQL
  host: 127.0.0.1
  port: 3306
  database: playtime_rewards
  username: mc_rewards
  password: "укажи_свой_пароль"
  table-prefix: pr_

Регулярно чисти базу от «мёртвых» записей — аккаунтов, не заходивших полгода, чтобы таблицы не разрастались бесконечно и запросы плагина не тормозили при рестарте сервера. Бэкап базы наград делай отдельно от бэкапа мира — если откатишь мир из-за грифа или бага, обидно откатывать заодно и накопленные месяцами часы игроков.

Антифрод-меры, которые стоит включить сразу, а не после первого инцидента:

  • лимит на количество аккаунтов с одного IP для получения playtime-наград (плагины типа AntiAFK или встроенные модули против афк-ферм);
  • минимальный порог активности (клики/движение) для засчёта онлайна, а не просто факт подключения;
  • задержка выдачи реферальной награды на 3-7 дней с проверкой реальной активности приглашённого, а не мгновенная выдача при первом входе.

Нужен игровой сервер?

MAATRIX GAMES — 45+ игр, деплой за минуты, DDoS-защита, автобэкапы. Тарифы от 399 ₽/мес.

Создать сервер

Частые вопросы

Нужна ли отдельная валюта для программы лояльности или использовать основную экономику сервера?

Проще и надёжнее использовать основную экономику через Vault — отдельная валюта усложняет учёт и требует дополнительного UI/команд, оправдана только на крупных серверах с развитой экономической моделью.

Как быстро сбрасывать daily-стрик, если игрок пропустил день?

Обычно сброс через 24-48 часов простоя — жёсткие 24 часа наказывают за один пропущенный вечер, поэтому многие сервера дают 36-48 часов на «прощение» без потери стрика.

Стоит ли давать награды лояльности донатерам вдвойне?

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

Что делать с игроками, которые фармят playtime через афк-фермы?

Ставь проверку активности (движение, взаимодействие с миром) вместо простого факта подключения, плюс кик по AFK-таймеру для тех, кто не двигается дольше 10-15 минут.

Можно ли перенести накопленный прогресс лояльности при вайпе сервера?

Технически да, если хранить прогресс отдельно от игрового мира (в MySQL, не привязано к сохранению карты) — многие сервера специально сохраняют звания и рефералку через вайпы, чтобы не терять комьюнити.