@DAGON992 in the meantime i wrote the same questions on (1) unreal and got some answers for c++. you might like to have a look there and (2) from a yt comment i got following approach for blueprint:
"so this is kind of a complicated topic, but in short you can basically put in the scene all of your player start positions, and assign a tag to each one (1,2,3 etc.) then instead of having your primary pawn as your default pawn in project settings, you basically assign an actor that detects inputs, and waits for your controller to press a button, which will then prompt you to choose which player you want to select (using the tags you assigned to each player start). Then based on which option you select, it will spawn in that character, and then you use the possess node to give the player control of that character with the controller they are using.
there is a decent amount of stuff that goes into this, including blueprint interfaces. You would probably use the blueprint interface in the actor that detects inputs, and it would interface to the game mode in order to spawn the player that you want to play as."
havent test it yet, but im going to.