Skip to content

Quest Types

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

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 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"
}
}

:::tip 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 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 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"]
}
}

:::info 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 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 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 }
]
}
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)
"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"

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/woodWood_Oak*, any
blocks_dugDig dirt, sand, or gravelSand_*, Dirt_*, any
blocks_harvestedHarvest cropsPlant_Crop_Wheat*
blocks_placedPlace blocksBench_Campfire, Furniture_Crude_Torch
flowers_pickedPick flowersPlant_Flower_Common_Red, any
killsKill entities/mobsGoblin_*, Fen_Stalker, Scorpion
player_killsKill other playersplayer
damage_dealtDeal damage to entitiesScorpion, any
damage_takenReceive damageany
items_craftedCraft itemsTool_Pickaxe_Crude, Potion_*
items_collectedCollect/pick up itemsOre_*, @consumable
items_consumedConsume food or potions@consumable, Food_*
distance_traveledWalk/run distanceany
playtime_minutesPlay for a duration (minutes)any, total
interact_npcInteract with an NPCguide_finn, merchant_aldric
zone_discoveredDiscover/enter a zoneForgotten_Temple
command_executedExecute a server commandCommand name (no /)
complete_hub_questsComplete sub-quests of a hub questHub quest ID

:::tip 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 TypeFieldsDescription
quest_tokensamountAward quest tokens (internal currency)
itemitem_id, amountGive a specific item
lootbaglootbag_idGive a loot bag (random rewards)
currencycurrency, amountGrant a named currency (gold, silver)
rpg_xpamountGrant character XP
mmo_xpskill, amountGrant skill-specific XP
endless_xpamountGrant Endless leveling XP
leveling_xpamountGrant main leveling XP
titletitle_idUnlock a player title
achievementachievement_idUnlock an achievement
commandcommand, executorExecute a server command

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.

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

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 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)