CloudRush — PvE-ивент на сбор ресурсов

Приветствуем вас в нашей новой статье! Серверов с по-настоящему уникальными фишками можно пересчитать по пальцам: всё интересное давно слито и растиражировано, а нового почти никто не разрабатывает. Мы решили эту картину поправить и сделали ивент, который заставляет весь онлайн бросить свои дела и побежать в одну точку.

Раз в час на карте вырастает постройка, в ней стоит НПС по имени СУТЕР, и он скупает один-единственный предмет. Какой именно — сервер решает заново каждый раз. У игроков есть десять минут, чтобы натаскать этого добра больше, чем сосед.

Как проходит ивент

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

Дальше начинается гонка. Игроки несут нужный предмет и сдают его НПС, а меню показывает таблицу лидеров в реальном времени — видно, кто сейчас первый и сколько до него не хватает. Именно это и превращает обычную сдачу ресурсов в драку: до последней минуты никто не уверен, что удержит место.

cloudrush
cloudrush
cloudrush
cloudrush
1 / 4

Тайминги из коробки

ЧтоЗначениеЧто это даёт
Периодичность появления3600 сек (час)Ивент попадает в каждый игровой вечер, но не приедается
Длительность600 сек (10 минут)Успевают и те, кто был занят — но бежать надо сразу
Смена стадии постройки180 сек (3 минуты)Здание меняется прямо на глазах, 3 стадии
Зона появления±1000 по X и ZКаждый раз новое место, лагерь у точки не поставишь
Радиус региона10 блоковПостройку не сломать и не застроить

Что именно скупает СУТЕР

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

Смысл именно в разбросе. Когда выпадает земля, побеждает тот, кто не поленился копать; когда выпадает алмаз — тот, кто рискнул расстаться с запасами. Один и тот же ивент играется по-разному в зависимости от того, что сегодня в цене.

Сдача и деньги

Сдавать можно пачками: правый клик отдаёт 64 штуки, левый — 16, любой другой клик — по одной. За каждую единицу игрок сразу получает деньги, причём цена плавающая — от 1 до 11 за штуку. Если экономика на сервере хрупкая, оплату за сдачу можно вовсе отключить одной строкой в конфиге, оставив только призы за места.

Награды за места

МестоБазовая наградаМножитель за сданное
1 место1000×1.5
2 место600×1.4
3 место300×1.3

Награда считается не фиксированной суммой, а от объёма сданного и умножается на коэффициент места. Это принципиальный момент: победа с перевесом в один предмет не даст того же, что победа с разгромом. Игроку выгодно тащить до последней секунды, а не остановиться, как только он вышел вперёд.

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

Живой НПС, а не манекен

СУТЕР — не безмолвная табличка. Он поворачивается к подошедшим игрокам, а всем в радиусе десяти блоков раз в полминуты бросает реплики: подначивает, напоминает про награду за первое место, комментирует конкуренцию. Реплики лежат списком в конфиге — можно переписать под голос вашего сервера или отключить целиком.

Внешность НПС тоже ваша: тип, отображаемое имя, скин. По умолчанию это игрок со скином, но никто не мешает поставить любого другого.

Что настраивается

  • Время появления, длительность и смена стадий — до секунды
  • Список скупаемых предметов — любой длины
  • Цена за единицу или полное отключение оплаты
  • Сколько предметов уходит за каждый вид клика
  • Регион вокруг постройки — включается и выключается
  • Квадрат карты для появления и список блоков, которых надо избегать
  • Все три награды: суммы, множители и команды консоли
  • Внешность и реплики НПС
  • Действия при старте и финале — сообщения, тайтлы, любые команды
Отдельно отметим: расписание можно отдать нашему плагину CloudEventManager — тогда CloudRush перестаёт считать время сам и встаёт в общую очередь ивентов сервера, без наложений одного на другой.

Что можно поменять в конфиге

Ниже — не выдержка «для галочки», а рабочий config.yml так, как он приходит вместе с плагином. Почти любая цифра в ивенте задаётся здесь, править исходники не нужно.

Сначала расписание и стадии. Три числа в секундах решают весь ритм ивента: как часто приходит скупщик, сколько он стоит и как быстро вокруг него растёт схематика.

settings:
  external-scheduler: false  # true → расписанием рулит CloudEventManager
  times:                     # время в секундах
    start-repeat: 3600       # периодичность спавна
    to-stop: 600             # до окончания ивента
    to-change-stage: 180     # периодичность смены стадии
  stages:
    change-enable: true      # false — всегда первая схематика из списка
    amount: 3                # количество стадий

Схематики лежат в папке stages и называются строго stage1.schem, stage2.schem и так далее.

Обратите внимание на external-scheduler. Поставили true — собственный таймер плагина выключается, и ивент встаёт в общую очередь CloudEventManager. Так на сервере не случится ситуации, когда Раш, Метеорит и Гробница стартуют в одну минуту.

Дальше — экономика. Цена задаётся не одним числом, а диапазоном: за каждую единицу сданного предмета игрок получает случайную сумму внутри вилки. Количество за клик тоже настраивается — правым можно сдавать сразу стак.

  price:
    enable: true
    amount: '1-11'   # цена за ЕДИНИЦУ товара, вилка
  sell-count:
    DEFAULT: 1       # любой клик, кроме описанных ниже
    RIGHT: 64
    LEFT: 16

Сам скупщик: тип сущности, ник над головой, скин, поворот головы за игроками — и прямоугольник координат, внутри которого он появляется. Блоки из списка avoid-blocks плагин обходит, так что НПС не встанет посреди лавы или океана.

  npc:
    type: PLAYER
    display: '&e&lСУТЕР'
    look: true            # смотреть на игроков
    skin: 'floerka'
  spawn:
    world: world
    min_x: -1000
    max_x: 1000
    min_z: -1000
    max_z: 1000
    avoid-blocks:
      - 'LAVA'
      - 'WATER'
  region:                 # приват вокруг НПС
    enable: true
    radius: 10

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

  prizes:
    '1':
      vault: 1000
      vault-type: 2        # 1 — фикс, 2 — от сданного количества
      vault-multiply: 1.5  # множитель, только при vault-type: 2
      actions:
        - 'console:rub give %player% 1000'
        - 'message:&fПолучена награда за 1 место'

Второе место по умолчанию — 600 и множитель 1.4, третье — 300 и 1.3.

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

Наконец, весь текст ивента — ваш. Реплики НПС для тех, кто стоит рядом, объявление о спавне с координатами, шапка и подвал итоговой таблицы, строка каждого места в топе, сообщения о сдаче предмета. Всё это лежит в конфиге обычными строками с цветовыми кодами.

  near-messages:
    enable: true
    radius: 10
    repeat-time: 30
    messages:
      - '&fХорошо идёте! Продолжаем в том же духе'
      - '&fПервое место получает &e1000 &fрублей'
  on-stop:
    top-message: '%index%: %player% - %amount% (получил %vault%)'

Отдельным файлом идёт items.yml со списком скупаемых предметов и inventory.yml с оформлением меню сдачи — их тоже можно переписать целиком под свой сервер.

Итог

CloudRush — это ивент, который не требует от игрока ни прокачки, ни доната, ни умения драться. Нужен только азарт и десять минут. Поэтому в него включаются и новички, и старожилы, а сервер получает всплеск онлайна каждый час.

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