Skip to content

Rewards Reference

Rewards are the outcome side of the NPC interaction, quest completion, object activation, and item consumption systems in Unturned™. Every time a player completes a quest, selects a dialogue response, activates an interactable object, or uses a consumable item, the engine evaluates the associated rewards list and grants every reward in sequence. A reward can set a flag, grant an item, award experience, spawn a vehicle, teleport the player, trigger a cutscene, broadcast a plugin event, or any of twenty-seven distinct reward types documented in the Smartly Dressed Games modding documentation.

This article is the 57 Studios™ canonical reference for the Unturned™ rewards system. It covers every reward type across the flag and non-flag categories, the rewards list syntax and structure, the grant delay and interruption behavior, the localization of reward descriptions, and the specific fields unique to each of the twenty-seven reward types. The article also covers how rewards interact with the conditions system -- conditions gate whether the rewards fire, and rewards set the flags that subsequent conditions check -- and includes worked examples for every reward category.

The rewards system, the conditions system, and the dialogue system together form the three pillars of dynamic server content. Every mod developer who authors NPC quests, interactive objects, or consumable items needs a working understanding of every reward type documented here and how reward lists compose multiple rewards into a single granting action.

Rewards list in a Quest .dat file granting items, experience, and currency on completion

Documentation source: This article references the official Smartly Dressed Games modding documentation for reward field definitions and game behavior. The reward types and parameters documented here correspond to Unturned™ Release 3.x.

Prerequisites

What you'll learn

  • The syntax and structure of a rewards list, including the Rewards byte, indexed reward entries, and prefix conventions.
  • How reward grant delay and interruption behavior work and when to use each.
  • The four flag reward types (Flag_Bool, Flag_Math, Flag_Short, Flag_Short_Random) and when each is appropriate.
  • The twenty-three non-flag reward types and their specific field parameters.
  • How to reward items with pre-attached modifications (sight, grip, tactical, barrel, magazine, ammo overrides).
  • How to use the Hint reward type for player-facing feedback on quest completion.
  • How to use the Event reward type to broadcast to plugin systems.
  • How rewards interact with the conditions system to create quest chains.

Rewards system architecture

Rewards exist inside rewards lists. A rewards list is a container of indexed reward entries that all fire together when the list is triggered. The list itself is embedded inside a parent asset: a Quest asset (which has two separate rewards lists -- Rewards for successful completion and AbandonmentRewards for abandonment), a Dialogue response, an Interactable object, or a Consumable item.

Every reward in the list is granted in sequence. There is no condition check between rewards within the same list; the conditions check happens once, at the list level, before any rewards fire. If the conditions pass, every reward in the list is granted. If the conditions fail, no reward is granted.

Rewards list syntax

A rewards list is a block of indexed properties in a .dat file. It starts with a Rewards byte field declaring the total number of rewards in the list, followed by indexed reward properties. The prefix depends on the context in which the rewards list appears.

ContextPrefix patternExample
NPC dialogue responseReward_#_Reward_0_Type Experience
Quest completionReward_#_Reward_0_Type Item
Quest abandonmentAbandonmentReward_#_ or Reward_#_AbandonmentReward_0_Type Flag_Bool
Interactable objectReward_#_Reward_0_Type Teleport
Consumable itemQuest_Reward_#_Quest_Reward_0_Type Player_Life_Health

The index starts at 0 and increments sequentially with no gaps. The Rewards byte must exactly match the number of Reward_#_Type entries. A mismatch between the declared count and the actual entries is a silent failure: the parser allocates the declared number of slots, and missing entries produce default-zero rewards that may or may not do anything depending on the reward type.

Grant delay and interruption

Every reward supports two optional timing fields that control when the reward is granted and what happens if the player disconnects or dies before the grant occurs.

FieldTypeDefaultPurpose
Reward_#_GrantDelaySecondsfloat-1 (no delay)If set, the reward is queued for the specified number of seconds before being granted.
Reward_#_GrantDelayApplyWhenInterruptedboolFalseIf True, the reward is granted when the player dies or disconnects. If False, pending rewards are cancelled on death or disconnect.

The grant delay mechanism enables timed reward sequences: a reward that fires 5 seconds after a dialogue response, a chain of rewards that fire at 1-second intervals to create a staged effect, or a delayed teleport that gives the player time to read a hint message before being moved.

When GrantDelayApplyWhenInterrupted is False (the default), any pending delayed rewards are cancelled if the player dies or disconnects before the delay expires. This is the appropriate setting for most quest rewards: a player who dies during a quest should not receive the completion rewards. When True, the reward is granted regardless of death or disconnect, and the setting is appropriate for critical story-flag rewards that should not be lost.

Delayed rewards and player expectations

A delayed reward with GrantDelayApplyWhenInterrupted False but no in-game feedback about the delay can create the perception that the reward was not granted. When using a grant delay, pair it with a Hint reward that fires immediately and tells the player what is coming and when. For example: an immediate Hint reward with text "Supplies arriving in 5 seconds" followed by an Item reward with GrantDelaySeconds 5.

Localization of reward descriptions

Every reward in a rewards list can have a localized display name that appears in the game's quest UI:

Reward_#: Name of the reward as it appears in user interfaces

The localization property follows the same prefix conventions as the reward properties themselves. For a hint on an interactable object, the localization property name would be Interactability_Reward_# rather than Reward_#. The prefix must match the context in which the reward appears.

Flag rewards

Flag rewards modify the player's persistent flag state. Flags are the primary mechanism for tracking quest progress, story decisions, and character attributes across sessions. Flag rewards are the most common reward type in quest completion lists because they set the flags that subsequent quests and dialogue responses check.

Flag_Bool

Sets a boolean flag to a target value of True or False. Flag_Bool is the standard reward for recording that a quest has been completed, a story choice has been made, or an NPC has been met.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Flag_Bool.
Reward_#_IDuint16YesID of the flag to set.
Reward_#_ValueboolYesTarget boolean value (True or False).

Worked example: A quest completion reward sets flag 100 to True, marking the quest as completed. Subsequent dialogue responses check for flag 100 to determine whether the player has finished this quest.

Rewards 1
Reward_0_Type Flag_Bool
Reward_0_ID 100
Reward_0_Value True

Flag_Math

Applies a mathematical operation to a flag value using a second flag or a literal value. Flag_Math enables arithmetic on flag values without requiring a separate scripting layer: addition, subtraction, multiplication, division, modulo, assignment, and random-range operations are all supported natively.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Flag_Math.
Reward_#_A_IDuint16YesID of the flag to apply the operation to (the left-hand operand).
Reward_#_B_IDuint16NoID of the flag containing the value to apply (the right-hand operand). If not specified, B_Value is used instead.
Reward_#_B_Valueint16NoDefault literal value to use if flag B is not set or if B_ID is zero.
Reward_#_OperationenumYesThe mathematical operation to apply. Values: Addition, Assign, Division, Modulo, Multiplication, Subtraction, Random_Inclusive, Random_Exclusive.

Operation behavior:

OperationEffect on flag A
AdditionA = A + B
AssignA = B
DivisionA = A / B
ModuloA = A % B
MultiplicationA = A * B
SubtractionA = A - B
Random_InclusiveSet A to a random number between A and B, inclusive of both endpoints. If A is 1 and B is 3, the result can be 1, 2, or 3.
Random_ExclusiveSet A to a random number between A and B, excluding B. If A is 1 and B is 3, the result can be 1 or 2. If A and B are equal, the exclusion rule is ignored.

Worked example: Increment the player's quest-completion counter (flag 200) by 1 using a literal value.

Rewards 1
Reward_0_Type Flag_Math
Reward_0_A_ID 200
Reward_0_B_Value 1
Reward_0_Operation Addition

Worked example: Set flag 300 to a random value between 1 and 10 inclusive for a randomized reward magnitude.

Rewards 1
Reward_0_Type Flag_Math
Reward_0_A_ID 300
Reward_0_B_Value 10
Reward_0_Operation Random_Inclusive

Flag_Short

Modifies a short flag by a specified amount using one of three modification operations: Assign, Increment, or Decrement. Flag_Short is simpler than Flag_Math for the common case of incrementing or decrementing a counter by a fixed amount.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Flag_Short.
Reward_#_IDuint16YesID of the flag to modify.
Reward_#_Valueint16YesThe short value to apply.
Reward_#_ModificationenumYesHow to apply the value. Values: Assign, Decrement, Increment.

Worked example: Increment the player's reputation tracker (flag 400) by 50 points on quest completion.

Rewards 1
Reward_0_Type Flag_Short
Reward_0_ID 400
Reward_0_Value 50
Reward_0_Modification Increment

Worked example: Set a story-state flag to exactly 5 (Assign), representing chapter 5 of a story arc.

Rewards 1
Reward_0_Type Flag_Short
Reward_0_ID 500
Reward_0_Value 5
Reward_0_Modification Assign

Flag_Short_Random

Modifies a short flag by a random value within a specified range. Flag_Short_Random is the randomized counterpart to Flag_Short and is used for variable-reward scenarios: loot drops with random quantities, randomized stat bonuses, or procedural quest rewards.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Flag_Short_Random.
Reward_#_IDuint16YesID of the flag to modify.
Reward_#_Min_Valueint16YesMinimum value to apply.
Reward_#_Max_Valueint16YesMaximum value to apply.
Reward_#_ModificationenumYesHow to apply the value. Values: Assign, Decrement, Increment.

Worked example: Grant a random reputation bonus between 10 and 50 points.

Rewards 1
Reward_0_Type Flag_Short_Random
Reward_0_ID 600
Reward_0_Min_Value 10
Reward_0_Max_Value 50
Reward_0_Modification Increment

Non-flag rewards

Achievement

Grants a specific achievement to the player. Only certain achievements are configured as grantable through the rewards system; the full list of grantable achievement IDs is maintained in the official Smartly Dressed Games documentation.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Achievement.
Reward_#_IDstringYesID of the achievement to grant.

Airdrop

Calls in an airdrop at a specified location or at a random airdrop node. The airdrop cargo can be customized through an optional spawn table ID.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Airdrop.
Reward_#_Use_Random_Airdrop_NodeboolNoIf True, calls in the airdrop at a random airdrop node placed in the level editor.
Reward_#_CargoGUID or uint16NoOptional spawn table ID overriding which items to drop in the airdrop.
Reward_#_SpawnpointstringNoLocation to call in the airdrop, using the spawnpoint name as set in the level editor.

Worked example: A quest completion reward calls in a supply airdrop at the Liberator airstrip.

Rewards 1
Reward_0_Type Airdrop
Reward_0_Spawnpoint Liberator_Jet

Currency

Grants a specified amount of a currency asset to the player.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Currency.
Reward_#_GUIDstringYesGUID of the currency asset.
Reward_#_ValueintYesAmount of currency to grant.

Worked example: A quest rewards the player with 200 units of a custom currency.

Rewards 1
Reward_0_Type Currency
Reward_0_GUID a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
Reward_0_Value 200

Cutscene_Mode

Toggles cutscene mode on or off for the player. While active, the first-person viewmodel is hidden and certain item actions such as shooting are disabled. Cutscene mode is saved and loaded with the player's session but resets on death.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Cutscene_Mode.
Reward_#_ValueboolYesWhether cutscene mode should be active.

Effect

Spawns an effect asset at a specified location or at the player's position. Effects are the mechanism for visual and audio feedback that plays independently of the player's actions: fireworks, particle bursts, environmental ambiance triggers, and scripted visual events.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Effect.
Reward_#_GUIDAsset PointerYesGUID of the Effect Asset to spawn.
Reward_#_SpawnpointstringNoLocation to spawn the effect, using the spawnpoint name as set in the level editor.
Reward_#_AtPlayerPositionboolNoIf True, spawn the effect at the triggering player's position.
Reward_#_IsReliableboolNoIf True, multiplayer ensures the effect is replicated to all clients. Defaults to True.
Reward_#_RelevantDistancefloatNoOverrides the default multiplayer relevant distance of 128 meters. Defaults to -1.
Reward_#_OnlyRelevantToInstigatorboolNoIf True, only the triggering player sees the effect. Takes priority over RelevantDistance.

Worked example: A quest completion fires a visual celebration effect at the player's position, visible only to the quest completer.

Rewards 1
Reward_0_Type Effect
Reward_0_GUID a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
Reward_0_AtPlayerPosition True
Reward_0_OnlyRelevantToInstigator True

Event

Broadcasts an event ID that can be received by C# plugins through the NPCEventManager class or by Unity event components through the NPCGlobalEvent component. The Event reward is the bridge between the data-driven rewards system and custom scripting.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Event.
Reward_#_IDstringYesID of the event to broadcast. All components or plugins listening for this event ID will receive it.
Reward_#_ReplicateboolNoIf True, the event is triggered on clients as well as the server. Defaults to True. If False, event is only triggered on authority.
Reward_#_InstigatorOnlyboolNoIf True, the event only runs for the triggering player. Takes priority over Replicate.

Worked example: A quest completion broadcasts a "Fireworks" event. A Unity NPCGlobalEvent component with event ID "Fireworks" spawns a fireworks particle system in response.

Rewards 1
Reward_0_Type Event
Reward_0_ID Fireworks

Experience

Grants a flat amount of experience points to the player.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Experience.
Reward_#_ValueintYesAmount of experience to grant.

Worked example: A quest grants 500 experience on completion.

Rewards 1
Reward_0_Type Experience
Reward_0_Value 500

Item

Grants a specific item to the player's inventory, with optional attachment overrides and auto-equip behavior. The Item reward is the most commonly used reward type in quest completion lists and is the primary mechanism for distributing loot, weapons, tools, and consumables through quests.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Item.
Reward_#_IDuint16YesID of the item to grant.
Reward_#_AmountintYesQuantity of the item to grant.
Reward_#_Auto_EquipboolNoIf True, the item is automatically equipped by the player if the slot is available. Defaults to False.
Reward_#_AmmobyteNoOverride for the amount of ammunition loaded in the item reward.
Reward_#_Barreluint16NoOverride for the barrel attachment ID to attach to the item.
Reward_#_Gripuint16NoOverride for the grip attachment ID to attach to the item.
Reward_#_Magazineuint16NoOverride for the magazine attachment ID to attach to the item.
Reward_#_OriginEItemOriginNoSets the item origin. Admin causes items to spawn at full quality. Defaults to Craft.
Reward_#_Sightuint16NoOverride for the sight attachment ID to attach to the item.
Reward_#_Tacticaluint16NoOverride for the tactical attachment ID to attach to the item.

Worked example: A quest rewards the player with an Eaglefire rifle (item ID 50001) with a pre-attached red-dot sight (attachment ID 50010) and 30 rounds of ammunition loaded.

Rewards 1
Reward_0_Type Item
Reward_0_ID 50001
Reward_0_Amount 1
Reward_0_Sight 50010
Reward_0_Ammo 30

Worked example: A quest rewards the player with 3 bandages (item ID 50020) that auto-equip if the tertiary slot is available.

Rewards 1
Reward_0_Type Item
Reward_0_ID 50020
Reward_0_Amount 3
Reward_0_Auto_Equip True

The attachment override fields (Sight, Grip, Tactical, Barrel, Magazine) reference item IDs for attachments that must exist in the mod's item pool. The attachment is applied to the granted item at grant time. If the attachment ID does not correspond to a valid attachment item, the item is granted without the attachment. The Ammo override loads the specified number of rounds into the granted weapon; this is independent of the magazine asset's Amount field -- the ammo override on the reward determines how many rounds the weapon spawns with, while the magazine's Amount determines the maximum capacity.

Item_Random

Grants a random item from a spawn table, with optional quantity and auto-equip. Item_Random is the mechanism for randomized loot drops, loot-box rewards, and procedural quest payouts.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Item_Random.
Reward_#_IDuint16YesID of the spawn table from which the random item is drawn.
Reward_#_AmountintYesQuantity of the randomly selected item to grant.
Reward_#_Auto_EquipboolNoIf True, auto-equip the item. Defaults to False.
Reward_#_OriginEItemOriginNoSets the item origin. Defaults to Craft.

Worked example: A daily login bonus grants one random item from spawn table 60001.

Rewards 1
Reward_0_Type Item_Random
Reward_0_ID 60001
Reward_0_Amount 1

The spawn table referenced by ID is a Spawn Table Asset configured separately in the mod's asset files. The spawn table controls which items are in the pool, their relative weights, and the randomization behavior. Item_Random resolves the spawn table at grant time and grants one randomly selected item. If the spawn table has no entries or is not found, no item is granted.

Hint

Displays a text message in the player's UI. The Hint reward is the primary mechanism for player-facing feedback: quest-completion announcements, objective updates, contextual tips, and tutorial messages.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Hint.
Reward_#_TextRich TextNoDebug fallback text shown when the asset's localization file is empty. If a localization file is present, the localized text is used instead.
Reward_#_DurationfloatNoDuration of the hint display in seconds. Defaults to 2 seconds.

Multiplayer hint localization

For localized hints to work in multiplayer, add Keep_Localization_Loaded true to the owning asset. Without this setting, the server's language localization is used for all players. The server does not have a direct reference to the reward itself (which the client has the text loaded for); instead, the asset ID and localization key are replicated to each client, and each client resolves the localized text from its own loaded localization file.

Worked example: Display a quest-completion message for 5 seconds.

Rewards 1
Reward_0_Type Hint
Reward_0_Text Quest complete: Supplies delivered.
Reward_0_Duration 5

Player life rewards

Five reward types modify the player's current survival statistics. Each follows the same pattern: a Type field selecting the stat, and a Value field specifying the amount to add (positive) or subtract (negative).

Reward typeStat modifiedPurpose
Player_Life_FoodCurrent food levelAdds or subtracts from the player's food stat.
Player_Life_HealthCurrent healthAdds or subtracts from the player's health.
Player_Life_StaminaCurrent stamina/energyAdds or subtracts from the player's stamina.
Player_Life_VirusCurrent immunity levelAdds or subtracts from the player's immunity.
Player_Life_WaterCurrent water levelAdds or subtracts from the player's water stat.

Each of these five reward types takes exactly the same fields: Reward_#_Type (the enum value listed above) and Reward_#_Value (an integer amount to add; negative values decrease the stat).

Worked example: A medic NPC heals the player for 50 health as a dialogue reward.

Rewards 1
Reward_0_Type Player_Life_Health
Reward_0_Value 50

Worked example: A cursed item reduces the player's food by 25 (negative value) when consumed.

Quest_Rewards 1
Quest_Reward_0_Type Player_Life_Food
Quest_Reward_0_Value -25

Player_Spawnpoint

Overrides the player's default spawn location. The override is saved and loaded between sessions. If the ID is empty, the override is removed and default spawn locations are used.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Player_Spawnpoint.
Reward_#_IDstringYesID of a spawnpoint node or name of a map location node, as set in the level editor. If empty, the spawn override is removed.

Worked example: After a quest, the player's respawn point is set to the Liberator airstrip.

Rewards 1
Reward_0_Type Player_Spawnpoint
Reward_0_ID Liberator_Jet

Quest

Grants another quest to the player. Quest rewards are the mechanism for quest chains: completing quest A grants quest B, which the player can then track and complete.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Quest.
Reward_#_IDuint16YesID of the quest to grant.

Worked example: Completing quest 1001 as the final reward grants quest 1002, continuing the quest chain.

Rewards 1
Reward_0_Type Quest
Reward_0_ID 1002

Remove_Zombies

Removes zombies from the game world that match a set of filters. Remove_Zombies is used for cleanup rewards: after a boss is killed, all remaining minions are removed; after a horde event concludes, remaining horde zombies are despawned.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Remove_Zombies.
Reward_#_ZombieenumNoZombie type to remove. Same enum list as the Kills_Zombie condition. Defaults to None, which matches all zombie types.
Reward_#_LevelTableOverrideintNoUnique ID of a zombie type shown in the level editor. If set, only zombies spawned from this table are removed. Defaults to -1 (all tables match).
Reward_#_NavbyteNoIndex of the navmesh to remove zombies from. Defaults to 255 (all navmeshes match).

Worked example: After a boss fight quest completes, remove all Boss_Fire zombies from navmesh index 4.

Rewards 1
Reward_0_Type Remove_Zombies
Reward_0_Zombie Boss_Fire
Reward_0_Nav 4

Reputation

Grants a specified amount of reputation to the player.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Reputation.
Reward_#_ValueintYesAmount of reputation to grant.

Worked example: A quest grants 100 reputation.

Rewards 1
Reward_0_Type Reputation
Reward_0_Value 100

Rewards_List_Asset

Grants a Rewards List Asset directly or resolves a Spawn Table Asset into one. The Rewards_List_Asset reward is the mechanism for composing reward lists hierarchically: a quest's reward list can reference a standalone Rewards List Asset, which itself contains a full rewards list that fires as a group.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Rewards_List_Asset.
Reward_#_GUIDAsset PointerYesGUID of a Rewards List Asset to grant directly, or a Spawn Table Asset to resolve into one.

Worked example: A quest completion reward references a standalone Rewards List Asset that bundles together an item grant, an experience grant, and a flag set -- the equivalent of a reward macro that can be reused across multiple quests.

Rewards 1
Reward_0_Type Rewards_List_Asset
Reward_0_GUID a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d

See the Rewards List Asset Reference for the full documentation of standalone Rewards List Assets and the spawn-table resolution pattern.

Teleport

Teleports the player to a specified spawnpoint location.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Teleport.
Reward_#_SpawnpointstringYesID of a spawnpoint node to teleport the player to, as set in the level editor.

Worked example: Completing a quest teleports the player to the Liberator airstrip for the next quest stage.

Rewards 1
Reward_0_Type Teleport
Reward_0_Spawnpoint Liberator_Jet

Vehicle

Spawns a vehicle at a specified location or above the NPC. The vehicle's paint color can be overridden.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Vehicle.
Reward_#_IDuint16YesID of the vehicle asset to spawn.
Reward_#_SpawnpointstringNoLocation to spawn the vehicle, using the ID of a spawnpoint node as set in the level editor. If not provided, the vehicle spawns above the NPC.
Reward_#_PaintColorcolorNoOverrides the color of the spawned vehicle. Bypasses the vehicle redirector asset's SpawnPaintColor and the vehicle asset's DefaultPaintColors.

Worked example: A quest rewards the player with a vehicle (vehicle ID 80001) spawned at the Liberator garage.

Rewards 1
Reward_0_Type Vehicle
Reward_0_ID 80001
Reward_0_Spawnpoint Liberator_Garage

Zombie

Respawns zombies at named spawnpoint nodes. If insufficient dead zombies are available to respawn, living zombies of the correct type are converted to the required type and teleported to the spawnpoint. Zombie spawn points must be within a navmesh.

FieldTypeRequiredPurpose
Reward_#_TypeenumYesMust be Zombie.
Reward_#_ZombieenumYesType of zombie to spawn. Same enum list as the Kills_Zombie condition.
Reward_#_SpawnpointstringYesSpawnpoint node name. When multiple nodes share a name, each zombie is spawned at a random node.
Reward_#_LevelTableOverrideintNoUnique ID of a zombie type shown in the level editor. Defaults to -1.
Reward_#_SpawnQuantityintNoNumber of zombies to spawn.
Reward_#_CooldownIdstringNoIf set, the spawn only occurs if a named global cooldown (shared between all players) has elapsed.
Reward_#_CooldownDurationfloatNoSeconds since the cooldown last ran before the reward can spawn zombies again.

Worked example: A quest completion respawns 5 normal zombies at the TownSquare spawnpoint with a 300-second global cooldown.

Rewards 1
Reward_0_Type Zombie
Reward_0_Zombie Normal
Reward_0_Spawnpoint TownSquare
Reward_0_SpawnQuantity 5
Reward_0_CooldownId TownRespawn
Reward_0_CooldownDuration 300

Reward list composition patterns

Rewards lists are most powerful when multiple rewards are composed to produce a coherent outcome. The following patterns are cohort-validated approaches used in 57 Studios™ production quests.

The standard quest completion bundle

A typical quest completion rewards the player with experience, a currency payment, and one or more items, plus a flag set to mark the quest as completed for future dialogue gating. The rewards fire in order: flag first (so the quest is marked as completed regardless of whether inventory is full), then currency and experience, then items.

Rewards 4
Reward_0_Type Flag_Bool
Reward_0_ID 100
Reward_0_Value True
Reward_1_Type Experience
Reward_1_Value 500
Reward_2_Type Currency
Reward_2_GUID a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
Reward_2_Value 100
Reward_3_Type Item
Reward_3_ID 50001
Reward_3_Amount 1

The staged narrative reward sequence

Using GrantDelaySeconds, rewards can be staged across time to create a narrative sequence: a hint fires immediately telling the player what is happening, an effect fires at the player's position after 2 seconds, and the item reward is granted after 5 seconds.

Rewards 3
Reward_0_Type Hint
Reward_0_Text Airdrop incoming at your position.
Reward_0_Duration 5
Reward_1_Type Effect
Reward_1_GUID a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
Reward_1_AtPlayerPosition True
Reward_1_GrantDelaySeconds 2
Reward_2_Type Item
Reward_2_ID 50001
Reward_2_Amount 1
Reward_2_GrantDelaySeconds 5

The quest-chain continuation pattern

A quest completion rewards the player with the next quest in the chain, a hint telling them where to go, and optionally a teleport to the next quest giver's location.

Rewards 3
Reward_0_Type Quest
Reward_0_ID 1005
Reward_1_Type Hint
Reward_1_Text New objective: Report to the quartermaster at the military base.
Reward_1_Duration 5
Reward_2_Type Teleport
Reward_2_Spawnpoint MilitaryBase_Quartermaster

Reward failure modes and inventory overflow

When an Item reward cannot be granted because the player's inventory is full, Unturned™'s default behavior is to drop the item on the ground at the player's position. The item exists as a world pickup object that the player can collect after freeing inventory space. This behavior is consistent across all item-granting reward types.

When a Currency reward cannot be granted because the currency asset's maximum is reached, the excess is silently discarded. The engine does not notify the player that currency was lost.

When a Vehicle reward cannot be spawned because the spawnpoint is obstructed, the vehicle spawns at the nearest valid position. If no valid position exists within the spawn resolution radius, the vehicle spawn fails silently.

Inventory overflow for quest-critical items

When a quest-critical item (an item that another condition checks for) is dropped on the ground due to inventory overflow, the player may not realize they have received it, and may leave the area without picking it up. The Item condition will fail because the item is on the ground rather than in the inventory, and the player will be stuck. To mitigate this, include a Hint reward immediately before the Item reward that warns the player their inventory is full and directs them to free space.

Reward authoring checklist

Before testing a rewards list in-game, confirm every entry:

  • [ ] Rewards byte matches the exact count of Reward_#_Type entries.
  • [ ] Reward indices start at 0 and increment sequentially with no gaps.
  • [ ] Every reward has a Reward_#_Type that is one of the twenty-seven valid enum values.
  • [ ] Every reward's type-specific fields are spelled correctly and use the correct data type.
  • [ ] Item rewards with attachment overrides reference valid attachment item IDs that exist in the mod.
  • [ ] Currency rewards reference valid currency asset GUIDs.
  • [ ] Teleport and vehicle rewards reference spawnpoint names that exist in the level editor.
  • [ ] Flag reward IDs are documented in the mod's flag-usage register.
  • [ ] Localization entries for hint rewards are authored in the appropriate localization file if the mod targets multiple languages.
  • [ ] For multiplayer hints, Keep_Localization_Loaded true is set on the owning asset.
  • [ ] GrantDelaySeconds values are positive floats; a value of -1 means no delay.
  • [ ] GrantDelayApplyWhenInterrupted is True for critical story-flag rewards and False for standard quest rewards.

Diagnostic table

SymptomMost likely causeResolution
Reward item not grantedPlayer inventory is full and the item dropped on the ground was not noticedCheck the ground at the reward location. Add a Hint reward before the Item reward warning about inventory space.
Currency not receivedPlayer already at currency capReduce the player's currency below the cap or allow the currency asset to hold a higher maximum.
Vehicle does not spawnSpawnpoint obstructed or spawnpoint name does not match level editorVerify the spawnpoint name in the level editor matches the reward's Spawnpoint field exactly.
Hint text appears in wrong language in multiplayerKeep_Localization_Loaded not set on the owning assetAdd Keep_Localization_Loaded true to the dialogue, quest, or object asset.
Flag not set after rewardFlag ID collision with another mod's flagVerify the flag ID is unique across all loaded mods.
Effect not visibleEffect GUID invalid or effect asset not loadedVerify the effect asset GUID and confirm the asset is included in the mod bundle.
Event not received by pluginPlugin listener not registered for the event IDConfirm the plugin subscribes to the exact event ID string used in the reward.
Reward fires on death when it should notGrantDelayApplyWhenInterrupted is TrueSet GrantDelayApplyWhenInterrupted False for rewards that should cancel on death.
Reward cancels on death when it should persistGrantDelayApplyWhenInterrupted is FalseSet GrantDelayApplyWhenInterrupted True for critical flag rewards that must persist.
Item_Random grants nothingSpawn table is empty or not foundVerify the spawn table asset exists and contains at least one entry.
Zombie reward spawns no zombiesSpawnpoint is not within a navmeshVerify the spawnpoint node is placed inside a navmesh in the level editor.
Airdrop lands at wrong locationSpawnpoint name does not match any airdrop nodeVerify the spawnpoint name or set Use_Random_Airdrop_Node True.
Flag_Math does not modify flagRight-hand flag B_ID is set but does not exist on the playerUse B_Value as a literal fallback for the case where flag B is unset.

Best practices

  • Always grant the completion flag (Flag_Bool) as the first reward in a quest-completion list so the quest is marked complete before any other rewards fire.
  • Use GrantDelayApplyWhenInterrupted True for critical story-progression flags and False for cosmetic or monetary rewards.
  • Pair a Hint reward with every grant delay to tell the player what is happening and prevent confusion about missing rewards.
  • Document every flag ID in a flag register that tracks which flag is used by which quest, the expected value range, and whether it resets.
  • Use Rewards_List_Asset references for reward bundles that repeat across multiple quests (standard faction-reputation payout, standard supply drop, standard currency bonus) to avoid duplicating reward entries.
  • Test item rewards with a full inventory to confirm the drop-on-ground behavior and verify the item is collectible.
  • Test vehicle rewards at the spawnpoint to confirm the vehicle spawns without clipping into terrain or structures.
  • Use Flag_Math with Random_Inclusive for randomized loot quantities rather than hardcoding a range in a script.
  • Always set Keep_Localization_Loaded true on assets that use Hint rewards for multiplayer environments.
  • When using Zombie rewards with CooldownId, test the cooldown behavior by triggering the reward twice in rapid succession.

Frequently asked questions

What is the difference between Flag_Short and Flag_Math?

Flag_Short is a simpler reward for the three most common operations: assign, increment, and decrement by a single fixed value. Flag_Math is the general-purpose arithmetic reward that supports eight operations (Addition, Subtraction, Multiplication, Division, Modulo, Assign, Random_Inclusive, Random_Exclusive) and can use either a literal value or another flag as the operand. Use Flag_Short for simple increment/decrement rewards; use Flag_Math when you need division, multiplication, random ranges, or cross-flag arithmetic.

Can a reward grant negative values?

Yes. The player-life rewards (Player_Life_Food, Player_Life_Health, Player_Life_Stamina, Player_Life_Virus, Player_Life_Water) accept negative values to decrease the stat. The Flag_Short reward with Modification Decrement functionally applies a negative change. The Reputation reward with a negative Value decreases reputation. Not all reward types accept negative values -- Experience and Currency with negative values are not documented behavior and should not be relied upon.

What happens if a reward references an item that does not exist?

If the item ID in an Item reward does not correspond to any loaded item asset, the reward fails silently. No item is granted, no error is logged to the server console, and no feedback is provided to the player. Verify every item ID in a reward against the mod's item manifest before testing.

Can Reward_List_Asset nest recursively?

The official documentation does not explicitly address recursive nesting, but recursive rewards-list resolution would create the risk of infinite loops. The cohort recommendation is to limit Rewards_List_Asset chains to a single level of indirection: a quest references a Rewards List Asset, and the Rewards List Asset contains concrete rewards (items, experience, flags) rather than further Rewards_List_Asset references.

How do I make a reward that fires only if the player does not already have the reward item?

Use a conditions list on the parent asset (the dialogue response, the quest, the object) that includes an Item condition checking for the absence of the item in the player's inventory. The reward itself cannot self-gate; the gating must happen at the conditions level.

Do rewards fire in multiplayer for all players or just the triggering player?

Most rewards fire only for the triggering player. The Effect reward has OnlyRelevantToInstigator and RelevantDistance fields that control visibility to other players. The Event reward has Replicate and InstigatorOnly fields that control whether the event reaches other clients. The Zombie and Remove_Zombies rewards affect the shared world state and are visible to all players. Currency, experience, items, flags, reputation, teleports, and player-life rewards always apply to the triggering player only.

How do quest abandonment rewards differ from completion rewards?

Quest abandonment rewards are a separate rewards list within the Quest asset, keyed by the AbandonmentReward_#_ prefix. Abandonment rewards fire when the player manually abandons the quest from the quest journal. The cohort pattern is to use abandonment rewards to reset quest-tracking flags (so the quest can be re-accepted) or to apply a reputation penalty for abandoning faction quests.

Can I use the Item reward to grant an item with a custom magazine loaded?

Yes. Use Reward_#_Magazine to specify the magazine attachment ID that should be pre-loaded into the granted weapon. The magazine must be compatible with the weapon (matching Caliber / Caliber_Reference). The Ammo field can be used to further override the number of rounds in the loaded magazine.

What is the maximum number of rewards in a single rewards list?

There is no hard maximum enforced by the engine. The practical limit is imposed by the .dat file format and the parser. Cohort-validated servers have used rewards lists with ten or more entries without issues. However, very large rewards lists (twenty or more entries) become difficult to maintain and debug; the cohort recommendation is to split large reward lists into multiple Rewards_List_Asset references.

Do Hint rewards support rich text formatting?

The Reward_#_Text field on the Hint reward is a Rich Text-capable field according to the official documentation. Rich text tags supported by Unturned's UI system (color tags, bold, italic) should render correctly. Test rich-text formatting in single-player before deploying to a server, as not all rich-text tags are supported on all platforms.

How do I test a rewards list without completing the full quest?

Use the /RunRewardList admin command on a rewards list asset to test it directly. For rewards lists embedded in quests or dialogue, use the @give command to spawn the parent item, the @flag command to set the prerequisite flags, or temporarily remove the conditions from the parent asset to force the rewards to fire. Always restore the conditions after testing.

Rewards composition diagram

The following Mermaid flowchart shows how a quest's Rewards list and AbandonmentRewards list interact with the player's flag state.

Appendix A: Rewards field quick reference

Reward typeCategoryUnique fieldsValue type
Flag_BoolFlagID, Valuebool
Flag_MathFlagA_ID, B_ID, B_Value, Operationint16 (computed)
Flag_ShortFlagID, Value, Modificationint16
Flag_Short_RandomFlagID, Min_Value, Max_Value, Modificationint16 (random range)
AchievementNon-flagIDstring
AirdropNon-flagUse_Random_Airdrop_Node, Cargo, Spawnpointvaries
CurrencyNon-flagGUID, Valueint
Cutscene_ModeNon-flagValuebool
EffectNon-flagGUID, Spawnpoint, AtPlayerPosition, IsReliable, RelevantDistance, OnlyRelevantToInstigatorAsset Pointer
EventNon-flagID, Replicate, InstigatorOnlystring
ExperienceNon-flagValueint
ItemNon-flagID, Amount, Auto_Equip, Ammo, Barrel, Grip, Magazine, Origin, Sight, Tacticaluint16 + int
Item_RandomNon-flagID, Amount, Auto_Equip, Originuint16 + int
HintNon-flagText, Durationstring + float
Player_Life_FoodNon-flagValueint
Player_Life_HealthNon-flagValueint
Player_Life_StaminaNon-flagValueint
Player_Life_VirusNon-flagValueint
Player_Life_WaterNon-flagValueint
Player_SpawnpointNon-flagIDstring
QuestNon-flagIDuint16
Remove_ZombiesNon-flagZombie, LevelTableOverride, Navenum + int + byte
ReputationNon-flagValueint
Rewards_List_AssetNon-flagGUIDAsset Pointer
TeleportNon-flagSpawnpointstring
VehicleNon-flagID, Spawnpoint, PaintColoruint16 + string + color
ZombieNon-flagZombie, Spawnpoint, LevelTableOverride, SpawnQuantity, CooldownId, CooldownDurationenum + string + int + float

Appendix B: Flag_Math operation reference

OperationFormulaUse case
AdditionA = A + BIncrementing counters by a variable amount
AssignA = BSetting a flag to a known value from another flag
DivisionA = A / BHalving a stat, computing integer ratios
ModuloA = A % BWrapping a counter within a range
MultiplicationA = A * BDoubling a stat, scaling a value
SubtractionA = A - BDecreasing a counter by a variable amount
Random_InclusiveA = rand(A, B) inclusiveRandomized loot quantities, variable rewards
Random_ExclusiveA = rand(A, B) exclusiveRandomized rewards with an upper bound excluded

Appendix C: Reward prefix reference by context

ContextStandard prefixAbandonment/alternate prefix
NPC dialogue responseReward_#_,
Quest completionReward_#_AbandonmentReward_#_
Interactable objectReward_#_ or Interactability_Reward_#_,
Consumable itemQuest_Reward_#_,
Rewards List VolumeReward_#_,

Appendix D: External references

Document history

VersionDateAuthorNotes
1.02026-07-2657 StudiosInitial publication. Complete reference for all 27 reward types across flag and non-flag categories. Includes worked examples, composition patterns, grant delay behavior, multiplayer localization guidance, and diagnostic table.

Cross-references