Skip to content

Steam Invitations and Join Requests

This guide explains how to invite Steam friends, receive and accept invitations, and connect to the correct game or lobby using PloxTools: Steam Integration.

There are two main workflows:

  • Managed Multiplayer: the plugin creates or manages the Steam lobby and the Unreal Engine network connection. Use this when you host with Host Steam Game or start a match with Start Steam Game From Current Lobby.
  • Lobbies: you create a Steam lobby for a waiting room, party, ready check, or character selection. Joining that lobby does not connect a player to an Unreal listen server. You can start the actual match later.

The plugin also provides lower-level Friends and Overlay functions for projects with their own connection protocol.

Important

Invitation sent, invitation received, invitation accepted, and player connected are different stages. An invitation callback does not mean that Unreal networking has connected successfully.


Which Invitation Function Should I Use?

Goal Blueprint node What it uses
Invite one Steam user into an active managed game Invite Player To Steam Game The current managed Steam Lobby ID (resolved automatically)
Let the player choose friends to invite into an active managed game Open Steam Invite Dialog For Current Game Steam Overlay and the current managed Lobby ID
Invite one Steam user into a specific pre-game lobby Invite Friend To Steam Lobby A Lobby ID that you provide
Open Steam's friend-selection dialog for a specific lobby Open Steam Invite Dialog To Lobby Steam Overlay and a Lobby ID that you provide
Send a direct invite using your own connection format Invite Steam Friend To Game A Connect String that you provide
Open Steam's invite dialog using your own connection format Open Steam Invite Dialog Connect String Steam Overlay and a Connect String that you provide

Which one is easiest? For the built-in Multiplayer feature, use the first two nodes. For a waiting room that has not started a match, use the Lobby nodes. Use the custom connect-string nodes only when your project implements the corresponding join logic.

The two managed Multiplayer invite nodes require an active connected managed game, valid lobby membership, and permission to join in progress. They are available to both the host and connected players, not only the host. Open Steam Invite Dialog For Current Game additionally requires an enabled Steam Overlay.

The bool result of a direct invite reports whether Steam accepted the send request, not whether the recipient received, accepted, or completed the join. A successful return from the managed invite-dialog node means the dialog was requested; it does not report what the invited friend does next. The lower-level Overlay invite-dialog nodes do not return a success value.


Invite a Friend to an Active Multiplayer Game

On the player sending the invitation:

  1. Start a game with Host Steam Game, or join an active game with Join Steam Game. Wait until the managed game is connected.
  2. If you know the friend's FSteamUserID, call Invite Player To Steam Game. Alternatively, call Open Steam Invite Dialog For Current Game and let Steam display the friend selector.
  3. The plugin uses the current managed Lobby ID; you do not need to pass it to these nodes.

On the invited player's game:

  1. Register Subscribe To Steam Game Invitation Accepted in a persistent object (for example, the GameInstance) once Steam is initialized. Save the returned FSteamMultiplayerListenerHandle.
  2. When the player accepts the invitation in Steam, the On Accepted callback supplies a Lobby ID and a From User when available.
  3. If this is an invitation to a managed game, call Join Steam Game with that Lobby ID. The plugin validates the managed session and configured Multiplayer Version, joins the Steam lobby as needed, and connects through Steam networking.
  4. Handle Join Steam Game → On Success and On Failure. On the host, Subscribe To Steam Player Joined reports when the remote player completes gameplay login.
  5. Call Unsubscribe From Steam Game Invitation Accepted with the saved handle when you no longer need the listener.

Note

Subscribe To Steam Game Invitation Accepted reports Steam's lobby-based join requests, including ones for ordinary pre-game lobbies. Use Join Steam Game only when the target is a managed Multiplayer game. For a custom pre-game lobby, use Join Steam Lobby instead (see below).

What if the invited game is not running?

For managed lobby invitations and managed Steam Join Game requests, the Multiplayer subsystem recognizes Steam's launch arguments, including +connect_lobby <LobbyID> and its managed -PloxToolsSteamLobby=<LobbyID> format. It keeps the pending join request until an Invitation Accepted listener has been registered. Your game must still subscribe and call Join Steam Game; the callback is not an automatic gameplay connection.

Do not expect Invitation Received to replay invitations delivered before the game started. That event reports live Steam invite notifications, not a persistent inbox.


Invite Friends to a Pre-Game Lobby

Use this workflow when your game has a lobby screen before the actual Unreal multiplayer match begins.

Host / lobby owner:

  1. Call Create Steam Lobby and keep the Lobby ID returned through On Success.
  2. Call Invite Friend To Steam Lobby with that Lobby ID and the friend's Steam User ID. Alternatively, use Open Steam Invite Dialog To Lobby with the same Lobby ID.
  3. Wait for friends to enter the lobby. You can use Subscribe To Steam Lobby Member Joined to update the player list or ready-state UI.
  4. When everyone is ready, the lobby owner calls Start Steam Game From Current Lobby and selects the map and Allow Join In Progress setting.

Invited player:

  1. If the game is already running, subscribe to Subscribe To Steam Join Requested in the Overlay API. Alternatively, subscribe to Steam Game Invitation Accepted to handle lobby-based accept requests, including supported Steam launch requests when the game was closed.
  2. When the player accepts the Steam invitation, read the Lobby ID from the request or accepted-invitation callback.
  3. Call Join Steam Lobby with that Lobby ID and handle its success or failure. The player is now in the pre-game lobby, not yet connected to an Unreal listen server.
  4. Stay in the lobby while the owner prepares the match.

When Start Steam Game From Current Lobby starts the managed match, existing lobby members at that moment automatically attempt to join the game. They do not need to call Join Steam Game in response to the host pressing Start. Automatic joining still requires compatible Multiplayer Version settings and successful networking. It is a separate mechanism from accepting an invitation.

Allow Join In Progress controls whether additional players can join after the match starts. It does not block the initial automatic connection attempt for members already present when the match was launched.

Warning

Do not automatically call both Join Steam Lobby and Join Steam Game for the same invite. Choose the flow based on whether the destination is a pre-game lobby or an active managed match.


Understanding Invitation Events

Event When it fires Data Does it connect?
Subscribe To Steam Game Invitation Received Steam delivers a lobby invite while the game is running From User, Lobby ID No. You can show your own invitation notification.
Subscribe To Steam Game Invitation Accepted The user accepts a Steam lobby invitation or chooses a supported Steam Join Game action; managed launch requests can also reach this callback From User, Lobby ID No. Route the Lobby ID to Join Steam Game or Join Steam Lobby as appropriate.
Subscribe To Steam Join Requested Steam delivers an Overlay-layer lobby or Rich Presence join request FSteamJoinRequest No. Your game decides how to handle it.

FSteamJoinRequest has three fields:

  • FromUser: the Steam user associated with the request, when available.
  • LobbyID: the target Lobby ID for lobby-based requests; invalid for a connect-string-only request.
  • ConnectString: a Rich Presence or custom connection string, when Steam provides one; empty for a lobby-only request.

The Multiplayer and Overlay subsystems can report the same Steam lobby join request through their respective subscriptions. If you subscribe to both, ensure only one handler initiates the join. Duplicate calls can cause an AlreadyInGame failure or interrupt your intended flow.

A Steam Lobby Member Joined event means someone entered the Steam lobby; it is different from Steam Player Joined, which is fired by the managed host after Unreal gameplay login.


Custom Connect Strings (Friends and Overlay)

For a custom networking flow, the plugin also exposes:

  • Invite Steam Friend To Game (UserID, ConnectString) — sends a direct Steam invitation without opening the Overlay dialog.
  • Open Steam Invite Dialog Connect String (ConnectString) — opens Steam's invite UI using your string.
  • Subscribe To Steam Join Requested — receives the request with its ConnectString when Steam delivers a Rich Presence join request to the running game.

Your project defines how to interpret that string and how to connect. These low-level functions do not start a listen server, create a PloxTools managed match, or turn arbitrary strings into Join Steam Game requests. To handle launches while your game is closed, your own custom protocol may also need startup command-line handling.

For managed Multiplayer, do not construct your own connect string: the plugin manages its connect Rich Presence key and join format automatically. See Rich Presence.


Common Questions and Troubleshooting

I got Invitation Accepted, but the other player is not in my game. Why?

Invitation Accepted reports the player's decision to join. Check that your receiver actually called Join Steam Game (for a managed match), then handle On Success / On Failure. Steam lobby membership alone is not proof of Unreal gameplay connectivity.

Why does Invite Player To Steam Game return false?

Check that Steam is initialized, the target Steam User ID is valid, the local player is connected to a managed game and remains in its current Steam Lobby, and Allow Join In Progress is enabled. The Steam matchmaking interface must also be available.

Why won't the invite dialog open?

For Open Steam Invite Dialog For Current Game, the managed game must be connected and joinable, and Steam Overlay must be enabled. Test Overlay integration in a packaged build launched through Steam.

Can I invite players before the match starts?

Yes. Create a Steam lobby using the Lobbies feature and invite friends with Invite Friend To Steam Lobby or Open Steam Invite Dialog To Lobby. Once they have joined, the lobby owner can start the managed match using Start Steam Game From Current Lobby.

Does the plugin automatically join every accepted invitation?

No. In the managed invitation flow, it provides Invitation Accepted with the target Lobby ID. Your game calls Join Steam Game. The separate automatic join from an existing lobby happens when the lobby owner starts a match for players who were already in that lobby.

Where is Multiplayer Version configured?

At Edit → Project Settings → Plugins → PloxTools: Steam Integration → Multiplayer → Connection → Multiplayer Version (default: 1). Managed Host, Start, Find, Join, and the existing-lobby auto-join flow use that one setting; it is no longer passed to Blueprint nodes.

How should I manage event listeners?

Subscribe after Steam initialization, store each listener handle, and use its corresponding Unsubscribe node when that object or flow is no longer active. Use a persistent object for accepting invitations so the handler remains available across menu changes.