Configuration¶
This page covers all configurable settings for FWQuestSystem, from reset schedules to JSON serialization and party synchronization.
Quest Manager Settings¶
Configure the quest manager component via DefaultGame.ini or at runtime.
Default Properties¶
| Property | Type | Default | Description |
|---|---|---|---|
MaxActiveQuests |
int32 |
25 |
Maximum number of simultaneously active quests |
bAutoTrackNewQuests |
bool |
true |
Whether newly accepted quests are automatically tracked in the HUD |
bAutoTurnIn |
bool |
false |
Whether quests auto-turn-in when all tasks complete (skips NPC turn-in) |
bNotifyOnProgress |
bool |
true |
Whether to fire progress notifications for UI display |
MaxCompletionHistory |
int32 |
100 |
Maximum number of completed quests to retain in history |
DefaultGame.ini¶
[/Script/FWQuestSystem.FWQuestManagerSettings]
MaxActiveQuests=25
bAutoTrackNewQuests=true
bAutoTurnIn=false
bNotifyOnProgress=true
MaxCompletionHistory=100
Runtime Configuration¶
Reset Schedules¶
Daily and weekly quest resets are managed by UFWQuestStateSubsystem.
Reset Times¶
| Property | Type | Default | Description |
|---|---|---|---|
DailyResetHourUTC |
int32 |
0 |
Hour (0-23) in UTC when daily quests reset |
WeeklyResetDayOfWeek |
int32 |
1 |
Day of week (0=Sunday, 1=Monday, ..., 6=Saturday) |
WeeklyResetHourUTC |
int32 |
0 |
Hour (0-23) in UTC when weekly quests reset |
[/Script/FWQuestSystem.FWQuestStateSubsystem]
DailyResetHourUTC=6
WeeklyResetDayOfWeek=2
WeeklyResetHourUTC=6
This example sets daily reset at 06:00 UTC and weekly reset at Tuesday 06:00 UTC.
Reset Behavior¶
When a reset occurs:
- All quests with matching
RepeatType(DailyorWeekly) that are inCompleted,Failed, orAbandonedstate are transitioned toAvailable. - Task progress is cleared.
OnQuestStateChangedfires for each reset quest.- Completion count is preserved (for tracking total completions).
Cooldown Resets
EFWQuestRepeatType::Cooldown does not use the global reset schedule. Each quest tracks its own cooldown timer independently, starting when the quest is turned in.
Manual Reset Trigger¶
For testing or server-side administrative control:
UFWQuestStateSubsystem* QuestState = GetWorld()->GetSubsystem<UFWQuestStateSubsystem>();
QuestState->ProcessDailyReset(); // Reset all daily quests now
QuestState->ProcessWeeklyReset(); // Reset all weekly quests now
Party Synchronization Settings¶
Party quest behavior is configured per-quest via EFWQuestPartyMode on the quest definition. Global party settings:
| Property | Type | Default | Description |
|---|---|---|---|
PartyProgressRadius |
float |
5000.0 |
Maximum distance for party progress sharing (SyncProgress mode) |
bRequirePartyMemberInRange |
bool |
true |
Whether party members must be within radius for shared progress |
bAutoShareQuestOnAccept |
bool |
false |
Whether accepting a ShareOnly quest notifies party members |
[/Script/FWQuestSystem.FWQuestManagerSettings]
PartyProgressRadius=5000.0
bRequirePartyMemberInRange=true
bAutoShareQuestOnAccept=false
Party Mode Details¶
No party interaction. Quest is fully individual.
Party members who have the quest see each other's progress in the UI but progress is tracked independently. Optionally, accepting the quest sends a notification to party members.
Quest events from any party member within PartyProgressRadius contribute to all party members' progress. Example: If Player A kills a wolf and Player B is within range, both get credit.
All party members must be present (within radius) and have the quest active for any progress to count. If one member is out of range or does not have the quest, the event is ignored for everyone.
Design Consideration
RequireAll mode is strict. Consider using it only for group content (dungeons, world bosses) where party coordination is expected.
JSON Serialization¶
Quest state can be serialized to JSON for save files, server persistence, or cloud saves.
Save¶
UFWQuestStateSubsystem* QuestState = GetWorld()->GetSubsystem<UFWQuestStateSubsystem>();
FString JsonData = QuestState->SaveQuestState(PlayerController);
// Store JsonData in your save system
Load¶
FString JsonData = LoadFromSaveSystem(PlayerController);
bool bSuccess = QuestState->LoadQuestState(PlayerController, JsonData);
JSON Structure¶
{
"version": 3,
"playerId": "player-unique-id",
"savedAt": "2026-02-27T12:00:00Z",
"activeQuests": [
{
"questTag": "Quest.Side.SlayWolves",
"state": "Active",
"acceptedAt": "2026-02-27T10:30:00Z",
"tasks": [
{
"taskIndex": 0,
"currentProgress": 3,
"requiredProgress": 5,
"state": "Active"
}
]
}
],
"completedQuests": [
{
"questTag": "Quest.MainStory.TheBeginning",
"completedAt": "2026-02-26T15:00:00Z",
"completionCount": 1
}
],
"dailyResetTimestamp": "2026-02-28T00:00:00Z",
"weeklyResetTimestamp": "2026-03-02T00:00:00Z"
}
Serialization Settings¶
| Property | Type | Default | Description |
|---|---|---|---|
bIncludeCompletedQuests |
bool |
true |
Whether to include completed quest history in serialization |
bIncludeAbandonedQuests |
bool |
false |
Whether to include abandoned quest records |
bPrettyPrint |
bool |
false |
Whether to format JSON with indentation (development only) |
[/Script/FWQuestSystem.FWQuestStateSubsystem]
bIncludeCompletedQuests=true
bIncludeAbandonedQuests=false
bPrettyPrint=false
Logging¶
FWQuestSystem uses the LogFWQuest log category. Configure verbosity in DefaultEngine.ini:
| Level | What is logged |
|---|---|
Error |
Failed quest operations, serialization errors, missing definitions |
Warning |
Rejected quest acceptance (conditions not met), task mismatches |
Log |
Quest lifecycle events (accept, complete, abandon, reset) |
Verbose |
Event dispatching, task matching details, serialization traffic |
Gameplay Tag Configuration¶
FWQuestSystem uses Gameplay Tags extensively for event matching. Ensure your project's tag hierarchy includes:
Quest
Quest.Event
Quest.Event.EnemyKilled
Quest.Event.LocationReached
Quest.Event.NPCInteracted
Quest.Event.ItemCollected
Quest.Event.ItemCrafted
Quest.Event.TimerExpired
Custom Event Tags
You can define additional event tags for custom task types. The tag hierarchy is flexible -- tasks match using MatchesTag which supports parent-child matching. For example, a task listening for Quest.Event.EnemyKilled will match events tagged with Quest.Event.EnemyKilled.Boss.
Next Steps¶
- See Data Definitions for how configuration affects quest asset setup.
- See Tutorial for a complete implementation with daily resets and party sync.
- See Quest Manager Component for runtime configuration APIs.