[PLUGIN] Savior

Hi, I’ve been trying out the plugin since 5.0 and been loving it, but I’m having some trouble with a specific issue.

I would like to make it so the player has the option to create a whole new save file when saving or overwrite an existing one.
Then when they want to load, it lists all the created save files.

The way I’ve seen the documentation and and demo project display saves is that it’s a single Savior Slot file. So far I haven’t seen any way to create a brand new save file and then load all available save files.
I’ve found that if I do NewSlotInstance → Set “SlotFileName” to a unique name → Save it, then it creates a unique save file. But I haven’t found a way to display every available save file or get all the available save files.

The demo project has a sample UI where player can pick between 5 slots and the widgets are all blueprints.

You can see how the UI in that demo was put together for that.

I think you misunderstood the question.

In the demo, yes you can pick between 5 slots, but I want to populate that list with as many slots as the player has save files.
Every slot in the demo requires a Savior Slot in the content browser. This essentially puts a hard limit on how many save slots a player can have. For example the 5 slots in the demo.

I want the player to be able to create a brand new slot whenever they want. Similar to in Witcher 3 and other games, you can create a brand new slot or overwrite a current save file. Then when the player wants to load a save, it lists not the Savior Slots I’ve made in the content browser, but all the save files in the save folder.

You would have to code that UI to list files on disk, every time loading a file you would have to modify the “File Name” property of the target slot class for that to work.

This is not something that should be built-in into the plugin.

Oh I see. Also noticed that the “DoesSaveGameExist” node works for the plugins saves after checking out the source code more.
Thanks for the fast support :smiley:

Hi, Bruno, how’s it going?

I’m in a process of porting Savior3 from UE4 to UE5 and I’m having a little problem.

I’m using the latest UE5-main branch from GitHub and I get this error when I’m trying to compile the Game project.

I think I got everything setup the exactly the same as UE4 project but it seems like I can’t “generate” file from the header. I can’t find the generate.h files in Intermediate folder.

I ran out things to try and do you have any idea why it doesn’t generate the files?
Perhaps UE5 requires a different setup?

Thanks for your help.

0>P:\UE5-main\Engine\Plugins\Marketplace\Savior\Source\Savior\Public\SaviorTypes.h(21): Error C1083 : Cannot open include file: ‘SaviorTypes.generated.h’: No such file or directory

If you are building custom engine you should move plugin to project folder.

Oh, has something changed?
It used to build just fine with UE4 custom engine.

I have no idea.
That’s on Epic, it shouldn’t build plugins downloaded from launcher at all.

The default behavior is move it to your Project/Plugins folder.

1 Like

Hello, for some reason, after I upgraded my game to UE5 the “Save Game World” node seems to not work, even though it worked flawlessly in UE4. I even tried to create a blank/fresh project and run the same node, but it doesn’t seem to work. The engine does not crash, and the logs have no errors either, it’s just that nothing happens when you run the node, and it goes to “on fail”. Anyone else having this issue?

I even verified the engine just to be sure that there are no issues with the engine. UE5 5.0.1.

Try the regular node, not Async.
Also “refresh all nodes” on your blueprint after you upgrade to a new engine version.

That worked perfectly, thank you, Bruno!

1 Like

Hello bruno, node Load Game World [+Callbacks] has
stopped generating Finished Load Callback Event even though Reset Level On Load is false. Although earlier this event was generated. I checked the plugin logs and there were no errors, all objects loaded fine, but without this event, I can’t restore the rest of the data.

Is there a specific forum or email for bug reporting? I’ve found some issues with open level and the HUD’s OnFinishLoadScreen event.

I will take a look this weekend to see why that callback might not be working.

I’ve found some issues with the two OpenLevel functions, if you load the same level twice within one session, the loading screen widget is never removed off of the screen, but you can still control your character.
It may also be I’m somehow not using the functions correctly, because the demo does not provide any examples of these two functions being used. The default UE OpenLevel(ByName) is only being used.
I also found that the OnFinishLoadScreen event in the HUD is seemingly never being called in the demo whenever a loading screen is finished.

If I remember right, there is a node to clear the loading screens you can execute manually.
From the HUD blueprint you can execute “Remove Load Screen”.

Your HUD must be a child class of the AHUD_SaviorUI ( [SAVIOR] HUD ) class.
That is the node the demo project use to clear them from screen.

that node seems to have temporarily fixed the issues, a bit more work but fixed the issue.

Is there any way to customize or expose the loading screen widgets to edit them in UMG blueprints instead of C++?

You can define the splash screen / video, font type used, color, etc on your slot class from asset browser.

If you want a complete modification of loading screens you will need C++ because the Slate API used requires C++ for loading screens, there is no UMG bindings for that.

So I tested this and I am assuming that you are loading a slot that travels to another level while executing the Load Game World [+Callbacks] from within a Blueprint that doesn’t exist anymore after the level targeted by the slot is opened.

That is the only situation I see where the Finished Load callback is not executed.
As it should be, since the host blueprint instance is destroyed as soon the current level is closed.

When I run the node from a Game Instance blueprint, or the target level is the current level, the Finished Load callback works as usual even after opening a new level during the loading process.


I will see what I can do to try to avoid this problem.