Skip to main content

Quest Types

The Quest System supports five quest types, each with different progression mechanics, reset behavior and assignment rules.

Overview

TypeResetAssignmentTurn-inPool-based
DailyEvery day at configured timeRandom from daily poolQuestBookYes
WeeklyEvery week on configured dayRandom from weekly poolQuestBookYes
StoryNever (permanent)Auto-started or prerequisite-gatedQuest Book / NPCNo
SideNever (permanent)Available after prerequisites metQuest Book / NPCNo
HubNever (permanent)Player chooses from available sub-questsQuest BookNo

Daily Quests

Daily quests are short, repeatable tasks assigned fresh each day. Players receive a set number of daily quests drawn randomly from the daily quest pool.

Key behavior:

  • Reset at the time configured in dailyResetTime (default: 04:00)
  • The number of quests assigned is controlled by dailyQuestCount (default: 3)
  • Quests must be turned in via the QuestBook -- open it with /ksquest and click the complete button
  • Support the tier system: each quest can have Common, Rare, Epic or Legendary variants with increasing difficulty and rewards
  • Can be rerolled if the reroll system is enabled

Example daily quest definition:

{
"id": "daily_mine_stone",
"type": "daily",
"category": "gathering",
"icon_item": "Tool_Pickaxe_Iron",
"name": {
"en": "Stone Breaker",
"de": "Steinbrecher"
},
"description": {
"en": "Daily blocks mined challenge.",
"de": "Taegliche blocks mined Herausforderung."
},
"objectives": [
{
"id": "obj_1",
"type": "blocks_mined",
"target": "Rock_Stone*",
"count": 50,
"description": {
"en": "Mine Rock Stone (0/50)",
"de": "Baue ab Rock Stone (0/50)"
}
}
],
"rewards": [
{ "type": "quest_tokens", "amount": 2 },
{ "type": "item", "item_id": "Ore_Iron", "amount": 5 }
],
"options": {
"repeatable": true,
"tier": "common",
"weight": 50,
"pool": "mining"
}
}
Tier Variants

To create difficulty variants, define multiple quests with the same base concept but different tier, weight and objective counts. For example: daily_mine_stone (common, 50 blocks), daily_mine_stone_rare (rare, 75 blocks), daily_mine_stone_epic (epic, 100 blocks).

Weekly Quests

Weekly quests are larger challenges that reset once per week. They typically have multiple objectives and offer better rewards than daily quests.

Key behavior:

  • Reset on the day configured in weeklyResetDay (default: MONDAY) at the dailyResetTime
  • The number assigned is controlled by weeklyQuestCount (default: 5)
  • Quests must be turned in via the QuestBook -- open it with /ksquest and click the complete button
  • Also support the tier system with weighted variants
  • Players have a full week to complete them

Example weekly quest definition:

{
"id": "weekly_master_miner",
"type": "weekly",
"category": "gathering",
"icon_item": "Tool_Pickaxe_Iron",
"name": {
"en": "Mine Master",
"de": "Bergbaumeister"
},
"description": {
"en": "Complete all objectives in this weekly challenge.",
"de": "Schliesse alle Ziele dieser woechentlichen Herausforderung ab."
},
"objectives": [
{
"id": "obj_1",
"type": "blocks_mined",
"target": "any",
"count": 300,
"description": { "en": "Mine (0/300)", "de": "Baue ab (0/300)" }
},
{
"id": "obj_2",
"type": "blocks_mined",
"target": "Ore_*",
"count": 30,
"description": { "en": "Mine Ore (0/30)", "de": "Baue ab Ore (0/30)" }
}
],
"rewards": [
{ "type": "quest_tokens", "amount": 8 },
{ "type": "lootbag", "lootbag_id": "ore_bundle_common" }
],
"options": {
"repeatable": true,
"tier": "common",
"weight": 50,
"pool": "mastery"
}
}

Story Quests

Story quests form the main narrative progression. They are permanent (never reset), follow a linear chain through prerequisites and guide players through the game world.

Key behavior:

  • Defined in story_quests.json (separate from other quest types)
  • The first story quest can auto-start for new players via "auto_start": true
  • Subsequent quests unlock through prerequisites (completing prior quests)
  • Objectives can be marked sequential (must be completed in order)
  • Support NPC interactions as objectives (talk to a specific NPC)
  • Organized into chapters for the quest book UI
  • Never expire or reset

Example story quest definition:

{
"id": "tutorial_first_steps",
"type": "story",
"category": "main",
"icon_item": "Tool_Hatchet_Crude",
"name": {
"en": "First Steps",
"de": "Erste Schritte"
},
"description": {
"en": "Craft your first crude tools from gathered materials.",
"de": "Crafte deine ersten Werkzeuge aus gesammelten Materialien."
},
"objectives": [
{
"id": "obj_1",
"type": "items_crafted",
"target": "Tool_Hatchet_Crude",
"count": 1,
"description": { "en": "Craft Tool Hatchet Crude (0/1)", "de": "Crafte Tool Hatchet Crude (0/1)" }
},
{
"id": "obj_2",
"type": "items_crafted",
"target": "Tool_Pickaxe_Crude",
"count": 1,
"description": { "en": "Craft Tool Pickaxe Crude (0/1)", "de": "Crafte Tool Pickaxe Crude (0/1)" }
}
],
"rewards": [
{ "type": "quest_tokens", "amount": 2 },
{ "type": "item", "item_id": "Wood_Sticks", "amount": 4 }
],
"prerequisites": {
"quests": ["tutorial_awakening"]
}
}
Story Quest Options
  • "auto_start": true -- Quest starts automatically when the player first joins
  • "sequential": true -- Objectives must be completed in the order listed

Side Quests

Side quests are optional, permanent quests that provide additional content and rewards. They are typically tied to specific NPCs or regions and unlock after certain story milestones.

Key behavior:

  • Defined in quests.json alongside daily/weekly quests
  • Unlocked through prerequisites (usually a story quest)
  • Completed once per player (never reset)
  • Often involve NPC interactions (interact_npc objective type)
  • Can have multiple objective types mixed together (combat, gathering, crafting)

Example side quest definition:

{
"id": "side_riven_hunt",
"type": "side",
"category": "combat",
"icon_item": "Weapon_Sword_Iron",
"name": {
"en": "Big Game Hunt",
"de": "Grosswildjagd"
},
"description": {
"en": "Hunt goblins and Fen Stalkers for Riven.",
"de": "Jage Goblins und Fen Stalker fuer Riven."
},
"objectives": [
{ "id": "obj_1", "type": "kills", "target": "Goblin_*", "count": 10 },
{ "id": "obj_2", "type": "kills", "target": "Fen_Stalker", "count": 3 }
],
"rewards": [
{ "type": "quest_tokens", "amount": 10 },
{ "type": "lootbag", "lootbag_id": "hunter_reward" }
],
"prerequisites": {
"quests": ["story_trork_camp"]
}
}

Hub Quests

Hub quests group multiple sub-quests together and track how many the player completes. They are used for "choose your own path" scenarios where players pick from a selection of available quests.

Key behavior:

  • The hub quest itself contains a complete_hub_quests objective that auto-increments when sub-quests complete
  • Players can choose which sub-quests to tackle from the available_quests list
  • Only required_to_progress sub-quests need to be completed (not all of them)
  • Displayed in the Story tab of the Quest Book with a teal color indicator
  • Can have optional hubUI config for custom title, subtitle and layout

Example hub quest definition:

{
"id": "mining_hub",
"type": "hub",
"category": "gathering",
"icon_item": "Tool_Pickaxe_Iron",
"name": {
"en": "Mining Mastery",
"de": "Bergbau-Meisterschaft"
},
"description": {
"en": "Complete mining challenges to prove your skill.",
"de": "Schliesse Bergbau-Herausforderungen ab."
},
"objectives": [
{ "id": "complete", "type": "complete_hub_quests", "target": "mining_hub", "count": 3 }
],
"available_quests": ["mine_stone", "mine_ore", "mine_gems", "mine_crystal"],
"required_to_progress": 3,
"rewards": [
{ "type": "quest_tokens", "amount": 15 }
]
}

Hub Quest Fields

FieldRequiredDescription
available_questsYesArray of sub-quest IDs the player can choose from
required_to_progressNoHow many sub-quests must be completed (default: 1)
hubUINoOptional UI customization (see below)

Hub UI Config

"hubUI": {
"title": "Mining Challenges",
"subtitle": "Complete 3 of 4 challenges",
"layout": "grid"
}
FieldDefaultDescription
titleQuest nameCustom title for the hub selection UI
subtitleSubtitle text
layout"grid"Layout mode: "grid" or "list"

Objective Types

All quest types use the same objective system. Here are the available objective types:

Objective TypeDescriptionExample Target
blocks_minedMine/break blocksRock_Stone*, Ore_*, any
blocks_choppedChop trees/woodany
blocks_harvestedHarvest cropsPlant_Crop_Wheat*
blocks_placedPlace blocksBench_Campfire, Furniture_Crude_Torch
killsKill entities/mobsGoblin_*, Fen_Stalker, Scorpion
items_craftedCraft itemsTool_Pickaxe_Crude, Potion_*
items_collectedCollect/pick up itemsOre_*, @consumable
distance_traveledWalk/run distanceany
interact_npcInteract with an NPCguide_finn, merchant_aldric
zone_discoveredDiscover/enter a zoneForgotten_Temple
complete_hub_questsComplete sub-quests of a hub questHub quest ID
Wildcard Targets

Use * wildcards to match multiple items: Ore_* matches all ore types, Goblin_* matches all goblin variants. Use any to match everything. Use @consumable to match all food items.

Reward Types

Reward TypeFieldsDescription
quest_tokensamountAward quest tokens (internal currency)
itemitem_id, amountGive a specific item
lootbaglootbag_idGive a loot bag (random rewards)

Quest Pools

Daily and weekly quests are assigned from pools defined in daily_pool.json and weekly_pool.json. Each pool entry has a quest ID and an optional weight:

{
"pool": [
{ "quest_id": "daily_mine_stone", "weight": 10 },
{ "quest_id": "daily_kill_mobs", "weight": 10 },
{ "quest_id": "daily_harvest", "weight": 8 }
]
}

Higher weight means the quest is more likely to be selected. Add your custom quests to the pool via the custom/ folder files.

Additional Quest Fields

These fields can be used on any quest type:

FieldTypeDefaultDescription
difficultystringDifficulty level: "easy", "medium", "hard", "legendary"
sequentialboolfalseIf true, objectives must be completed in order
timeLimitint0Time limit in seconds (0 = no limit). Reserved for future use
setsFactstringFact key to set when the quest is completed
setsFactValuestring"true"Value to assign to the fact
triggerobjectAuto-start trigger (see Triggers)
nextQueststringQuest ID to auto-offer after completion

Difficulty Levels

The difficulty field controls the quest's tier color and reward multiplier:

DifficultyColorMultiplierAliases
easyGray1.0xnormal, simple, basic
mediumBlue2.0xuncommon, moderate, challenging
hardPurple3.0xdifficult, very_hard, expert
legendaryGold5.0xextreme, mythic, artifact, ancient

Triggers

Triggers automatically start quests when certain conditions are met. Add a trigger object to the quest definition:

{
"id": "tutorial_start",
"trigger": {
"type": "first_join",
"startsQuest": "tutorial_start"
}
}
Trigger TypeFieldsDescription
first_joinPlayer joins for the first time
zone_enterzoneIdPlayer enters a specific zone
zone_exitzoneIdPlayer leaves a specific zone
npc_interactnpcIdPlayer interacts with a specific NPC
item_obtainitemIdPlayer picks up a specific item
item_useitemIdPlayer uses a specific item
quest_completequestIdAnother quest is completed
block_interactblockIdPlayer interacts with a specific block
dialog_completedialogIdA dialog is completed
dialog_choicedialogIdA dialog choice is selected

Trigger fields:

FieldTypeDescription
typestringTrigger type (see above)
startsQueststringQuest ID to start (auto-filled with parent quest ID)
completesObjectivestringFormat: "quest_id:objective_id"
conditionstringFact condition that must be true
setsFactstringFact key to set when triggered
setsFactValueanyValue for the fact (default: true)