Цели и прогресс
Средний Обновлено 9 июл. 2026 г.
Содержание
Здесь описано всё между «принять квест» и «сдать квест»: как засчитываются цели, как условия ограничивают доступ к контенту, как эффекты меняют состояние и как квесты связываются в цепочки.
Цели
Отслеживаемая цель живёт внутри шага. Шаг использует обобщённый id (Goal, Deliver),
а конкретный вид цели задаётся в objective.type, поэтому вид можно поменять, ничего не
переименовывая:
- id: Goal
objective:
type: Kill
target: MyGame.Enemy.Wolf # GameplayTag; MUST be registered
count: 3
location: MyGame.Area.Farm # optional area gate
desc: "Kill the wolves near the farm"
next: Deliver
| Тип | Смысл | Как засчитывается |
|---|---|---|
Kill | убить N врагов с тегом | ваш код смерти сообщает событие Kill |
Collect | собрать N предметов с тегом | ваш код подбора сообщает событие Collect |
Reach | добраться до места с тегом | событие Reach или CompleteObjective из триггера |
TalkTo | поговорить с кем-то | автоматически: начало разговора засчитывает цель |
Deliver | вернуться к квестодателю | выполняется самим актом сдачи квеста |
Custom | что угодно ещё | игра сообщает Custom + ваш собственный тег |
Два удобных момента, о которых стоит знать:
- Целью
TalkToслужит ключ говорящего, а не тег (вtarget: Maryстоит тот же ключ, что вspeakers:и на вкладке Cast). Любой разговор с этим NPC засчитывает цель только тому игроку, который говорит, и только пока цель активна, поэтому разговор с NPC до принятия квеста корректно не засчитывает ничего. Deliverникогда не блокирует сдачу квеста: он существует, чтобы в трекере была строка «вернуться с докладом», и автоматически отмечается при сдаче квеста.
Засчитывание из вашей игры сводится к одному вызову (Blueprint или C++), серверно-авторитетному
и идемпотентному по EventSourceId:
Comp->ReportObjectiveEvent(Instigator, EQuestwrightObjectiveEventType::Kill,
MatchTags, LocationTags, EventSourceId);
Сопоставление тегов иерархическое: цель с target: Enemy.Wolf засчитывается событием с
тегом Enemy.Wolf.Alpha, так что перечислять каждый подтип не нужно.

GameplayTags: одно критическое правило
Каждое значение target, location, require/grant у вариантов выбора, tag в условиях и
grant_tag в эффектах представляет собой GameplayTag, который уже должен быть зарегистрирован в вашем
проекте, иначе он разрешается в невалидный тег и молча игнорируется. Это причина №1 жалобы
«моя цель не засчитывается». Регистрировать теги можно двумя способами:
- Нативно в C++ (предпочтительно для тегов, уходящих в релиз):
UE_DEFINE_GAMEPLAY_TAG_COMMENT(...). - Project Settings → Project → GameplayTags (пишет в
Config/DefaultGameplayTags.ini).
Используйте иерархию через точки (MyGame.Enemy.Wolf, MyGame.Area.Farm), и иерархическое
сопоставление заработает само собой. Единственное исключение: в цели TalkTo указывается ключ
говорящего, а не тег.
Условия
Условия ограничивают доступность квеста (available_when) и вход в шаг (require). Атомарные
виды:
| Форма | Смысл |
|---|---|
{ quest: <QuestId>, state: <state> } | другой квест находится в состоянии (available, active, completed, failed, declined) |
{ objective: <ObjId>, state: <state> } | цель active / complete / failed / inactive |
{ flag: <Name>, equals: <Value> } | квестовая переменная текущего прохождения равна значению |
{ tag: <GameplayTag> } | у игрока есть gameplay-тег |
{ item: <ItemId>, min: <N> } | в инвентаре ≥ N предметов (через ваш провайдер инвентаря) |
{ attribute: <AttrId>, min: <N> } | характеристика ≥ N (через ваш провайдер статов) |
Составные: { all: [...] } (И), { any: [...] } (ИЛИ), { not: <cond> }.
available_when:
all:
- { quest: Region.Intro, state: completed }
- { not: { flag: Betrayed, equals: "true" } }
Эффекты (on_end:)
Применяются при выходе из сцены:
on_end:
quest: accept # accept | complete | decline | fail | turnin
set: { RewardTier: Negotiated } # write flags, read back by flag conditions
grant_tag: Region.MetBran # grant gameplay tag(s) to the player
grant_quest: Region.FollowUp # auto-accept follow-up quest(s)
Сцена сдачи квеста обычно заканчивается на on_end: { quest: turnin } плюс end: completed.
Ветвление по выбору игрока
Чтобы квестодатель отреагировал на сделанный ранее выбор, установите флаг в момент выбора, а
затем опишите два шага сдачи: шаг, закрытый флагом, поставьте первым, а универсальный
оставьте последним. Маршрутизация квестодателя выбирает первый шаг сдачи, чей require проходит:
- id: Haggle
scene: { ... }
on_end: { quest: accept, set: { RewardTier: Negotiated } }
- id: DeliverHaggled # specific branch, goes before the catch-all
require:
all:
- { objective: Goal, state: complete }
- { flag: RewardTier, equals: Negotiated }
scene: { ... }
on_end: { quest: turnin }
end: completed
- id: Deliver # default branch, carries the tracked objective
require: { objective: Goal, state: complete }
objective: { type: Deliver, count: 1, desc: "Report back" }
scene: { ... }
on_end: { quest: turnin }
end: completed
Демо-квест из поставки использует ровно этот приём (торг ведёт к другой сцене расплаты).
Цепочки квестов
Цепочка представляет собой просто данные, никакого отдельного ассета:
- у квеста B
available_when: { quest: A, state: completed }(пререквизит), и/или - у квеста A
on_end: { grant_quest: B }(авто-принятие продолжения).
priority упорядочивает несколько квестов, предлагаемых одним квестодателем (квест с большим
значением предлагается первым).
UI New Chain в Studio записывает эти значения за вас перетаскиванием; ручное написание
эквивалентно. Валидация ловит циклы в цепочках и висячие ссылки на квесты и цели.
Барки
Фоновые барки (barks:) звучат над головой квестодателя по случайному таймеру; барки простоя
(idle_barks:) звучат при взаимодействии, когда квестодателю больше нечего предложить. И те и
другие проходят через тот же пайплайн озвучки и лицевой анимации голосом квестодателя:
barks:
interval: [8, 16]
lines:
- "Wolves howling again..."
- { text: "After dark, nobody sets foot in the yard.", weight: 2 }
idle_barks:
lines:
- "Rest easy. The farm's safe, thanks to you."
Награды
rewards:
base:
currency: 20
xp: 50
items:
- { def: SmokedMeat, count: 1 }
currency, xp и items записываются при сдаче квеста; сами блага ваша игра выдаёт через шов
провайдера инвентаря (см. Интеграция в рантайме).