Configuration

Installing The Plugin

Kronos is an engine plugin which means it can be installed through the Unreal Marketplace.

  1. Open the Epic Games Launcher, go to the Marketplace tab and search for "Kronos Matchmaking".

  2. Once you are on the plugin's page, press the Install To Engine button.

  3. Select the desired engine version and install the plugin.

Not using the latest version of Unreal Engine?

If you are not using the latest version of Unreal please make sure that the Marketplace has the most up-to-date version of the plugin available! The Marketplace only allows updating plugins for the three latest Unreal Engine versions.

  • Up to date plugin versions on the Marketplace for UE: 5.2, 5.3, 5.4

  • Support for older UE versions are available through: Kronos LTS Program

If you are installing a Kronos LTS version, please refer to the HowToInstall.txt file located in the Google Drive folder of the LTS versions.

Enabling the Plugin

Once the plugin is installed, go to Edit -> Plugins and under the "Online" category you should be able to see "Kronos Matchmaking". Please make sure that the plugin is enabled!

If you plan on using Kronos from C++ don't forget to list it in your build dependencies. The build file is located in the "Source" folder of your project.

// Include Kronos as a dependency.
PrivateDependencyModuleNames.Add("Kronos");

// Additional includes you may need when extending certain Kronos classes.
PrivateDependencyModuleNames.AddRange(new string[] { "OnlineSubsystem", "OnlineSubsystemUtils", "Lobby", "UMG" });

// Unreal Engine 5 users may also need to include this module.
PrivateDependencyModuleNames.Add("CoreOnline");

Project Configuration

1. Configuring the Online Subsystem

Kronos is built on the Online Subsystem (OSS) framework of Unreal Engine. Platforms such as Steam and EOS have their own Online Subsystem implementation in the engine by default. You just need to configure which OSS should be loaded by the engine. Kronos will do all matchmaking related features through the active OSS, so if you have it configured as Steam then sessions (online rooms) will be created and advertised on the Steam servers.

The Null Online Subsystem is an IP based subsystem that is meant to be used for testing purposes. It is only capable of handling sessions on the local network (LAN). In general you will only use this while testing in the editor. To configure this Online Subsystem, add the following settings to your project's DefaultEngine.ini file:

; The Online Subsystem to be used by the engine.
[OnlineSubsystem]
DefaultPlatformService=Null

; Specific configuration of the Null Online Subsystem.
[OnlineSubsystemNull]
bEnabled=True
bAutoLoginAtStartup=True

; The net drivers to be used by the game.
; GameNetDriver: Used by regular game connections (server-client).
; BeaconNetDriver: Used by the party and reservation systems of Kronos.
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

; The net drivers to be used by the editor.
; Only ever used during PIE so just use the IpNetDriver.
[/Script/UnrealEd.EditorEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

; Specific configuration of the Ip Net Driver.
[/Script/OnlineSubsystemUtils.IpNetDriver]
NetConnectionClassName="/Script/OnlineSubsystemUtils.IpConnection"
ConnectionTimeout=60.0
InitialConnectTimeout=60.0

After configuring your Online Subsystem of choice, please go to Edit -> Plugins and make sure that the plugin for your Online Subsystem is enabled as well.

IMPORTANT: While developing and testing the game inside the editor, you should always revert back to using the Null Online Subsystem! Please refer to the Testing & Debugging page for more information.

Note that you can configure multiple Online Subsystems and switch between them via the DefaultPlatformService config param. This makes development iteration faster. However, do not configure net drivers twice! In most cases the engine will automatically use the fallback net driver when the primary net driver fails to initialize (e.g. due to using a net driver that is for a different Online Subsystem).

2. Configuring Online Beacons

Kronos uses Online Beacons to manage parties and game reservations. OnlineBeacons are special actors in Unreal Engine that provide a "lightweight" way to contact a server without committing to a normal game connection. To configure the beacons used by the plugin, add the following settings to your project's DefaultEngine.ini file:

[/Script/Kronos.KronosPartyListener]
ListenPort=7787

[/Script/Kronos.KronosPartyClient]
BeaconConnectionInitialTimeout=60.0
BeaconConnectionTimeout=25.0

[/Script/Kronos.KronosReservationListener]
ListenPort=7788

[/Script/Kronos.KronosReservationClient]
BeaconConnectionInitialTimeout=60.0
BeaconConnectionTimeout=25.0

3. Configuring the Plugin

Kronos has its own configuration page in Edit -> Project Settings -> Kronos Matchmaking where you can customize most features of the plugin. You can override a lot of things here, but for now please configure the following params based on your Online Subsystem of choice:

  • Find Friend Session Supported: Whether the FindFriendSession function is supported by the online subsystem of choice. Steam supports this, EOS does not.

  • Find Session By Id Supported: Whether the FindSessionById function is supported by the online subsystem of choice. EOS supports this, Steam does not.

Overriding the Online Session

The OnlineSession class in Unreal Engine is a lesser known manager type class that is part of the GameInstance and responsible for implementing and handling online service related events and functions. This class is the core of the Kronos Matchmaking plugin.

At this time the OnlineSession class in Unreal Engine can only be overridden from C++ which means Blueprint projects must use the KronosGameInstance class. This is basically a "dummy" class, as its only purpose is to override the online session for the project. Please go to Edit -> Project Settings -> Maps & Modes and set the GameInstance class to KronosGameInstance. Of course if you already have your own game instance blueprint, you can just set its parent class to KronosGameInstance. That will work as well.


Configuring Shipping Builds

Important information when you are preparing the final builds of your game.

NOTE: Information here are only relevant when packaging the project in Shipping build configuration.

Using Steam In Shipping Builds

While using the Development or DebugGame configurations, the Steam Online Subsystem automatically creates a "steam_appid.txt" somewhere inside the game's folder. This ensures that Steam can initialize correctly. However, this is not the case in Shipping configuration! If you are not launching the game through Steam (using your unique Steam App Id) the Steam API will fail to initialize. To fix this:

  • If you have your own unique App Id on Steam: Change the bRelaunchInSteam config param to True in your DefaultEngine.ini. This will ensure that even if you start the game's exe file directly, it will be closed and relaunched through Steam instead.

  • If you do NOT have your own unique App Id on Steam: After packaging, create a "steam_appid.txt" file in "<ProjectName>/Binaries/Win64/" folder of the game. The txt file should contain nothing but the App Id you wish to use, in this case the numbers: 480

Configuration Files Are Cached

When packaging your project in Shipping configuration, the engine will save the configuration files to an external location outside of the game's folder. This means that if you made any changes to a config file before packaging, you may have to manually update the config files in the external location as well!

On Windows, configuration files are saved to: "C:\Users\<UserName>\AppData\Local\<ProjectName>"

Last updated