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

QuestPlus

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

Приватныеv0.0.2Квесты и сюжет
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)Basic (TypeWriter extension)RoadNetwork (TypeWriter extension)Entity (TypeWriter extension)QuestCodex (TypeWriter extension)необязательно

Создано для сети BornToCraft. Это расширение описано для справки и не распространяется.

Обзор​

QuestPlus расширяет расширение TypeWriter Quest целью сопровождения, ежедневной ротацией квестов и фактом боевого статуса. При сопровождении NPC идёт от контрольной точки к контрольной точке по сети дорог, а игрок должен сохранить его живым и оставаться рядом. Временное определение квеста решает, когда доступен набор квестов и какие квесты выбираются на день.

Сопровождение использует расширения Quest, Basic, RoadNetwork и Entity: маршрут берётся из сети дорог, NPC — это экземпляр сущности, а компас или поток пути для игрока берётся из компаса Quest в QuestCodex, потому что цель сопровождения находима.

Индикаторы статуса квестов над головами NPC (npc_status_override) не входят в QuestPlus. Их предоставляет UiCore и его таблички.

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

  • Цель сопровождения — NPC следует по маршруту из узлов дороги, останавливается на каждой контрольной точке и должен дойти до конца.
  • Правила провала и сброса — игрок должен оставаться в радиусе охраны, NPC могут ранить мобы, и может действовать лимит времени.
  • Триггеры контрольных точек — триггеры старта, контрольной точки, потери, восстановления, сброса, завершения и провала, а также триггеры засады для каждой контрольной точки.
  • Отображение сопровождения — необязательный скорборд и босс-бар, показывающие контрольную точку, время и здоровье.
  • Действия сопровождения — запуск, продвижение, сброс и остановка сопровождения из любой последовательности.
  • Временные квесты — ротируемый пул: доступность по дням недели, часам и cron, число квестов, выбираемых каждый день, и лимит завершений.
  • Боевой статус — факт, равный 1 в течение нескольких секунд после того, как игрок ударил или его ударили.
  • Скрываемые цели — скрывайте цель, пока её квест не отслеживается.
  • Плейсхолдеры — прогресс, здоровье и время сопровождения, а также квесты дня с обратным отсчётом до следующей ротации.

Установка​

  1. Установите расширения TypeWriter Quest, Basic, RoadNetwork и Entity, которые QuestPlus объявляет как зависимости.
  2. По желанию: установите QuestCodex, чтобы показывать игроку маршрутные точки сопровождения.
  3. Поместите JAR-файл QuestPlus в plugins/Typewriter/extensions/ и перезапустите сервер.
  4. Постройте сеть дорог с помощью расширения RoadNetwork для маршрута сопровождения, см. Начало работы.

Начало работы​

Создайте миссию сопровождения:

  1. В веб-панели TypeWriter создайте сеть дорог с помощью расширения RoadNetwork и разместите узлы, через которые должен пройти ваш NPC. Поддерживайте рёбра актуальными: если путь не удаётся вычислить, NPC не дойдёт до своего узла.
  2. Добавьте запись Path Escort Activity. Задайте roadNetwork, перечислите идентификаторы узлов в nodes в порядке прохождения и задайте idleActivity равным тому, что NPC делает после завершения маршрута.
  3. Создайте экземпляр сущности для вашего NPC-сопровождаемого и задайте его activity равным этой Path Escort Activity. Экземпляр должен принадлежать активной аудитории, потому что QuestPlus использует отображение, которое TypeWriter уже запускает для него.
  4. Добавьте запись Escort Objective. Задайте quest, npc (ваш экземпляр сущности) и display. Настройте maxHealth, guardRadius, loseToleranceSec, spawnRadius и startRadius, а также необязательный globalTimeLimitSec.
  5. Свяжите триггеры: onEscortComplete — с тем, что должно произойти при успехе (например, действие, задающее факт для следующего шага квеста), а onEscortFail — с обработкой провала.
  6. Дайте игроку добраться до сопровождаемого. Сопровождение начинается само, когда игрок из аудитории цели оказывается в пределах startRadius от первого узла. Чтобы вместо этого запускать его из диалога или события, используйте Escort Start с objective.
  7. Каждый раз, когда NPC останавливается на контрольной точке, используйте Escort Next (например, после реплики диалога или отражённой засады), чтобы он пошёл к следующей.
  8. Опубликуйте и проверьте: NPC появляется возле первого узла, а сопровождение начинается, когда вы подходите к нему на расстояние startRadius.

Используйте /escort debug resolve <objective>, чтобы проверить, что первый узел и радиусы определены.

Засады

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

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

Когда сопровождение начинается, QuestPlus создаёт для NPC невидимый носитель здоровья, который видит только сопровождающий игрок. Ближайшие мобы в пределах guardRadius выбирают его целью. NPC теряет здоровье от ударов мобов (mobHitDamage) и может восстанавливаться (regenPerSec). Игроки не могут его ранить. Он полностью защищён, если включён invulnerable.

NPC идёт к следующему узлу дороги (узел считается достигнутым, когда NPC оказывается в пределах nodeReachRadius от него), затем ждёт, пока действие Escort Next не отпустит его. Достижение контрольной точки вызывает onCheckpoint и соответствующие триггеры засады. После последнего узла срабатывает onEscortComplete.

Сброс. Сопровождение возвращается к последней контрольной точке с полным здоровьем NPC, когда NPC или игрок умирает либо когда игрок остаётся дальше guardRadius в течение loseToleranceSec секунд. onEscortLost срабатывает, когда игрок выходит из зоны, а onEscortRecovered — когда возвращается. onEscortReset срабатывает при сбросе.

Провал. Сопровождение проваливается, когда истекает globalTimeLimitSec, когда игрок выходит, когда NPC исчезает или при Escort Stop. Срабатывает onEscortFail.

Действие Escort Reset отменяет сопровождение без какого-либо триггера провала.

Временные квесты​

Temporary Quest Definition — это фильтр аудитории. Его children показываются игрокам только пока он активен:

  • Доступность. Он активен в перечисленные daysOfWeek, между startTime и endTime (HH:mm), если они заданы, и когда совпадает cronExpression, если он задан.
  • Ежедневный выбор. Каждый день из quests случайно выбирается questsPerDay квестов. Выбор детерминирован для данного дня и записи, меняется в resetTime и сохраняется в Temporary Quest Artifact, на который ссылается artifact.
  • Лимит завершений. При maxCompleted больше 0 игроки, завершившие столько квестов дня, больше не видят дочерние элементы. Счётчик сохраняется в артефакте и сбрасывается вместе с днём.

Ежедневный выбор доступен через плейсхолдеры и подсчёт завершений. Сам фильтр не скрывает квесты, которые не были выбраны: используйте плейсхолдеры в своих меню или спроектируйте доступность квестов так, чтобы достижимы были только те квесты, которые вы показываете.

Боевой статус​

Combat Status Fact равен 1, пока игрок ударил сущность или был ударен ею в течение последних thresholdSeconds (по умолчанию 10), и 0 в остальных случаях. Используйте его в критериях, чтобы блокировать быстрое перемещение, диалоги или награды за выход во время боя. Он отслеживает только бой с участием игрока.

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

Теги MiniPlaceholders для текста MiniMessage.

Сопровождение, для сопровождающего игрока. Когда сопровождение не активно, значения нейтральны.

ПлейсхолдерВозвращает
<escort_checkpoint>Текущая контрольная точка в виде n/total, 0/0, когда сопровождение не активно.
<escort_time>Прошедшие секунды или оставшиеся секунды, когда у цели есть лимит времени.
<escort_health>, <escort_health_max>Здоровье NPC-сопровождаемого и его максимум, 0, когда сопровождение не активно.
<escort_is>1, когда сопровождение активно.
<escort_is_max>1, когда достигнута последняя контрольная точка.

Временные квесты, где id — идентификатор записи Temporary Quest Definition.

ПлейсхолдерВозвращает
<tempquest_active_quests:id>Идентификаторы сегодняшних квестов через запятую.
<tempquest_time_remaining:id>Время до следующей ротации в формате HH:MM:SS.
<tempquest_quests_per_day:id>Число квестов, выбираемых в день.
<tempquest_quest_name:id:n>Отображаемое название n-го квеста дня, начиная с 1.
<tempquest_quest_desc:id:n>Отображаемый текст n-го квеста.

Команды​

КомандаОписание
/escort debug start <objective>Запустить сопровождение для себя (только игрок).
/escort debug stopОстановить ваше сопровождение.
/escort debug skipnodeПродвинуть ваше сопровождение к следующей контрольной точке.
/escort debug scanНемедленно выполнить автоматическое сканирование старта.
/escort debug resolve <objective>Вывести первый узел и радиусы цели.

<objective> — это идентификатор или название записи Escort Objective. Команде нужно questplus.escort.debug.

Права​

ПравоЧто даёт
questplus.escort.debug/escort debug. У него нет значения по умолчанию, поэтому оно есть только у операторов, пока вы его не выдадите.

Записи​

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

Действия4
Цели1
Факты1
Аудитории1
Активности1
Артефакты1

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

NPC никогда не появляется. В логе написано «npc instance missing» или «has no display registered in the AudienceManager». npc цели должен быть экземпляром сущности, принадлежащим активной аудитории. Выполните /escort debug resolve <objective> и проверьте, что экземпляр существует.

В логе написано «is missing a path_escort_activity». У экземпляра сущности, используемого как npc, должна быть Path Escort Activity в качестве activity.

«node ... not found» или «has no nodes». В nodes активности перечислены идентификаторы, которых нет в выбранной roadNetwork, либо список пуст. Выберите узлы заново после редактирования сети.

«navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges.» NPC не может дойти до узла. Пересчитайте рёбра сети дорог и проверьте рельеф между узлами.

Сопровождение не начинается само. Игрок должен быть в аудитории цели (квест активен, а criteria цели истинны), в том же мире, что и первый узел, и в пределах startRadius от него. В противном случае запустите его через Escort Start. NPC появляется, только когда игрок находится в пределах spawnRadius от первого узла.

Сопровождение сразу сбрасывается. Игрок дальше guardRadius дольше loseToleranceSec, либо NPC умирает от ударов мобов. Увеличьте радиус или допуск, уменьшите mobHitDamage либо включите invulnerable.

NPC останавливается на каждом узле и не продолжает путь. Так и задумано: на каждой контрольной точке он ждёт Escort Next.

Все временные квесты скрыты. Определение активно только в свои daysOfWeek, между startTime и endTime и когда совпадает cronExpression. Проверьте их, а также лимит maxCompleted.

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

  • QuestCodex — компас и путь к маршрутным точкам сопровождения.
  • UiCore — индикаторы статуса квестов над NPC (npc_status_override).