> For the complete documentation index, see [llms.txt](https://soulslike-framework.isik.vip/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soulslike-framework.isik.vip/updates/rigvm-packaging-issue-related-to-struct-conflicts.md).

# RigVM Packaging Issue Related to Struct Conflicts

Earlier Soulslike Framework releases contained Structs with names such as `FVector`, `FString`, and `FName`.

These names conflicted with Unreal Engine's native C++ types. When Unreal recompiles a Blueprint or Control Rig, it may resolve a reference to the wrong type. This can cause broken pins, changed variable types, Control Rig compilation errors, or damaged references.

The SLF structs have now been renamed with a unique prefix:

* `FVector` → `ST_SLF_Vector`
* `FString` → `ST_SLF_String`
* `FName` → `ST_SLF_Name`

The corrected versions [have now been published on Fab.](https://www.fab.com/listings/75455ba4-7407-45db-b24e-160712b9586c)

## Existing Projects

Existing projects do not need to be restarted, and replacing the framework content is not required.&#x20;

You can try to manually rename the structs, however using the script below is recommended:

{% code overflow="wrap" lineNumbers="true" expandable="true" %}

```py
"""One-time Unreal Editor migration for Soulslike Framework struct assets.

Run with UnrealEditor-Cmd and PythonScriptPlugin. The script renames every
UserDefinedStruct below /Game/SoulslikeFramework/Structures from F<Name> to
ST_SLF_<Name>. Unreal's asset rename manager updates project references.
PackageRedirects included with the corrected framework release provide an
additional compatibility bridge.
"""

import traceback
import unreal


STRUCT_ROOT = "/Game/SoulslikeFramework/Structures"
NEW_PREFIX = "ST_SLF_"


def log(message):
    unreal.log("SLF_STRUCT_MIGRATION: " + message)


def fail(message):
    unreal.log_error("SLF_STRUCT_MIGRATION: " + message)
    raise RuntimeError(message)


def migrated_name(old_name):
    if old_name.startswith(NEW_PREFIX):
        return old_name
    stem = old_name[1:] if old_name.startswith("F") and len(old_name) > 1 else old_name
    return NEW_PREFIX + stem


def main():
    asset_library = unreal.EditorAssetLibrary
    asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
    asset_paths = asset_library.list_assets(STRUCT_ROOT, recursive=True, include_folder=False)
    rename_data = []

    for asset_path in sorted(asset_paths):
        asset = asset_library.load_asset(asset_path)
        if not asset or asset.get_class().get_name() != "UserDefinedStruct":
            continue

        old_name = asset.get_name()
        new_name = migrated_name(old_name)
        if new_name == old_name:
            continue

        package_path = asset_path.rsplit("/", 1)[0]
        new_asset_path = package_path + "/" + new_name
        if asset_library.does_asset_exist(new_asset_path):
            fail("Destination already exists: " + new_asset_path)

        rename_data.append(unreal.AssetRenameData(asset, package_path, new_name))
        log("planned {} -> {}".format(asset_path, new_asset_path))

    if not rename_data:
        log("No assets require migration; names are already namespaced.")
        return

    log("Renaming {} UserDefinedStruct assets".format(len(rename_data)))
    if not asset_tools.rename_assets(rename_data):
        fail("AssetTools.rename_assets reported failure")

    # Save dirty customer packages as well as framework packages. This matters
    # when the framework was migrated into a real game whose Blueprints live
    # outside /Game/SoulslikeFramework.
    if not asset_library.save_directory("/Game", only_if_is_dirty=True, recursive=True):
        fail("One or more migrated project packages failed to save")

    new_assets_missing = []
    for item in rename_data:
        # The in-memory object path is already new, so derive the expected path
        # from the destination properties and verify the loaded object type.
        expected = item.new_package_path + "/" + item.new_name
        migrated = asset_library.load_asset(expected)
        if not migrated or migrated.get_class().get_name() != "UserDefinedStruct":
            new_assets_missing.append(expected)

    if new_assets_missing:
        fail("Migrated structs missing after save: " + ", ".join(new_assets_missing))

    log("SUCCESS: renamed and saved {} structs".format(len(rename_data)))


try:
    main()
except Exception:
    unreal.log_error("SLF_STRUCT_MIGRATION: UNHANDLED FAILURE\n" + traceback.format_exc())
    raise
    
```

{% endcode %}

The script aims to fix the project in place by:

* Renaming the conflicting SLF structs.
* Updating references in SLF assets.
* Updating references in project-specific Blueprints and assets.
* Saving the migrated assets.

#### Before Running the Script

1. Create a complete backup or source-control branch.&#x20;
2. Make sure the old SLF structs are still present.&#x20;
3. Close Unreal Editor.&#x20;
4. Create the script file: `rename_structs.py.`

#### Running the Script

Run the script using the same Unreal Engine version as your project.

Example for Windows, SLF on 5.7:

{% code overflow="wrap" lineNumbers="true" expandable="true" %}

```bat
"C:\Program Files\Epic Games\UE_5.7\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" "D:\Projects\MyProject\MyProject.uproject" -ExecutePythonScript="D:\Scripts\rename_structs.py" -EnablePlugins=PythonScriptPlugin -unattended -nop4
```

{% endcode %}

{% hint style="warning" %}
Replace the **engine**, **project**, and **script paths** with your own paths.
{% endhint %}

Wait for the process to finish and confirm that the output contains:&#x20;

**`SLF_STRUCT_MIGRATION: SUCCESS`**

Do not continue if the script reports migration or save failures.

#### After Running the Script

1. Open the project.
2. Refresh, compile, and save affected Blueprints.
3. Refresh, compile, and save affected Animation Blueprints.
4. Open affected Control Rigs and select File → Refresh All Nodes.
5. Compile and save each Control Rig.
6. Test the affected gameplay systems.
7. Cook or package the project to confirm that no compilation errors remain.

Optionally, in your `DefaultEngine.ini` add the following under `[CoreRedirects]`

{% code overflow="wrap" lineNumbers="true" expandable="true" %}

```
[CoreRedirects]
; Compatibility for projects upgrading from pre-5.8 Soulslike Framework releases.
; Full paths avoid global name matching and do not reintroduce native-type collisions.
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FActorClass",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_ActorClass")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FBool",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Bool")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FClass",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Class")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FDayNightInfo",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_DayNightInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FDoorLockInfo",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_DoorLockInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FEnumByte",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_EnumByte")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FExecutionType",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_ExecutionType")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FFloat",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Float")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FGuid",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Guid")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FInt",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Int")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FKeyMappingCorrelation",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_KeyMappingCorrelation")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FLoadingScreenTip",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_LoadingScreenTip")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FLootItem",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_LootItem")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FName",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Name")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FObject",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Object")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FProgress",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Progress")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FRequiredCurrencyForLevel",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_RequiredCurrencyForLevel")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FRotator",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Rotator")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FSkeletalMeshData",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_SkeletalMeshData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FString",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_String")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FVector",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_Vector")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/_Misc/FWeightedLoot",NewName="/Game/SoulslikeFramework/Structures/_Misc/ST_SLF_WeightedLoot")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Actions/FActionsData",NewName="/Game/SoulslikeFramework/Structures/Actions/ST_SLF_ActionsData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/Rules/FAiRuleDistance",NewName="/Game/SoulslikeFramework/Structures/AI/Rules/ST_SLF_AiRuleDistance")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/Rules/FAiRuleStat",NewName="/Game/SoulslikeFramework/Structures/AI/Rules/ST_SLF_AiRuleStat")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiAttackEntry",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiAttackEntry")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiBossPhase",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiBossPhase")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiPatrolPathInfo",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiPatrolPathInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiSenseLocationInfo",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiSenseLocationInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiSenseTargetInfo",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiSenseTargetInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/AI/FAiStrafeInfo",NewName="/Game/SoulslikeFramework/Structures/AI/ST_SLF_AiStrafeInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Animation/FAnimationData",NewName="/Game/SoulslikeFramework/Structures/Animation/ST_SLF_AnimationData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Animation/FDodgeMontages",NewName="/Game/SoulslikeFramework/Structures/Animation/ST_SLF_DodgeMontages")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Animation/FExecutionAnimInfo",NewName="/Game/SoulslikeFramework/Structures/Animation/ST_SLF_ExecutionAnimInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Animation/FExecutionInfo",NewName="/Game/SoulslikeFramework/Structures/Animation/ST_SLF_ExecutionInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Animation/FMontage",NewName="/Game/SoulslikeFramework/Structures/Animation/ST_SLF_Montage")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Compass/FCardinalData",NewName="/Game/SoulslikeFramework/Structures/Compass/ST_SLF_CardinalData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Credits/FCreditsEntry",NewName="/Game/SoulslikeFramework/Structures/Credits/ST_SLF_CreditsEntry")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Credits/FCreditsExtra",NewName="/Game/SoulslikeFramework/Structures/Credits/ST_SLF_CreditsExtra")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Credits/FCreditsNames",NewName="/Game/SoulslikeFramework/Structures/Credits/ST_SLF_CreditsNames")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Dialog/FDialogEntry",NewName="/Game/SoulslikeFramework/Structures/Dialog/ST_SLF_DialogEntry")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Dialog/FDialogGameplayEvent",NewName="/Game/SoulslikeFramework/Structures/Dialog/ST_SLF_DialogGameplayEvent")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Dialog/FDialogProgress",NewName="/Game/SoulslikeFramework/Structures/Dialog/ST_SLF_DialogProgress")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Dialog/FDialogRequirement",NewName="/Game/SoulslikeFramework/Structures/Dialog/ST_SLF_DialogRequirement")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FCurrentEquipment",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_CurrentEquipment")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FEquipmentInfo",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_EquipmentInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FEquipmentSlot",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_EquipmentSlot")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FEquipmentSocketInfo",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_EquipmentSocketInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FEquipmentStat",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_EquipmentStat")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/Equipment/FEquipmentWeaponStatInfo",NewName="/Game/SoulslikeFramework/Structures/Items/Equipment/ST_SLF_EquipmentWeaponStatInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FCraftingInfo",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_CraftingInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FFlaskData",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_FlaskData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FInventoryCategory",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_InventoryCategory")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FItemCategory",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_ItemCategory")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FItemInfo",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_ItemInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FItemInfoCount",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_ItemInfoCount")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FWeaponAttackPower",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_WeaponAttackPower")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Items/FWorldMeshInfo",NewName="/Game/SoulslikeFramework/Structures/Items/ST_SLF_WorldMeshInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/ItemWheel/FItemWheelNextSlotInfo",NewName="/Game/SoulslikeFramework/Structures/ItemWheel/ST_SLF_ItemWheelNextSlotInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FClassSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_ClassSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FEquipmentItemsSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_EquipmentItemsSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FInteractableStateSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_InteractableStateSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FInventoryItemsSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_InventoryItemsSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FItemWheelSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_ItemWheelSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FNpcSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_NpcSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FNpcVendorSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_NpcVendorSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FProgressSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_ProgressSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FSaveData",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_SaveData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FSaveGameInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_SaveGameInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FSpawnedActorSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_SpawnedActorSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Saving/FWorldSaveInfo",NewName="/Game/SoulslikeFramework/Structures/Saving/ST_SLF_WorldSaveInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FAffectedStat",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_AffectedStat")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FAffectedStats",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_AffectedStats")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FLevelChangeData",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_LevelChangeData")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FRegen",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_Regen")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FSprintCost",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_SprintCost")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatBehavior",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatBehavior")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatChange",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatChange")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatChangePercent",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatChangePercent")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatEntry",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatEntry")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatInfo",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Stats/FStatOverride",NewName="/Game/SoulslikeFramework/Structures/Stats/ST_SLF_StatOverride")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectApplication",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectApplication")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectFrostbiteExample",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectFrostbiteExample")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectOneShotAndTick",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectOneShotAndTick")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectPlagueExample",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectPlagueExample")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectRankInfo",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectRankInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectStatChanges",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectStatChanges")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectTick",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectTick")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/StatusEffects/FStatusEffectVfxInfo",NewName="/Game/SoulslikeFramework/Structures/StatusEffects/ST_SLF_StatusEffectVfxInfo")
+PackageRedirects=(OldName="/Game/SoulslikeFramework/Structures/Vendor/FVendorItems",NewName="/Game/SoulslikeFramework/Structures/Vendor/ST_SLF_VendorItems")
```

{% endcode %}

## Important Warnings

* Always back up the project before migration.
* Run the script while the original SLF structs are still present.
* Do not add **StructRedirects** for names such as FVector, FName, or FString. These names overlap with native Unreal types and can create additional RigVM conflicts.
* Do not overwrite customized SLF assets without reviewing the changes.
* Keep your backup until the project compiles and cooks successfully.

Discord Support

{% embed url="<https://discord.gg/zHR7wKgEFA>" %}
