Thanks a lot of this extensive bug report and repro case. A colleague and I spent a few hours today digging through code with information provided and have found some more information and a temporary workaround.
problem lies in UWorld::AddToWorld (around line 1921), with this call being made on client at end of server travel:
It->PlayerController->ServerUpdateLevelVisibility(PackageName, true);
This RPC never gets sent from client to server, and so server never gets informed about sublevel visibility for client’s connection. If you step into RPC call you’ll see why it’s not sending - inside AActor::ProcessEvent it fails on a check to GetWorld()->AreActorsInitialized().
We looked around elsewhere in codebase and found a gem inside NUTUtilNet.cpp on line 517 -
// Hack-mark world as having initialized actors (to allow RPC hooks)
ReturnVal->bActorsInitialized = true;
It seems somebody else has experienced same RPC limitation, haha! So back in UWorld::AddToWorld, if you hack bActorsInitialized = true then perform ServerUpdateLevelVisibility RPCs, then restore original bActorsInitialized value afterwards, everything works as expected.
Obviously this is just a workaround, but hopefully it helps Epic team come up with a proper fix.
, you may want to add this information to UE-24280.
Cheers,