CrimsonSaveSystem · Lesson 5 of 8
Multiplayer Login Hooks
Before you start
- Completed: Save & Load
Chapters
1. Wire the GameMode
In your GameMode: on PostLogin call NotifyPlayerLoggedIn(NewPlayer), and in Logout call NotifyPlayerLoggedOut(Exiting) — before calling Super::Logout, while the controller and its player objects are still valid.
2. Player-scoped fragments
A system that saves per player (progression, loadout) overrides GetPlayerSaveKey and returns UCrimsonSavePlayerIdentity::ResolvePlayerSaveKey(PC) — a stable key from the player's UniqueNetId (with PIE and offline fallbacks). The manager then writes one fragment per player: FragmentName__PlayerKey.sav.
No double underscores
__ delimits the player key in fragment filenames — fragment, level, and player names must not contain it.SaveGame is not Replicated
A restore happens on the server. If a property is
SaveGame but not Replicated, clients keep their stale value — correct on the listen host, wrong everywhere else. Persistent and visible state needs both flags.