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.

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:
| Koppelpunt | Interface | Te implementeren in |
|---|---|---|
| Inventory (voorwaarden op items, itembeloningen) | IQuestwrightInventoryProvider | Blueprint of C++ |
| Stats / attributen (voorwaarden op attributen) | IQuestwrightStatProvider | Blueprint of C++ |
| Backend voor opslaan | IQuestwrightSaveProvider | C++ |
| Spraaksynthese | IQuestwrightVoiceProvider | C++ (editor) |
| Ontvanger voor gezichtsanimatie, smart objects | provider-interfaces | C++ |
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.