So if I Set my save slot Runtime mode from Background to Synchronous Task and instead of using Save Level Async - just use Save Level - the issue goes away and all 3 maps are saved / loaded into their own slot.
Is that correct? If so, when should the “Load/ Save Level Async” be used if the current thread returning ‘success’ cannot immediately start a new thread on the same frame?
Also, I have another question with regards to dynamic actor respawning. Using the ‘Save/Load Game World’ node - I can use the SGUID to restore spawned in Actors, NPC’s etc which is working fine, however I have logic in my level which spawns the NPCs to then bind a delegate to one of the NPCs events.
So if I spawn a actor, save the game - then quit and restart the game, load the save (which loads the NPC back) but their delegate binding event is no longer setup, so nothing happens when they are hitting an event that should fire. If i do not exit the game, the delegate works - only upon restoring is this lost.
Do i need to find a way to say, when loading back into the game, discover these actors by SGUID and setup the binding again that would have been setup when they first spawned? Or is there a way for this binding to be saved?
@OregaHDD some platforms have certification processes, and they often require an “application” not to freeze while saving data in background. The async system is for complying with that kind of requirements.
However, starting a new save/load thread while there’s one still active (Unreal only deletes a thread on next frame), that could cause catastrophic failures if used incorrectly…
So I simply put a lock to make you aware it’s not a good idea to trigger these things on the same frame.
I could internalize the “delay 1 frame” step to wait for current thread to be deleted, but I’m not sure if the plugin should actually do it, I’d rather let the developer know “there’s a thread running, you shouldn’t do this…”
And for your second question, you can always store SGuids somewhere and use them to build custom data manipulation, there’s a “Find Actor with Guid” node:
Thank you. I think I understand and yes, its probably best left to the developer and hopefully people will find this comment if they are stuck in the same situation.
As for the GUIDS, yes I had a thought about it since I posted and it sounds like thats what i need to do, I store the GUIDs and just get them and rebuild whatever is needed using a loop and a find actor with GUID node.
Thanks for your help and support so far, really enjoying the product!
I’m sending an update to Epic Games for Unreal 4.25 and 4.26+;
Just added a !GuidActor Tag.
This tag is a contract between you and the engine that this actor is not multi-instantiated and/or you guarantee uniqueness of its name.
So slot data for that actor will always load regardless of having a SGUID property or not…
This is handy for movable Static Mesh Actors that placed by hand and don’t want to convert to a Blueprint class, but still want them to save and load their location / size changes:
Thank you for the updated documentation page, it was very much needed.
I have an issue, I don’t know what’s going on here but if I place a Spotlight into my map, and don’t change any of the default settings - then I hit Save game, then i load my game back - it seems to take the intensity of the spotlight and ramp it up about 500x so the game is insanely and eye bleedingly bright.
I am using the Save/Load Game World nodes so that my dynamic items can respawn.I do not undestand why this light is so bright, it’s as if it is changing the light intensity.
Hi, Yes that seems to fix the issue, thank you. I’ll look at the logs and maybe try putting together a few test maps to see if I can find out where this occurs. I cannot see anywhere which may affect light intensity or units, so I think this might be some kind of default setting that is being picked up by the engine itself.
I’ll post back when / if I find something. I think it only affects dynamic lights, not static ones.
I am using dynamically spawning actors in the game, so I am using Load/Save Game World to support this. I have no issues spawning dynamic actors, saving and restoring their data in testing but I am having issues with longer play sessions.
What seems to happen is:
1.Start a new game, pickup a key (marked as auto-destroyed) and hidden from game
2.Save the game, Exit and restart the game - loading the save
3.The key data is read from the .sav file and the plugin knows that it was previously marked as destroyed, so it removes it.
4.I continue to play the game, Save and then exit. I then relaunch the game and reload my save.
5.The key is still missing from its position, as it should be.
6.I then progress further through the game and pickup other keys, then save the game.
7.If i then exit, relaunch the game and load my save - the newer keys are hidden as they should be, but the previously picked up key from #1 has respawned.
I notice that if i inspect the .sav file, that the item that was first picked up in #1 is present within the file, with its SGUID - this is present all the way until point #6 It seems that from point #7 the original reference to my key is now missing from the save file and this is what causes the plugin to skip over removing the actor from the game.
My question is, how does existing content like this remain in the save file, unaltered? I always need to know if the key was taken, and this always needs to be reloaded, even after X number of saves. I have only the one slot for save data, and i keep loading and saving into that. Do I need to use some different functionality to append data into the slot and not wipe out anything that it can no longer find a reference to?
Welp explicitly attempting to disable PythonScriptPlugin in my .uproject file doesn’t seem to work. Maybe one of my other plugins depends on it or something.
I will look into their code and see how I can avoid that function to be called with Savior types, but if it is disabled and you regenerate reflection data (intermediate folder) it should go away.
This python plugin registers stuff by name into a map of data to create python functions…
“SlotData” and “SlotMeta” already exist somewhere from whatever module.