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

Ход матча в Extractioncraft

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

Создание матча

/exc createMatch <contentPackage.yml> передаёт значение betterStructuresModulesContainerName из пакета контента плагину BetterStructures, который асинхронно генерирует совершенно новый инстансированный мир. Когда генерация завершается:

  • Для этого мира создаётся ExtractionMatch, который начинается в состоянии ожидания.
  • Игрок, выполнивший команду, добавляется в матч и телепортируется в случайно выбранную точку спавна в новом мире.
  • Спавнятся инстансированные боссы, определённые пулами спавна карты.

Любой, кто попадает в матч, переводится в режим Приключение (Adventure), а его прежний игровой режим и местоположение запоминаются, чтобы их можно было восстановить при выходе.

Здесь нет ни очереди, ни подбора игроков. Матч существует потому, что кто-то его создал.

Ожидание игроков

В текущей сборке нет команды присоединения

/exc createMatch — единственный путь в коде, который помещает игрока в матч. Extractioncraft не регистрирует подкоманду join, и ничто другое не вызывает метод присоединения общей среды выполнения, поэтому в матче сейчас находится ровно один игрок: тот, кто его создал. Всё описанное ниже о присоединении относится к общей среде выполнения матчей MagmaCore, на которой построен Extractioncraft, — она настроена, но к ней пока ничто не обращается.

Пока матч находится в состоянии ожидания:

  • Путь присоединения пропускал бы игроков вплоть до значения maxPlayers из пакета контента (8 для всех готовых пакетов Kobold Mines), отклоняя заполненный инстанс сообщением failedToJoinOngoingMatchAsPlayerInstanceIsFull.
  • Как только матч запущен, присоединиться больше никто не может — опоздавшие получают failedToJoinOngoingMatchAsPlayerMessage.
  • Наблюдение недоступно. Extractioncraft никогда не помечает свои матчи как доступные для наблюдения, поэтому подключения наблюдателей всегда отклоняются, а сообщения для наблюдателей в messaging.yml никогда не отправляются.
  • Выйти сейчас можно без последствий: правило удаления предметов действует только после того, как матч запущен.

Старт

Любой игрок внутри матча может выполнить /exc start.

  • Если присутствует меньше игроков, чем minPlayers, матч отказывается стартовать и всем сообщается об этом через matchFailedToStartNotEnoughPlayersMessage ($amount заменяется на необходимое количество).
  • В противном случае идёт 3-секундный обратный отсчёт с обновлением заголовка раз в секунду.
  • Если во время обратного отсчёта количество игроков падает ниже minPlayers, матч прерывается и сразу же завершается.

В момент завершения обратного отсчёта:

  • По всей карте расставляются сундуки и бочки.
  • Взаимодействие с редстоуном, заблокированное на время подготовки карты, разблокируется, чтобы можно было пользоваться рычагами эвакуации.
  • Запускаются 15-минутный таймер, сужающаяся граница мира и полоса босса с компасом.
  • В карту вставляется декоративная (нерабочая) версия каждой точки эвакуации.

Таймеры

ТаймерДлительностьДействие
Таймер матча15 минутОтображается как Timer MM:SS на боковой панели Extractioncraft, обновляется раз в секунду. Останавливается на 00:00.
Разблокировка точек эвакуацииЧерез 1 минуту после стартаВставляется рабочая версия каждой точки эвакуации вместе с её рычагом.
Окно эвакуации20 секундЗапускается рычагом точки эвакуации.
Открытие контейнера3 секундыВремя, которое нужно простоять неподвижно, чтобы обыскать сундук или бочку.

Сам таймер матча матч не завершает — это делает граница мира.

Граница мира

Граница начинается с 740 блоков в поперечнике и сужается примерно на один блок каждые 24 тика (около 1,2 секунды), достигая нуля незадолго до отметки в 15 минут (740 шагов сужения по 24 тика — это 14 минут 48 секунд).

Дистанция предупреждения границы устанавливается равной текущей ширине границы минус 50 (690 блоков на старте). Поскольку Minecraft трактует дистанцию предупреждения как «за сколько блоков до границы экран начинает окрашиваться», такое большое значение покрывает всю игровую зону, поэтому красное предупреждающее наложение включено у всех на протяжении всего матча, а не только при приближении к краю.

Поскольку BetterStructures масштабирует уровни боссов в зависимости от расстояния до центра карты — самые высокие уровни в середине, самые низкие по краям, — сужающаяся граница неуклонно выталкивает игроков в более сложную и более прибыльную часть карты.

Как только граница достигает нуля, урон от границы становится смертельным, а смертельный урон удаляет игроков из матча (см. ниже). Когда последний игрок покидает матч, матч завершается, а его мир удаляется.

Эвакуация

  1. Найдите точку эвакуации. Полоса босса в верхней части экрана представляет собой полосу компаса: она показывает маркер ⦿ для каждой точки эвакуации в пределах 90° от направления вашего взгляда, примерно по 3° на символ. Полоса появляется сразу после старта матча, но первую минуту остаётся пустой — маркеры рисуются только для рабочих точек эвакуации, а они не размещаются до срабатывания таймера разблокировки.
  2. Щёлкните правой кнопкой мыши по рычагу на точке эвакуации. Рычаг расходуется, всем в радиусе 10 блоков сообщается «You have triggered an exit!», и для этой точки открывается единственное 20-секундное окно эвакуации.
  3. Стойте внутри зоны эвакуации — куба, простирающегося на 3 блока от точки эвакуации во всех направлениях. Пока вы внутри, вы видите Extracting! in N seconds!.
  4. Выход за пределы зоны показывает Extraction cancelled!, но окно продолжает идти. Если вернуться внутрь до его закрытия, это всё равно засчитается.
  5. Когда окно закрывается, все, кто стоит внутри, эвакуируются одновременно: Victory / Extraction successful!. Они удаляются из матча и сохраняют всё, что несут с собой.
Одно окно на точку эвакуации

Использование рычага уничтожает его. Если вы активировали точку и упустили 20-секундное окно, эта точка эвакуации израсходована — ищите другую.

Смерть и потеря предметов

В матчах Extractioncraft у каждого игрока одна жизнь, а возрождения и сундука смерти нет.

  • Урон, который убил бы игрока, полностью отменяется. Вместо этого игрок удаляется из матча.
  • При удалении его здоровье восстанавливается до максимума, возвращается прежний игровой режим, и он телепортируется туда, где стоял до входа в матч.
  • Всё в его инвентаре привязывается к душе (чары soulbind от EliteMobs) — а затем, если удаление не было успешной эвакуацией и deleteItemsOnFailToExtract имеет значение true (по умолчанию), весь инвентарь очищается.

Тот же путь удаления используется для /exc leave, /exc quit и отключения от сервера, так что все три способа лишают вас добычи в запущенном матче.

Как вы покинули матчСохраняется ли добыча?
Эвакуировались через точку эвакуацииДа
Убиты мобом, игроком или границейНет (при конфигурации по умолчанию)
/exc leave или /exc quit посреди матчаНет (при конфигурации по умолчанию)
Отключились посреди матчаНет (при конфигурации по умолчанию)
Вышли, пока матч ещё ожидал или шёл обратный отсчётДа

Защита мира

Инстансированный мир матча защищён на протяжении всего своего существования:

  • Игроки не могут ломать или ставить блоки, использовать костную муку или наносить урон ландшафту.
  • Взаимодействие с редстоуном заблокировано до старта матча.
  • PvP заблокировано, когда в пакете контента установлено pvpEnabled: false.
  • Телепортация в мир матча и из него отменяется. Проходят только собственные телепорты плагина.
  • Пока матч запущен, среда выполнения ищет посторонних в мире матча. Операторы освобождены от этого и вместо удаления получают предупреждение в панели действий. Обратите внимание, что само удаление работает только для игроков, для которых у сервера ещё есть запись участника матча (для тех, кто побывал в матче после последнего перезапуска); игрок, который никогда не был в матче, обнаруживается, но фактически не перемещается.
  • Сторожевой механизм также проверяет игроков, покинувших область матча, но пытается вернуть их в стартовую локацию инстанса, которую Extractioncraft никогда не задаёт, — поэтому эта конкретная подстраховка сейчас не работает. На практике телепорты за пределы мира матча и так отменяются полностью.

Администраторы могут отключить эти защиты для себя командой /exc protection bypass.

Завершение матча

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

Матчи также сворачиваются при отключении плагина, что включает /exc reload и выключение сервера.