Skip to content

Multiplayer

The Multiplayer feature provides a high-level managed multiplayer workflow built on Steam lobbies, Steam networking, and Unreal Engine multiplayer.

It is designed for projects that want the plugin to handle the connection flow between players instead of building that flow manually through the lower-level Lobbies API.

The Multiplayer system can create and discover games, connect clients to a Steam host, manage the underlying lobby and network connection, handle invites, travel between maps, and expose multiplayer lifecycle events through a single API.


When to Use Multiplayer

Use the Multiplayer feature when you want PloxTools to manage the main Steam multiplayer flow for you:

  • Host a game
  • Find available games
  • Join a game
  • Invite Steam friends
  • Leave a game
  • Travel the hosted game to another map
  • Track connected players and connection state
  • React to disconnects and connection failures

If your project only needs Steam lobby functionality and you want to implement the actual networking/session flow yourself, use the lower-level Lobbies feature instead.


How It Works

A managed Steam game combines several systems:

  1. A Steam Lobby is used for discovery, membership, invites, and game metadata.
  2. The host starts an Unreal Engine listen server using the plugin's Steam networking layer.
  3. Clients join the Steam Lobby and connect to the host through Steam networking.
  4. The plugin keeps track of the current managed game, host, map, multiplayer version, player limit, and local role.
  5. When the host travels to another map, the managed lobby and multiplayer session are preserved.

The current game can be inspected through FSteamCurrentGame, and the current high-level state is represented by ESteamMultiplayerState.


Basic Hosting Workflow

A typical host flow is:

  1. Call Host Steam Game.
  2. Select the map to host.
  3. Set the maximum player count and lobby type.
  4. Optionally provide custom lobby data. The plugin automatically uses the Multiplayer Version configured in Project Settings.
  5. On success, the plugin has created the Steam Lobby and started the managed listen server.
  6. Other players can now discover, join, or be invited to the game.

The host can later call Travel Steam Game to move the active multiplayer game to another map while preserving the managed Steam session.


Basic Join Workflow

A typical client flow is:

  1. Call Find Steam Games.
  2. Receive an array of FSteamGameSearchResult.
  3. Choose a result and use its Lobby ID with Join Steam Game.
  4. The plugin joins the Steam Lobby and connects the client to the host.
  5. When the connection is complete, the managed multiplayer state becomes connected.

Games can also be joined through Steam invitations and Steam's Join Game flow.


Multiplayer Version

Each managed game uses one project-defined Multiplayer Version string, configured at Edit → Project Settings → Plugins → PloxTools: Steam Integration → Multiplayer → Connection → Multiplayer Version. The default value is 1.

The plugin automatically reads this setting when hosting a game, starting a game from an existing lobby, finding games, joining games, and automatically connecting existing lobby members. You do not pass Multiplayer Version into Blueprint nodes.

The host advertises its configured version in Steam Lobby metadata. Clients search for and connect to compatible managed games using their own configured version. If the versions do not match, the plugin prevents that connection through its managed multiplayer flow.

This allows your project to prevent incompatible game versions from connecting to each other.

For example, you can use values such as:

  • 1
  • 1.4
  • Release_1
  • Protocol_3

The exact format is up to your project. What matters is that compatible clients and hosts use the same value. Change it when an update introduces incompatible network or gameplay changes; it is independent of Unreal Engine Project Version.


Join in Progress

Host Steam Game creates a joinable managed lobby so other players can discover and join the hosted game.

If your project uses a custom pre-game lobby through the lower-level Lobbies feature, Start Steam Game From Current Lobby exposes Allow Join In Progress. This controls whether the existing lobby remains joinable after the managed game starts.

The resulting join-in-progress state is advertised with the managed game and is available through the current game and search result data.


Custom Lobby Data and Search Filters

Host Steam Game can publish additional custom lobby key-value data.

Find Steam Games can then filter available games using FSteamLobbySearchFilter.

This can be used for project-specific matchmaking criteria such as:

  • Game mode
  • Difficulty
  • Region preference
  • Ruleset
  • Custom version identifiers

The Multiplayer system also writes its own managed lobby metadata. Custom data should be used for your own game-specific values rather than replacing the metadata managed by the plugin.


Starting From an Existing Lobby

If your project already created or joined a Steam Lobby through the lower-level Lobbies feature, the host can use Start Steam Game From Current Lobby.

This starts the managed Steam listen server using the current lobby instead of creating a new one. Players who are already members of that lobby when the host starts the match are automatically connected to the managed game; they do not need to call Join Steam Game manually. Connection still depends on normal Steam networking and Multiplayer Version compatibility checks.

The Allow Join In Progress parameter controls whether additional players can join the lobby after the match starts. It does not prevent existing lobby members from automatically connecting when the game is started.

This is useful when your game has a custom pre-game lobby flow but still wants the Multiplayer feature to handle the actual Steam network connection and Unreal multiplayer session.


Invites

The managed Multiplayer invite nodes let players invite Steam friends to an active connected game in either of two ways:

  • Invite Player To Steam Game sends an invitation to a specific Steam User ID.
  • Open Steam Invite Dialog For Current Game lets the local player choose friends using Steam Overlay.

Both use the current managed Steam Lobby automatically and require Allow Join In Progress. When an invited player accepts a Steam invitation, Subscribe To Steam Game Invitation Accepted provides the target Lobby ID. For an active managed match, the receiving game must call Join Steam Game with that ID; acceptance alone does not create the Unreal network connection.

For a pre-game lobby, use the lower-level Lobbies invite functions and Join Steam Lobby instead. Existing lobby members automatically attempt to connect when the owner starts the match with Start Steam Game From Current Lobby.

See Steam Invitations and Join Requests for all six invite functions, three join/invitation events, and complete instructions for both workflows.


Multiplayer State

The feature exposes several synchronous state checks:

  • Whether the local world is hosting
  • Whether it is connected to a managed game
  • Whether a game search is currently running
  • Whether the game is traveling
  • The current ESteamMultiplayerState
  • The current FSteamCurrentGame

The local role inside an active managed game is represented by ESteamMultiplayerRole.


Multiplayer Events

Persistent subscriptions are available for important lifecycle events, including:

  • Player joined
  • Player left
  • Game invitation received
  • Game invitation accepted
  • Game travel started
  • Game travel completed
  • Game closed
  • Game disconnected
  • Host disconnected
  • Connection failed

Subscriptions return FSteamMultiplayerListenerHandle and should be unsubscribed when they are no longer needed.

Failures use ESteamMultiplayerError together with a readable error message.


Rich Presence

The managed Multiplayer system can automatically publish multiplayer information through Steam Rich Presence.

When Automatically Update Multiplayer Rich Presence is enabled in the plugin settings, the plugin updates information such as:

  • Current map
  • Player count
  • Steam player group

The managed multiplayer connect string used by Steam's Join Game flow is handled automatically.

For manual presence functionality, see Rich Presence.


Voice Chat

Voice Chat is designed to work alongside the managed Multiplayer system.

This includes regular voice communication as well as proximity-based voice workflows that associate Steam users with actors in the game world.

Voice Chat remains a separate feature with its own API, but the managed Multiplayer system provides the player/session context used by multiplayer voice workflows.


Important Notes

  • Steam must be initialized before using the Multiplayer feature.
  • All participating players must use the same Steam App ID.
  • Multiplayer compatibility is controlled by the project-defined Multiplayer Version.
  • The managed Multiplayer feature uses Steam Lobbies internally but is separate from the lower-level Lobbies API.
  • Only the host can travel the active managed game to another map.
  • Persistent multiplayer event subscriptions should be unsubscribed when no longer needed.
  • Final multiplayer behavior should be tested with packaged builds and real Steam accounts before release.

For testing recommendations, see Testing Steam Functionality.