Skip to content

DataAsset

60 tools. Back to the index.

add_curve_key

Destructive.

Add or update a keyframe (time, value) on one channel of a CurveFloat, CurveVector or CurveLinearColor asset, set its interpolation and save the asset; a key already at that time is replaced. Returns the read-back time, value, interp and key_count. Inverse: remove_curve_key; list keys with get_curve_keys.

Parameter Type Required Description
curve_path string yes Full asset path of the curve
time number yes Key time on the X axis of the curve, in the units the curve uses (often seconds); an existing key at this time is replaced
value number yes Key value (Y axis) stored at that time on the chosen channel, as a float
channel number no Curve channel index, default 0: 0 for CurveFloat, 0-2 (X, Y, Z) for CurveVector, 0-3 (R, G, B, A) for CurveLinearColor; out of range is an error
interp string no Key interpolation mode (constant|cubic|linear, default linear); any other value silently falls back to linear

Returns: { curve_path, curve_class, channel, num_channels, time, value, interp, key_added, key_count, saved }

add_curve_table_key

Additive.

Add or update a single key on an existing UCurveTable row's rich curve. Creates the row on demand if it does not yet exist.

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable.
row_name string yes Name of the row (rich curve) to key.
time number yes Key time (X).
value number yes Key value (Y).

Returns: { curve_table_path: string, row_name: string, time: number, value: number, key_added: bool, created_row: bool, key_count: int, row_count: int, saved: bool }

add_curve_table_row

Destructive.

Add (or replace) a named FRichCurve row in a UCurveTable, optionally seeding keys.

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable.
row_name string yes Name of the row (rich curve) to add.
keys array no Optional [[time, value], ...] array of seed keys

Returns: { curve_table_path: string, row_name: string, row_added: bool, keys_added: int, key_count: int, row_count: int, curve_table_mode: string, saved: bool, keys: [{ time, value }] }

add_data_registry_source

Additive.

Attach a DataTable source to a UDataRegistry. Creates a UDataRegistrySource_DataTable (owned by the registry) pointing at the given DataTable and appends it to the registry's source list. The DataTable RowStruct must match the registry's ItemStruct.

Parameter Type Required Description
registry_path string yes Content path to the UDataRegistry asset.
data_table_path string yes Content path to the source UDataTable.
precache boolean no bool, enables synchronous cached lookups (default true).

Returns: { registry_path: string, data_table_path: string, source_name: string, success: bool, precache: bool, source_count: int, saved: bool, save_error: string }

add_data_table_row

Destructive.

Create a new row in a DataTable (upsert -- it overwrites if the key exists), passing columns as a plain JSON object. Values go through reflection, so scalars, enums by name, nested structs and arrays all work. It fails the WHOLE write when any column cannot be imported, rather than committing a half-filled row with silent defaults, and lists anything it did not recognise in unknown_columns -- read that array, a typo'd column name is dropped, not an error. GameplayTag and GameplayTagContainer columns are the ones that reject a bare string: pass them in ExportText form, e.g. (TagName="A.B"). Use set_data_table_row to require the row to exist, or set_data_table_row_fields for a partial per-column update with before/after evidence.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable (e.g. /Game/MyGame/DT_Example)
row_name string yes Name (key) of the row to write
row_data object yes Object of {column_name: value}; values may be string/number/bool

Returns: success or error payload

clear_data_registry_sources

Destructive, idempotent.

Empty the DataSources[] array on a UDataRegistry and save the asset. Honest: UDataRegistrySubsystem has no public UnregisterRegistry, so this does NOT unregister the registry from the subsystem registry map. The already-loaded sources may still be queryable for their cached items until the editor restarts. Use refresh_data_registry_map() after editing to force the subsystem to re-read the registry map.

Parameter Type Required Description
registry_path string yes Content path to the UDataRegistry asset.

Returns: { registry_path: string, source_count_before: int, source_count_after: int, cleared: bool, save_error: string }

compile_text_for_target

Destructive.

Compile a localization target's archives into runtime LocRes/LocMeta binaries, by generating its CompileText commandlet config (LocalizationConfigurationScript::GenerateCompileTextConfigFile) and running it in-process (UGatherTextCommandlet::Execute) -- the same pipeline the Localization Dashboard's "Compile Text" button drives. Run gather_text_for_target first so the archives are up to date.

Parameter Type Required Description
target_name string yes Required. Target name, as listed by list_localization_targets.
scope string no Optional: "engine" | "game". Disambiguates a same-named target in both sets; defaults to searching both.
culture_name string no Optional. Restrict compilation to a single supported culture; omit to compile every supported culture.

Returns: { target_name: string, scope: string, culture_name: string, config_path: string, config_written: bool, exit_code: int, success: bool, message: string }

create_composite_curve_table

Additive.

Creates a UCompositeCurveTable at package_path/name that stacks the given UCurveTables as parents, and saves it. An existing composite there is reused and only gets parents if it has none; parents that fail to load are skipped and listed in missing_parents. Returns parent_count, row_count, created, saved.

Parameter Type Required Description
name string yes Name of the new CompositeCurveTable asset.
package_path string no Content folder; defaults to /Game/CurveTables
parent_table_paths array no Optional list of UCurveTable asset paths to stack as parents

Returns: { name: string, package_path: string, asset_path: string, curve_table_path: string, curve_class: string, parent_count: int, row_count: int, curve_table_mode: string, created: bool, already_exists: bool, saved: bool, missing_parents?: [string] }

create_composite_data_table

Additive.

Create (or re-converge) a UCompositeDataTable whose row map is the merge of its parent DataTables, so a fork can EXTEND an upstream table instead of replacing it. The parent list is SET, not appended (re-running with a different list rewrites it), the row struct of every parent is validated BEFORE assignment (a mismatch or a cyclic parent chain would make the engine open a modal dialog and hang the editor), and the merge is verified by re-reading the live row map.

Parameter Type Required Description
table_name string yes Name of the composite DataTable asset to create or converge.
parent_tables array yes Array of full asset paths of the parent DataTables, LOW precedence first: a row present in several parents is won by the one with the HIGHEST index.
package_path string no Target content package path where the asset lives (check the body for the default).
row_struct string no Optional UScriptStruct name for the composite rows. Defaults to the row struct of the first resolved parent (or, on an existing composite, to the one it already has -- which cannot be changed in place).
include_row_sources boolean no Optional bool (default false): also return the winning parent for EVERY merged row. Expensive on large tables.

Returns: { table_name, package_path, table_path, table_class, row_struct, created, already_existed, requested_parent_tables, missing_parents, parents_applied, saved, save_error, parent_tables, parent_count, contributing_parent_count, merged_row_count, sum_parent_row_counts, expected_merged_row_count, merged_row_count_matches_parents, parent_row_struct_mismatch, shadowed_rows, shadowed_row_count, row_sources_included, row_sources? }

create_curve_asset

Additive.

Create a curve asset (CurveFloat, CurveVector or CurveLinearColor) -- a reusable value-over-time or value-over-input ramp for damage falloff, stat growth, fade timing or colour gradients, referenced by assets instead of hard-coded numbers. Channel count follows the type (1 / 3 / 4), and add_curve_key fills it. Different thing from a CurveTable (create_curve_table), which holds many named curves as rows.

Parameter Type Required Description
name string yes Asset name to create
package_path string no Target content package path where the asset is created (check the body for the default)
curve_type string no Curve type to create (read the body for the allowed values)

Returns: { name, package_path, curve_type, asset_path, curve_class, num_channels, created, already_exists, saved, success, message }

create_curve_table

Additive.

Create and save a new UCurveTable asset (a table of named rich-curve rows).

Parameter Type Required Description
name string yes Name of the new CurveTable asset.
package_path string no Content folder for the asset; defaults to /Game/CurveTables

Returns: { name: string, package_path: string, asset_path: string, curve_table_path: string, curve_class: string, row_count: int, curve_table_mode: string, created: bool, already_exists: bool, saved: bool, message: string }

create_data_asset

Additive.

Create a DataAsset instance of a given parent class -- the single-record alternative to a DataTable row, for configuration that wants its own asset and its own reference (a biome definition, a lock profile, a weapon config). Pick a DataAsset when things point AT it individually; pick a DataTable when you want many rows edited together. Fill it with set_data_asset_property and read it back with get_data_asset_info.

Parameter Type Required Description
asset_name string yes Name of the new DataAsset to create.
package_path string no Target content package path where the asset is created (check the body for the default)
parent_class string no DataAsset parent class name (defaults to DataAsset)

Returns: { asset_name, package_path, parent_class, asset_path, success, saved, message }

create_data_registry

Additive, idempotent.

Create and save a UDataRegistry asset. The registry's ItemStruct is set to the named UScriptStruct (e.g. "MirrorTableRow"); DataTable sources attached later must use a matching RowStruct. Idempotent: re-loads and returns an existing asset.

Parameter Type Required Description
registry_name string yes Name of the new UDataRegistry asset.
item_struct string yes Name of the UScriptStruct used for items (e.g. "MirrorTableRow").
package_path string no Destination /Game folder (default /Game/DataRegistries).
registry_type string no RegistryType FName (defaults to registry_name).

Returns: { registry_path: string, registry_type: string, item_struct: string, success: bool, already_exists: bool, type_verified: bool, struct_verified: bool, saved: bool, save_error: string }

create_data_table

Additive, idempotent.

Create a DataTable asset bound to a row struct -- the standard container for game data (items, recipes, loot, quests, dialogue) that designers edit without touching Blueprints. The row struct must already exist (create_struct) and cannot be changed afterwards without losing data, so settle its columns first. Idempotent: re-running with the same row_struct returns the existing table with already_existed instead of erroring. Rows go in with add_data_table_row or import_data_table_csv; create_composite_data_table is the variant that merges several parent tables.

Parameter Type Required Description
table_name string yes Name of the new DataTable.
row_struct string yes Name of the UScriptStruct that defines the row structure.
package_path string no Target content package path where the asset is created (check the body for the default)

Returns: { table_name, package_path, row_struct, table_path, success, saved, already_existed, message }

create_string_table

Additive.

Creates a UStringTable asset at package_path/name with the given namespace and no entries, then saves it. A string table already there is returned unchanged (namespace not applied, already_exists true). Returns asset_path, string_table_id, namespace, entry_count, created, saved. Add entries with set_string_table_entry.

Parameter Type Required Description
name string yes Name of the new StringTable asset
package_path string no Target content path, defaults to /Game/StringTables
namespace string no Optional namespace for all entries, defaults to asset name

Returns: { name: string, package_path: string, asset_path: string, string_table_path: string, string_table_id: string, namespace: string, entry_count: int, created: bool, already_exists: bool, saved: bool, message: string }

delete_curve_table_row

Destructive, idempotent.

Delete a named row (curve) from a UCurveTable and verify it is gone. Idempotent: deleting a missing row reports existed=false/removed=false without error.

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable.
row_name string yes Name of the row (curve) to remove.

Returns: { curve_table_path: string, row_name: string, existed: bool, removed: bool, still_exists: bool, row_count: int, curve_table_mode: string, saved: bool }

delete_data_table_row

Destructive.

Remove one row from a DataTable by key, saving the asset and VERIFYING the removal by re-reading (it reports existed, removed, still_exists and the new row_count, so the reply is its own oracle rather than a bare success). Check existed to tell "deleted it" from "there was never such a key". Anything still referencing that row name by handle now resolves to nothing, silently -- audit with find_blueprint_node_references before deleting a live row.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable
row_name string yes Name (key) of the row to remove

Returns: { table_path, row_name, existed, removed, still_exists, row_count, saved }

diff_data_tables

Read-only.

Diff two DataTables row by row and cell by cell without modifying either: two asset paths (a, b), or two JSON dumps (before_json, after) such as get_data_table_rows or export_data_table_as_json output, which win when present. Returns identical, added/removed/changed rows with counts and changed cells as {column, a, b}.

Parameter Type Required Description
a string yes Full asset path of the first DataTable (alias: table_a); asset mode
b string yes Full asset path of the second DataTable (alias: table_b); asset mode
before_json any no The 'before'/A table dump as a JSON object/array or stringified JSON (alias: before); JSON mode
after any no The 'after'/B table dump as a JSON object/array or stringified JSON (alias: after_json); JSON mode
table_a string no Alias of a: asset path of the first DataTable, e.g. "/Game/Data/DT_Items"; a wins when both are given
table_b string no Alias of b: asset path of the second DataTable, e.g. "/Game/Data/DT_Items_Old"; b wins when both are given
before any no Alias of before_json: the first (before) table dump; before_json wins when both are given
after_json any no Alias of after: the second (after) table dump; after wins when both are given

Returns: { mode, identical, added_count, removed_count, changed_count, unchanged_count, a_row_count, b_row_count, added_rows:[{row_name,row_data}], removed_rows:[...], changed_rows:[{row_name,changed_cells:[{column,a,b}]}] }

export_data_table_as_csv

Destructive.

Export a whole DataTable to CSV with the native exporter (read-only), returning row_struct, row_count and the csv string, optionally also written to a UTF-8 file. Use it as the backup before import_data_table_csv; nested structs and TMaps do not survive CSV cleanly, so export_data_table_as_json is the faithful copy.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable.
data_table string no Alias of table_path: pass one of the two.
file_path string no Optional OS path to also write the CSV string to (echoed back as written_to)

Returns: { table_path, row_struct, row_count, csv, written_to? }

export_data_table_as_json

Destructive.

Export a whole DataTable to JSON with the native exporter (read-only), so TMap<Enum,SoftClass>, soft references and GameplayTags survive, unlike get_data_table_rows. Returns row_struct, row_count and the json string (an array of row objects), optionally also written to a UTF-8 file.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable.
data_table string no Alias of table_path: pass one of the two.
file_path string no Optional OS path to also write the JSON string to (echoed back as written_to)

Returns: { table_path, row_struct, row_count, json, written_to? }

gather_text_for_target

Destructive.

Gather text into a localization target's manifest/archive files, by generating its GatherText commandlet config (LocalizationConfigurationScript::GenerateGatherTextConfigFile) and running it in-process (UGatherTextCommandlet::Execute) -- the same pipeline the Localization Dashboard's "Gather Text" button drives.

Parameter Type Required Description
target_name string yes Required. Target name, as listed by list_localization_targets.
scope string no Optional: "engine" | "game". Disambiguates a same-named target in both sets; defaults to searching both.

Returns: { target_name: string, scope: string, config_path: string, config_written: bool, exit_code: int, success: bool, message: string }

get_active_culture

Read-only.

Read the editor's current active culture/locale (FInternationalization::GetCurrentCulture).

No parameters.

Returns: { culture_name: string, display_name: string, native_name: string, iso_two_letter_name: string }

get_culture_info

Read-only.

Look up a culture by name without switching the active one (FInternationalization::GetCulture).

Parameter Type Required Description
culture_name string yes Required culture identifier, e.g. "en", "es-ES", "ja".

Returns: { culture_name: string, found: bool, display_name: string, native_name: string, iso_two_letter_name: string }

get_curve_keys

Read-only.

Read every keyframe of a curve asset -- time, value and interpolation mode, grouped per channel, with per-channel and total counts. The read-back oracle for add_curve_key and the way to see the actual shape of a damage-falloff or growth curve before tuning it. Returns the authored KEYS; to sample the interpolated value at an arbitrary time use evaluate_curve_at_time instead.

Parameter Type Required Description
curve_path string yes Full asset path of the curve

Returns: { curve_path, curve_class, num_channels, channel, time, value, interp, keys, key_count, channels, total_key_count }

get_curve_table_info

Read-only.

Get info about a UCurveTable: each row's name + key count, plus mode.

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable (or UCompositeCurveTable).

Returns: { curve_table_path: string, curve_table_name: string, curve_class: string, curve_table_mode: string, rows: [{ name, key_count }], row_count: int, is_composite: bool, parent_count?: int }

get_data_asset_info

Read-only.

Read a DataAsset's class and ALL of its reflected properties with their current values -- the read-back oracle for set_data_asset_property, and better than inspecting it from Python, where StructBase.to_dict() on a user-defined struct returns an empty dict and a GameplayTag prints as {} whether it holds a tag or not, both of which read as "nothing was written" when the values are actually there.

Parameter Type Required Description
asset_path string yes The full asset path to the DataAsset.

Returns: { asset_path, asset_name, asset_class, asset_path_name, properties: [{ name, type, value }] }

get_data_registry_info

Read-only.

Read a UDataRegistry asset: registry_type, item_struct, initialized, its sources (name, class, data_table) and item_names. Read-only. item_names lists cached items only, so it stays empty until the registry is initialized (initialize_data_registry); null source slots are skipped, unlike get_data_registry_source_count.

Parameter Type Required Description
registry_path string yes Asset path of the UDataRegistry, e.g. "/Game/Data/DR_Items".

Returns: { registry_path: string, registry_type: string, item_struct: string, initialized: bool, sources: [{name, class, data_table}], source_count: int, item_names: [string], item_count: int }

get_data_registry_item

Read-only.

Synchronously look up a precached item by registry type and item name. Uses UDataRegistrySubsystem::GetCachedItemRaw. Only returns data for items backed by a precached source (the registry must be initialized first). Returns a clean error if the item is not cached.

Parameter Type Required Description
registry_type string yes The registry type name.
item_name string yes The item (row) name.

Returns: { registry_type: string, item_name: string, item_struct: string, found: bool, item_data: string }

get_data_registry_source_count

Read-only.

Count the entries of DataSources[] on a UDataRegistry asset, null slots included. Read-only; returns registry_path and source_count. For the sources themselves (class, source table) use list_data_registry_sources or get_data_registry_info.

Parameter Type Required Description
registry_path string yes Asset path of the UDataRegistry, e.g. "/Game/Data/DR_Items".

Returns: { registry_path: string, source_count: int }

get_data_table_column

Read-only.

Read one column across every row of a DataTable as ExportText strings, so TMaps, soft references and tags come out flat and intact; read-only. Returns row_struct, row_count and values as {row_name: text}. Use it to verify cell edits; an unknown column is an error.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable.
column string yes Name of the column (a field of the row struct, by property or display name) to read across every row
data_table string no Alias of table_path: pass one of the two.

Returns: { table_path, column, row_struct, row_count, values:{ rowName: exporttext-string } }

get_data_table_info

Read-only.

Retrieves detailed information about a DataTable, including all row names. When the asset is a UCompositeDataTable (see table_class) the reported row_count is the ALREADY-MERGED map, so the response additionally explains where those rows come from: parent_tables[] in precedence order, merged_row_count vs sum_parent_row_counts, shadowed_rows[] with the winning parent, and parent_row_struct_mismatch[] for parents the engine silently skips.

Parameter Type Required Description
table_path string yes The full asset path to the DataTable.
include_row_sources boolean no Composite tables only. Optional bool (default false): also return the winning parent for EVERY merged row. Expensive on large tables.

Returns: { table_path, table_name, table_class, row_struct, row_count, row_names, columns:[{ name, type, is_map, is_soft, is_tag }] } plus, for a UCompositeDataTable: { parent_tables:[{ index, path, name, table_class, row_struct, row_count, row_struct_matches, contributes, null_entry }], parent_count, contributing_parent_count, merged_row_count, sum_parent_row_counts, expected_merged_row_count, merged_row_count_matches_parents, parent_row_struct_mismatch:[], shadowed_rows:[{ row_name, winner, winner_parent_slot, shadowed_by_winner:[] }], shadowed_row_count, row_sources_included, row_sources? }

get_data_table_row

Read-only.

Read ONE row of a DataTable by key and get every column as JSON . Reads the row memory untyped (FindRowUnchecked), so it works on Blueprint / user-defined row structs that are not FTableRowBase children, where the typed lookup reports "Row not found" for rows that exist; a miss here really is a missing key. Serializes TMap, nested struct and GameplayTag columns. When you need the byte-exact ExportText of a column (to copy a vendor row, or to tell an empty enum from an unwritten one) use read_data_table_row_complex instead, and get_data_table_rows when you want the enum DISPLAY names.

Parameter Type Required Description
table_path string yes The full asset path to the DataTable.
row_name string yes The name of the row to retrieve.

Returns: { table_path, row_name, row_data } where row_data is the fully serialized row struct (TMap / nested struct / FGameplayTag columns included)

get_data_table_row_as_json

Read-only.

Export ONE DataTable row through UE's own DataTable JSON writer, returning both the verbatim native JSON string and a parsed object -- the exact format set_data_table_row_from_json consumes, so it is the read half of a copy/duplicate/round-trip. Use it over get_data_table_row when the value has to go back INTO the engine (it emits GameplayTagContainers in the ExportText form the importer accepts). The round trip is not lossless for multi-word user-defined enums, so re-read what you wrote.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable
row_name string yes Name (key) of the row

Returns: { table_path, row_name, row_struct, row_json (verbatim native JSON string), row_data (parsed) }

get_data_table_rows

Read-only.

Dump EVERY row of a DataTable as an array, with the row count -- for browsing or diffing a whole table of items, recipes, quests or loot. The reader to pick when a column is a user-defined ENUM: it emits the enumerator's DISPLAY NAME, whereas the ExportText readers return "" for the index-0 enumerator, which is indistinguishable from a column that was never written. Whole-table sized, so for one row use get_data_table_row and for one column across rows use get_data_table_column.

Parameter Type Required Description
table_path string yes The full asset path to the DataTable.

Returns: { table_path, row_name, rows, row_count }

get_string_table_entries

Read-only.

Lists every entry of a UStringTable asset without changing it. Returns string_table_name, string_table_id, namespace, count and entries, each with key, source (the source string) and its metadata as an id to value object with metadata_count. Edit entries with set_string_table_entry.

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable

Returns: { string_table_path: string, string_table_name: string, string_table_id: string, namespace: string, entries: [object], count: int }

get_string_table_metadata

Read-only.

Read all metadata (id->value) attached to a UStringTable entry (FStringTable::EnumerateMetaData). The reader that pairs with set_string_table_metadata.

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable.
key string yes Entry key to read metadata from.

Returns: { string_table_path: string, key: string, entry_exists: bool, metadata: object, metadata_count: int, namespace: string }

import_data_table_csv

Destructive.

Bulk-load a DataTable from a CSV string -- the fast path for authoring or restoring many rows at once. DESTRUCTIVE: it REPLACES the table's rows, so any row not in the CSV is gone; export first (export_data_table_as_csv) if you meant to merge. Always read the problems array and problem_count: the native importer reports per-cell failures there while still succeeding overall, and enum values whose display name contains spaces are cut at the first space and silently land on the index-0 enumerator. For a handful of rows prefer set_data_table_rows_from_json, which reports per-row results.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable
csv_string string yes CSV content (header row + one row per data row)

Returns: { table_path, row_struct, rows_imported, row_count, problem_count, saved, problems, row_names }

initialize_data_registry

Destructive.

Load, register, and initialize a UDataRegistry on the subsystem. Calls UDataRegistrySubsystem::LoadRegistryPath so the registry's sources become live. Precached DataTable sources are cached for synchronous gets.

Parameter Type Required Description
registry_path string yes Content path to the UDataRegistry asset.

Returns: { registry_path: string, registry_type: string, success: bool, loaded: bool, registered: bool, initialized: bool }

list_data_registry_sources

Read-only.

List the DataTable sources attached to a UDataRegistry asset. Reads UDataRegistry::DataSources[] via reflection (the UDataRegistrySource base class does not have a public SourceTable accessor; the UDataRegistrySource_DataTable subclass does, and we read it via FProperty lookup so this stays portable across DataTable source variants).

Parameter Type Required Description
registry_path string yes Content path to the UDataRegistry asset.

Returns: { registry_path: string, source_count: int, sources: [{index, class, source_table}] }

list_data_registry_types

Read-only.

List every registry the UDataRegistrySubsystem currently has registered, sorted by type, each with registry_type, registry_path, item_struct and initialized. Read-only. An asset the subsystem has not loaded is absent: register it with initialize_data_registry, or call refresh_data_registry_map after edits.

No parameters.

Returns: { registries: [{registry_type, registry_path, item_struct, initialized}], registry_count: int }

list_localization_targets

Read-only.

List localization targets configured in the Localization Dashboard (ULocalizationSettings::GetEngineTargetSet/GetGameTargetSet), with their native/supported cultures.

Parameter Type Required Description
scope string no Optional: "engine" | "game" | "all". Defaults to "all".

Returns: { scope: string, targets: [{ name: string, scope: string, native_culture: string, supported_cultures: string[] }], targets_count: int }

read_data_table_row_complex

Read-only.

Read one DataTable row with every cell as its ExportText string, so TMap<Enum,SoftClass>, nested struct arrays and soft references appear in full (get_data_table_row shows TMaps as {}); read-only. Returns row_struct and fields as {column: text}; a missing row is an error.

Parameter Type Required Description
data_table string yes Full asset path of the DataTable (table_path also accepted)
row_name string yes Name (key) of the row to read
table_path string no Alias of data_table (the DataTable asset path, e.g. "/Game/Data/DT_Items"); data_table wins when both are given

Returns: { table_path, row_name, row_struct, fields:{column: exporttext-serialized value} }

read_datatable_from_package_file

Read-only.

Read a DataTable from any .uasset file on disk (e.g. a backup) under a throwaway mount, so a live asset with the same /Game name is untouched; then unmounts and, by default, garbage-collects. Returns table_name, row_struct, row_count and rows as native JSON, or one row via row_name.

Parameter Type Required Description
package_file string yes Absolute filesystem path to the external .uasset (alias: file_path)
object_name string no Optional name of the DataTable object inside the package (defaults to the first UDataTable / the package's primary asset)
row_name string no Optional single row to return; when omitted every row is returned
collect_garbage boolean no When true (default) force a GC purge of the throwaway load after reading
file_path string no Alias of package_file (OS path to the .uasset, e.g. "D:/Backup/DT_Items.uasset"); package_file wins when both are given

Returns: { package_file, mount_root, package_name, table_name, row_struct, row_count, rows:[{row_name,row_data}] } (or, for a single row_name, { ..., row_name, row_json, row_data })

refresh_data_registry_map

Destructive.

Force UDataRegistrySubsystem::RefreshRegistryMap(). Call this after editing registry assets (e.g. add/remove sources, change registry_type) to make the subsystem re-read its registry map without needing an editor restart.

No parameters.

Returns: { refreshed: bool }

remove_curve_key

Destructive.

Delete one keyframe from a curve channel, addressed either by key_index or by time -- the inverse of add_curve_key. Indices shift after a removal, so prefer addressing by time, or work from the highest index down. The reply's existed flag distinguishes "removed it" from "there was no key there"; get_curve_keys gives the indices and times.

Parameter Type Required Description
curve_path string yes Full asset path of the curve
channel number no Curve channel index (defaults to 0)
key_index number no Index of the key to remove (0 <= index < key_count); provide this OR time
time number no Time of the key to remove; provide this OR key_index

Returns: { curve_path, curve_class, channel, num_channels, removed, existed, key_count, saved }

remove_curve_table_key

Destructive.

Remove a single key from an existing UCurveTable row's rich curve by index or time, without deleting the row (inverse of add_curve_table_key).

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable.
row_name string yes Name of the row (rich curve) to edit.
key_index number no Index of the key to remove (0 <= index < key_count); provide this OR time
time number no Time of the key to remove; provide this OR key_index

Returns: { curve_table_path: string, row_name: string, row_existed: bool, key_existed: bool, removed: bool, key_count: int, row_count: int, curve_table_mode: string, saved: bool }

remove_data_registry_source

Destructive, idempotent.

Remove a DataTable source from a UDataRegistry asset (the true inverse of add_data_registry_source). Does a reflective RemoveAt on the registry's protected DataSources[] array and saves the asset. Select the source either by data_table_path (matched against each DataTable source's SourceTable) or by source_index. Does NOT unregister from the subsystem. Idempotent: if the source is not present it returns removed:false with an unchanged count.

Parameter Type Required Description
registry_path string yes Content path to the UDataRegistry asset.
data_table_path string no Content path of the source DataTable to remove (matched against SourceTable). Provide this OR source_index.
source_index number no Direct index into DataSources[] to remove. Provide this OR data_table_path.

Returns: { registry_path: string, source_index: int, data_table_path: string, source_count_before: int, source_count_after: int, removed: bool, saved: bool, save_error: string, note: string }

remove_string_table_entry

Destructive, idempotent.

Remove the entry key, with all its metadata, from a UStringTable asset inside an undo transaction, then mark the asset dirty and save it. Idempotent: a key that is not in the table is already the state asked for, so the call succeeds with removed false and already_absent true and changes and saves nothing. A missing table is an error, and so is a failed save, which keeps the removal in memory. Use remove_string_table_metadata to drop only metadata, set_string_table_entry to add or change an entry, get_string_table_entries to list them.

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable
key string yes Entry key to remove

Returns: { string_table_path: string, key: string, removed: bool, existed: bool, already_absent: bool, verified: bool, namespace: string, entry_count: int, saved: bool }

remove_string_table_metadata

Destructive, idempotent.

Remove a metadata id from a UStringTable entry (FStringTable::RemoveMetaData). Idempotent (no-op if the id is absent). Pairs with set/get_string_table_metadata.

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable.
key string yes Entry key the metadata is attached to.
metadata_id string yes Metadata id (an FName, e.g. 'Comment') to remove.

Returns: { string_table_path: string, key: string, metadata_id: string, existed: bool, removed: bool, still_exists: bool, entry_exists: bool, metadata: object, metadata_count: int, namespace: string, saved: bool }

rename_curve_table_row

Destructive.

Rename a row (curve) in a UCurveTable. UCurveTable::RenameRow silently no-ops if the source is missing or the target name already exists, so those cases are reported via the boolean flags (not errors).

Parameter Type Required Description
curve_table_path string yes Full asset path to the UCurveTable.
row_name string yes Current name of the row to rename.
new_row_name string yes New name for the row.

Returns: { curve_table_path: string, row_name: string, new_row_name: string, source_existed: bool, target_existed: bool, renamed: bool, old_still_exists: bool, new_exists: bool, row_count: int, curve_table_mode: string, saved: bool }

rename_data_table_row

Destructive.

Rename a DataTable row key, copying its value byte-exact (safer than delete plus re-add, which can drop GameplayTags), then save and verify the swap (new_exists, old_removed). Refuses a case-only rename, and an existing new_name unless overwrite=true. Row handles that reference the old name are not updated.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable (data_table also accepted)
old_name string yes Existing row key to rename (error if it does not exist)
new_name string yes New row key (error if it already exists unless overwrite=true)
overwrite boolean no When true, allow new_name to replace an existing row; when false (default) a pre-existing new_name is an error
data_table string no Alias of table_path (the DataTable asset path, e.g. "/Game/Data/DT_Items"); table_path wins when both are given

Returns: { table_path, old_name, new_name, row_struct, success, overwrote_existing, new_exists, old_removed, saved, row_count }

set_active_culture

Destructive, idempotent.

Set the editor's active culture/locale (FInternationalization::SetCurrentCulture). Honest error if the culture name isn't recognized.

Parameter Type Required Description
culture_name string yes Required culture identifier, e.g. "en", "es-ES", "ja".

Returns: { culture_name: string, success: bool }

set_data_asset_property

Destructive, idempotent.

Write ONE reflected property on a DataAsset from a text value and verify it by reading back, returning old_value and new_value so the reply proves the change instead of merely claiming it. Values use UE text form: structs as "(X=1,Y=2,Z=3)", object references as a full asset path, GameplayTags as (TagName="A.B"). One property per call, so loop for several; get_data_asset_info dumps them all.

Parameter Type Required Description
data_asset_path string yes Full asset path of the DataAsset.
property_name string yes Name of the UPROPERTY to set (class property name).
value any no New value as a string (numbers/bools accepted); structs use UE text form e.g. "(X=1,Y=2,Z=3)"; object refs use a full asset path.

Returns: { data_asset_path: string, property_name: string, property_type: string, old_value: string, new_value: string, applied: bool, saved: bool }

set_data_table_cell

Destructive, idempotent.

Set one element of an array column in a DataTable row (a field of a struct element, or a scalar element) by direct ImportText, bypassing the JSON/CSV importer, and save. Returns before_value, after_value, write_verified; an unregistered GameplayTag still becomes None (write_verified:false) and is saved anyway.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable (data_table also accepted)
row_name string yes Name (key) of the row to edit
column_name string yes Name of the row-struct field holding the array (display name or authored/internal name both accepted, same fallback as get_data_table_column)
row_index number yes Index into that array to edit (0-based; errors honestly if out of range, never a silent OOB read/write)
value string yes ExportText/ImportText string to write (e.g. "Material.Bone" for a bare FGameplayTag value, or an enum's internal OR display name)
cell_property string no Name of the sub-field on the array element STRUCT to set (display or authored name); omit/empty for a scalar array (e.g. TArray<FGameplayTag>/TArray<FName>) to edit the element itself
data_table string no Alias of table_path (the DataTable asset path, e.g. "/Game/Data/DT_Items"); table_path wins when both are given

Returns: { table_path, row_name, column_name, row_index, cell_property, resolved_property, array_length, before_value, after_value, changed, already_set, import_succeeded, write_verified, success, warning?, saved, save_error? }

set_data_table_row

Destructive, idempotent.

Update an EXISTING DataTable row, erroring if the key is absent -- that guard is the only difference from add_data_table_row, and it is what stops a typo'd row name from quietly creating a second row. Columns you omit keep their current values; the write fails as a whole if any provided column cannot be imported, and unrecognised names come back in unknown_columns. Pass GameplayTag columns in ExportText form, e.g. (TagName="A.B"). For per-column before/after evidence use set_data_table_row_fields; for one cell use set_data_table_cell.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable
row_name string yes Name (key) of the existing row to update
row_data object yes Object of {column_name: value} to apply over the current row

Returns: success or error payload

set_data_table_row_fields

Destructive, idempotent.

Write only the named cells of one DataTable row via the native JSON importer, deep-merged onto the current row so untouched columns and struct sub-fields survive, then save. Returns changed_columns, unchanged_despite_request, unknown_columns (skipped) and the row as ExportText. For many rows use set_data_table_rows_from_json.

Parameter Type Required Description
data_table string yes Full asset path of the DataTable (table_path also accepted)
row_name string yes Name (key) of the row to write
fields object yes Object of {column_name: value} to overlay onto the current row (only these cells are written); a TMap<Enum,SoftClass> value must be an object of {EnumName: bare-class-path} (e.g. {"MyEnumValue":"/Game/...ABP_x_C"}) -- passed through verbatim, never wrapped
create_if_missing boolean no When true, create the row (from defaults) if it does not exist; when false (default) a missing row is an error
table_path string no Alias of data_table (the DataTable asset path, e.g. "/Game/Data/DT_Items"); data_table wins when both are given

Returns: { table_path, row_name, row_struct, success, saved, created, updated_existing, written_fields:[..], changed_columns:[..], unchanged_despite_request:[..], unknown_columns?:[..], problems:[..], row_after_exporttext:{column:exporttext} }

set_data_table_row_from_json

Destructive, idempotent.

Write a whole DataTable row from a native-format JSON object (the shape get_data_table_row_as_json emits), with merge=true to overwrite only the columns you supply. The route for copying a row between tables or authoring a complex row in one call. ALWAYS read the problems array: success:true routinely coexists with columns that never landed -- a GameplayTagContainer passed as a JSON array is rejected and left empty (give it as the string "(GameplayTags=((TagName=\"A.B\")))"), a sub-field whose internal name differs from the display name you used stays at its struct default, and a user-defined enum whose display name has spaces is cut at the first space and lands on the index-0 enumerator (write the internal NewEnumeratorN name instead). Confirm with read_data_table_row_complex.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable
row_name string yes Name (key) of the row to write
row_json any no A JSON object of {column:value} (as produced by get_data_table_row_as_json)
merge boolean no When true and the row exists, only the caller-provided columns are overwritten

Returns: success or error payload

set_data_table_rows_from_json

Destructive, idempotent.

Upsert many DataTable rows with one native JSON import and one save, each deep-merged onto its current values like set_data_table_row_fields; missing rows are created from defaults. Returns per-row results and a summary. A failed row does not fail the call: check summary.failed and saved.

Parameter Type Required Description
table_path string yes Full asset path of the DataTable (data_table also accepted)
rows any no Object of { row_name: {column:value} }, or that object as a JSON string; each fields object is overlaid non-destructively (a value that is a JSON object deep-merges into the existing struct member, scalars/arrays replace)
save boolean no When true (default) save the package once after all rows are written; when false leave it dirty in memory
data_table string no Alias of table_path (the DataTable asset path, e.g. "/Game/Data/DT_Items"); table_path wins when both are given

Returns: { table_path, row_struct, results:{ row_name:{ success, created, updated_existing, changed_columns:[..], unchanged_despite_request:[..], unknown_columns?:[..], error? } }, summary:{ total, created, updated, failed }, saved, row_count, problems:[..] }

set_string_table_entry

Destructive, idempotent.

Set a Key to SourceString entry in a UStringTable (upsert)

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable
key string yes Entry key to upsert
source_string string yes Source string for the key

Returns: { string_table_path: string, key: string, source_string: string, entry_set: bool, verified: bool, created: bool, updated: bool, namespace: string, entry_count: int, saved: bool }

set_string_table_metadata

Destructive, idempotent.

Set a metadata id->value pair on an existing UStringTable entry (FStringTable::SetMetaData). Metadata is per-entry localization data (e.g. Comment/Speaker/Context) that the upsert/reader did not expose. Idempotent (set-to-fixed-value); the entry (key) must already exist.

Parameter Type Required Description
string_table_path string yes Full asset path to the UStringTable.
key string yes Entry key the metadata is attached to (must already exist).
metadata_id string yes Metadata id (an FName, e.g. 'Comment').
metadata_value string yes Metadata value string (may be empty).

Returns: { string_table_path: string, key: string, metadata_id: string, metadata_value: string, verified: bool, entry_exists: bool, metadata_count: int, namespace: string, saved: bool }