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

Craft Engine

Блоки, мебель и предметы CraftEngine в квестах, а также индивидуальные квестовые зоны для игроков.

Платныеv1.1Интеграции
ТребуетсяTypeWriter0.9CraftEngineQuest (TypeWriter extension)

Обзор​

Craft Engine соединяет CraftEngine с TypeWriter. Ваши пользовательские блоки, мебель и предметы становятся тем, на что может реагировать квест: события, когда игрок ломает, ставит или кликает по ним, цели, которые их считают, факты и переменные, читающие то, что игрок держит или на что смотрит, и действия, которые их ставят, заменяют или удаляют.

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

Расширение написано для Paper и Folia: любое изменение мира или инвентаря выполняется в регионе, которому оно принадлежит.

Возможности​

  • События блоков и мебели — реагируйте на разрушение, установку, взаимодействие и удары по пользовательским блокам и мебели, включая отклонённые установки.
  • Правила размещения — отклоняйте установку или удар, если у игрока нет права или он не соответствует criteria.
  • Считающие цели — разрушение, установка или замена пользовательских блоков и мебели как цель квеста; каждая позиция засчитывается один раз для игрока.
  • Действия над миром — установка, удаление или замена блока либо предмета мебели и хранение собственных данных на установленной мебели.
  • Квестовые зоны — вид блоков и мебели для каждого игрока (или группы), запоминаемый между посещениями.
  • Подмена инвентаря — забирайте весь инвентарь игрока или только выбранные предметы при входе в зону и возвращайте при выходе.
  • Аудитория фальшивых блоков — показывайте аудитории фиксированный набор блоков и мебели, ничего не записывая.
  • Инструменты для предметов — выдача и удаление предметов CraftEngine по id и реакция на их подбор, выброс или поедание.
  • Факты, переменные и аудитории — чтение предмета в руке, блока или мебели, на которые смотрит игрок, перезарядок и группировка игроков по тому, что они держат или на чём сидят.

Установка​

  1. Установите CraftEngine на сервер. Расширение собрано под CraftEngine 26.8.
  2. Убедитесь, что установлено расширение TypeWriter Quest. Оно предоставляет записи квестов и целей, используемые целями.
  3. Скачайте расширение в магазинах (см. кнопки в панели выше) и положите JAR-файл в plugins/Typewriter/extensions/.
  4. Перезапустите сервер. В логе вы должны увидеть [CraftEngine] CraftEngineExtension initialized successfully.

Быстрый старт​

В этом руководстве каждый игрок получает собственную разрушаемую печать в комнате-головоломке.

  1. В веб-панели откройте страницу manifest и добавьте Quest State Artifact. Оставьте artifactId сгенерированным.
  2. Добавьте Quest Zone Audience и задайте artifact равным только что созданному артефакту. Оставьте zoneId пустым, чтобы использовался id записи, и оставьте trackBlocks включённым.
  3. Вложите аудиторию зоны в аудиторию, определяющую, кто находится в комнате (например, аудиторию области или квестовую аудиторию). Игроки, входящие в неё, получают собственный вид.
  4. На странице sequence добавьте событие On Block Interact для блока вашей печати. Оно запускает действие Set Quest Block.
  5. В действии задайте artifact и zoneId теми же значениями, что и у зоны (скопируйте id записи зоны), привяжите location к позиции события и задайте blockId равным сломанной печати (namespace:broken_seal). Оставьте пустым, чтобы показывать воздух.
  6. Добавьте действие Clear Quest State там, где квест заканчивается, чтобы комнату можно было пройти снова.
  7. Опубликуйте, затем проверьте с двумя игроками: каждый открывает свою печать, а другой по-прежнему видит свою целой.
подсказка

Для простой считающей задачи зона не нужна: добавьте цель Break Block, заполните item id блока и задайте amount.

Как это работает​

Изменение, сделанное в зоне, — это отклонение (deviation): блок, отправленный одному игроку поверх настоящего, предмет мебели мира, скрытый от одного игрока, либо призрак (ghost) — предмет мебели, существующий только для этого игрока. По призраку могут кликать правой кнопкой и ломать его те, кто его видит, но коллизии у него нет ни для кого.

Коллизия всегда следует за миром. Блок, который игрок сломал, всё ещё преграждает ему путь, блок, который он поставил, можно пройти насквозь, а скрытая мебель мира по-прежнему останавливает игрока, который её не видит. Стройте зоны там, где изменение нужно, чтобы его видеть и использовать, а не стоять на нём.

Состояние записывается в артефакт через пару секунд после последнего изменения и немедленно, когда игрок покидает зону или сервер останавливается. Сервер, который был убит, а не остановлен, может потерять последние секунды.

Конфигурация​

У расширения нет файла конфигурации. Текст строк целей можно изменить с помощью сниппетов TypeWriter:

СниппетПо умолчанию
craftengine.objective.display<display> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)
craftengine.objective.completed<green>✔</green> <st><display></st> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)

Записи​

Записей: 49, сгенерированы из исходного кода расширения.

Действия10
События13
Цели5
Факты8
Аудитории5
Переменные6
Звуки1
Артефакты1

Устранение неполадок​

Квестовая зона ничего не показывает, и ошибок нет. Действия и аудитория должны указывать одни и те же artifact, zoneId и group. Изменение, записанное под другим именем, записывается правильно, но никто его не читает. Если у аудитории zoneId пуст, нужно скопировать id записи самой аудитории.

Set Quest Block ничего не делает, а в логе написано «has no zone configured». У действия пуст zoneId. Задайте его. Для Set Quest Furniture то же самое.

В логе написано «cannot resolve» для id. blockId не является ни блоком CraftEngine, ни мебелью CraftEngine, ни ванильным материалом. Проверьте id с помощью Registry IDs. Если kind равен FURNITURE, id, не являющийся мебелью, отклоняется, а не показывается как блок.

Все в зоне видят одно и то же изменение. Действие записало изменение в мир. Действия Place и Remove, а также Replace Block со значением WORLD меняют настоящий блок. Внутри зоны используйте Set Quest Block, Set Quest Furniture или Replace Block с audience, равным AUTO или QUEST_ZONE.

Replace Block ничего не делает для игрока в двух зонах. При нескольких пересекающихся зонах и без zoneId действие отказывается работать и записывает строку в лог. Задайте zoneId нужной зоны.

Изменение мигает и возвращается после долгой прогулки. Клиенту, перезагружающему чанк, снова отдаётся настоящий мир, а зона заново отправляет свой вид каждые refreshInterval тиков в пределах refreshRadius блоков. Уменьшите refreshInterval или увеличьте refreshRadius.

События блоков не срабатывают для блока, сломанного в зоне. При включённом trackBlocks зона берёт действие на себя: разрушение или установка отменяются и записываются как отклонение. Продвигайте квест через события взаимодействия или через Set Quest Block.

Связанные расширения​

  • Nexo и ItemsAdder — такая же интеграция для других плагинов пользовательского контента.