Changelog
Version 2.6.0 (November 16, 2024)
Added support for Unreal Engine 5.5!
Manager classes have been moved into their own category in the plugin's settings.
Added an option to toggle plugin config validation on/off.
Fixed an issue where the editor would crash on startup if the party client or party state classes were empty in the plugin's settings.
Removed the deprecated
SEARCH_PRESENCE
session query setting from matchmaking.Removed the unused
SEARCH_USER
session query setting from matchmaking.
Version 2.5.0 (September 4, 2024)
Important: This release deprecates some functions in the plugin. These functions will continue to work for now but they will be removed in future versions. Please see the deprecation messages in the editor and update your project's code and blueprints accordingly.
The plugin is now fully compatible with the EOS Integration Kit.
Added a ready up feature to party clients. Each player now has a ready state which can be toggled using the
TogglePlayerIsReady
function of theKronosPartyClient
. By default the ready state of players do not affect anything, however you can easily build systems on top of this (e.g. only enable the matchmaking button if all party players are ready).Added
GetPlayerIsReady
function toKronosPartyPlayerWidget
.Added
OnPlayerIsReadyChanged
event toKronosPartyPlayerWidget
.Added blueprint support for the native
NamedOnlineSession
structure. Named sessions are sessions that the user has joined. Use this to access all properties of the session (e.g. session state, session settings, session id, etc..). Use theGetGameSession
andGetPartySession
functions to get the session data for matches and parties respectively.Added blueprint support for the native
OnlineSessionState
enum. You can now directly access the session state of named sessions by using theGetNamedSessionState
function. This is especially useful if you want to check whether session data exists or not for a match or party.The
KronosSessionSettings
structure has been reworked to extend its functionality. Custom session settings can now be accessed through this structure directly.The
KronosUserManager
now handles cases where the user is already logged in with the Online Subsystem during initial user authentication.Added
bAuthenticationIsPassthrough
option toKronosConfig
. This can be used to allow third party programs or plugins to handle authentication instead of Kronos. If enabled, the user will not be logged in with the Online Subsystem during user authentication.Added
kronos.LeaveMatch
console command.Added
kronos.LeaveParty
console command.The party creation process has been reworked a bit to avoid a case where the "party created" message would be visible in the logs too early when the party was not fully ready yet.
The settings page of the plugin has been moved to the "Game" category.
Reorganized blueprint function categories.
All base Kronos widget classes are now marked as abstract.
Fixed an issue where logic tied to static game mode events (e.g. user authentication, automatic reservation completion, etc..) would be called for incorrect PIE worlds. This issue could only ever happen in the editor when multiple clients were running at the same time.
Fixed numerous missing const specifiers from functions across the plugin's codebase.
Fixed a very rare crash in the
ProcessLogin
function of theKronosPartyHost
.Fixed potential crashes where an invalid unique id would be converted into string form.
Fixed an issue with the support link in the "Plugins" window.
Version 2.4.0 (June 19, 2024)
Added a new
KronosPlayerGrouperComponent
to the plugin. This component automatically assigns a group index to all players based on their reservation data. Players who joined the game together (as a party) will have the same group index. Using this you can essentially tell which players were in a party before they joined the game. The component is fully replicated so clients can easily access this data as well. For more information please refer to the Player Groups section of the documentation.Added
ReservationCustomData
variable to reservations. Using this you can assign custom data to each reservation after they were registered with theKronosReservationHost
.Added
InitRegisteredReservation
event toKronosReservationHost
. Use this event to initialize custom data for the given reservation.Added
ShouldCreateReservationHost
function toKronosReservationManager
. This function can be overridden to customize whether the reservation system should be initialized for the current game mode.Added
GetReservationToRequest
function toKronosMatchmakingPolicy
(C++ only) that lets you modify the reservation that is about to be requested with a session.Added
bLogReservations
variable toKronosReservationHost
which controls whether to list all reservations in the console when a reservation is added, removed, or completed. Previously this was tied to the verbosity level of the Kronos log category.Added
DestroyReservationBeacons
function to theKronosReservationManager
andKronosStatics
in case you need to manually clean up reservation beacons.Added
GetHostReservations
function to theKronosReservationManager
andKronosStatics
.Added initial replication handling for the
KronosLobbyPawn
. This system brings two new nodes to the pawn class. See below.Added
OnInitialReplicationFinished
event toKronosLobbyPawn
.Added
HasInitialReplicationFinished
function toKronosLobbyPawn
. You can override this to set variable replication requirements. By default the pawn will wait for its player state, player name, and player id to replicate.The lobby pawn relocation system in
KronosLobbyGameState
has been completely reworked. The new solution is faster and uses a more sophisticated approach to handling player spawns.Added
LeaveGameSession
function toKronosOnlineSession
(C++ only) in case you want to manually request leaving an online match. Blueprint projects should keep using theLeaveKronosMatch
node same as before.Added an option to hide the custom placement category of Kronos from the Place Actors tab. This option is available in Project Settings -> Kronos Matchmaking.
Fixed an issue where reservation beacons would prevent net drivers from being garbage collected in some cases. This primarily happened in Lyra Game. For this, a new option was added to
ServerTravelToLevel
function that ensures reservation beacons are properly cleaned up before traveling to a new map. This option is enabled by default, and it should only be disabled in very specific cases.Fixed an issue where in some cases the game would crash when joining the lobby due to the view target having an invalid world. This primarily happened in the editor when opening the lobby with multiple clients directly.
Fixed an issue where the debug arrow component of
KronosLobbyPawn
andKronosPartyPlayerActor
would not be excluded from packaged projects.Blueprint assignable events now won't have "Event" included at the end of their names.
The variables in all Kronos classes are now properly initialized in class constructors only. Variables are no longer initialized inline in header files.
The plugin is now built in IWYU mode as per engine plugin standard.
Version 2.3.0 (April 24, 2024)
Important: This release contains minor API changes! For more information about the changes please refer to the API Upgrades documentation page. Please update your project's code and blueprints accordingly.
Added support for Unreal Engine 5.4!
The session cleanup process has been reworked. The system now cleans up the session properly in case the client fails to connect to the host. With this, a small API change is introduced. Please see below.
The
OnCleanupSession
event has been removed fromKronosOnlineSession
.Added
OnCleanupForDisconnectComplete
event toKronosOnlineSession
. This is the equivalent of the previous cleanup session event. The parent implementation of this event is what returns the player to the main menu. You can delay this implementation in case you don't want to leave immediately (e.g. show match summary first and wait for user input).Added
OnCleanupForTravelFailureComplete
event toKronosOnlineSession
. You can use this event to handle cases where the users fails to establish the initial connection with the host when connecting to an online match.Added
ModifyServerTravelURL
function toKronosOnlineSession
.Added
ModifyClientTravelURL
function toKronosOnlineSession
.The
GetInitialReplicationProps
function inKronosPartyClient
has been renamed toHasInitialReplicationFinished
to better describe the function's purpose.Exposed helper functions to blueprints that helps to determine which Online Subsystem is used by the project. For example
IsUsingNull
,IsUsingSteam
,IsUsingEOS
, etc.Improvements have been made to the plugin's C++ API. The runtime module is now implemented in a dedicated source file called
KronosModule
. This allowed us to create a globalKronos.h
file that all Kronos classes now include automatically. This way subclasses have access to all definitions and macros that are specific to the plugin without manually needing to include the Kronos header file.Fixed an issue where if the delays in
KronosConfig
were set to zero they would never finish instead of simply not having the function delayed.Fixed an issue where the
KronosLobbyPawn
arrow component would be created in non-editor builds even though it was excluded from the header file already.Fixed an issue with the plugin's C++ API where previously some important protected member functions could only be called by base Kronos classes (due to using friend classes incorrectly).
Fixed an issue where an error log related to updating sessions would be formatted incorrectly.
Updated copyright notice in plugin source files.
Version 2.2.1 (November 29, 2023)
Fixed an issue where plugin validation would cause an editor crash in some cases.
Plugin validation error messages have been slightly rephrased.
Version 2.2.0 (November 19, 2023)
Matchmaking now handles session pinging with
SteamSockets
automatically! Along with this, a complex session sorting algorithm has been implemented into the matchmaking pass. When ping data is available, the algorithm will sort sessions into ping buckets and then sort each bucket based on player count for efficient session filling.Added a new default authentication widget. The
SKronosDefaultAuthWidget
was created in Slate to avoid referencing a Blueprint asset from C++. It will only be used when no auth widget class is selected in theKronosUserManager
.Added an integrated configuration validator to the plugin which can display various error messages to the user such as missing or incorrect classes. A notification will also pop-up when an error is found. The validator runs after the editor is opened, and also after each PIE session.
Added
GetSessionPing
function toKronosStatics
.Added
GetSessionElo
function toKronosStatics
.Changed several parts of the plugin's codebase to reduce if statement nesting. This results in better exception handling and error logging. Changes primarily include party and reservation beacon creation code, as well as how the plugin accesses the Online Subsystem.
Fixed an issue where the project could not be packaged. This was caused by a Blueprint asset reference to the old default auth widget in C++.
Fixed an issue where
FindFriendSession
function was still used when reconnecting parties even though we no longer preferred using it.Fixed an issue where the
BanPlayerFromSession
function would return failure when the given user was already banned.The
Kronos
runtime module has been reworked to better segment its code.Plugin validation is now handled by the
KronosEditor
module entirely.
Version 2.1.0 (October 26, 2023)
Important: The matchmaking code no longer uses the
FindFriendSession
function of the Online Subsystem with Steam when following the party leader to a session. This function relies on presence information which fails if the user has his game presence hidden in Steam.The session invite system has been reworked to allow users to not only send but also receive and accept session invites directly in the game. This means you no longer have to rely on the platform's external UI (e.g. Steam Overlay) to handle invites. Please note that the Online Subsystem must implement the
OnSessionInviteReceived
delegate in order for this system to work! Unfortunately Steam doesn't have this implemented by default. Session invites can still be accepted through the platform's external UI.Added new config param:
CanAcceptSessionInviteFromOnlineMatches
to allow users the ability to override the default behavior of party connection. If you enable this, make sure that everything is working correctly in your game. For more information please hover over the parameter and read its description.The default authentication widget in the
KronosUserManager
is now assigned properly. You'll now be able to see the authentication state automatically without assigning a custom widget.Fixed an issue where the
UpdateKronosMatch
andUpdateKronosParty
async nodes would fail due to invalid world context object usage.Fixed an issue where the
KronosPartyState
class would not compile if the engine was built from source.Fixed the function category of the
IsOnlineFriendValid
node.
Version 2.0.2 (September 13, 2023)
Fixed an issue where the project could not be packaged due to a bunch of weird blueprint linking compile errors. The issue was related to how the plugin assigned the default authentication widget class in the
KronosUserManager
. As a temporary solution, the default auth widget will no longer be assigned from code.
Version 2.0.1 (September 11, 2023)
Fixed an issue where automatic user authentication would not start in PIE.
Fixed an issue where the
OnGameDefaultMapLoaded
event ofKronosOnlineSession
class would not be called in PIE.
Version 2.0.0 (September 7, 2023)
Important: This release contains breaking changes! For more information about the changes please refer to the API Upgrades documentation page. Please update your project's code and blueprints accordingly.
Added support for Unreal Engine 5.3!
All subsystems of the plugin has been replaced by custom online manager classes that each handle one aspect of the online service such as user identity, matchmaking, parties, and more. The benefit of this is that you can now override the functionality of these high-level systems of the plugin. It also allows for better code structuring. These online managers are automatically spawned and managed by the
KronosOnlineSession
class. You can override the manager classes through the plugin's settings.The plugin now features automatic user authentication. Authentication will be started automatically when the game default map is loaded (set in your project settings). While authentication is in progress, a widget will be displayed showing the current auth state. Once user authentication is complete, the
OnEnterGame
event of theKronosOnlineSession
will be called. This is basically the entry point to the main menu. You can display the main menu widget from here. Automatic user authentication can be disabled in the plugin's settings. Furthermore, you can also override which map to treat as the game default map from there.Added new class:
KronosUserManager
. This class handles user authentication, and implements online user related functionality such as online identity and friends. This class replaces both theKronosIdentitySubsystem
andKronosFriendsSubsystem
.Added new class:
KronosMatcmakingManager
. This class replaces theKronosMatchmakingSubsystem
. Functionality remains the same.Added new class:
KronosPartyManager
. This class replaces theKronosPartySubsystem
. Functionality remains the same.Added new class:
KronosReservationManager
. This class replaces theKronosReservationSubsystem
. Functionality remains the same.Added the ability to read the user's friends list, and invite friends directly. You no longer have to rely on the platform's external UI (e.g. Steam Overlay) to do so. Please note that accepting session invites are still only possible through the platform external UI. This will be implemented properly in the next update as well.
Added
ReadKronosFriendsList
async node to the plugin.Added
GetFriend
function toKronosStatics
.Added
GetFriendCount
function toKronosStatics
.Added
SendGameInviteToFriend
function toKronosStatics
.Added
SendPartyInviteToFriend
function toKronosStatics
.Added
KronosUserAuthWidget
to the plugin. This widget is designed to be displayed during user authentication. It has built-in events for when user auth is started/changed/completed. A default auth widget is included with the plugin. You can override this widget in theKronosUserManager
.Added
OnGameDefaultMapLoaded
toKronosOnlineSession
.Added
OnEnterGame
event toKronosOnlineSession
.Removed
LoginUser
async node from the plugin as it was no longer needed. Login is now handled during user authentication by theKronosUserManager
class.Removed
LogoutUser
async node from the plugin as it was no longer needed. Logout can be requested through theKronosUserManager
class.Changed the accessibility of all delegates in C++ to private as per engine convention. You can access these delegates through their dedicated accessor functions instead. This change does not affect Blueprints.
The
KronosNameplateComponent
has been moved from "Lobby" to "Components" folder in C++ as it is usable outside of lobbies as well. This change does not affect Blueprints.Updated plugin icon.
Updated
README.txt
in the plugin's resources folder.Note: Support for Unreal Engine 4.26 has been removed from active support. A custom build for this version can still be requested.
Legacy Versions
Changelogs for older versions of the plugin are available on the Legacy page.
Last updated