Skip to content

Objectives

Overview

The objective system drives quest-like gameplay through four file types: Objectives define sequential task sets and completion rewards, ObjectiveLines group objectives into a progression chain, ObjectiveLocationMarkers place area triggers that activate objectives when players enter, and ReachLocationMarkers define named waypoints used by reach-location tasks. Tasks support kill, gather, craft, bounty, treasure map, use-block, use-entity, and reach-location types.

File Location

Assets/Server/Objective/
Objectives/
Objective_Bounty.json
Objective_Craft.json
Objective_Gather.json
Objective_Gameplay_Trailer.json
Objective_Kill.json
Objective_KillSpawnBeacon.json
Objective_KillSpawnMarker.json
Objective_ReachLocation.json
Objective_TreasureMap.json
Objective_Tutorial.json
Objective_UseBlock.json
Objective_UseEntity.json
ObjectiveLines/
ObjectiveLine_Test.json
ObjectiveLine_Tutorial.json
ObjectiveLocationMarkers/
ObjectiveLocationMarker_Gameplay_Trailer.json
ObjectiveLocationMarker_KillSpawnBeacon.json
ObjectiveLocationMarker_Test.json
ObjectiveLocationMarker_Trigger.json
ReachLocationMarkers/
ObjectiveReachMarker_Example.json

Schema

Objective

FieldTypeRequiredDefaultDescription
TaskSetsTaskSet[]YesOrdered array of task sets. Each set must be completed before the next becomes active.
CompletionsCompletion[]No[]Rewards or actions triggered when all task sets are finished.
RemoveOnItemDropbooleanNofalseWhen true, the objective is removed if the player drops its associated item.

TaskSet

FieldTypeRequiredDefaultDescription
TasksTask[]YesArray of tasks within this set. All tasks must be completed to advance to the next set.

Task

FieldTypeRequiredDefaultDescription
TypestringYesTask type. See task types below.
CountnumberNo1Number of times the action must be performed.
ItemIdstringNoItem ID for craft or item-related tasks.
NPCGroupIdstringNoNPC group ID for kill tasks.
NpcIdstringNoSpecific NPC ID for bounty tasks.
TaskIdstringNoTask identifier for use-entity tasks.
AnimationIdToPlaystringNoAnimation to play on the target entity during use-entity tasks.
BlockTagOrItemIdBlockTagOrItemIdNoBlock tag or item ID filter for gather and use-block tasks.
TargetLocationstringNoReach location marker name for reach-location tasks.
WorldLocationConditionWorldLocationConditionNoSpatial constraints for bounty and treasure map tasks.
SpawnBeaconsSpawnBeacon[]NoSpawn beacon definitions for kill-spawn-beacon tasks.
ChestsTreasureChest[]NoChest definitions for treasure map tasks.
TaskConditionsTaskCondition[]No[]Additional conditions that must be met for the task to count.

Task Types

TypeDescriptionKey Fields
KillNPCKill a number of NPCs from a groupNPCGroupId, Count
KillSpawnBeaconKill NPCs spawned by specific beaconsNPCGroupId, Count, SpawnBeacons
GatherCollect items or blocks matching a filterBlockTagOrItemId, Count
CraftCraft a specific itemItemId, Count
UseBlockInteract with a specific block typeBlockTagOrItemId, Count, TaskConditions
UseEntityInteract with an NPC or entityTaskId, Count, AnimationIdToPlay
ReachLocationTravel to a named waypointTargetLocation
BountyHunt a specific NPC within a radiusNpcId, WorldLocationCondition
TreasureMapFind and open treasure chestsChests

BlockTagOrItemId

FieldTypeRequiredDefaultDescription
ItemIdstringNoSpecific item ID to match.
BlockTagstringNoBlock tag to match (matches any block with this tag).

WorldLocationCondition

FieldTypeRequiredDefaultDescription
TypestringYes"LocationRadius" or "LookBlocksBelow".
MinRadiusnumberNoMinimum distance from the objective giver.
MaxRadiusnumberNoMaximum distance from the objective giver.
BlockTagsstring[]NoBlock tags to check below the target location (for "LookBlocksBelow").
CountnumberNoNumber of blocks to check below.
MinRangenumberNoMinimum depth range for block checking.
MaxRangenumberNoMaximum depth range for block checking.

TreasureChest

FieldTypeRequiredDefaultDescription
MinRadiusnumberYesMinimum placement distance from the player.
MaxRadiusnumberYesMaximum placement distance from the player.
DropListstringYesDrop list ID for chest contents.
WorldLocationConditionWorldLocationConditionNoTerrain constraints for chest placement.
ChestBlockTypeKeystringYesBlock type used for the treasure chest.

TaskCondition

FieldTypeRequiredDefaultDescription
TypestringYesCondition type: "SoloInventory".
BlockTagOrItemIdBlockTagOrItemIdNoItem or block the player must possess.
QuantitynumberNoRequired quantity of the item.

Completion

FieldTypeRequiredDefaultDescription
TypestringYesCompletion action: "GiveItems" or "ClearObjectiveItems".
DropListstringNoDrop list ID for item rewards (when Type is "GiveItems").

ObjectiveLine

FieldTypeRequiredDefaultDescription
ObjectiveIdsstring[]YesOrdered array of objective IDs to present in sequence.

ObjectiveLocationMarker

FieldTypeRequiredDefaultDescription
SetupMarkerSetupYesWhat happens when a player enters the marker area.
AreaMarkerAreaYesSpatial definition of the trigger zone.
TriggerConditionsTriggerCondition[]No[]Additional conditions that must be met for the marker to activate.

MarkerSetup

FieldTypeRequiredDefaultDescription
TypestringYesSetup type: "Objective".
ObjectiveIdstringYesID of the objective to activate.

MarkerArea

FieldTypeRequiredDefaultDescription
TypestringYesArea type: "Radius".
EntryRadiusnumberYesDistance in blocks at which the marker activates.
ExitRadiusnumberYesDistance in blocks at which the marker deactivates. Must be greater than EntryRadius to prevent flicker.

TriggerCondition

FieldTypeRequiredDefaultDescription
TypestringYesCondition type: "HourRange" or "Weather".
MinHournumberNoStart hour for hour-range conditions.
MaxHournumberNoEnd hour for hour-range conditions. Wraps across midnight.
WeatherIdsstring[]NoRequired weather IDs for weather conditions.

ReachLocationMarker

FieldTypeRequiredDefaultDescription
RadiusnumberYesDistance in blocks within which the player is considered to have reached the location.
NamestringYesDisplay name for the waypoint marker.

Examples

Kill objective (Assets/Server/Objective/Objectives/Objective_Kill.json):

{
"TaskSets": [
{
"Tasks": [
{
"Type": "KillNPC",
"Count": 3,
"NPCGroupId": "Trork_Warrior"
}
]
}
],
"Completions": [
{
"Type": "GiveItems",
"DropList": "Trork_Camp_Inventory"
}
]
}

Tutorial objective line (Assets/Server/Objective/ObjectiveLines/ObjectiveLine_Tutorial.json):

{
"ObjectiveIds": [
"Objective_Tutorial"
]
}

Location marker with trigger conditions (Assets/Server/Objective/ObjectiveLocationMarkers/ObjectiveLocationMarker_Trigger.json):

{
"Setup": {
"Type": "Objective",
"ObjectiveId": "Objective_Kill"
},
"Area": {
"Type": "Radius",
"EntryRadius": 25,
"ExitRadius": 35
},
"TriggerConditions": [
{ "Type": "HourRange", "MinHour": 17, "MaxHour": 2 },
{ "Type": "Weather", "WeatherIds": ["Zone1_Cloudy_Medium"] }
]
}

Treasure map objective (Assets/Server/Objective/Objectives/Objective_TreasureMap.json):

{
"TaskSets": [
{
"Tasks": [
{
"Type": "TreasureMap",
"Chests": [
{
"MinRadius": 10,
"MaxRadius": 20,
"DropList": "Zone1_Encounters_Tier3",
"WorldLocationCondition": {
"Type": "LookBlocksBelow",
"BlockTags": ["Stone", "Soil"],
"Count": 3,
"MinRange": 0,
"MaxRange": 5
},
"ChestBlockTypeKey": "Furniture_Ancient_Chest_Large"
}
]
}
]
}
],
"Completions": [
{ "Type": "ClearObjectiveItems" }
],
"RemoveOnItemDrop": true
}