no signal for persistence load completion

Summary

There is no way to determine whether a player’s persistent weak_map data has finished loading. A lookup miss at join time is indistinguishable from a genuinely new player, so any first-time-player initialization path risks overwriting real saved progress with a default record.

Please select what you are reporting on:

Unreal Editor for Fortnite

What Type of Bug are you experiencing?

Verse

Steps to Reproduce

  1. Declare a module-scoped persistent weak_map keyed by player.
  2. Subscribe to GetPlayspace().PlayerAddedEvent().
  3. In the handler, wait until Player.IsActive[] succeeds, then read the weak_map.
  4. If the lookup fails, write a default record — the standard new-player initialization pattern.
  5. Publish. Have a player earn progress, return to the lobby, join a different island, then rejoin a cold server instance of the original island.

Expected Result

Either persistent data is guaranteed to be resolved by the time PlayerAddedEvent fires and Player.IsActive[] succeeds, or an awaitable event / API exists to detect load completion so initialization can be deferred safely.

Observed Result

Neither a guarantee nor a signal is documented. The weak_map lookup can miss for a player who has saved data, and there is no way to distinguish that case from a genuine new player. Writing a default record at that moment replaces the persisted record, permanently losing the player’s progress.

Polling with a retry loop is the only available workaround, and it requires guessing a timeout — too short and it wipes data, too long and it delays every join.

Platform(s)

PC, PS5

Island Code

8920-0084-1283

The data is guaranteed to be loaded before the player is even allowed to matchmake into the island. The .IsActive[] check is only valid/useful for after the player leave the map.

There is no “data is not yet available” during gameplay to be checked with verse. If the persistable data fails to load, the player is not allowed to matchmake at all (An error message shown still on the lobby)
Also, matchmaking is “paused” while the data is being saved on the servers after leaving, and during that time, matchmaking will silently delay or wait the previous server data to “close” first before starting another attempt.

Any bugs related to data loss or not loading persistable data when joining is on epic side and must be reported. It is very very rare, but already happened (for everyone at once) after some game updates in the past. Some examples includes consistent matchmaking errors as mentioned above, or clean/empty persistable data on joining, wiping previous saves wrongly. On the past with these cases epic oferred rollbacks on the player save for the affected maps.

If the weak map read fails during join like you stated, means the player never has joined before thus has no data (Disconsidering the possibility of bug on epic end that is absurdly rare and uncommon). At this moment, you can initialize a new data but it must be saved. If you forget to save, it will be blank again the next time the player joins the map.

When a player joins, the moment it is firstly accessible from anywhere in the code, it will always pass the .IsActive[] check. There is no moment during or after join where the check will fail.
The only case where it will start failing is after the player fully left the island. This is, even during the left signal (PlayerLeftEvent getting fired) the .IsActive[] still pass and writting to the weak map succeeds (to allow data being saved), only on the next tick after it and onwards it will fail the check and cause runtime errors if attempting to write the weak map.

1 Like

Thank your for your response, I’ll make another but report explaining that player data is getting wipped for some players and the only thing that will make that happen in our code is if the player is active but the key is not present in the weak_map.