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 the KronosPartyClient. 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 to KronosPartyPlayerWidget.

  • Added OnPlayerIsReadyChanged event to KronosPartyPlayerWidget.

  • 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 the GetGameSession and GetPartySession 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 the GetNamedSessionState 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 to KronosConfig. 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 the KronosPartyHost.

  • 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 the KronosReservationHost.

  • Added InitRegisteredReservation event to KronosReservationHost. Use this event to initialize custom data for the given reservation.

  • Added ShouldCreateReservationHost function to KronosReservationManager. This function can be overridden to customize whether the reservation system should be initialized for the current game mode.

  • Added GetReservationToRequest function to KronosMatchmakingPolicy (C++ only) that lets you modify the reservation that is about to be requested with a session.

  • Added bLogReservations variable to KronosReservationHost 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 the KronosReservationManager and KronosStatics in case you need to manually clean up reservation beacons.

  • Added GetHostReservations function to the KronosReservationManager and KronosStatics.

  • Added initial replication handling for the KronosLobbyPawn. This system brings two new nodes to the pawn class. See below.

  • Added OnInitialReplicationFinished event to KronosLobbyPawn.

  • Added HasInitialReplicationFinished function to KronosLobbyPawn. 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 to KronosOnlineSession (C++ only) in case you want to manually request leaving an online match. Blueprint projects should keep using the LeaveKronosMatch 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 and KronosPartyPlayerActor 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 from KronosOnlineSession.

  • Added OnCleanupForDisconnectComplete event to KronosOnlineSession. 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 to KronosOnlineSession. 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 to KronosOnlineSession.

  • Added ModifyClientTravelURL function to KronosOnlineSession.

  • The GetInitialReplicationProps function in KronosPartyClient has been renamed to HasInitialReplicationFinished 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 global Kronos.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 the KronosUserManager.

  • 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 to KronosStatics.

  • Added GetSessionElo function to KronosStatics.

  • 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 and UpdateKronosParty 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 of KronosOnlineSession 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 the KronosOnlineSession 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 the KronosIdentitySubsystem and KronosFriendsSubsystem.

  • Added new class: KronosMatcmakingManager. This class replaces the KronosMatchmakingSubsystem. Functionality remains the same.

  • Added new class: KronosPartyManager. This class replaces the KronosPartySubsystem. Functionality remains the same.

  • Added new class: KronosReservationManager. This class replaces the KronosReservationSubsystem. 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 to KronosStatics.

  • Added GetFriendCount function to KronosStatics.

  • Added SendGameInviteToFriend function to KronosStatics.

  • Added SendPartyInviteToFriend function to KronosStatics.

  • 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 the KronosUserManager.

  • Added OnGameDefaultMapLoaded to KronosOnlineSession.

  • Added OnEnterGame event to KronosOnlineSession.

  • Removed LoginUser async node from the plugin as it was no longer needed. Login is now handled during user authentication by the KronosUserManager class.

  • Removed LogoutUser async node from the plugin as it was no longer needed. Logout can be requested through the KronosUserManager 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