Currently if you call :LoadCharacter(), it creates a character and instantly moves it to <0, 100, 0>. If there are spawn locations, it then waits a bit and moves your character to a target spawn location. The most annoying side effect of the waiting is that if you try to move the character on characteradded, it gets re-positioned to where the game thinks it should be a couple split-seconds later. This makes creating custom spawn systems very annoying as you have to wait an arbitrary amount of time before you move the character to where you want them to spawn.
Something else that’s also impossible to do with current functionality is prepare the character for spawning before actually parenting it to the workspace (e.g. equipping armor to it before it spawns into the world). You could parent it to nil as soon as it’s added to the workspace, but due to latency, people would see the unprepared character spawn in at one of the spawns for a split second before the parent change to nil replicated to them. Additionally, say your character preparation takes 1/10th of a second. Because the PlayerGui is cleared when the character is loaded, you immediately lose your transition/loading screen when you load the character and you can see the character being prepared for that 1/10th of a second which is really ugly. A feature resolving these issues is essential for FilteringEnabled games in which the client must communicate and prepare alongside the server (i.e. the server needs to tell the client its loadout and replicate the loadout models to everyone which takes a while due to latency)
The solution:
Player:LoadCharacter(targetCFrame, withholdCharacter)
When targetCFrame is nil, the current spawn system is used. If it is not nil, regardless of what team the player is on, the spawns that are available, etc, the character will immediately be sent to the targetCFrame without going to the default-picked location in between.
When withholdCharacter is nil, LoadCharacter will behave as it does now and immediately set the character of the player to the loaded character and clear the PlayerGui / delete and re-add the backpack. If set to true, the character will be parented to nil, will load the character’s appearance (i.e. when a character is withheld their hats and body packages are still loaded onto the character parented to nil so that if you need to modify them during preparation you can), will not clear the PlayerGui / Backpack (so that custom loading screens don’t go away when the new character is being prepared), and the created character won’t be set as the character of the player (that shouldn’t be done until it’s done being prepared)
Returns the newly created character, even with empty parameters.