Интеграция в рантайме
Средний Обновлено 9 июл. 2026 г.
Содержание
Questwright нативен для движка и самодостаточен; поверхность интеграции сознательно небольшая. Эта страница описывает все точки соприкосновения плагина с кодом вашей игры (C++ или Blueprint).
Квестовый компонент
Прогресс квеста представляет собой факт о паре (игрок, квест): он живёт в UQuestwrightQuestComponent,
который автоматически добавляется каждому PlayerState (и никогда не хранится на NPC). Получить
его можно откуда угодно:
UQuestwrightQuestComponent* Comp = UQuestwrightQuestComponent::Get(SomeActor);
UQuestwrightQuestComponent* Local = UQuestwrightQuestComponent::GetLocalPlayer(World);
Засчитывание целей
Когда происходит что-то значимое для квеста (убийство, подбор предмета), сделайте один вызов
(BlueprintCallable, серверно-авторитетный, идемпотентный по EventSourceId):
Comp->ReportObjectiveEvent(Instigator, Type, MatchTags, LocationTags, EventSourceId);
Каждая активная цель, чьи type и (иерархически сопоставленные) теги target/location
подходят под событие, увеличивает счётчик. Если передать убийцу в Instigator, засчитается
только этому игроку; если никого не передать, засчитается всем (запасной вариант для общего мира). Для
сюжетных моментов триггер или диалог может вместо этого вызвать:
Comp->CompleteObjective(QuestId, ObjectiveId);
UI из коробки
Добавьте UQuestwrightQuestHUDComponent на ваш PlayerController, и вы получите экранный трекер
целей, журнал квестов (привяжите клавишу к ToggleJournal) и всплывающие уведомления о
состоянии квестов.

Все виджеты написаны на C++ и заменяются вашими подклассами. Либо пропустите их вовсе и постройте собственный UI на делегатах, описанных ниже.
Швы провайдеров
Вместо собственного инвентаря или статов Questwright разговаривает с вашими через интерфейсы с работающими реализациями по умолчанию:
| Шов | Интерфейс | Где реализуется |
|---|---|---|
| Инвентарь (условия по предметам, награды предметами) | IQuestwrightInventoryProvider | Blueprint или C++ |
| Статы / атрибуты (условия по атрибутам) | IQuestwrightStatProvider | Blueprint или C++ |
| Бэкенд сохранений | IQuestwrightSaveProvider | C++ |
| Синтез голоса | IQuestwrightVoiceProvider | C++ (редактор) |
| Приёмник лицевой анимации, smart objects | интерфейсы провайдеров | C++ |
Состояние квестов как GameplayTags
Вызовите SetTagTargetActor(Pawn), и компонент спроецирует теги Questwright.Quest.State.*
на AbilitySystemComponent: состояние квестов становится доступным в требованиях активации
способностей и в любой вашей системе условий на тегах.
Делегаты
Для собственного UI или игровых реакций:
OnQuestStateChanged: принят / завершён / отклонён / провален;OnObjectivesChanged: сдвинулся счётчик или завершилась цель;OnJournalDirty: изменилось что-либо из отображаемого в журнале;OnProgressLoaded: применён сохранённый прогресс (см. Сохранения и мультиплеер).
Токены динамического текста
Плейсхолдеры {PlayerName} и собственные {Token} в диалогах и тексте журнала подставляются
в момент отображения подсистемой GameInstance:
UQuestwrightTextVarsSubsystem* Vars = GameInstance->GetSubsystem<UQuestwrightTextVarsSubsystem>();
Vars->SetPlayerName(TEXT("Ellie"));
Vars->SetTextVar(TEXT("Faction"), TEXT("Rangers")); // used as {Faction}
Оба сеттера помечены как BlueprintCallable. Подстановка использует FText::Format, поэтому она безопасна
для локализации.
Мост «диалог → квест»
Диалоговые сцены меняют состояние квеста через свои эффекты on_end (quest: accept / turnin / decline / fail, флаги set:, grant_tag, grant_quest), поэтому склеивающий код между
разговорами и квестами писать не нужно. См.
Цели и прогресс.