Runtime-integratie

Gevorderd Laatst bijgewerkt 9 jul 2026

Op deze pagina

Questwright is engine-native en staat op zichzelf; het integratieoppervlak is bewust klein. Deze pagina beschrijft elk raakvlak tussen de plugin en de code van je game (C++ of Blueprint).

Het questcomponent

Questvoortgang is een feit over de combinatie (speler, quest). Ze leeft op UQuestwrightQuestComponent, dat automatisch aan elke PlayerState wordt toegevoegd (en nooit op NPC’s wordt bewaard). Je haalt het overal op:

UQuestwrightQuestComponent* Comp = UQuestwrightQuestComponent::Get(SomeActor);
UQuestwrightQuestComponent* Local = UQuestwrightQuestComponent::GetLocalPlayer(World);

Doelen bijschrijven

Gebeurt er iets wat relevant is voor een quest, zoals een kill of het oppakken van een item, doe dan één aanroep (BlueprintCallable, server-authoritative, idempotent per EventSourceId):

Comp->ReportObjectiveEvent(Instigator, Type, MatchTags, LocationTags, EventSourceId);

Elk actief doel waarvan type en de (hiërarchisch gematchte) tags target/location bij het event passen, telt op. Geef je de killer mee als Instigator, dan wordt alleen die speler bijgeschreven; geef je niemand mee, dan gaat het naar alle spelers (fallback voor een gedeelde wereld). Voor verhaalmomenten kan een trigger of dialoog in plaats daarvan aanroepen:

Comp->CompleteObjective(QuestId, ObjectiveId);

UI uit de doos

Voeg UQuestwrightQuestHUDComponent toe aan je PlayerController en je krijgt de doeltracker op het scherm, het questjournaal (koppel een toets aan ToggleJournal) en toasts met de queststatus.

Het questjournaal geopend in de game, met de tracker en een statustoast in beeld

Alle widgets zijn in C++ gebouwd en vervangbaar door je eigen subclasses. Of sla ze volledig over en stuur een eigen UI aan met de delegates hieronder.

Koppelpunten voor providers

In plaats van een eigen inventory of stats mee te leveren, praat Questwright met die van jou via interfaces met werkende standaardimplementaties:

KoppelpuntInterfaceTe implementeren in
Inventory (voorwaarden op items, itembeloningen)IQuestwrightInventoryProviderBlueprint of C++
Stats / attributen (voorwaarden op attributen)IQuestwrightStatProviderBlueprint of C++
Backend voor opslaanIQuestwrightSaveProviderC++
SpraaksyntheseIQuestwrightVoiceProviderC++ (editor)
Ontvanger voor gezichtsanimatie, smart objectsprovider-interfacesC++

Queststatus als GameplayTags

Roep SetTagTargetActor(Pawn) aan en het component projecteert de tags Questwright.Quest.State.* op een AbilitySystemComponent: de queststatus wordt daarmee bruikbaar in de activatievoorwaarden van abilities en in elk voorwaardensysteem op tags dat je al hebt.

Delegates

Voor een eigen UI of reacties in de game:

  • OnQuestStateChanged: geaccepteerd / voltooid / geweigerd / mislukt;
  • OnObjectivesChanged: een teller is verschoven of een doel is voltooid;
  • OnJournalDirty: er is iets veranderd aan wat het journaal toont;
  • OnProgressLoaded: bewaarde voortgang is toegepast (zie Opslaan & multiplayer).

Tokens voor dynamische tekst

De placeholders {PlayerName} en eigen {Token}-placeholders in dialoog- en journaaltekst worden op het moment van tonen vervangen door een subsysteem van de GameInstance:

UQuestwrightTextVarsSubsystem* Vars = GameInstance->GetSubsystem<UQuestwrightTextVarsSubsystem>();
Vars->SetPlayerName(TEXT("Ellie"));
Vars->SetTextVar(TEXT("Faction"), TEXT("Rangers"));   // used as {Faction}

Beide setters zijn BlueprintCallable. De vervanging gebruikt FText::Format en is dus veilig voor lokalisatie.

Brug dialoog → quest

Dialoogscènes veranderen de queststatus via hun on_end-effecten (quest: accept / turnin / decline / fail, set:-vlaggen, grant_tag, grant_quest), zodat je geen lijmcode tussen gesprekken en quests hoeft te schrijven. Zie Doelen & progressie.