There isn’t any teleportation… a new pawn is spawned.
The flow goes like this in a multiplayer game.
1. Client calls PlayerController::ServerRestartPlayer()
2. PlayerController::ServerRestartPlayer() makes sure the player can restart, unposseses any possessed pawn and calls GameMode::RestartPlayer()
3. GameMode::RestartPlayer find a start spot then calls GameMode::RestartPlayerAtPlayerStart()
4. Since the controller no longer has a pawn, the second branch is hit and SpawnDefaultPawnFor() is called, a pawn is created and returned, then the player controller is assigned that pawn with SetPawn().
Hope that helps. Btw… spending the HD space is worth it
Well… the Die() function is for everyone. When a player dies, whoever it is, client or server, it needs to execute that code. (But the function runs on the server, since, as you may remember, there’s the Authority check at the top)
If you need to forcefully restart the player in your game mode, you can use the Reset() method from APawn class. For example, this is how you restart all players: