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 }