Content/Skills/enum-struct/SKILL.md
Create, modify, and introspect UserDefinedEnums and UserDefinedStructs
npx skillsauth add kevinpbuckley/vibeue enum-structInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Native C++ enums and structs are read-only. Only UserDefinedEnums and UserDefinedStructs can be modified:
import unreal
# Search for user-defined enums only (editable)
enums = unreal.EnumStructService.search_enums("Weapon", True) # bUserDefinedOnly=True
# Check if an enum is user-defined before modifying
success, info = unreal.EnumStructService.get_enum_info("EMyEnum")
if info.b_is_user_defined:
unreal.EnumStructService.add_enum_value("EMyEnum", "NewValue")
E prefix (e.g., EWeaponType)F prefix (e.g., FWeaponData)import unreal
# Create a new enum (E prefix added automatically)
enum_path = unreal.EnumStructService.create_enum("/Game/Data/Enums", "WeaponType")
print(f"Created: {enum_path}") # /Game/Data/Enums/EWeaponType.EWeaponType
# Add values
unreal.EnumStructService.add_enum_value(enum_path, "Sword", "Melee Sword")
unreal.EnumStructService.add_enum_value(enum_path, "Bow", "Ranged Bow")
unreal.EnumStructService.add_enum_value(enum_path, "Staff", "Magic Staff")
# Verify
values = unreal.EnumStructService.get_enum_values(enum_path)
print(f"Values: {values}") # ['Sword', 'Bow', 'Staff']
import unreal
# Create a new struct (F prefix added automatically)
struct_path = unreal.EnumStructService.create_struct("/Game/Data/Structs", "WeaponData")
print(f"Created: {struct_path}")
# Add properties
unreal.EnumStructService.add_struct_property(struct_path, "WeaponName", "FString", "Unnamed")
unreal.EnumStructService.add_struct_property(struct_path, "Damage", "float", "10.0")
unreal.EnumStructService.add_struct_property(struct_path, "AttackSpeed", "float", "1.0")
unreal.EnumStructService.add_struct_property(struct_path, "WeaponType", "EWeaponType") # Use our enum
# Add array property
unreal.EnumStructService.add_struct_property(struct_path, "SpecialEffects", "FName", "", "Array")
# Verify
success, info = unreal.EnumStructService.get_struct_info(struct_path)
print(f"Properties: {info.property_count}")
for prop in info.properties:
print(f" {prop.name}: {prop.type}")
import unreal
# Search all enums containing "Weapon"
enums = unreal.EnumStructService.search_enums("Weapon")
for e in enums:
print(f"{e.name} ({e.value_count} values) - UserDefined: {e.b_is_user_defined}")
# Search user-defined structs only
structs = unreal.EnumStructService.search_structs("Data", True) # bUserDefinedOnly=True
for s in structs:
print(f"{s.name} ({s.property_count} properties)")
# Get detailed enum info
success, enum_info = unreal.EnumStructService.get_enum_info("EWeaponType")
if success:
for v in enum_info.values:
print(f" {v.name} = {v.value} ({v.display_name})")
import unreal
enum_path = "/Game/Data/Enums/EWeaponType.EWeaponType"
# Rename a value
unreal.EnumStructService.rename_enum_value(enum_path, "Sword", "LongSword")
# Change display name
unreal.EnumStructService.set_enum_value_display_name(enum_path, "Bow", "Composite Bow")
# Remove a value
unreal.EnumStructService.remove_enum_value(enum_path, "Staff")
# Add new value
unreal.EnumStructService.add_enum_value(enum_path, "Crossbow", "Heavy Crossbow")
import unreal
struct_path = "/Game/Data/Structs/FWeaponData.FWeaponData"
# Rename a property
unreal.EnumStructService.rename_struct_property(struct_path, "Damage", "BaseDamage")
# Change property type
unreal.EnumStructService.change_struct_property_type(struct_path, "BaseDamage", "int32")
# Set default value
unreal.EnumStructService.set_struct_property_default(struct_path, "BaseDamage", "15")
# Remove a property
unreal.EnumStructService.remove_struct_property(struct_path, "SpecialEffects")
# Add new property
unreal.EnumStructService.add_struct_property(struct_path, "CriticalMultiplier", "float", "2.0")
After creating a struct, you can use it as a row type for DataTables:
import unreal
# First create the struct
struct_path = unreal.EnumStructService.create_struct("/Game/Data", "ItemRow")
unreal.EnumStructService.add_struct_property(struct_path, "ItemName", "FString")
unreal.EnumStructService.add_struct_property(struct_path, "Value", "int32", "0")
unreal.EnumStructService.add_struct_property(struct_path, "Icon", "UTexture2D")
# Search for it as a row type
row_types = unreal.DataTableService.search_row_types("ItemRow")
if row_types:
print(f"Found row type: {row_types[0].name}")
# Create a DataTable using this struct
dt_path = unreal.DataTableService.create_data_table("FItemRow", "/Game/Data", "DT_Items")
print(f"Created DataTable: {dt_path}")
When adding struct properties, use these type strings:
bool, int32, int64, float, doubleFString, FName, FText, uint8, byteFVector, FVector2D, FRotator, FTransformFColor, FLinearColorFGameplayTag, FGameplayTagContainerAActor, APawn, ACharacterUTexture2D, UMaterial, UStaticMeshUSoundBase, UAnimSequenceUse the ContainerType parameter:
# Array of strings
unreal.EnumStructService.add_struct_property(path, "Tags", "FString", "", "Array")
# Set of names
unreal.EnumStructService.add_struct_property(path, "UniqueNames", "FName", "", "Set")
# Map of string to int
unreal.EnumStructService.add_struct_property(path, "Scores", "int32", "", "Map")
search_enums() to find the correct pathb_is_user_defined property before modifyingBlueprintService.search_variable_types() to find valid type namestools
Create and manage Niagara particle systems - system lifecycle, adding/copying emitters, user parameters, system script settings, scratch-pad authoring
development
Configure Niagara emitter internals - modules, renderers, rapid iteration parameters, graph positioning, and scratch-pad authoring (Custom HLSL + node graph)
tools
Create and modify Blueprint assets, variables, functions, and components
tools
Search, find, open, move, duplicate, save, delete, import, and export assets