[PLUGIN] Savior

Hi, Bruno

First of all thanks for the very handy and useful plugin, it does save a lot of time :slight_smile:

I’m a “BP only” guy and relatively new to the plugin itself, so pardon for a dumb question: I’ve got an error when trying to run a dedicated server from editor via command line. I’m not using the plugin this project, just have it activated in plugins section. Did you encounter this behavior? (after clicking ok DS starts and runs smoothly)

Thank you in advance for your answer

Plugin not built for dedicated server.

​​​​​​It tries to load some default engine assets that won’t exist on a dedicated server build.

The plugin’s loading screen system is what tries to load that font type.

Thanks for the clarification. Is there a way to still use it for the game that’s intended to run with DS?

I will upload an update this week, with a check if build is server then that error won’t happen anymore.

Great, thank you!

@Roland_Price what engine version you use?

Currently 4.24.3, thinking of migrating to 4.25

Okay, update is doable. I can’t upload to Marketplace anymore updates for engines that are too old (updates are locked).

Sure thing, it’s a large overhead maintaining a long list of versions

@Roland_Price The update is already up on Marketplace; Epic was fast this time.

Well, that was REALLY fast. Thanks, the warning is gone now, I’ll test the workflow and let you know in case anything comes up

I read through the documentation but I am having trouble understanding how to pass to “Load actor” its “Data”
Could someone please give an example / point me to one?
Edit: I found the correct button to “Set Savior record structure (by ref)” using the Event “Savior on finish respawn”.
I’ll still leave the comment in case someone is as new as me and stumbles here.

By the way great plugin

Respawn event only happens for dynamically respawned actors that are restored from a record in a slot file.
If you are not restoring actors using the respawn interface, but still wants to load an individual actor, you use another “Load Actor” which isn’t static, it requires a slot reference and no slot data.

Here’s quick example:

https://i.imgur.com/svW6HqA.png

Hi Bruno,

I have a quick question, apologies if you have answered it already.

Is there a way to customize or subclass the slot meta without editing your source? There is a few additional fields i would like to store on it. If not, i guess i will just have to modify the source, not a huge deal.

Thanks,

No, only editing the C++ class.
The class for metadata fields is referenced directly.

But that’s very simple to do, just add UProperty fields in the class and create for them new Getter/Setter UFunction on main slot class.

](filedata/fetch?id=1787222&d=1594576538)

Thanks for the reply, i will do that.

One more question, im trying to load/save my game instance, the actual loading and saving works finde, but “On Loaded” never gets called in my setup below.

I should mention the game is paused if that matters. PREPARE to load DOES get called however. There is just some initial setup i need to do once its loaded.

Thanks.

EDIT: i should mention this is on the game instance itself.

Yes that event will execute only when the target actor was respawned and record was read from slot data.

There are other events that should be executed when whole load process is finished.

Savior plug-in is part of this July flash sale on Unreal Marketplace!

Bruno,

I bought your asset after reviewing this thread. I downloaded the 4.24 demo project and have tried to get a grasp on how your systems work.

  1. Do you have official documentation for implementing your save system beyond this thread? It would be helpful for noobs like me and anyone else considering your asset to not have to dive through 25 pages of a forum thread in hopes of successfully digesting the current state.
  2. I intend to use this system in a project with 300+ instances of one main class and roughly 30-50 instances of another important class. Each of these instances has numerous arrays of structs storing references to other actors as well as values. If I can’t properly restore these, I will need to rebuild quite a bit. From my reading of updates to this thread in 2020, saving/loading for this use case seems to be supported. Did I get that right?

If so, here’s my guess about how to get started:

I need to create an SGUID and implement Procedural and Serializable interfaces in each class I care about saving. I also need to check the “SaveGame” property on each variable I want included in each of those classes. I need to create a HUD parented to SAVIOR HUD to get access to your Show Slots UI functions.

It’s unclear what I need to do in the Savior->Scope section of a Savior Save Slot asset.

Thanks for any help/feedback.

I am limited to the example project, this thread notes (first page), and email support.
Video tutorials are large time consumers that I cannot afford to produce.

If you have arrays of actor references in structs, that could be a problem for a save system.
That goes against a few architectural philosophies of the engine, because structs are used as “value” types, it’s safer to store array of actor references directly in an object class for save/load purposes instead of wrapping them in a struct (for runtime save/load that is).

That is correct, except you don’t need Procedural interface unless you want your actor class to be automatically respawned at runtime when a save file is loading (in case that actor instance is missing the plugin respawns it for you).
The SGUID (FGuid type) is always required since recent changes to the engine.

Scopes can be used to filter the classes of Actor/Component you desire to include in a “Save/Load World” action.
If you remove default base classes from that list then add just specific blueprint classes to the list then “Save World” will only save instances of those classes when saving a record of the current level.