[PLUGIN] Savior

It’s your “Player Start” that usually cause that to happen.
An easy way to workaround is storing character rotation somewhere and apply it again after the PlayerStart actor is done with its thing.

Hmm… I was sure i had exposed a node to rename Slot’s target file name;
If this node isn’t present on Marketplace I probably forgot to send it to Epic, I have to check :slight_smile:
By default, the file name = Slot asset’s name. (if “FileName” property is empty)

I will check this tonight, should be a “File Name” FName property visible there, if it isn’t I forgot to send that change or it got lost on Perforce somewhere…

Submitted an update on Marketplace to correct that; should be available to download a few days:

(some new users are asking how to so I will post this here as well) [HR][/HR]A simple way to make your Character obey the rotation your Camera was saved to when loading back from save files.
Add to your Character Blueprint the “Serializable” interface:

Add to your Character Blueprint’s graph this event that will be called by the plugin when it is loaded from disk.
This will force your controller to accept the rotation your character just loaded:

I have implemented multi-threaded ZLib compression in version 2.5.0;
I will also add a sub-system to save a “minimal set” of data where you can use to further reduce file size.

Warning:
Save files created with plugin before version 2.5.0 will NOT be compatible to 2.5+ due to compression algorithm included.

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

“Minimal” data set is always compressed and usually 400% smaller than default (complex) set;
However, on minimal it’s not possible to support threaded auto-respawn of Actor/Component instances on load:

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

Hey there Bruno, after months and months of trying to sort through the garbage save system I’ve been working with, and other marketplace solutions, I came across your plugin and found it to be really promising. I’ve purchased it, looked through your demo and documentation on the 1st page, but have run into a bit of a snag while trying to implement it.

It appears as though several of the rather vital nodes do not appear in my project. I’ve tried reinstalling the plugin, recompiling, and building from source but to no avail. I even tried copying the single nodes from your demo project, but all I got was a ‘conflicting nodes’ error.
I ask myself how could I honestly get stuck on a tutorial of 3 or 4 steps? I’ve got a rather finicky source-control setup, could that be related?

@Chaosian it looks like your “Savior” variable node there is empty?!

It must point to a valid Slot asset or instance of a Slot asset.

If that’s not the case, definitely there’s something weird happening to your project…


Also on Context search look for ‘Savior’ instead of “save game” keyword.

Quite quickly came up with the solution to my problem after sleeping on it, and I’m feeling all the sillier for it. The search term wasn’t the problem, I should still be able to find at least the “Save Game Mode” node, and the variable itself was fine for that purpose.
Stupidly though, I was trying to do this search inside a Function - just another relic of my previous architecture. Presumably, all those didn’t register inside the function because you cannot have time-related notes (such as delay) inside a function. To my credit at least, this is a UX problem with Unreal. There should be some kind of indication as to why you can’t in the first place.

Kudos for the prompt response though!

Hate to junk up your thread here, but I’ve stumbled into another problem, or series of intertwined problems.

I’ve got a very simple setup running in level blueprint, and have seen success with it. A Savior Slot variable referencing an extremely default Savior II entity, being told to save the game world, then on success, save game instance and try to load the world 5 second later, on loop. I’ve got an exceedingly simple world, and could see some actual saving and loading with this setup.

There are multiple problems with this setup though, which make it seem like things just aren’t adding up.

  • The Save Game World node only appears to function the first time the engine is booted up. On every subsequent load, the node continues across the top line of exec but never hits “success” or “fail”. It just hangs, seemingly forever. This remains to be the case simply for every subsequent call of the save game world node. If I boot up the engine and run this code, the Save Game World never runs success twice. This happens regardless of the New Slot Instance node or not…
  • The game DOES appear to be saving something, and saving it correctly, as there are appropriately named files in my save directory
  • After Save Game World successfully finishes, Save Game Instance never will, it appears to be suffering from the same problem. Similarly the loading never will. However, if the engine is booted up again and these calls are made, they will function normally.
  • Even when it is saving, there appears to be no save related UI. My level is very simple, and I could just be interpreting the demo incorrectly, but the Savior II save slot object would seem to suggest there should be at least something.
  • I cannot get / find any debug logs, even for a successful save. I’ve checked both checkboxes. I can find logs for the demo, however, as SAVIOR2_Demo.log.
  • I don’t think any of these issues are related to version control, as the save files have not been added to my Perforce.

@Chaosian you have a loop that never closes because the “Save Game Instance” isn’t waiting for a “Success” response.

Also “Save Game World” already saves a copy of the Game Instance, it’s a conflict saving it again using that second node.
The second node will erase everything from Slot and write the Game Instance (only) to it, I would remove that node.

And, use nodes with callback events, don’t loophole like that :slight_smile:

The idea was that the loop would never close, it was a testing scenario. In that test though, success would never fire even if it was hooked up correctly. Some sort of bug, I can imagine, or maybe just a flaw in my expectations of the node.

I’m not exactly certain how, but the bug of having to restart the engine to get the get nodes to work more than once seemed to be fixed by removing the redundant save game instance node.
I took your advice and this code works reliably:

I took things one step further and implemented it in my UI, and thinks work great. At risk of sounding a bit like a goof if things blow up in my face again, I am tremendously pleased with the results right now.

Thank you very much for your help!!

@Chaosian I have found the issue you’ve experienced.

It’s a problem within the architecture of “Async Nodes” inside Unreal.
I will add an update where you can use save/load function nodes without depending on the Async API, this way you will be able to safely call Delay/loops, etc.

Hi Bruno,

Recently (today) there was a new update for UE 4.21, wich are the new features or fixes?

Thanks

Concluded the change I mentioned above.
Save/Load nodes without Async operations exposed to Blueprints (nothing changed for C++ devs).

Note:
The non Async nodes demands use of “New Slot Instance” before using it.

[USER=“434”]BrUnO XaVIeR[/USER]

How to I get this plugin working with non-launcher version of UE4 ? (I use Oculus fork of UE4 built from source)

Marketplace does not support engines built outside Launcher.
You’ll have to move the plugin from Engine/Marketplace/ to your project’s folder and build binaries for it yourself.

Submitted v2.6.2:

  • Added support to auto save physics state of Skeletal Meshes and PhysX Vehicles.
  • Fixed an erroneous “ResetPhysics” flag, should be “TeleportPhysics” instead.

Hey there [USER=“434”]BrUnO XaVIeR[/USER] , maybe I was blind but how can I save an actor and it’s variables marked with “SaveGame” flag from a controller for example? I tried the SaveWorld last weekend, but that’s just didn’t do the job as I expected after I loaded the game from save file. Any suggestions?

Easiest way to save controller, pawn ,etc is use “Save/Load Game Mode” nodes.

New Slot Instance -> Save/Load Game Mode

Hello (again!) Bruno!
I’ve got a lower priority question - or possibly a bug regarding the saving of meta-data.
I’m trying to finish setting up the UI for my game’s save menu, and it’s been going relatively smoothly, with the exception of one field, “Play Time”. It seems that no matter what I set the original value to, it always gets returned as “0”.

At one point I early on, I was able to get it to read properly, but that was when I was saving the Saviors as variables and not referring to the assets directly (not the intended procedure, I imagine). As a result quitting the game would clear the meta-data.

What is the proper method for saving Play Time?

@Chaosian The plugin calculates “PlayTime” meta by himself. (compares last saved time to next time the game is saving)
This is why you see “zero” there, you didn’t play for 1 hour yet :slight_smile:

For custom play time data you can create your own property within Game Mode classes instead of using this hardcoded property within the meta object.