Интеграция в рантайме

Средний Обновлено 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 разговаривает с вашими через интерфейсы с работающими реализациями по умолчанию:

ШовИнтерфейсГде реализуется
Инвентарь (условия по предметам, награды предметами)IQuestwrightInventoryProviderBlueprint или C++
Статы / атрибуты (условия по атрибутам)IQuestwrightStatProviderBlueprint или C++
Бэкенд сохраненийIQuestwrightSaveProviderC++
Синтез голосаIQuestwrightVoiceProviderC++ (редактор)
Приёмник лицевой анимации, 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), поэтому склеивающий код между разговорами и квестами писать не нужно. См. Цели и прогресс.