Blueprint API
Every Blueprint-exposed class, function, property, delegate, structure and enumeration of World State Reset Framework, taken from the shipped public headers.
Generated from the public headers of the WorldStateResetFrameworkRuntime module. Names match the
code exactly; Blueprint display names are shown where the code defines one.
Editor tooling is not part of this API
The Inspector, the validator and the World Manifest builder live in
WorldStateResetFrameworkEditor as C++ services. They are not exposed as Blueprint nodes.
UWSRFWorldStateSubsystem
UWorldSubsystem. Retrieve it with Get World Subsystem and the WSRF World State Subsystem
class.
Registration
| Function | Kind | Signature |
|---|---|---|
RegisterActor | Callable, display name Register Actor | (AActor* Actor, FWSRFRegistrationOptions Options) -> FWSRFRegistrationResult |
UnregisterActor | Callable | (AActor* Actor, bool bForgetSnapshot = true) -> bool |
RecaptureInitialState | Callable | (AActor* Actor) -> bool |
IsActorRegistered | Pure | (AActor* Actor) -> bool |
GetRegisteredActorCount | Pure | () -> int32 |
Reset
| Function | Kind | Signature |
|---|---|---|
RequestReset | Callable | (FWSRFResetRequest Request) -> FWSRFResetReport |
ResetWorldRegion | Callable | (FGameplayTag Region, FGameplayTag Reason, UObject* Initiator = nullptr, bool bIncludeChildRegions = true) -> FWSRFResetReport |
ResetWorldRegionInContext | Callable | (FGameplayTag Region, FGameplayTag Reason, const AActor* ContextActor, UObject* Initiator = nullptr, bool bIncludeChildRegions = true) -> FWSRFResetReport |
GetResetOperationState | Pure | () -> EWSRFResetOperationState |
Reset requests and direct registration are Game Thread only; an off-thread call is rejected with
an explicit error report or result. Region inputs use a Gameplay Tag picker filtered to
WSRF.Region, and reasons to WSRF.Reset — editor filters only, existing serialized tags outside
those roots remain readable and functional.
Queued resets
A reset requested inside an active reset callback enters a FIFO. The immediate return is a queued
placeholder — bWasQueued true, bWasExecuted false — whose OperationId is retained by the
eventual completed report. Match that ID in OnWorldResetCompleted or OnRegionResetCompleted
and judge the final report with Was WSRF Reset Successful; do not treat Failed == 0 on the
placeholder as success. One queue drain executes at most 64 queued resets — beyond that, remaining
entries receive explicit aborted reports rather than blocking the Game Thread forever.
Lookup
| Function | Kind | Signature |
|---|---|---|
FindLoadedActor | Pure | (FWSRFActorId ActorId) -> AActor* |
FindLoadedActorInContext | Pure | (FWSRFActorId ActorId, const AActor* ContextActor) -> AActor* |
FindLoadedActorByEffectiveId | Pure | (FWSRFEffectiveActorId EffectiveActorId) -> AActor* |
GetActorPresence | Pure | (FWSRFActorId ActorId, out bool bFound) -> EWSRFActorPresence |
Persistence
| Function | Kind | Signature |
|---|---|---|
CapturePersistentWorldState | Callable, display name Capture WSRF Persistent State | (out FWSRFWorldStateSnapshot Snapshot, bool bMeasureSerializedSize = false) -> FWSRFPersistenceExportReport |
ApplyPersistentWorldState | Callable, display name Apply WSRF Persistent State | (FWSRFWorldStateSnapshot Snapshot) -> FWSRFPersistenceImportReport |
ApplyPersistentWorldStateWithMigrator | Callable, advanced | (FWSRFWorldStateSnapshot Snapshot, UWSRFSnapshotMigrator* Migrator) -> FWSRFPersistenceImportReport |
The advanced Measure Serialized Size pin is disabled by default, so normal capture does not
serialize a second temporary representation just for profiling. With the pin disabled,
bSerializedSizeMeasured is false and both approximate byte fields are zero — zero means not
measured, not an empty snapshot. ApplyPersistentWorldState automatically migrates WSRF schema-1
and schema-2 snapshots to schema 3; the migrator node stays strict for project-owned legacy formats.
Profiling
| Function | Kind | Signature |
|---|---|---|
GetApproximateSnapshotMemoryBytes | Pure | () -> int64 |
GetManifestMemoryBytes | Pure | () -> int64 |
GetApproximatePersistentSnapshotMemoryBytes | Pure, advanced | (FWSRFWorldStateSnapshot Snapshot) -> int64 |
GetApproximatePersistentSnapshotSerializedBytes | Pure, advanced | (FWSRFWorldStateSnapshot Snapshot) -> int64 |
Events
| Delegate | Parameters |
|---|---|
OnWorldResetStarted | FWSRFResetRequest Request |
OnWorldResetCompleted | FWSRFResetRequest Request, FWSRFResetReport Report |
OnRegionResetStarted | FWSRFResetRequest Request |
OnRegionResetCompleted | FWSRFResetRequest Request, FWSRFResetReport Report |
OnActorResetStarted | FWSRFActorId ActorId, FWSRFResetRequest Request |
OnActorResetCompleted | FWSRFActorId ActorId, FWSRFResetRequest Request |
Usage
Event: player rested at a checkpoint
-> Get World Subsystem (WSRF World State Subsystem)
-> Reset World Region
Region = WSRF.Region.Dungeon
Reason = WSRF.Reset.Rest
-> Break FWSRFResetReport
Restored / Respawned / Removed
Failed -> log Errors
UWSRFStateComponent
UActorComponent, class group WSRF, Blueprint-spawnable.
| Function | Kind | Signature |
|---|---|---|
GetStableId | Pure | () -> FWSRFActorId |
IsRegisteredWithWSRF | Pure | () -> bool |
RecaptureInitialState | Callable | () -> bool |
SetResetPolicy | Callable | (FWSRFResetPolicy InPolicy) |
SetRegionMembership | Callable | (FGameplayTagContainer InRegions) |
ApplyBehaviorPreset | Callable, call in editor | (EWSRFBehaviorPreset InPreset) |
SetResetPolicy changes the current session immediately but does not change authored defaults, and
an active reset finishes with the policy selected at its start.
| Property | Access | Type |
|---|---|---|
BehaviorPreset | Editable, read-only in Blueprint | EWSRFBehaviorPreset |
Regions | Editable | FGameplayTagContainer |
ResetPolicy | Editable | FWSRFResetPolicy |
Origin | Editable, advanced | EWSRFActorOrigin |
CaptureTiming | Editable, advanced | EWSRFInitialCaptureTiming |
ResetPriority | Editable, advanced | int32 |
StableGuid | Visible per instance, read-only | FGuid |
| Delegate | Parameters |
|---|---|
OnOwnerResetStarted | FWSRFResetRequest Request |
OnOwnerResetCompleted | FWSRFResetRequest Request |
IWSRFResettable
Blueprint-implementable interface. All four are BlueprintNativeEvent and BlueprintCallable:
| Event | Display name | Signature |
|---|---|---|
WSRFCaptureCustomState | WSRF Capture Custom State | (UWSRFStateWriter* Writer) |
WSRFPrepareForReset | WSRF Prepare For Reset | (FWSRFResetRequest Request) |
WSRFRestoreCustomState | WSRF Restore Custom State | (UWSRFStateReader* Reader) |
WSRFResetCompleted | WSRF Reset Completed | (FWSRFResetRequest Request) |
UWSRFStateWriter
| Function | Kind | Signature |
|---|---|---|
SetVersion | Callable | (int32 InVersion) |
GetVersion | Pure | () -> int32 |
WriteBool | Callable | (FName Key, bool Value) -> bool |
WriteInteger | Callable | (FName Key, int64 Value) -> bool |
WriteFloat | Callable | (FName Key, float Value) -> bool |
WriteDouble | Callable | (FName Key, double Value) -> bool |
WriteEnum | Callable | (FName Key, int64 Value, FName EnumType) -> bool |
WriteEnumByte | Callable | (FName Key, uint8 Value, FName EnumType) -> bool |
WriteName | Callable | (FName Key, FName Value) -> bool |
WriteString | Callable | (FName Key, FString Value) -> bool |
WriteVector | Callable | (FName Key, FVector Value) -> bool |
WriteRotator | Callable | (FName Key, FRotator Value) -> bool |
WriteTransform | Callable | (FName Key, FTransform Value) -> bool |
WriteGameplayTag | Callable | (FName Key, FGameplayTag Value) -> bool |
WriteGameplayTags | Callable | (FName Key, FGameplayTagContainer Value) -> bool |
WriteStableId | Callable | (FName Key, FWSRFActorId Value) -> bool |
UWSRFStateReader
| Function | Kind | Signature |
|---|---|---|
GetVersion | Pure | () -> int32 |
HasKey | Pure | (FName Key) -> bool |
ReadBool | Pure | (FName Key, out bool Value) -> bool |
ReadInteger | Pure | (FName Key, out int64 Value) -> bool |
ReadFloat | Pure | (FName Key, out float Value) -> bool |
ReadDouble | Pure | (FName Key, out double Value) -> bool |
ReadEnum | Pure | (FName Key, out int64 Value, out FName EnumType) -> bool |
ReadEnumByte | Pure | (FName Key, out uint8 Value, out FName EnumType) -> bool |
ReadName | Pure | (FName Key, out FName Value) -> bool |
ReadString | Pure | (FName Key, out FString Value) -> bool |
ReadVector | Pure | (FName Key, out FVector Value) -> bool |
ReadRotator | Pure | (FName Key, out FRotator Value) -> bool |
ReadTransform | Pure | (FName Key, out FTransform Value) -> bool |
ReadGameplayTag | Pure | (FName Key, out FGameplayTag Value) -> bool |
ReadGameplayTags | Pure | (FName Key, out FGameplayTagContainer Value) -> bool |
ReadStableId | Pure | (FName Key, out FWSRFActorId Value) -> bool |
UWSRFBlueprintLibrary
| Function | Kind | Signature |
|---|---|---|
WasResetSuccessful | Pure, display name Was WSRF Reset Successful | (FWSRFResetReport Report) -> bool — true only when bWasExecuted is true and Failed is zero |
MigrateSnapshotV1ToV2 | Callable, advanced, display name Migrate WSRF Snapshot v1 to v2 | (FWSRFWorldStateSnapshot Source, out FWSRFWorldStateSnapshot Migrated, out FString Message) -> bool — the built-in step, exposed for advanced project migrators; schema 2 is an intermediate format and must not be submitted alone to a schema-3 runtime |
UWSRFSnapshotMigrator
Abstract, Blueprintable, EditInlineNew. Derive from it only when your project intentionally
supports an additional legacy format of its own — WSRF’s schema-1 and schema-2 saves are migrated
automatically by the normal import.
| Event | Kind | Signature |
|---|---|---|
MigrateSnapshot | BlueprintNativeEvent, Callable | (FWSRFWorldStateSnapshot Source, out FWSRFWorldStateSnapshot Migrated, out FString Message) -> bool |
UWSRFWorldManifest and UWSRFWorldManifestComponent
UWSRFWorldManifest is a Blueprint-type data asset generated by the editor tooling. Its
SchemaVersion, SourceWorld, BuildId, BuiltUtc and Entries are read-only.
UWSRFWorldManifestComponent holds one property, Manifest
(TSoftObjectPtr<UWSRFWorldManifest>), and exists so cooking retains the manifest asset.
Rest Site module
WSRF Core uses the World State Subsystem above. Rest Site gameplay uses the WSRF Rest Site
Subsystem, a Game Instance Subsystem. Accepted Rest Site operations return an operation ticket
immediately and complete through exactly-once events; a rejected request returns a ticket with
bAccepted = false and does not emit a Started event. Node names below are the Blueprint display
names from the shipped Blueprint API documentation.
Changelog status
The Rest Site / Checkpoint module ships in version 1.0.0. See the
release notes.
Handles and state queries
Rest Site handles are pure data. They contain world/container identity and Stable ID data, never an Actor pointer.
- Get Last Activated Rest Site returns the persistent checkpoint for a local player.
- Get Current Rest Site returns the transient Current Rest Site, reconstructed from Last Activated Rest Site after load.
- Get Known Rest Sites, Get Discovered Rest Sites and Get All Discovered Rest Sites enumerate pure-data descriptors.
- The Rest Site Component exposes Get Rest Site State, Get Rest Site Handle, Get Player Respawn Transform and Get Fast Travel Arrival Transform.
Discovery and Activation
- Discover Rest Site on the Rest Site Component performs the monotone
Undiscovered -> Discoveredtransition. Automatic proximity discovery calls the same authority. - Activate Rest Site on the Rest Site Subsystem is the recommended high-level Blueprint workflow. It validates the site, discovers it first when necessary, activates it, updates Current Rest Site / Last Activated Rest Site, requests presentation, performs optional first Rest and Save, and optionally opens the menu.
- The component’s own Activate Rest Site node remains the lower-level monotone state primitive for compatibility; normal player workflows should call the subsystem coordinator.
Events: On Rest Site Discovered, On Rest Site Activated, On Rest Site Became Current, On Rest Site State Changed, On Activation Presentation Requested.
Rest
- Rest At Rest Site starts the authoritative Rest sequence.
- On Rest Started identifies the accepted operation; On Rest Effects Requested is a notification around the project-effects phase; On Rest Completed returns the final structured result exactly once.
- Override Apply Rest Effects in the configured Project Bridge to heal, refill, advance time, or apply other project-owned gameplay synchronously.
- Continue Rest Transition releases a
Manual Continuetransition barrier.
The normal order is validation, transition, region reset, Project Rest Effects, WSRF persistence capture, optional save, completion. The Rest pipeline is the only authority for those steps.
Death and Respawn
WSRF does not detect death. The project calls Respawn At Last Rest Site for the normal death
flow, Respawn At Rest Site for an explicit Activated destination, and
Continue Respawn Transition to release a Manual Continue barrier. Bind
On Respawn Started and On Respawn Completed. Respawn uses the Player Respawn Point and
the Player Death reset reason; it never substitutes the Fast Travel Arrival Point.
Fast Travel
- Evaluate Fast Travel Destination and Evaluate Fast Travel Destinations return the authoritative, side-effect-free availability result used by UI and execution.
- Request Fast Travel accepts an explicit Activated destination and supports same-world and cross-world travel; Request Same World Fast Travel explicitly restricts the operation to the current world.
- Continue Fast Travel Transition releases a
Manual Continuebarrier.
Project Bridge hooks: Can Fast Travel To Destination is a pure preflight for combat, quest, item, currency or other project rules; Prepare Fast Travel Destination lets the project make required Data Layers available; Prepare Fast Travel Cost, Commit Fast Travel Cost and Cancel Fast Travel Cost implement an optional project-owned reservation lifecycle; Handle Travel Failure provides an explicit project fallback seam — WSRF never falls back to World Origin and never automatically travels back to the source.
Events: On Fast Travel Started, On Fast Travel Presentation Requested, On Fast Travel Completed.
Rest Site Save / Load
- Capture Rest Site Quick State updates the in-memory multi-world envelope without writing a slot.
- Build Rest Site Save Data produces a pure-data envelope for a project-owned
USaveGame; Apply Rest Site Save Data imports that envelope and can apply the current world’s compatible snapshot. - Save Rest Site Quick State writes the configurable WSRF-only Quick Save slot.
- Load Rest Site Quick State is the synchronous import/apply primitive. It does not open another world or move the player.
- Load Rest Site Quick State And Return To Checkpoint restores WSRF data, opens the saved destination world when required, and places the player at the saved Last Activated Rest Site’s Player Respawn Point.
- On Quick Load Started and On Quick Load Completed bracket the accepted high-level Quick Load exactly once.
Override Request Project Save on the Project Bridge when Save Mode is Project Save or Both.
Menus and Rest Actions
- Open Rest Site Menu opens the configured Presenter and Widget Blueprint; Close Rest Site Menu closes the current menu session; Refresh Rest Site Menu rebuilds the existing model after project-owned tags or state change — it does not poll.
- Evaluate Rest Action returns authoritative capability, tag-query, busy-state and project-eligibility results.
- Execute Rest Action on the subsystem routes native and Custom Action IDs through their authoritative pipelines. Execute Rest Site Action on the default UI facade sends a displayed Action ID through the same subsystem-owned evaluation and execution path; it is not a second action implementation.
Native Action IDs are Rest, FastTravel and Save. FastTravel requires destination selection;
direct execution returns Requires Destination Selection instead of selecting a destination
arbitrarily.
For Custom Actions, override Execute Custom Rest Action With Context on the Project Bridge. The
context includes the Action, the Rest Site handle, the PlayerController, the local-player index
and aggregated Gameplay Tags. The legacy Execute Custom Rest Action remains supported through
default forwarding. On Custom Rest Action Requested is notification-only — do not execute
gameplay from that multicast event.
The action presentation model exposes Icon, Display Name, Description, Action ID, availability, Disabled Reason, visibility, evaluation status and the computed Native / Custom kind. Rest Action Gameplay Tag Queries work without GAS; the project only needs to provide a tag source when its rules require one.
Operation control
- Is Rest Site Operation In Progress reports the single active Rest Site operation.
- Get Active Rest Site Operation ID returns its ID.
- Cancel Rest Site Operation cancels the matching cancellable operation.
Every accepted operation emits its matching Completed event exactly once.
Project-owned systems stay project-owned
WSRF does not implement Health, Inventory, Currency, Equipment, Quests, Leveling, Skills, Spells, Crafting, Combat or Enemy AI. Use the Project Bridge hooks and Custom State to integrate those systems in Blueprint.
Enumerations
| Enum | Values |
|---|---|
EWSRFPersistenceMode | Resettable, Persistent, OneShot |
EWSRFRestoreStrategy | Automatic, AutomaticThenInterface, InterfaceOnly |
EWSRFRuntimeActorBehavior | RemoveOnMatchingReset, Preserve, RestoreToCapturedState, Ignore |
EWSRFActorOrigin | Auto, Placed, RuntimeSpawned |
EWSRFActorPresence | Loaded, Destroyed, StreamedOut, Removed |
EWSRFInitialCaptureTiming | DeferredAfterOwnerBeginPlay, ImmediateAtComponentBeginPlay, Manual |
EWSRFBehaviorPreset | Custom, Enemy, BreakableProp, PersistentShortcut (Permanent Shortcut), UniquePickup, Trap, RuntimeActor, Boss (Boss / Elite) |
EWSRFResetOperationState | Idle, Preparing, RemovingRuntimeActors, RespawningMissingActors, RestoringAutomaticState, RestoringAttachments, RestoringCustomState, Finalizing |
EWSRFCustomValueType | Bool, Integer, Float, Double, Enum, Name, String, Vector, Rotator, Transform, GameplayTag, GameplayTagContainer, StableId |
EWSRFSnapshotCompatibility | Compatible, TooOld, TooNew, WrongWorld, Invalid |
Structures
| Structure | Purpose |
|---|---|
FWSRFActorId | A Stable ID: one FGuid |
FWSRFContainerIdentity | Level/container identity for a placed Actor |
FWSRFEffectiveActorId | Stable ID scoped by container context |
FWSRFResetPolicy | Triggers, persistence mode, restore strategy, runtime behaviour |
FWSRFRegistrationOptions | Explicit registration input |
FWSRFRegistrationResult | Explicit registration answer |
FWSRFResetRequest | Reason, region, initiator, context, child regions, container context |
FWSRFResetReport | Scheduled, restored, respawned, removed, skipped, pending, failed, duration, errors |
FWSRFActorState | The automatic snapshot of one Actor, with explicit section-presence metadata |
FWSRFSceneComponentState / FWSRFPrimitiveComponentState / FWSRFStaticMeshComponentState / FWSRFSkeletalMeshComponentState / FWSRFChildActorComponentState / FWSRFAudioComponentState | Per-component-family snapshots — see Automatic component capture |
FWSRFAttachmentState | Attachment parent, socket and relative transform |
FWSRFInstancePropertyState | One captured Instance Editable property |
FWSRFCustomState / FWSRFCustomStateEntry | Versioned typed key/value payload |
FWSRFPersistentActorState | One exported Persistent or One Shot record |
FWSRFWorldStateSnapshot | The versioned snapshot stored in your SaveGame |
FWSRFPersistenceExportReport | Export result |
FWSRFPersistenceImportReport | Import result, including compatibility |
FWSRFWorldManifestEntry | One authored Actor in the World Manifest |
Field-by-field descriptions are on the topic pages: the request and report in Regions and reset requests, the policy in Reset policies and persistence, the snapshot in Persistence adapter.
Last updated: 2026-09-04