How to change Default Pawn before level loads?

I’m not sure. cuz I do it differently. But I don’t think you want to be using Player Controller 0. Are you spawning the actors and possessing them from the GameMode BP?

So you’re doing something like “get player contoller index 0” casting to player controller and then using that to possess?

I don’t think getting players at indices are very reliable in multiplayer.
Create a custom player controller bp as a child of Player Controller.

Every player will have their own player controller BP.
As a server function, spawn and possess inside the custom player controller BP.

I create a custom GameInstance as well. This is where I set the Char selection int. Because the Custom Player Controller is wiped each time the player dies. If you store variables in here. they will get cleared out. GameInstance variables persists so you can respawn them with the same selected character.

Then cast to custom game instance from the Custom Player Controller to get that Int. Then switch on int to tell which char to spawn and possess.