Post Login Event not firing on active clients after Seamless Travel

The “Event Post Login” bp node in a gamemode blueprint isn’t being called when clients finish using seamless travel. Now I figure that this is intended behavior since clients are technically already logged in and their controllers are just being carried over. I need, however, to select players’ spawn location and color for the new map after they travel to it.

So, I am wondering if there is a way to call the Post Login Event on clients brought over with Seamless Travel or if there is an alternate node that would call when they are done travelling, preferably giving a reference to their player controller the same way Post Login does.

  • This is happening in UE4.7.6 only
    modified to use Steamworks v132 &
    Rama’s BP nodes.
  • When loading directly into the map, post login fires as desired. Only doesn’t work when travelling from another map. I have not tested changing maps without seamless travel or with clients connecting after the map has been loaded (as the latter will not be a feature).

Hi,

I have the same “issue”. I use the quotes when saying issue because from what I have seen it is normal.
When you use seamless travel the clients doesn’t disconnect so they can’t reconnect. They just load the map.

This means that OnPostLogin will never be called after the connection to the server. If you want a OnPostLogin when a map changes you need to not use seamless travel. Another solution would be to find another event (I am still looking) to know when the map is loaded form the client side and execute an event on the server saying “I joined the map”.

I hope it helps :slight_smile:

I have a solution : On the Tick event check if the player has a locally controlled playercontroller if yes then the client is connected (don’t forget the “do once”).

I found a solution, look at my answer :slight_smile: It is updated

How did you get that to work? Local player controllers should persist between levels, does it just get reassigned once the travel is done?

As of right now, I’ve decided to just not use seamless travel, as it’s not important that clients stay constantly connected, but I am interested in this solution.

I use the tick from the level BP and the tick will start only after the level is loaded up. I check of the controller is a local one to be sure that if the controller change (from a long controller to a game controller) then I send the event to the server only when the controller is possessed.
I hope this help and set it as answer if it is all that you need :smiley:

Interesting solution! I think I’ll switch back to seamless with this. Thanks!

Anyone reading this, to save you some time;

After seamless travel
AGameModeBase::GenericPlayerInitialization(AController* Controller)
and
AGameModeBase::HandleStartingNewPlayer

Gets called for the client.

This is working good for me.

AGameModeBase::GenericPlayerInitialization(AController* Controller) worked for me ! (used after seamless travel). Thanks a bunch :wink:

gozu I love you.

love you man, this event decides many problems.
Im used HandleStartingNewPlayer as built in blueprint event in gamemode.

AGameModeBase::GenericPlayerInitialization(AController* Controller) worked for me. Thanks!

yup. looks like its the intended one.

	/**
	 * Handles all player initialization that is shared between the travel methods
	 * (i.e. called from both PostLogin() and HandleSeamlessTravelPlayer())
	 */
	virtual void GenericPlayerInitialization(AController* C);