Pragma Engine 0.0.99
February 2024
What’s New? #
New Presence service #
The new Presence service allows developers to expose player statuses, including whether they are online or offline, and their current in-game activity. Using Presence, developers can integrate social features such as in-game chat with online friends, seamless party formation, and interactions based on player activity, making it easier for friends to connect, coordinate, and play together.
Revamped Player Data service #
To further provide developers with an expressive toolkit for designing backend player data features, we’ve released a new Player Data service. The old player data system is still available and has been renamed to Inventory, so any mention of Player Data in our documentation now refers to the new Player Data service.
This new service allows you to define the data modeling, logic, and API endpoints behind a player data feature yourself instead of fitting a prescriptive player data ecosystem. The service also generates all of your player data code into the SDK for easy game client use. To learn more about this service and how you can use it to define all kinds of player data features, see our new Player Data documentation.
Contents #
Summaries | Summarized release notes.
Full Notes | Full notes including descriptions and additional details.
Summaries #
Features #
- [
Multiplayer ] New game server and party metrics. | full note - [
Multiplayer ] New Multiplayer metrics dashboard. | full note - [
Multiplayer ] Added ability to get a set of Partner client tokens when allocating new game servers. | full note - [
Multiplayer ] Multiplay Fleet Plugin allocation payload includes generated Partner client tokens. | full note - [
Multiplayer ] Optional automatic party expiration. | full note - [
Friends ] New Presence service for managing statuses. | full note - [
Accounts ] Added new Partner endpoint for updating display name. | full note - [
Accounts ] Data Rights Social Plugin now available. | full note - [
Accounts ] Social accounts now track and store last display name update. | full note - [
Inventory ] Added a newextdata message in limited grants for instanced item grants. | full note - [
Player Data ] A new Player Data service is now available! The previous Player Data system has been renamed to Inventory. | full note
Deprecations #
- [
Multiplayer ] platform, sdk | The Match Capacity service has been deprecated in favor of the Pragma Fleet service. The Match Capacity service will be completely removed in version 0.0.101. | full note
Integrations #
- [
Multiplayer ] sdk | In Unity, replace references to the Game Loop API’sOnPartyDataChangedwithOnPartyChanged. | full note - [
Multiplayer ] platform | Update implementation of the Game Instance Host Plugin’sfindHostForGameInstancefunction to use the newclientTokenFunctionas a second parameter. | full note - [
Multiplayer ] platform | Update implementation of theFleetPlugin.addfunction to utilize the modified second parameter. | full note
- [
Friends ] platform | Include the newpresenceExt.proto filein your source control. | full note
- [
Friends ] sdk | In Unreal, if changing data passed from Pragma Engine viaFPragmaFriendApievents, adjust your process to account for the updatedconstvalues. | full note - [
Friends ] sdk | In Unreal, remove duplicatedincludestatements inPragmaFriendApi.handPragmaPlayerDataService.h. | full note - [
Friends ] sdk | In Unreal, change references toFPragma_Friend_FriendandFPragma_Friend_FriendOverviewto instead referenceFPragmaFriendandFPragmaFriendOverview, respectively. | full note - [
Friends ] platform | Update references toAccountRpc.GameIdentityandAccountRpc.IdProviderAccountto instead referenceAccountCommon.GameIdentityandAccountCommon.IdProviderAccount.| full note - [
Accounts ,Portal ] other | Update the Identity Provider Portal redirect URIs. | full note - [
Accounts ] platform | ChangeUpdateDisplayNamefield names. | full note - [
Inventory ] sdk | Update usages ofUpdateItemV4andUpdateItemsV0and remove implementations of theItemUpdateV2wrapper. | full note - [
Player Data ] platform | Update specific5-extpom files to use the new Player Data service. | full note - [
Infra & Tooling ] config | Remove anysdkCoreEnabledconfig values from yourGameGatewayConfigderivatives. | full note - [
Infra & Tooling ] platform | Update the Kotlin plugin in IntelliJ. | full note - [
Infra & Tooling ] sdk | In Unity, replace uses ofISessionandPragmaSessionwithIConnectionandConnection. | full note - [
Portal ] portal | Replace any uses ofpragma.store.get('$$authData')withpragma.auth.getAuthData(). | full note
Bugs and Fixes #
- Previously, if a player left their party while in a game instance, when the game ended, the
returnFromGameInstanceflow would not be triggered due to the game instance having a stale reference to their party. As of 0.0.99, when a player with an existing game instance ID in their session creates/joins a new party, the system will automatically update that game instance with the new party ID. - Improved performance for
getPlayerIdentitiesto perform a single batched SQL query for all player IDs. - Updated the Steam API domain in the Steam identity provider to use the Steam Partner API instead of the public API to prevent rate limiting of API requests.
Docs #
- [
New Concepts ] Added new Player Data concepts pages with the release of the new Player Data service. - [
Updated Concepts ] The old Player Data concepts pages have been renamed to Inventory, and any mention of the old player data system has been renamed to inventory. - [
Updated Concepts ] Added information on display name update timestamps to Account Plugin page. - [
Updated Concepts ] Added section on the Data Rights Social Plugin to the Privacy Rights page.
Full Notes #
Features #
[Multiplayer ] New game server and party metrics.
#
Description: Pragma Engine now provides two new metrics that you can use to monitor game servers and parties in your system:
game.instance.serverCount- game servers Pragma Engine has allocated using the Fleet or Match Capacity services.party.count- number of currently active parties.
[Multiplayer ] New Multiplayer metrics dashboard.
#
Description: We’ve built a Multiplayer metrics dashboard that is included in the Grafana tool provided with Pragma Engine. The new dashboard contains the following graphs:
- Party Count
- Game Instance Count
- Players in Matchmaking Count
- Game Server Count
Grafana updates are managed separately from Pragma Engine releases. Contact Pragma to have your Grafana dashboards updated.
[Multiplayer ] Added ability to get a set of Partner client tokens when allocating new game servers.
#
Description: Workflows that involve allocating new game servers, either via the Fleet service’s FleetPlugin.add method or the Game Instance service’s GameInstanceHostPlugin.findHostForGameInstance method can now take advantage of the new GameServerAllocation and PartnerClientTokens objects with adjusted function parameters to easily get a set of Partner client tokens the game server can use to authenticate to Pragma Engine.
Details:
- The new
PartnerClientTokensclass contains data for partner client tokens that the game server should use when authenticating to Pragma Engine:gameTokensocialToken
- The
GameServerAllocationclass maps game servers with thePartnerClientTokensit should use when authenticating to Pragma Engine:serverIdpragmaTokens
- The
FleetPlugin.add’s second parameter,allocations, is now a list ofGameServerAllocationobjects, which contain server IDs and a set ofPartnerClientTokensfor each allocated server:- Before:
add( serverPool: ServerPool, allocations: List<UUID>)- After:
add( serverPool: ServerPool, allocations: List<GameServerAllocation>) - The
GameInstanceHostPlugin.findHostForGameInstancefunction has a newly addedclientTokenFunctionparameter which can be invoked to generatePartnerClientTokenobjects. When allocating new servers in this plugin, use this function to generate connection tokens for the new servers:- Before:
findHostForGameInstance( gameInstance: GameInstance.GameInstance ): ExtHostRequest?- After:
findHostForGameInstance( gameInstance: GameInstance.GameInstance, clientTokenFunction: () -> PartnerClientTokens ): ExtHostRequest?
[Multiplayer ] Multiplay Fleet Plugin allocation payload includes generated Partner client tokens.
#
Description: The Pragma Engine MultiplayFleetPlugin.add method (used when allocating servers that run on Unity’s Multiplay hosting service) takes advantage of the new GameServerAllocation parameter to include a gameToken and socialToken in the allocation payload. Users of this plugin should adjust their server connection code to utilize these tokens.
Related notes: See the Partner client token integration note for more information on the new GameServerAllocation class.
[Multiplayer ] Optional automatic party expiration.
#
Description: Pragma Engine now offers the enableStalePartyExpiration and stalePartyExpirationMinutes configurations, which define how many minutes after creation a party should automatically disband.
Details: The enableStalePartyExpiration configuration is set system-wide and can be used as a backstop to prevent situations where a party isn’t properly removed/cleaned up due to bugs or connection issues. To enable the expiration feature, set enableStalePartyExpiration to true and specify a value for stalePartyExpirationMinutes (default is 24 hours).
game:
serviceConfigs:
PartyConfig:
enableStalePartyExpiration: true
stalePartyExpirationMinutes: 2880
For more information, see Party Tasks.
[Friends ] New Presence service for managing statuses.
#
Description: Version 0.0.99 introduces the Presence service. By setting a presence status, users can control whether they appear “online” or “away” to friends within a game instance.
Details: Using the Presence service, you can allow players to set a predefined (basic) or custom (rich) status and display this status to friends in the current game instance.
The Presence service includes:
- the Presence Plugin for customizing Presence behavior
- the Presence API for Unreal implementation
- the
FriendServiceRaw.csfile for Unity SDK implementation - the
presenceExt.protofile for defining theExtRichPresence,ExtRichPresencePlayerRequest, andExtRichPresenceBackendRequestdata.
For more information, see the Presence documentation.
Related notes: See the integration note on including the new presenceExt.proto file to your source control.
[Accounts ] Added new Partner endpoint for updating display name.
#
Description: The new UpdateDisplayNamePartnerV1Request Partner endpoint functions the same as the existing Operator and Service endpoints for updating display names.
[Accounts ] Data Rights Social Plugin now available.
#
Description: The Data Rights Social Plugin is now available in the Data Rights service. This plugin enables users to customize the personal data report that is given to a user on a data rights request download.
Details: All personal data requests now go through the default Data Rights Social Plugin. This plugin implements the DataRightsSocialPlugin and provides a buildPersonalDataReport. The default plugin will retrieve all information from the various services that provide personal social information and compile them into a report. You can either extend the plugin implementation or write your own custom plugin.
See Data Rights Social Plugin for more details.
Example:
social:
pluginConfigs:
DataRightsService.dataRightsSocialPlugin:
class: "demo.datarights.DefaultDataRightsSocialPlugin"
[Accounts ] Social accounts now track and store last display name update.
#
Description: Social accounts now track the last time a user has changed their display name; this timestamp is available on the PragmaAccount in the Account Plugin.
Details: The timestamp of the last display name update is available on the pragmaAccount object passed in to the AccountPlugin.updateDisplayName function and can be referenced by pragmaAccount.getDisplayNameLastUpdated().
See Update a player’s display name for more details.
Example:
val lastUpdateTime = pragmaAccount.getDisplayNameLastUpdated()
if(!timeSpanner.enoughTimeHasElapsedSince(lastUpdateTime)){
throw PragmaException(
PragmaError.AccountService_BadRequest,
"Players are only allowed to update display name every " +
"${config.waitingPeriodInDays} days"
)
}
pragmaAccount.setDisplayName(requestedDisplayName)
[Inventory ] Added a new ext data message in limited grants for instanced item grants.
#
Description: Limited grants now support an ext for instanced items.
Details:
This feature allows you to include a serverRequestExt in your limited grants content, which is available in the Instanced Item Plugin specifically for constructing unique instanced items through limited grants.
To use this feature, first go to 5-ext/ext-protos/src/main/proto/shared/inventoryRpcExt.proto and define custom protobuf messages that are included as a oneof under the preexisting ExtInstancedItemServerGrant message. Below is an example of a custom limited grant message included in the oneof data of the ExtInstancedItemServerGrant message:
message ExtInstancedItemServerGrant {
oneof data {
LimitedGrantExt limited_grant_ext = 3;
}
}
message LimitedGrantExt {
string message = 1;
}
Then, update your LimitedGrants.json content and include the new ext field to support the construction of instanced items.
{
"trackingId": "limited-grant-with-ext",
"instancedGrants": [
{
"catalogId": "itemToGrant",
"tags": ["tag1"],
"ext": {
"limitedGrantExt": {
"message": "this is a limited grant"
}
}
}
]
}
[Player Data ] A new Player Data service is now available! The previous Player Data system has been renamed to Inventory.
#
Description: The new Player Data service gives you the tools to contextualize and build your player data features exactly the way you want. Use the service’s frameworks to data model features yourself, author request and response payloads, and define all the business logic required for your feature. To learn more, check out the new Player Data documentation.
Related notes: See the integration note on updating specific 5-ext pom files.
Deprecations #
[Multiplayer ] platform, sdk | The Match Capacity service has been deprecated in favor of the Pragma Fleet service. The Match Capacity service will be completely removed in version 0.0.101.
#
Description: The Match Capacity service and its requisite plugins/SDK methods have been deprecated in favor of the Pragma Fleet service. The Match Capacity service will be completely removed in version 0.0.101. For instructions on migrating from the Match Capacity service to the Fleet service, see the Fleet Service Migration Guide (contact your Pragma support representative if you need access).
Integrations #
[Multiplayer ] sdk | In Unity, replace references to the Game Loop API’s OnPartyDataChanged with OnPartyChanged.
#
Description: To maintain parity between Unity and Unreal SDK events, we updated the Unity SDK Game Loop API to broadcast OnPartyChanged instead of OnPartyDataChanged when party changes occur.
Integration steps:
- sdk | Replace references to
OnPartyDataChangedwithOnPartyChanged:original replacement GameLoopApi.OnPartyDataChangedGameLoopApi.OnPartyChanged
[Multiplayer ] platform | Update implementation of the Game Instance Host Plugin’s findHostForGameInstance function to use the new clientTokenFunction as a second parameter.
#
Description: We added a second parameter, the new clientTokenFunction, to the GameInstanceHostPlugin.findHostForGameInstance function. This client token function generates Partner client tokens for game servers managed outside of Pragma’s Fleet service to allow authentication with Pragma Engine.
If you use the Pragma Fleet service andfindHostForGameInstancefunction to produce anExtHostRequest, you do not need to use theclientTokenFunctionparameter.
Integration steps:
platform | In implementations of
GameInstanceHostPlugin, adjust the signature of thefindHostForGameInstancefunction to add the new parameter:- Before:
suspend fun findHostForGameInstance( gameInstance: GameInstance.GameInstance ): ExtHostRequest?- After:
suspend fun findHostForGameInstance( gameInstance: GameInstance, clientTokenFunction: () -> PartnerClientTokens ): ExtHostRequest?If your
GameInstanceHostPluginmanages game servers outside of the Pragma Fleet service, consider invoking the newclientTokenFunctionto generate a set of Partner client tokens for each game server your plugin allocates. You can then send the tokens to those game servers.
[Multiplayer ] platform | Update implementation of the FleetPlugin.add function to utilize the modified second parameter.
#
Description: We updated the second parameter in the FleetPlugin.add function to accept a GameServerAllocation object instead of a list of UUID allocations.
Details: Previously, the add function’s second parameter was a list of UUID allocations, representing just the game server IDs that each game server should use. Now, the function accepts a GameServerAllocation object, providing both a server ID and a set of generated Pragma Engine Partner client tokens that the game server should use when authenticating to Pragma Engine.
Integration steps:
platform | In implementations of
FleetPlugin, change the signature of theaddfunction to the new definition:- Before:
suspend fun add( serverPool: ServerPool, allocations: List<UUID> )- After:
suspend fun add( serverPool: ServerPool, allocations: List<GameServerAllocation> )When referencing the new allocations object within your plugin code, use the
serverIdinstead of the allocation UUID. Also consider adjusting your code to send the new Partner client tokens to the game server so it can use that token to connect to Pragma Engine.
[Friends ] platform | Include the new presenceExt.proto file in your source control.
#
Description: Required to prevent the new presenceExt.proto file from regenerating every time you build Pragma Engine.
Integration steps:
- platform | Ensure the
5-ext/ext-protos/src/main/proto/shared/presenceExt.proto fileis included in your source control.
[Friends ] sdk | In Unreal, if changing data passed from Pragma Engine via FPragmaFriendApi events, adjust your process to account for the updated const values.
#
Description: Events on FPragmaFriendApi now pass data as a const value instead of passing data as a reference or as copied values. This prevents referenced data from being changed accidentally, and improves performance by eliminating copying data.
Integration steps:
- sdk | If you’re changing the values sent to you on the
FPragmaFriendApievents, either discontinue this practice or make a copy of theconstdata to manipulate.
Example:
- Before:
DECLARE_EVENT_OneParam(UPragmaFriendApi, FRemovedAsFriendEvent, FPragmaFriend); FRemovedAsFriendEvent OnRemovedAsFriend; - After:
DECLARE_EVENT_OneParam(UPragmaFriendApi, FRemovedAsFriendEvent, const FPragmaFriend&); FRemovedAsFriendEvent OnRemovedAsFriend;
[Friends ] sdk | In Unreal, remove duplicated include statements in PragmaFriendApi.h and PragmaPlayerDataService.h.
#
Description: In Pragma Engine version 0.0.98, the PragmaFriendApi.h and PragmaPlayerDataService.h files in the Unreal SDK were each missing an include statement. Customers who upgraded to 0.0.98 were required to manually add these statements. Version 0.0.99 includes the missing statements, so when upgrading from 0.0.98 to 0.0.99 the statements may appear twice.
Integration steps:
- sdk | When upgrading from 0.0.98 to 0.0.99 and using Unreal, remove the following
includestatements if they now appear twice: - in
PragmaFriendApi.hremove:#include "Async/Future.h" - in
PragmaPlayerDataService.hremove:#include "Containers/SortedMap.h"
[Friends ] sdk | In Unreal, change references to FPragma_Friend_Friend and FPragma_Friend_FriendOverview to instead reference FPragmaFriend and FPragmaFriendOverview, respectively.
#
Description: The new FPragmaFriend and FPragmaFriendOverview types in version 0.0.99 replace the automatically generated FPragma_Friend_Friend and FPragma_Friend_FriendOverview in previous versions. Any Unreal SDK function or notification that returned a FPragma_Friend_Friend or FPragma_Friend_FriendOverview now returns a FPragmaFriend or FPragmaFriendOverview, respectively.
Integration steps:
sdk | Replace any references to
FPragma_Friend_Friendwith references toFPragmaFriend. All previous property accessors are now function calls, as shown in the following table:original replacement FPragma_Friend_Friend.SocialIdFPragmaFriend.SocialId()FPragma_Friend_Friend.PlayerIdFPragmaFriend.PlayerId()FPragma_Friend_Friend.DisplayNameFPragmaFriend.DisplayName()In addition, the new
FPragmaFriendclass includes the following functions:PlayerIdByGameShardId(): returns map of player’splayerIdsby game shardPresence(): returnsPresencefor the player in a specific gamePresenceByGameShard(): returnsPresences for the player across gamesProviderAccountsByProviderId(): returns a user’sIdProviderAccounts
sdk | Replace any references to FPragma_Friend_FriendOverview with references to FPragmaFriendOverview. All previous property accessors are now function calls, as shown in the following table:
original replacement FPragma_Friend_FriendOverview.SocialIdFPragmaFriendOverview.SocialId()FPragma_Friend_FriendOverview.DisplayNameFPragmaFriendOverview.DisplayName()In addition, the new FPragmaFriendOverview class includes the following functions:
PlayerId(): returns theplayerIdof the userPlayerIdByGameShardId(): returns all the playerIds of a potential friend inmapform
[Friends ] platform | Update references to AccountRpc.GameIdentity and AccountRpc.IdProviderAccount to instead reference AccountCommon.GameIdentity and AccountCommon.IdProviderAccount.
#
Description: We moved the GameIdentity and IdProviderAccount messages from the accountRpc.proto file to the accountCommon.proto file.
Integration steps:
- platform | Update references to the following:
original replacement AccountRpc.GameIdentityAccountCommon.GameIdentityAccountRpc.IdProviderAccountAccountCommon.IdProviderAccount
[Accounts , Portal ] other | Update the Identity Provider Portal redirect URIs.
#
Description: You’ll need to update your settings in each third-party provider to authenticate to the Pragma Engine Portals.
Details: The links you’ll need to add to each third-party provider follow a similar pattern:
http://{GAME OPERATOR PORTAL URL}/redirect/SignIn{IDENTITY PROVIDER NAME}http://{SOCIAL OPERATOR PORTAL URL}/redirect/SignIn{IDENTITY PROVIDER NAME}http://{SOCIAL PLAYER PORTAL URL}/redirect/SignIn{IDENTITY PROVIDER NAME}http://{SOCIAL PLAYER PORTAL URL}/redirect/Link{IDENTITY PROVIDER NAME}
Integration steps:
- other | Update the authorized URIs in all third-party providers you use to allow the Pragma Engine Portals to authenticate.
No changes required.- http://localhost:10200/redirect/SignInEpic - http://localhost:11200/redirect/SignInEpic - http://localhost:11000/redirect/SignInEpic - http://localhost:11000/redirect/LinkEpic- http://localhost:10200/redirect/SignInAuth0 - http://localhost:11200/redirect/SignInAuth0 - http://localhost:11000/redirect/SignInAuth0 - http://localhost:11000/redirect/LinkAuth0- http://localhost:10200/redirect/SignInDiscord - http://localhost:11200/redirect/SignInDiscord - http://localhost:11000/redirect/SignInDiscord - http://localhost:11000/redirect/LinkDiscord- http://localhost:10200/redirect/SignInGoogle - http://localhost:11200/redirect/SignInGoogle - http://localhost:11000/redirect/SignInGoogle - http://localhost:11000/redirect/LinkGoogle- http://localhost:10200/redirect/SignInGoogleWorkspace - http://localhost:11200/redirect/SignInGoogleWorkspace - http://localhost:11000/redirect/SignInGoogleWorkspace - http://localhost:11000/redirect/LinkGoogleWorkspace- http://localhost:10200/redirect/SignInOkta - http://localhost:11200/redirect/SignInOkta - http://localhost:11000/redirect/SignInOkta - http://localhost:11000/redirect/LinkOkta- http://localhost:10200/redirect/SignInTwitch - http://localhost:11200/redirect/SignInTwitch - http://localhost:11000/redirect/SignInTwitch - http://localhost:11000/redirect/LinkTwitchContact customer support for more information.
[Accounts ] platform | Change UpdateDisplayName field names.
#
Description: The UpdateDisplayNameOperatorV1 and UpdateDisplayNameServiceV1 field names have been changed for consistency and clarity.
Integration steps:
- platform | Update the following fields for
UpdateDisplayNameOperatorV1andUpdateDisplayNameServiceV1:original replacement updated_display_namerequested_display_namedisplay_nameupdated_display_name
[Inventory ] sdk | Update usages of UpdateItemV4 and UpdateItemsV0 and remove implementations of the ItemUpdateV2 wrapper.
#
Description: We’ve made changes to the interfaces of UpdateItemV4 and UpdateItemsV0 so that clients can only make trusted item updates.
Details: The client should now use either InventoryService.Craft or InventoryService.StorePurchase for updating stackables. Updating instanced items from the client is still safe and trusted, since InstancedItemPlugin.update is responsible for item changes and is server-authoritative.
Integration steps:
- sdk | Replace the original implementations of
UpdateItemV4as demonstrated with the updated versions below:Before:
auto ItemUpdate = FPragma_Inventory_ItemUpdateV2_Item{}; ItemUpdate.SetInstanced( FPragma_Inventory_InstancedItemUpdate{ FPragma_Inventory_ExtInstancedItemUpdate{}, InstancedId }); const FPragma_Inventory_UpdateItemV4Request Request{ { { ItemUpdate } } };After:
ItemUpdateV2 wrapper auto ItemUpdate = FPragma_Inventory_InstancedItemUpdate{ FPragma_Inventory_ExtInstancedItemUpdate{}, InstancedId };Before:
var itemUpdate = new ItemUpdateV2 { Instanced = new InstancedItemUpdate {InstanceId = instancedId} }; var updateItemV4Request = new UpdateItemV4Request {ItemUpdate = itemUpdate};After:
var itemUpdate = new InstancedItemUpdate { InstanceId = instancedId }; var updateItemV4Request = new UpdateItemV4Request { InstancedItemUpdate = itemUpdate }; - sdk | Replace the original implementations of
UpdateItemsV0as demonstrated with the updated versions below:Before:
auto InstancedItemUpdateOne = FPragma_Inventory_ItemUpdateV2_Item{}; InstancedItemUpdateOne.SetInstanced(FPragma_Inventory_InstancedItemUpdate{ FPragma_Inventory_ExtInstancedItemUpdate{}, InstancedId }); // build out other item updates ... const FPragma_Inventory_UpdateItemsV0Request Request{{ { InstancedItemUpdateOne }, { InstancedItemUpdateTwo }, { InstancedItemUpdateThree } }};After:
auto InstancedItemUpdate = FPragma_Inventory_InstancedItemUpdate{ FPragma_Inventory_ExtInstancedItemUpdate{}, UPragmaCoreTestFactory::UUID(2) }; const FPragma_Inventory_UpdateItemsV0Request Request{{ { InstancedItemUpdateOne }, { InstancedItemUpdateTwo} }};Before:
new UpdateItemsV0Request { ItemUpdates = { new ItemUpdateV2 { Instanced = new InstancedItemUpdate{ InstanceId = InstancedId() } }, new ItemUpdateV2 { Stackable = new StackableItemUpdate{ CatalogId = StackableCatalogId(1), InstanceId = InstancedId(), AmountChanged = 100 } } } };After:
new UpdateItemsV0Request { InstancedItemUpdates = { new InstancedItemUpdate{ InstanceId = InstancedIdOne() }, // include ext etc ... new InstancedItemUpdate{ InstanceId = InstancedIdTwo() } } });
[Player Data ] platform | Update specific 5-ext pom files to use the new Player Data service.
#
Description: To use the new Player Data service, three 5-ext pom files need to be updated to finish the Maven modules.
Integration steps:
- platform | Update
5-ext/pom.xmlby adding a new Module entry forext-player-data:... <modules> <module>ext</module> <module>ext-server</module> <module>ext-player-data</module> // ADD NEW MODULE ENTRY </modules> ... - platform | Update
5-ext/ext/pom.xmlwith a new Module dependency at the top of the dependencies block. This dependency must come before theext-protosartifact.<dependencies> <dependency> <groupId><COMPANY_NAME></groupId> <artifactId>player-data-generated-types</artifactId> <version>${project.version}</version> </dependency> ... </dependencies> - platform | Update
5-ext/ext-server/pom.xmlby switching theartifactId extdependency to come before theartifactId server-basedependency.<dependencies> <dependency> <groupId><COMPANY_NAME></groupId> <artifactId>ext</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>pragma</groupId> <artifactId>server-base</artifactId> <version>${pragma.mvn.version}</version> </dependency> </dependencies> - Verify the build by running
make ext run.
[Infra & Tooling ] config | Remove any sdkCoreEnabled config values from your GameGatewayConfig derivatives.
#
Description: A temporary feature toggle was in place to control whether the PragmaSDK would try to use an in-development sdk-core library. Development in this area has been paused, so unnecessary code and configuration is being removed. You may see the following errors:
Config source '4-demo/config/local-dev.yml', has unknown property for config='GameOperatorGatewayConfig' property name='sdkCoreEnabled'
Config source '4-demo/config/local-dev.yml', has unknown property for config='GamePartnerGatewayConfig' property name='sdkCoreEnabled'
Config source '4-demo/config/local-dev.yml', has unknown property for config='GamePlayerGatewayConfig' property name='sdkCoreEnabled'
Integration steps:
- config | For all shards, remove any
sdkCoreEnabledconfig values from yourGameGatewayConfigderivatives (GameOperatorGatewayConfig,GamePartnerGatewayConfig, andGamePlayerGatewayConfig).
[Infra & Tooling ] platform | Update the Kotlin plugin in IntelliJ.
#
Description: To address a common vulnerability with our protobuf dependency, Pragma Engine has been updated to use the newest version of Kotlin.
Integration steps:
- platform | Upgrade your Kotlin plugin version to 231-1.9.22-release-704-IJ8109.175.
- If you need additional help, reach out to your Pragma customer success representative for access to a detailed guide.
[Infra & Tooling ] sdk | In Unity, replace uses of ISession and PragmaSession with IConnection and Connection.
#
Description: The ISession and IConnection interfaces have been removed as they were temporarily put in place to support an internal transition.
Integration steps:
- sdk | Replace uses of
ISessionandPragmaSessionwithIConnectionandConnection.original replacement Pragma.ISessionPragma.PragmaSessionPragma.IConnectionPragma.Connection
[Portal ] portal | Replace any uses of pragma.store.get('$$authData') with pragma.auth.getAuthData().
#
Description: We’ve changed how authentication tokens are saved in the browser to make it possible to sign in to multiple Portal sessions on different subdomains.
Integration steps:
- portal | If you’re using
pragma.store.get('$$authData'), replace it withpragma.auth.getAuthData(). A specific key can be requested by passing it as a param:pragma.auth.getAuthData('displayName').
