# Legacy

{% hint style="warning" %}
**WARNING:** You are viewing changelogs for old versions of the plugin.
{% endhint %}

### Version 1.9.1 (August 03, 2023) <a href="#version-1.9.1" id="version-1.9.1"></a>

* Fixed an issue where party state cleanup would sometimes fail when leaving the party as a client. This caused party player actors to stay alive even after leaving the party. With this change the `PreLeaveParty` function has been renamed to `CleanupPartyState` in the `KronosPartyState` class. Please make sure to update your code if you had this function overridden in C++ before.
* Fixed an issue in `KronosOnlineSession` class where the `CanAcceptSessionInvite` function had the "Session" param as output instead of input. This caused the session to reset into an invalid state when accepting the invite. Please make sure to update your blueprint if you had this function overridden before.
* The "Session" param of `OnGameSessionInviteAccepted` and `OnPartySessionInviteAccepted` events in `KronosOnlineSession` have also been turned into constant reference.

### Version 1.9.0 (July 19, 2023) <a href="#version-1.9.0" id="version-1.9.0"></a>

* Added the ability to reconnect parties after returning to the main menu from a match! This is only the first iteration of this feature, and I expect to improve it with later releases. For a user guide, please refer to the [**Reconnect Party**](https://horizongames.gitbook.io/kronos-matchmaking/advanced/reconnect-parties) page of the documentation. Several new things have been introduced for this system, see below.
* Added `ReconnectKronosParty` async node to the plugin.
* Added `CancelReconnectKronosParty` async node to the plugin.
* Added `ClientReconnectPartyDelay` and `ClientReconnectPartyAttempts` config params to the plugin.
* Added three new properties to `KronosLastPartyInfo`. It now also stores the last party session id, player count, and (in C++ only) the session settings of the party.
* Added `bUseVoiceChatIfAvailable` setting to `KronosHostParams` and `KronosSessionSettings`. This allows you to set the `bUseLobbiesVoiceChatIfAvailable` session setting in case your Online Subsystem depends on it for VOIP integration.
* Added `LeavePartyInternal` function to `KronosPartySubsystem` (C++ only). The previous `LeaveParty` function is now only used for user requested disconnects. If you have extended the plugin from C++, and have cases where the player must leave the party due to game control flow, please use this new internal function instead.
* Added `OnKronosMatchUpdated` event to `KronosOnlineSession`.
* Added `OnKronosPartyUpdated` event to `KronosOnlineSession`.
* Added initial replication handling to `KronosLobbyHUD`. This system brings two new nodes to the HUD class. See below.
* Added `OnInitialReplicationFinished` event to `KronosLobbyHUD`.
* Added `HasInitialReplicationFinished` function to `KronosLobbyHUD`. You can override this function to set variable replication requirements for the HUD.
* Added the ability to recreate a session from previous session settings (C++ only). Set the `SessionSettingsOverride` param in the `KronosHostParams` to recreate a session from its native state. If set, all other params will be ignored in the host params. The session owner id will be updated automatically if necessary.
* Added connection lost error message (after host left the match) to the examples shipped with the plugin as it was missing. You can find it in `BP_KronosExampleLobbyPlayerController`.
* Fixed an issue with party cleanup, where party player actors would not get destroyed after the player has left the party.
* Fixed an issue with `KronosLobbyHUD` where sometimes the player connected/disconnected events wouldn't be called due to late replication of game state.
* Fixed an issue with matchmaking where using a specific session query for session owner id would not find any sessions.
* The `SEARCH_USER` query setting is no longer used by the plugin because it was causing owner id based specific session query to fail for some reason. The removal of this setting does not affect matchmaking in any way. However, I hope to debug this in the future and re-introduce it if possible in case an Online Subsystem wishes to use this.
* The `KronosNameplateComponent` now destroys the nameplate widget when the component is destroyed.
* The `KronosEditor` module has been reworked to better segment its code.&#x20;
* The `KronosEditor` module now has its own `EditorStyle` as per engine convention.
* Updated the description of `UpdateKronosSession` async nodes.
* Updated copyright notice in plugin module build files and fixed missing copyright notice in `KronosFriendsSubsystem`.
* **Please note:** For the 2.0 release I want to overhaul some aspects of the plugin that are currently problematic. Due to this, the 2.0 update may NOT be 100% backwards compatible with previous versions, and may require you to manually update some code in your project. If any breaking changes are introduced, a complete migration guide will be available for all users.

### Version 1.8.0 (May 16, 2023) <a href="#version-1.8.0" id="version-1.8.0"></a>

* Added support for Unreal Engine 5.2!
* Added the ability to spawn player actors for party members! Several new things have been introduced to allow this feature to work seamlessly, see below.
* Added a new `KronosPartyPlayerActor` class. This actor represents a single party member visually in the game world. Optionally it can also render a widget to the screen at the actor's location automatically.
* Added a new `KronosPartyPlayerStart` class that can be used to mark spawn locations for party player actors. You can find this class in the "Place Actors" tab inside the "Kronos Matchmaking" category.
* Added a custom "Kronos Matchmaking" category to the "Place Actors" tab of the engine.
* Added `PartyPlayerActorClass` param to `KronosPartyState`. If set, one actor will be spawned automatically for each party member.
* Added several console commands to the plugin to help with debugging. For the full list of console commands please refer to the Console Commands section of the documentation on the Testing & Debugging page.
* Changed the "PartyPlayerEntryBox" widget binding in the `KronosPartyWidget` to be optional instead of required.
* Updated the party cleanup process. The `KronosPartyState` actor is now getting destroyed before leaving the party.
* Updated the example content provided with the plugin to showcase the new party player actor spawning system.
* Fixed a potential issue where the `KronosNameplateComponent` initialization wouldn't abort if its owning actor was getting destroyed.
* Fixed an issue in the example content provided with the plugin where players were unable to invite players to the lobby due to the platform invite UI not appearing.
* **Please note:** Unreal Engine 4.27 version of the plugin can no longer be updated through the Marketplace due to Epic only allowing updates for the three latest engine versions. An up-to-date version for this engine release is available through the Kronos LTS program. For more information please visit the [Kronos LTS](https://horizongames.gitbook.io/kronos-matchmaking/about/kronos-lts) page of the website.

### Version 1.7.0 (April 16, 2023) <a href="#version-1.7.0" id="version-1.7.0"></a>

* The plugin now ships with a new set of example blueprints, widgets, and maps. You can find these examples in the Content Browser. Make sure that the "Show Engine Content" and "Show Plugin Content" settings are enabled.
* The plugin is now integrated with the `GameplayDebugger`. A custom gameplay debugger category has been implemented for Kronos which will draw matchmaking and session information to the screen in real-time. The gameplay debugger can be activated with the apostrophe (') key by default, or with the `EnableGDT` console command.
* Added `ClientFollowPartyAttempts` param to `KronosConfig`. This allows you to specify the amount of search attempts to make for the party leader's session when following the party into a session.
* Added `CopyRegisteredReservations` function to `KronosReservationSubsystem` and `KronosStatics`. This function is intended to be used as the host reservation before traveling to a new map in an online match. Going forward, this is the recommended way of setting the host reservation instead of `MakeReservationForGamePlayers`.
* Added `GetOwningPartyClient` function to `KronosPartyPlayerState`.
* Changed the `SETTING_USERESERVATIONS` session setting's type from `bool` to `int32` because the Steam Online Subsystem doesn't support bool queries.
* Updated the code documentation of several matchmaking and host params.
* Updated copyright notice in plugin source files.
* Fixed an issue where the editor would crash when attempting to create a party in PIE.
* Fixed an issue where a reservation was attempted to be removed with an invalid player id when toggling the debug camera in the `GameplayDebugger`.

### Version 1.6.1 (March 09, 2023) <a href="#version-1.6.1" id="version-1.6.1"></a>

* Fixed an issue where players would sometimes crash when joining a party.
* Fixed an issue where the `FollowPartyToSessionFailure` and `OnFollowPartyFailure` events weren't getting called when the session was not found.

### Version 1.6.0 (March 03, 2023) <a href="#version-1.6.0" id="version-1.6.0"></a>

* Added a new subsystem called `KronosFriendsSubsystem`. This subsystem will implement online friends interface related events and utility functions.
* Added `IsFriend` function to `KronosStatics` and `KronosFriendsSubsystem`.
* Added a new `LastPartyInfo` struct to the `KronosPartySubsystem` that contains some context information about the last party that we were a part of. This information is updated automatically when we create or join a party.
* Added `GetLastPartyInfo` function to `KronosStatics` and `KronosPartySubsystem`.
* Added `HasLastPartyInfo` function to `KronosStatics` and `KronosPartySubsystem`.
* The host reservation feature of the `KronosReservationHost` beacon is now an array instead of a single reservation. This allows us to auto register multiple reservations, which in turn makes it possible to preserve all reservations as is before transitioning from the lobby to the match (keeping the information of who joined from the same party).
* Added `GetReservations` function to `KronosReservationHost`. This can be used to retrieve all registered reservations in their current state.
* Added `SetHostReservations` function to `KronosStatics` and `KronosReservationSubsystem`.
* Added `GetPlayerControllerFromUniqueId` utility function to `KronosStatics`.
* The `GetPlayerStateFromUniqueId` function in `KronosStatics` no longer returns the pointer as constant.
* Exposed the `FindReservation` function of the `KronosReservationHost` to blueprints.
* Optimized unique id `IsValid` calls throughout the plugin's code base.
* Fixed an issue where reservation timeouts were not cleared properly resulting in pointless timeout attempts.
* Fixed an issue where the reservation's owner unique id wouldn't be cleared when the owner left.
* Fixed a potential issue where the `PreReservationOwnerRemoved` event of `KronosReservationHost` would be called multiple times while removing a reservation.
* Fixed misleading code documentation for the `LeaveKronosMatch` node regarding its completion delegate.
* Fixed missing code documentation for the `KronosIdentitySubsystem` class.
* Blueprint nodes with unique return value names now use the `ReturnDisplayName` function metadata as they should.

### Version 1.5.0 (January 29, 2023) <a href="#version-1.5.0" id="version-1.5.0"></a>

* Added an overridable `StartSearchPass` function to `KronosMatchmakingPolicy`.
* Added an overridable `GetEloSearchRangeFor` function to `KronosMatchmakingPolicy`.
* Added `PreReservationOwnerRemoved` event to `KronosReservationHost`. This can be used to notify reservation members that the owner is leaving (e.g. leave and reconnect to the party), or to assign a new owner to the reservation.
* Added `GetPlayerStateFromUniqueId` utility function to `KronosStatics`.
* Added `ToString` support for the `FUniqueNetIdRepl` type in blueprints.
* Added `IsValid` utility function for the `FUniqueNetIdRepl` type in blueprints.
* Added `IsValid` utility function for several Kronos types in blueprints such as `FKronosMatchmakingParams`, `FKronosHostParams`, `FKronosReservation`, and more.
* The plugin's C++ code is now more tightly integrated with blueprints. Advanced features such as native make/break functions, script methods, and blueprint autocasts have been implemented where needed.
* Fixed an issue where matchmaking would use an incorrect `EloRange` for subsequent matchmaking passes.
* Fixed an issue where the `PreRegisterReservation` function's base C++ implementation wasn't getting called when overriding it in blueprints. If you have overridden this function in blueprints, then please delete the function and re-override it.

### Version 1.4.0 (December 24, 2022) <a href="#version-1.4.0" id="version-1.4.0"></a>

* Added `GetPlayerElo` and `GetPlayerData` functions to `KronosPartyClient`.
* Added `IsLocalPlayer` function to `KronosPartyClient` and `KronosPartyPlayerState`.
* Added an option for `KronosLobbyGameMode` to only start lobby countdown when all players are ready.
* Added comparison operator support (equal, not equal) for the `FUniqueNetIdRepl` type in blueprints.
* **Additional note:** The [Kronos Sample](https://horizongames.gitbook.io/kronos-matchmaking/examples/sample-project) project has also been updated to include new features of the plugin. If you already have it downloaded, then please make sure to update it before opening the project.

### Version 1.3.1 (December 17, 2022) <a href="#version-1.3.1" id="version-1.3.1"></a>

* Fixed an issue where matchmaking would continue after an unsuccessful matchmaking pass even though it was not supposed to in the given matchmaking mode (e.g. in `JoinOnly` mode).

### Version 1.3.0 (December 13, 2022) <a href="#version-1.3.0" id="version-1.3.0"></a>

* Added an overridable `PreRegisterReservation` function to `KronosReservationHost`.
* Added `OnReservationRegistered` and `OnReservationRemoved` events to `KronosReservationHost`.
* Added `OnInitialized` event to `KronosReservationHost` and `KronosPartyHost`.
* Exposed the following functions to blueprints in `KronosReservationHost`: `GetMaxNumReservations`, `GetNumReservations`, `GetNumConsumedReservations`, and `DumpReservations`.
* Added `CompleteReservationById` function to `KronosStatics`.
* Added `GetPlayerUniqueId` function to `KronosStatics`. This is a helper function that gets the player's unique id from their player state.
* Added `GetReservationHost` function to `KronosStatics`.
* Added `GetPlayerElo` function to `KronosPartyPlayerWidget`.
* Exposed properties of `KronosReservation` and `KronosReservationMember` to blueprints.
* The `UKronosReservationSubsystem::PlayerHasReservation` function has been turned into a constant function.

### Version 1.2.0 (December 6, 2022) <a href="#version-1.2.0" id="version-1.2.0"></a>

* Added support for Unreal Engine 5.1!
* Added a new component called `KronosNameplateComponent` which can be used to render widgets above players heads.
* Added a new `ServerTravelToLevel` function to `KronosStatics`. Blueprint projects can use this instead of relying on the `ExecuteConsoleCommand` node to initiate server travels.
* Added `OnPartyPlayerEloChanged` event to `KronosPartyPlayerWidget`.
* Removed `bAutoRemoveWidget` from `KronosLobbyPlayerWidget` as it is no longer needed.
* **Please note:** Unreal Engine 4.26 version of the plugin is no longer getting updates due to Epic only allowing updates for the three latest engine versions on the Marketplace. If you need an up-to-date version for this engine release, please contact me privately.

### Version 1.1.0 (November 6, 2022) <a href="#version-1.1.0" id="version-1.1.0"></a>

* Improved reservation registering. Now pending duplicate reservations are cleaned up instead of returning a `DuplicateReservation` error.
* Fixed a potential issue with the session cleanup process, where if the session was being destroyed already the cleanup would just complete immediately.
* Added three new blueprint nodes to the `KronosLobbyGameMode` class: `GetLobbyState`, `GetLobbyTimer`, `GetNumPlayersRequired`.
* Removed the *SkipReservation* param from the `JoinKronosParty` node as it was irrelevant. Party sessions don't make use of reservations.
* Changed the default server name to "\<PlayerName>'s Session". This can be overridden via the `UKronosMatchmakingPolicy::GetDefaultServerName` function.
* `FNames` in function arguments are no longer sent by reference.
* The `AKronosReservationHost::DumpReservations` function has been turned into a constant function.

### Version 1.0.0 (November 1, 2022) <a href="#version-1.0.0" id="version-1.0.0"></a>

Initial release.
