Sorry for the troubles everyone, I wrote that to avoid our QA causing late night, last minute fires when we are trying to ship games. As you probably know, any commandline addition of the form
-no<ossname> will disable an online subsystem. We use at least 7 at any given time, so its possible for mistakes to be made.
Many use this for different reasons, but what happened all to often (and on a Friday night no less) would be the server would be fine but some client would have one of these set. Our servers would assert that the FUniqueNetId wasn’t serializing the right type to play our game. QA would freak out and bug it but it was always user error.
I added this explicit check because I figured externally most teams expect compatible unique ids. As it would seem it has been discovered, you are free to remove the check in AGameMode::Prelogin().
That being said, I’m curious, how do you get around the automatic calls to RegisterPlayer that would probably complain. Do you overload these functions? Do you not use the session interface to manage multiplayer sessions? Just want to understand the paths you are treading.
Most client/server relationships should be talking compatible OnlineSubsystems. For example, it makes little sense for a Steam client to join a non Steam server and not authenticate. A lot of that pipeline was written in the base engine implementation. APlayerState has one FUniqueNetId, which should be the one defined by DefaultPlatformSubsystem in your DefaultEngine.ini file.