Skip to content

Item Actions Reference

Context actions are the right-click menu entries that appear when a player right-clicks an item in their inventory. Every Unturned™ player knows them: Salvage breaks an item down for raw materials, Refill tops up a fuel canister, Repair restores a damaged tool to full condition. Behind every one of these familiar right-click options is an action configuration block in the item's Asset.dat file that links an action type, a target blueprint, a localization key or custom button text, and an optional tooltip.

57 Studios™ has documented and validated the full action configuration surface across the Unturned™ modding community. This article covers the two syntax formats for actions (V1 flat-prefix and V2 JSON-style), every action property with its type and valid values, the full catalogue of built-in translation keys, the three default actions the engine generates automatically from blueprint patterns, the Source field for sourcing actions from another item, and worked examples drawn directly from shipped vanilla .dat files. Readers should be comfortable with the Blueprint Asset Reference before reading this article, as every custom action is fundamentally a linker between a right-click menu entry and a blueprint.

The Unturned inventory right-click context menu showing Salvage, Repair, and custom blueprint actions on a melee weapon

Documentation source: This article references the official Smartly Dressed Games modding documentation for all action field definitions and the Unturned™ game data files (version 3.x) for worked examples. Every translation key, action property, and syntax pattern in this article is traceable to a shipped vanilla .dat file.

Who this article is for

This article is written for Unturned™ mod authors who have authored at least one item with blueprints and want to control how those blueprints appear on the item's right-click context menu. If you are new to blueprint authoring, start with Blueprint Asset Reference and Item Asset Anatomy before returning here. Mod developers who only need the default Salvage/Repair/Refill actions do not need this article; the engine generates those automatically when the corresponding blueprint patterns are present.

What you will learn

  • The conceptual model of actions as blueprint-to-menu linkers
  • The V1 flat-prefix action syntax with complete property reference
  • The V2 JSON-style action syntax with complete property reference
  • The full list of valid built-in translation keys and when each is generated automatically
  • How the three default actions (Salvage, Repair, Refill) are triggered by blueprint patterns
  • How to source actions from another item using the Source field
  • How to configure custom button text and tooltips
  • How to use the Link flag to redirect to the crafting menu instead of immediately crafting
  • Worked examples drawn from shipped vanilla .dat files
  • A diagnostic table for common action configuration errors

Background: what an action is

An action is a configuration block, not a gameplay mechanic in its own right. It connects a right-click menu entry (what the player sees when they right-click the item in inventory) to a blueprint (what the engine does when the player selects that entry). The action defines the button label (via a translation key or custom text), an optional tooltip, the target blueprint (by index or by name), and whether clicking the button immediately crafts the blueprint or redirects to the crafting menu.

An item can have zero actions, in which case the right-click menu shows only the engine-default entries (Equip, Drop, Dequip). An item with blueprints that match the three default patterns automatically receives the corresponding default actions without any explicit Actions block. An item with blueprints that do not match any default pattern has no context-menu entry for those blueprints unless an explicit Actions block is added.

The flowchart above shows the full decision chain for every right-click action on every item in the game, from the initial right-click event through to the player's choice and the engine's response.

The two action syntax formats: V1 and V2

Like blueprints, actions support two distinct syntax formats. The V1 format uses the Action_#_ flat-prefix system. The V2 format uses a JSON-style Actions [ { ... } ] list syntax. Both are valid in current Unturned™ versions.

V1 format: the Action_#_ prefix system

The V1 action format mirrors the V1 blueprint format. Every property is prefixed with Action_#_, where # is the zero-based index of the action. The total number of actions is declared with an Actions count field at the top level. Actions that target blueprints additionally use a sub-index system with Blueprint_#_ prefixes within each action's scope.

A minimal V1 action that links to a blueprint by index:

Actions 1
Action_0_Type Blueprint
Action_0_Blueprints 1
Action_0_Blueprint_0_Index 0
Action_0_Key Salvage

This action targets the first blueprint (index 0), uses the Salvage localization key for its button label, and immediately crafts the blueprint when clicked.

A V1 action that sources blueprints from another item:

Actions 1
Action_0_Type Blueprint
Action_0_Source 394
Action_0_Blueprints 1
Action_0_Blueprint_0_Index 1
Action_0_Key Craft_Dressing

The Action_0_Source 394 field tells the engine to look for blueprints on item ID 394 (the Dressing item) rather than on the host item. This is how the Blueprint Dressing supply item references the Dressing medical item's blueprints without duplicating them.

V2 format: the JSON-style list syntax

The V2 action format places action definitions inside a [ ... ] block after the Actions key. Each action is a dictionary enclosed in { }. Fields are named without the Action_#_ prefix.

The same two action examples in V2:

First example (target by name):

Actions
[
    {
        Type Blueprint
        BlueprintName Salvage
        CommonTextId Salvage
    }
]

Second example (target by name with source):

Actions
[
    {
        Type Blueprint
        BlueprintName Repair
        CommonTextId Repair
    }
]

The V2 format is simpler, more readable, and is the documented preference for all new mod development. The rest of this article describes both formats comprehensively, with all field references presented for both.

Complete V1 action property reference

Top-level count field

FieldTypeRequiredDefaultPurpose
Actionsuint8Yes (V1)0Total number of actions defined on this item. Must match the number of distinct Action_#_ groups configured.

Action identity and type fields

FieldTypeRequiredDefaultPurpose
Action_#_TypeEActionType enumYes--The type of action to perform. Currently, the only valid value is Blueprint. All custom actions are blueprint actions.
Action_#_Sourceuint16NoHost item IDThe legacy ID of the item to source blueprints from. When omitted, the action searches for blueprints on the host item. When set, the action searches for blueprints on the specified item instead.
Action_#_Blueprintsuint8Yes0Total number of blueprint indices or names this action targets. For a single blueprint, this is 1.

Blueprint targeting fields

FieldTypeRequiredDefaultPurpose
Action_#_Blueprint_#_Indexuint8No0The zero-based index of the blueprint on the source item that this action should perform. When the blueprint list is reorganized, indices may shift. Prefer Action_#_Blueprint_#_Name where possible.
Action_#_Blueprint_#_NamestringNo""The Name field of the blueprint that this action should perform. Must match the blueprint's Name exactly. This is the preferred targeting method because it is stable across blueprint-list reorderings. Requires that the target blueprint has a Name set.
Action_#_Blueprint_#_LinkflagNonot setWhen set, the action redirects to the associated blueprint listing in the crafting menu rather than immediately crafting the item. Useful for blueprints where the player should review the ingredients before committing.

Label and tooltip fields

FieldTypeRequiredDefaultPurpose
Action_#_KeystringNo--A translation key from the PlayerDashboardInventory.dat localization file. When set, this overrides any custom Action_#_Text or Action_#_Tooltip fields. Cannot be used in combination with Action_#_Text or Action_#_Tooltip.
Action_#_TextstringNo--Custom context button name. If a key matching this value exists in the per-item localization file, that text is shown. Otherwise, this value is shown as-is. Typically used in combination with Action_#_Tooltip.
Action_#_TooltipstringNo--Custom context button tooltip. If a key matching this value exists in the per-item localization file, that tooltip is shown. Otherwise, this value is shown as-is. Typically used in combination with Action_#_Text.

Complete V2 action property reference

The V2 action block is defined inside a [ ... ] list. Each entry is a dictionary enclosed in { }. The following fields are available:

FieldTypeRequiredDefaultPurpose
Typestring (Blueprint)Yes--The action type. Must be Blueprint.
SourceGUIDNoHost item GUIDThe GUID of the item to source blueprints from. When omitted, the action searches on the host item.
BlueprintNamestringNo--The Name field of the blueprint to target. Must match exactly. Preferred over BlueprintIndex because it survives blueprint-list reorganization.
BlueprintIndexuint8No0The zero-based index of the blueprint on the source item. Use BlueprintName instead where possible.
LinkboolNofalseWhen true, the action redirects to the crafting menu at the blueprint listing rather than immediately crafting.
CommonTextIdstringNo--Built-in translation key for the button label. Overrides custom text. Cannot be used with Text or Tooltip.
TextstringNo--Custom button label. Overridden by localization-file match or CommonTextId.
TooltipstringNo--Custom button tooltip. Overridden by localization-file match or CommonTextId.

For compatibility with the vanilla V2 action pattern observed in shipped game data, the V2 field names map to their V1 equivalents as follows:

V2 field nameV1 equivalentNotes
TypeAction_#_TypeAlways Blueprint
SourceAction_#_SourceGUID in V2, legacy ID in V1
BlueprintNameAction_#_Blueprint_#_NamePreferred over index
BlueprintIndexAction_#_Blueprint_#_IndexFalls back to this if BlueprintName not set
LinkAction_#_Blueprint_#_LinkBoolean in V2, flag in V1
CommonTextIdAction_#_KeyRenamed for clarity
TextAction_#_TextUnchanged
TooltipAction_#_TooltipUnchanged

Valid translation keys

The Action_#_Key (V1) and CommonTextId (V2) fields accept translation keys from the PlayerDashboardInventory.dat localization file. These keys produce localized button labels that respect the player's language setting. When a translation key is set, it always overrides any custom Text or Tooltip fields.

The complete set of valid translation keys documented in the engine's localization is:

KeyContextWhen auto-generated
AttachmentsOpens the attachment sub-menu for the itemNever auto-generated; must be explicitly configured
Craft_BandageCrafts bandages from ragsAuto-generated when a blueprint on item 95 (Bandage) matches the craft pattern
Craft_DressingCrafts dressings from bandagesAuto-generated when a blueprint on item 394 (Dressing) matches the craft pattern
Craft_RagCrafts rags from clothAuto-generated when a blueprint matches the rag craft pattern
Craft_SeedCrafts seeds from produceAuto-generated when a blueprint matches the seed craft pattern
DequipUnequips the item from its slotEngine default; not configurable via actions
DropDrops the item on the groundEngine default; not configurable via actions
EquipEquips the item to its designated slotEngine default; not configurable via actions
PickupPicks up the item from the groundEngine default; not configurable via actions
RefillRefills the target item from a source itemAuto-generated by the Refill blueprint pattern
RepairRepairs the target item to full conditionAuto-generated by the Repair blueprint pattern
SalvageBreaks the item down for raw materialsAuto-generated by the Salvage blueprint pattern
StackStacks the item with similar items in inventoryEngine default for stackable items
StoreStores the item in a nearby storage containerEngine default when near storage
TakeTakes items from a storage containerEngine default when viewing storage
UnstackUnstacks a stacked barricade into its constituent materialsUses the Salvage pattern but with the Unstack key; used by stacked barricade items

The Unstack key

The Unstack key is used by barricade stack items (Stack of Logs, Stack of Planks, etc.) to present a salvage action with different terminology. The underlying blueprint is structurally identical to a Salvage blueprint (one supply, the host item, consumed to produce raw materials), but the button label reads "Unstack" rather than "Salvage." This is a deliberate design choice: salvaging a barricade stack conceptually means unstacking it, and the localized button label reflects this.

The three default actions

The engine automatically generates three action types when specific blueprint patterns are detected on an item. No explicit Actions block is required for these three patterns.

Salvage

Generated when an item has a blueprint with exactly one supply, and that supply's ID is the item itself. The blueprint consumes the host item and produces raw materials.

The blueprint pattern in V2:

{
    Name Salvage
    CategoryTag "7ed29f9101ae4523a3b2e389414b7bd9" // Salvage
    InputItems this
    OutputItems "GUID-for-raw-material x N"
    Effect "effect-guid"
}

When the engine detects this pattern, it automatically adds a Salvage action to the item's context menu. The player right-clicks the item, sees "Salvage," clicks it, and the blueprint fires immediately. No Actions block is needed.

Repair

Generated when an item has a blueprint with Operation RepairTargetItem (V2) or Type Repair (V1). The blueprint restores the host item (or the targeted item) to full condition by consuming repair materials.

The blueprint pattern in V2:

{
    Name Repair
    CategoryTag "732ee6ffeb18418985cf4f9fde33dd11" // Repair
    Operation RepairTargetItem
    InputItems "GUID-for-repair-material x N"
    RequiresNearbyCraftingTags
    [
        "7b82c125a5a54984b8bb26576b59e977" // Workbench
    ]
    Effect "effect-guid"
}

When the engine detects this pattern, it automatically adds a Repair action to the item's context menu.

Refill

Generated when an item has a blueprint with Operation FillTargetItem (V2) or the equivalent V1 pattern. The blueprint transfers an amount (e.g., fuel units, ammunition count) from one item to another.

When the engine detects this pattern, it automatically adds a Refill action to the item's context menu.

Custom actions beyond the defaults

For any blueprint that does not match one of these three patterns, no default action is generated. The mod author must add an explicit Actions block to expose the blueprint on the context menu. The most common scenario is a crafting blueprint that the modder wants to make available via right-click on the output item:

Blueprints
[
    {
        Name CraftMyRifle
        CategoryTag "cdb2df24b76d4c6e9d8411c940d8337f" // Gear
        InputItems
        [
            "GUID-for-metal x 10"
            "GUID-for-wood x 5"
        ]
        OutputItems "GUID-for-MyRifle"
    }
]

Actions
[
    {
        Type Blueprint
        BlueprintName CraftMyRifle
        CommonTextId Craft_Bandage  // or custom Text
    }
]

When to use custom actions

Add a custom action whenever the player should be able to access a blueprint directly from the item's right-click menu rather than only from the crafting menu. A salvage action on a weapon that yields specific parts is a good candidate for a custom action with a custom text ("Strip for Parts") rather than the generic "Salvage" label. A craft-blueprint action on a blueprint scroll item that the player carries in inventory is another strong candidate for a custom action.

The Source field: sourcing actions from another item

The Source field (V1: Action_#_Source, V2: Source) tells the action to search for blueprints on a different item than the host. This is the mechanism that allows a blueprint-supply item (a scroll, a recipe book) to reference blueprints defined on a completely different item.

Consider the Blueprint Dressing item (Blueprints/Blueprint_Dressing/Asset.dat):

GUID 8d840f701cc645789d4dc0765b461a2a
Type Supply
ID 1991

Size_X 2
Size_Y 1
Size_Z 0.2

Actions 1
Action_0_Type Blueprint
Action_0_Source 394
Action_0_Blueprints 2
Action_0_Blueprint_0_Index 1
Action_0_Key Craft_Dressing

This item has no blueprints of its own. Instead, it sources its actions from item 394 (the Dressing medical item). The Action_0_Source 394 field tells the engine: do not look for blueprints on this item (1991); look for them on item 394 instead. The action then targets blueprint index 1 on item 394 (the Dressing's second blueprint, which is the craft-from-bandages recipe). The Craft_Dressing localization key supplies the button label.

This pattern has an important implication: the source item must exist and must have blueprints. If the referenced source item does not exist, or does not have a blueprint at the specified index, the action will silently fail -- the right-click menu entry will not appear.

Worked examples from shipped vanilla data

Example 1: Simple salvage action (Camp Axe)

The Camp Axe melee weapon (Melee/Axe_Camp/Axe_Camp.dat) uses the V2 blueprint format with an implicit salvage action. The engine auto-generates the Salvage action because blueprint index 1 matches the salvage pattern:

Blueprints
[
    {
        Name Repair
        CategoryTag "732ee6ffeb18418985cf4f9fde33dd11" // Repair
        Operation RepairTargetItem
        InputItems "21ede8ebffb14c5580e8c7ad149e335e x 3" // Metal Scrap
        RequiresNearbyCraftingTags
        [
            "7b82c125a5a54984b8bb26576b59e977" // Workbench
        ]
        Effect "84347b13028340b8976033c08675d458" // Wrench
    }
    {
        Name Salvage
        CategoryTag "7ed29f9101ae4523a3b2e389414b7bd9" // Salvage
        InputItems this
        OutputItems "21ede8ebffb14c5580e8c7ad149e335e x 2" // Metal Scrap
        Effect "84347b13028340b8976033c08675d458" // Wrench
    }
]

No explicit Actions block appears in this .dat file because the engine automatically detects the Salvage and Repair patterns. The player right-clicks the axe and sees both "Salvage" and "Repair" in the context menu.

Example 2: V2 action with BlueprintName targeting (Stack of Maple Logs)

The Stack of Maple Logs barricade (Barricades/Stack_Log_Maple/Stack_Log_Maple.dat) uses the V2 action format to reference a blueprint by name:

Blueprints
[
    {
        Name Stack
        CategoryTag "cdb2df24b76d4c6e9d8411c940d8337f" // Gear
        InputItems "94f9c6aa09c249dfbce4f195c0271b9c x 12" // Maple Log
        OutputItems this
        Effect "84347b13028340b8976033c08675d458" // Wrench
    }
    {
        Name Unstack
        CategoryTag "7ed29f9101ae4523a3b2e389414b7bd9" // Salvage
        InputItems this
        OutputItems "94f9c6aa09c249dfbce4f195c0271b9c x 12" // Maple Log
        Effect "84347b13028340b8976033c08675d458" // Wrench
    }
]

Actions
[
    {
        Type Blueprint
        BlueprintName Unstack
        CommonTextId Unstack
    }
]

Key observations: The blueprint is targeted by its Name (Unstack) rather than by a fragile numerical index. The CommonTextId Unstack field uses the built-in Unstack translation key for the button label. The action is the only one explicitly defined; the engine still auto-generates the Salvage action (because the Unstack blueprint matches the salvage pattern), but the explicit action overrides it with the Unstack label and the Link value (which defaults to false, so the action immediately unstacks the item).

Example 3: V1 action with Source field (Blueprint Dressing)

The Blueprint Dressing item (Blueprints/Blueprint_Dressing/Asset.dat) demonstrates the Source field pattern:

GUID 8d840f701cc645789d4dc0765b461a2a
Type Supply
ID 1991

Size_X 2
Size_Y 1
Size_Z 0.2

Actions 1
Action_0_Type Blueprint
Action_0_Source 394
Action_0_Blueprints 2
Action_0_Blueprint_0_Index 1
Action_0_Key Craft_Dressing

Key observations: This item is a supply (a blueprint scroll) that has no blueprints of its own. The action sources its blueprints from item 394 (Dressing medical item). It targets blueprint index 1 on item 394. The player right-clicking the Blueprint Dressing item sees a "Craft Dressing" option that, when clicked, executes the Dressing item's second blueprint. The Blueprint Dressing supply item is the input item for that blueprint, so the player effectively consumes the blueprint to produce a Dressing.

Example 4: Multiple V1 actions on a single item

A barricade stack item (Barricades/Stack_Bar/Stack_Bar.dat) demonstrates the V1 action format with a single action:

Actions 1
Action_0_Type Blueprint
Action_0_Source 1911
Action_0_Blueprints 1
Action_0_Blueprint_0_Index 1
Action_0_Key Unstack

This action sources from the item's own ID (1911), targets blueprint index 1 (the salvage blueprint), and uses the Unstack localization key. Despite being index 1 (the salvage blueprint matching the salvage pattern), the engine uses the explicit action configuration rather than the auto-generated one, giving the action the Unstack label rather than Salvage.

A mod that wants a right-click action to open the crafting menu at a specific blueprint rather than immediately craft it would use the Link flag (V1) or Link true (V2):

V1:

Actions 1
Action_0_Type Blueprint
Action_0_Blueprints 1
Action_0_Blueprint_0_Name CraftSuperRifle
Action_0_Blueprint_0_Link
Action_0_Text "View Recipe"
Action_0_Tooltip "Open the crafting menu to review the required materials before committing."

V2:

Actions
[
    {
        Type Blueprint
        BlueprintName CraftSuperRifle
        Link true
        Text "View Recipe"
        Tooltip "Open the crafting menu to review the required materials before committing."
    }
]

When the player clicks "View Recipe," the crafting menu opens with the CraftSuperRifle blueprint selected. The player can review the full ingredient list, skill requirements, and workstation requirements before choosing whether to craft.

When to use the Link flag

Use the Link flag for blueprints that consume rare or valuable ingredients where the player should confirm the cost before committing. A recipe that requires a legendary item or a large quantity of rare resources should use a Link action by default. A recipe for common consumables (bandages, torches) should not use Link; the player values speed over confirmation for frequently repeated crafts.

Custom button text and tooltips

When a built-in translation key is not appropriate (e.g., for a completely custom action that does not correspond to any standardized game mechanic), the Text and Tooltip fields provide custom labels:

V1:

Actions 1
Action_0_Type Blueprint
Action_0_Blueprints 1
Action_0_Blueprint_0_Name ReinforceWithPlating
Action_0_Text "Reinforce"
Action_0_Tooltip "Consume steel plating to reinforce this barricade, increasing its max HP by 200."

V2:

Actions
[
    {
        Type Blueprint
        BlueprintName ReinforceWithPlating
        Text "Reinforce"
        Tooltip "Consume steel plating to reinforce this barricade, increasing its max HP by 200."
    }
]

The Text value ("Reinforce") appears as the button label. The Tooltip value appears as the hover tooltip. If a localization file for the item contains a key matching "Reinforce," the localized value is displayed instead of the raw string. This allows mod teams to ship translation-ready custom actions by using localization keys as action text.

Action-to-blueprint linkage diagnostics

SymptomMost likely causeResolution
Action does not appear on right-clickAction_#_Type missing or not BlueprintAdd Action_#_Type Blueprint
Action appears but does nothing when clickedBlueprint_#_Index or BlueprintName references a non-existent blueprintVerify the target blueprint exists at the specified index or name
Action triggers the wrong blueprintBlueprint_#_Index shifted after adding or removing blueprintsUse BlueprintName instead of index
Custom text is ignored and the standard key label appearsAction_#_Key field is set alongside Action_#_Text; key always overrides textRemove the Action_#_Key field or set it to the desired key
Action sources from wrong itemSource references an item ID that has changedVerify the source item's ID or GUID
Salvage action says "Unstack" instead of "Salvage"Barricade stack items use Unstack key intentionallyThis is normal for barricade stacks; change the key to Salvage if desired
Two Salvage actions appear on one itemBoth an auto-generated Salvage action and an explicit Salvage action are presentRemove the explicit action; the auto-generated one is sufficient
Action shows greyed outBlueprint_#_Link flag is set or the blueprint's requirements are unmetCheck the Link flag; verify the player meets blueprint requirements
Multiple actions show in wrong orderAction ordering follows declaration order in the .datReorder the action declarations in the .dat file
Custom tooltip does not appearAction_#_Tooltip is overridden by a matching localization keyUse a unique tooltip string that is not a localization key, or remove the localization key from the localization file
V1 to V2 conversion loses actionsAuto-conversion may not convert actions alongside blueprintsAdd an explicit V2 Actions block after auto-converting blueprints

Action authoring workflow

  1. Confirm the blueprint exists and works. Before adding an action, verify that the blueprint can be crafted successfully through the crafting menu. An action is a wrapper; a broken blueprint produces a broken action.
  2. Name the target blueprint. If the blueprint does not already have a Name field, add one. Named blueprints are more resilient to reorganization than index-based targeting.
  3. Choose the format. Use V2 for all new mod development. Match existing format if editing a legacy mod.
  4. Set the action type. Always Blueprint. No other action type exists at present.
  5. Target the blueprint. Use BlueprintName (V2) or Action_#_Blueprint_#_Name (V1) with an exact string match on the blueprint's Name field.
  6. Choose a localization key or custom text. For standard actions (Salvage, Repair, Refill, Unstack), use the corresponding built-in key via CommonTextId (V2) or Action_#_Key (V1). For custom actions, use Text and Tooltip.
  7. Set the Link flag if appropriate. For expensive or rare recipes, set Link true (V2) or add Action_#_Blueprint_#_Link (V1) to redirect to the crafting menu rather than crafting immediately.
  8. Set the Source field if sourcing from another item. If the actions should reference blueprints on a different item, set Source to that item's GUID (V2) or legacy ID (V1).
  9. Test in-game. Right-click the item. Confirm all expected actions appear. Click each action. Confirm the correct blueprint fires or the crafting menu opens at the correct blueprint.

Best practices

  • Use BlueprintName targeting instead of BlueprintIndex. Blueprint indices change when the blueprint list is reorganized; names persist.
  • Name every blueprint that will be targeted by an action. An unnamed blueprint cannot be targeted by name.
  • Use built-in translation keys (Salvage, Repair, Refill, Unstack, Craft_Dressing, etc.) for consistency with the vanilla game's localization. Players recognize these labels.
  • Use custom Text and Tooltip only for genuinely novel actions that have no vanilla analogue. A custom action that salvages an item for specific rare parts might use Text "Strip for Electronics" with a descriptive tooltip.
  • Set Link true for any action where the blueprint's total cost is non-trivial. A player who accidentally converts a legendary item into common materials because they mis-clicked a right-click action will not make that mistake twice, but the frustration is avoidable.
  • Test actions with the source item's inventory state at edge conditions: the source item partially damaged, the source item having attachments, the player not meeting skill requirements, the workstation not in range. Each edge condition should produce the expected behavior (action hidden, greyed out, or proceeding with degraded output).
  • Use the V2 format for all new mod development. The V1 format is maintained for backward compatibility but is more verbose and more error-prone.
  • Document custom actions in the workshop description. Players relying on muscle memory for standard action labels may not notice a custom action until they need it.

Frequently asked questions

Can I have multiple actions on one item?

Yes. Set Actions to the count of actions (V1) or add multiple entries in the Actions [ ] list (V2). Each action can target a different blueprint or the same blueprint with different labels.

What happens if the referenced blueprint does not exist?

The action silently fails to appear on the context menu. There is no error message in the log. Always test every action in-game after adding, removing, or renaming blueprints.

Can an action target a blueprint on a completely unrelated item?

Yes, via the Source field. The Source field can reference any item ID (V1) or GUID (V2). The action searches for blueprints on the source item, not the host item. This is the mechanism used by blueprint scroll items in vanilla.

Can I change the order of actions in the right-click menu?

The action order in the right-click menu follows the declaration order in the .dat file. Reorder the action declarations to reorder the menu entries. Engine-default actions (Equip, Drop, Dequip) are always appended after explicit actions.

Do I need an Actions block if my blueprints already auto-generate default actions?

No. If the default Salvage, Repair, or Refill action is sufficient, no explicit Actions block is needed. Add an explicit Actions block only when you need to override the default label, add a tooltip, use the Link flag, or expose a blueprint that does not match any default pattern.

Can I combine V1 and V2 action syntax on the same item?

No. Choose one format per item. The engine processes the Actions field based on the format it detects. Mixing V1 flat keys (e.g., Action_0_Type) with a V2 JSON list will produce undefined behavior.

How do I localize custom action text?

Create a per-item localization file (e.g., English.dat) in the same folder as the item's Asset.dat. Add entries matching the Text and Tooltip values. The engine checks the localization file first; if a matching key is found, the localized value is displayed. If no matching key is found, the raw string is used as-is.

What is the difference between BlueprintName and BlueprintIndex?

BlueprintName targets a blueprint by its Name field (a case-sensitive string). BlueprintIndex targets a blueprint by its zero-based position in the blueprint list. BlueprintName is stable across blueprint-list reordering; BlueprintIndex is not. Always prefer BlueprintName.

Can I have an action that does nothing but display a tooltip?

No. All actions must be of type Blueprint and must target a valid blueprint. There is no "info-only" or "tooltip-only" action type. To provide information to the player without triggering a blueprint, use the item's Description field in English.dat instead.

Can I use the Source field to reference a blueprint on an item from another mod?

Yes, but the source item must be loaded. If the source item's mod is not subscribed or not loaded, the action will silently fail to appear. Cross-mod action dependencies are fragile and should be documented in the workshop description so players understand the dependency.

How do I remove a default action that the engine auto-generates?

There is no field to suppress a default action. The only way to remove a default action is to remove the blueprint pattern that triggers it. If a Salvage action is being auto-generated but you do not want the item to be salvageable, remove the salvage blueprint.

Can a single action trigger multiple blueprints sequentially?

No. Each action targets exactly one blueprint (specified by index or name within the action's blueprint list). To trigger multiple blueprints from a single right-click interaction, create a single blueprint that has the combined effect of both operations.

Advanced action patterns

Redirect-to-crafting-menu actions for complex recipes

The Link flag is underutilized in mods. Any blueprint that requires more than three ingredients, a skill check, a workstation check, and a rare tool should use a Link action rather than an immediate-craft action. The crafting menu displays the full ingredient list, the skill requirement indicator, and the workstation availability indicator -- information the context menu tooltip cannot convey effectively.

Action sourcing chains

A blueprint scroll item (item A) sources its actions from a medical item (item B), which in turn has blueprints that consume item A as an input. This circular dependency (scroll is input for the blueprint it references) is intended: the player finds the scroll, right-clicks it, clicks "Craft Dressing," and the scroll (as the Critical input item) is consumed alongside the other ingredients to produce the output. This is the standard vanilla pattern for recipe-scroll items.

Custom action for interchangeable ammunition

A mod that includes multiple ammunition types for the same gun can use custom actions with descriptive labels: "Load Armor-Piercing," "Load Tracer," "Load Subsonic." Each action targets a different magazine-loading blueprint. The blueprints all use Operation FillTargetItem with different magazine GUIDs as their outputs. The player right-clicks the gun and selects the ammunition type directly from the context menu.

Appendix A: Action field quick reference (V2)

FieldTypeRequiredDefault
Typestring (Blueprint)Yes--
SourceGUID stringNoHost item GUID
BlueprintNamestringNo--
BlueprintIndexuint8No0
LinkboolNofalse
CommonTextIdstringNo--
TextstringNo--
TooltipstringNo--

Appendix B: Action field quick reference (V1)

FieldTypeRequiredDefault
Actionsuint8Yes0
Action_#_TypeEActionType enum (Blueprint)Yes--
Action_#_Sourceuint16NoHost item ID
Action_#_Blueprintsuint8Yes0
Action_#_Blueprint_#_Indexuint8No0
Action_#_Blueprint_#_NamestringNo""
Action_#_Blueprint_#_LinkflagNonot set
Action_#_KeystringNo--
Action_#_TextstringNo--
Action_#_TooltipstringNo--

Appendix C: Full translation key catalogue

KeyTypical useAuto-generated?
AttachmentsOpens attachment sub-menuNo
Craft_BandageCraft bandages from ragsYes (on Bandage host or source)
Craft_DressingCraft dressings from bandagesYes (on Dressing host or source)
Craft_RagCraft rags from clothYes
Craft_SeedCraft seeds from produceYes
DequipUnequip itemEngine default
DropDrop itemEngine default
EquipEquip itemEngine default
PickupPick up itemEngine default
RefillRefill a target itemYes (FillTargetItem pattern)
RepairRepair target itemYes (RepairTargetItem pattern)
SalvageSalvage item for materialsYes (single-supply self-referencing pattern)
StackStack itemsEngine default for stackable items
StoreStore item in nearby containerEngine default
TakeTake item from containerEngine default
UnstackUnstack barricade stack into materialsSame pattern as Salvage; label differs

Appendix D: External references

Document history

VersionDateAuthorNotes
1.02026-07-2657 StudiosInitial publication. Complete V1 and V2 action field reference, full translation key catalogue, default action generation rules, Source field documentation, worked examples from shipped vanilla data, diagnostic table, FAQ, appendices.

Action parsing and cross-format compatibility

The engine parses the Actions field by detecting whether the value begins with a [ character. If it does, the V2 JSON-style parser is used. If it does not, the V1 flat-key parser is used. This detection is simple but has one consequence: a V2 Actions list must begin with [ on the same line as Actions, and the entire list body must be structurally valid as a list of dictionaries.

A common V2 authoring mistake is to place the opening bracket on the next line:

Actions
[
    { ... }
]

This is valid according to the engine parser (the bracket is detected correctly). However, placing the bracket on the same line as Actions is the vanilla convention and avoids ambiguity:

Actions [
    { ... }
]

Both forms are technically valid. The cohort recommendation is to follow the vanilla convention: bracket on the same line for consistency with how the vanilla .dat files are authored.

Cross-format migration

When migrating a V1 item with actions to V2, all actions should be consolidated into a single V2 list. The migration steps are:

  1. Convert Action_#_Type Blueprint to Type Blueprint.
  2. Convert Action_#_Source <ID> to Source "<GUID>" (looking up the GUID for the legacy ID if needed).
  3. If using Action_#_Blueprint_#_Name, convert to BlueprintName. If using Action_#_Blueprint_#_Index, convert to BlueprintIndex.
  4. If the Action_#_Blueprint_#_Link flag is present, add Link true.
  5. Convert Action_#_Key to CommonTextId.
  6. Convert Action_#_Text to Text and Action_#_Tooltip to Tooltip.
  7. Wrap everything in Actions [ { ... } ] and remove all V1 Action_#_ properties.
  8. Test every action in-game. Confirm each right-click entry appears, each button label reads correctly, and each action performs the intended blueprint.

Action ordering and priority rules

When an item has both auto-generated default actions and explicit actions, the following priority rules apply:

  1. If an explicit action targets the same blueprint as a default action, the explicit action replaces the default action. The explicit action's label, tooltip, and Link setting are used.
  2. If an explicit action references a blueprint by name and the engine auto-generates a default action for a different blueprint with the same default pattern (e.g., two salvage blueprints), both the explicit action and the default action appear. The explicit action uses the specified blueprint; the default action uses the auto-detected blueprint.
  3. Explicit actions are listed in the order they appear in the Actions block. Default actions are appended after all explicit actions, in the order: Salvage, Repair, Refill.
  4. Engine-default actions (Equip, Drop, Dequip, Stack, Store, Take) are always appended after all explicit and default blueprint actions.

Action interaction with item state

Actions are dynamic. They can appear or disappear based on the item's current state and the player's situation:

  • A Repair action is hidden when the item is at full durability.
  • A Refill action is hidden when the item is already full (fuel, ammunition).
  • A Salvage action is always present if the salvage blueprint exists, regardless of the item's condition.
  • An action sourced from another item is hidden if the source item is not loaded.
  • An action targeting a blueprint with conditions is hidden when those conditions are unmet (unless the blueprint has VisibleWithUnmetConditions true).
  • An action targeting a blueprint with a Critical item is hidden when the player does not possess that Critical item.

These dynamic behaviors are important to understand when testing actions. An action that works during one test session may be absent in another because the player's inventory state changed between sessions. When a player reports that an action has "disappeared," the first diagnostic step is to verify the item's state and the player's inventory against the blueprint's requirements.

Action diagnostic flow for missing context-menu entries

The diagnostic flow above traces every gate that can prevent an action from appearing. Start at the top and follow the branch that matches your situation. The most common cause of a missing action is a mismatch between the action's target (BlueprintName or BlueprintIndex) and the actual blueprint configuration.

Advanced action authoring checklist

Before publishing a mod with custom actions, confirm the following:

  • [ ] Every action's Type is Blueprint.
  • [ ] Every BlueprintName value exactly matches the Name field of the target blueprint, including case.
  • [ ] No action uses BlueprintIndex unless BlueprintName is impossible (blueprint has no Name).
  • [ ] CommonTextId (if used) is one of the documented valid translation keys.
  • [ ] Text and Tooltip (if used) are not accidentally matching an existing localization key unless that is intended.
  • [ ] Link is true for expensive or irreversible recipes.
  • [ ] Source is set only when referencing blueprints on a different item.
  • [ ] Auto-generated default actions are not duplicated by explicit actions targeting the same blueprint.
  • [ ] Action ordering in the Actions block reflects the desired right-click menu order.
  • [ ] Every action has been tested: right-click the item, confirm the action appears, click it, confirm the blueprint executes correctly.
  • [ ] Edge cases tested: item at full durability (Repair should be hidden), item empty (Refill should be hidden), player without Critical items (actions with Critical supplies should be hidden), player far from workstation (actions with operation requirements should show appropriate indicators).

Appendix E: Action-to-blueprint relationship diagram

┌─────────────────────────────────────────────────────────────────────┐
│  Action-to-blueprint relationship for a hypothetical custom rifle    │
└─────────────────────────────────────────────────────────────────────┘

Item: CustomRifle (GUID: abcd-1234)

  ├── Blueprints
  │   ├── [0] Name: SalvageRifle          ← auto-detected as Salvage
  │   ├── [1] Name: RepairRifle           ← auto-detected as Repair
  │   ├── [2] Name: RefillMagFromReserve  ← auto-detected as Refill
  │   └── [3] Name: CraftRifleFromParts   ← NOT auto-detected

  └── Actions [                            ← explicit actions block
        {
          Type Blueprint
          BlueprintName CraftRifleFromParts
          Text "Assemble Rifle"
          Tooltip "Consume rifle parts to assemble a new rifle."
          Link true
        }
      ]

Right-click menu result:
  ────────────────────────────────────────
  Assemble Rifle          ← explicit action (Link → opens crafting menu)
  Salvage                 ← auto-generated from blueprint [0]
  Repair                  ← auto-generated from blueprint [1]
  Refill                  ← auto-generated from blueprint [2]
  ────────────────────────
  Equip                   ← engine default
  Drop                    ← engine default

If the rifle is at full durability:
  Assemble Rifle          ← explicit action (always visible)
  Salvage                 ← auto-generated (always visible because blueprint exists)
  Refill                  ← auto-generated (visible only if not full)
  ────────────────────────
  Equip                   ← engine default
  Drop                    ← engine default

  (Repair hidden because rifle is at full durability)

This diagram shows the complete action landscape for an item with four blueprints (three matching default patterns, one requiring an explicit action) and how the right-click menu changes based on item state.

Appendix F: Special considerations for server mods with custom actions

Server-side mods that distribute items with custom actions to multiple players must account for the following additional considerations:

  • All players must have the mod subscribed for custom actions to appear. An action configured with a custom Text value (e.g., "Strip for Parts") will appear as that exact string for all players sharing the same localization language. Players using different languages will see the raw string unless a per-language localization file is provided.
  • Actions that use Source to reference another item rely on that source item being loaded on every player's client. If a player does not have the mod containing the source item subscribed, the action will not appear.
  • The Link flag is a client-side behavior. Opening the crafting menu at a specific blueprint requires the client to be able to enumerate the source item's blueprints. If the client cannot (due to missing mod subscription), the Link action will do nothing.
  • Custom actions with the same BlueprintName but different Text values on different servers may confuse players who move between servers. Consider using consistent naming across servers in the same mod ecosystem.
  • When updating a mod that includes custom actions, increment the mod version and document action changes in the Workshop changelog. Players who rely on specific right-click options for their workflow will notice when those options change or disappear.

Cross-references