[PLUGIN] Savior

Components are sub objects spawned at runtime. They need their own SGUID id, they are not really part of the character class that gets saved.

1 Like

Hi!. Trying to save in world partition scenario but without succes for placed actor. Without iam getting desired result and get saved all of data for characters. When switching level to WP data is missed for placed characters - not for owning one.

here is without WorldPartition all great - implemented interface with guid(resolved)

and here is World Partition data is not loaded at all for placed characters - it works for owning pawn.

Also - Maybe You will find useful Plugin (Level Streaming Persistence) if there is no Method to save WP with Savior. All the best!

actors in world partition are proxies, they are not owned by the game world, as explained on the post above.

If they are spawned in the game world, instead of placed in a partition, they save just fine.

1 Like

Ok i see - Do You know any spawning method that run characters code . When trying to spawn from class with BP in the world it’s like unpossesed “blank” also it is not entity of world partition - its like not partitioned correctly.

if trying to load that data engine crashes.

I have to start working on partition compatibility again, but it’s not happening this year.
Because “this is a new feature” and while I’m tied to an employer contract in Japan, I cannot develop new features (by contract related to ownership).

Sad that i cant use Savior in my project. All the best.

Actors in a World Partition don’t “exist” at runtime until their cell is loaded, so the usual “find by world” iterators only see already-loaded actors. You either (A) make that actor always loaded, or (B) look up its ActorDesc in the World Partition and load/resolve it by GUID (or some metadata) to get a pointer. Then you can use Savior → “Load Actor” as usual for those you are streaming within partitions.

1 Like

Hello Bruno. Does Savior have support for saving GAS gameplay attributes? If so how would I take advantage of it in my project? Currently I use these types of “proxy structs” to save/load attribute values:

USTRUCT(BlueprintType)
struct SIGIL_API FSigilHealthAttributeSaveData
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, Category = Default, SaveGame)
	float Health;

	UPROPERTY(EditAnywhere, Category = Default, SaveGame)
	float MaxHealth;
};

// When saving, store base values of USigilHealthAttributeSet::Health and USigilHealthAttributeSet::MaxHealth into a data structure of the type above

// That struct is stored on the player state:
UCLASS()
class SIGIL_API ASigilPlayerState : public APlayerState, <interfaces...>
{
	// ... stuff ...

	UPROPERTY(SaveGame)
	FSigilHealthAttributeSaveData SerializedHealth;

	// ... other attribute save data in effectively the same style ...

	// ... more stuff ...
};

// Then I just save/load the attribute set base values using that save data.

…and I would like to know if I still need to keep them around or if Savior makes them redundant. Thanks for your time!

You can either leave them in the player class, or give your GAS object instance a SGUID and save the GAS values directly.

You really just need to make sure that the GAA object instance is spawned at runtime with the same unique SGUID value.

If you don’t, when calling LoadObject or “Load Game Object” nodes, the system will fail to identify the GAS object instance.

Hello,

I’m having trouble using the loading screen features, I saw the option to put a minimum load screen duration but my load screen vanishes instantly regardless, also tried triggering the load screen with the “invoke loading screen” node instead but got exactly the same result.

Haven’t tried on a packaged version of the game, not sure if it’s different.

Also, the background blur works but not the splash screen, I get no image.

Thank you in advance

Do you get same issue if you uncheck “Absolute”?

I am away from office until early January, but I verify the state of this on latest plugin versions as soon as possible.

Which Unreal Engine version are you using?