How to connect with dedicated server but game client stay at current screen?

Hi.
I need to migrate old game code to new system. So in this new system, I will need the game client to connect to a dedicated server, but the game client will have to stay at current menu. The new flow is like this:

  1. Player at custom multiplayer screen
  2. Player modify some setting
  3. Player create session, request a dedicated server and then connect with it
  4. Player will stay at current menu
  5. Player can modify some setting again while waiting other people join
  6. When ready, player start the game and travel to game map (I think this will use RPC)

The old implementation was using game lobby, but the new one will need to get rid of lobby system and using game session (in the old system, step 3 was creating lobby, and step 6 was the actual creating session and requesting dedicated server).

So far what I’ve tried are

  • Calling PlayerController->ClientTravel(ServerUrl, TRAVEL_Absolute); when dedicated server is ready, but this will make player directly travel to dedicated server default map
  • I try override bool MyGameInstance::DelayPendingNetGameTravel(), and make it to return true when ClientTravel above called, but this make my screen blank. I was expecting this make player stay at current menu, and when it set to return false, player will travel to dedicated server’s map. But currently it makes my screen goes blank

So, is it possible to game client to connect with server, but stay at current menu? How to do that?

Additional note: The menu is using widget blueprint, and the background map is random. What I aim is player perfectly stay still at their current map and menu, not move to a dedicated custom game map

When you join a server you get a new controller. GM creates it and assigns it to the client. It’s then replicated down to the client. After which the GM spawns the default pawn, possesses it and replicates that down to client.

What you need to do is store your custom settings in a save game… as you modify them. When you join the server and get the new controller you load the UI and use the stored settings.

There will be a flicker where your current controller is destroyed, thus UI that was loaded. Then the new controller loads the UI and updates the menu with stored selections. Get creative here and add some visual and audio fx to mask the join process.