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 newext
data 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’sOnPartyDataChanged
withOnPartyChanged
. | full note - [
Multiplayer ] platform | Update implementation of the Game Instance Host Plugin’sfindHostForGameInstance
function to use the newclientTokenFunction
as a second parameter. | full note - [
Multiplayer ] platform | Update implementation of theFleetPlugin.add
function to utilize the modified second parameter. | full note
- [
Friends ] platform | Include the newpresenceExt.proto file
in your source control. | full note
- [
Friends ] sdk | In Unreal, if changing data passed from Pragma Engine viaFPragmaFriendApi
events, adjust your process to account for the updatedconst
values. | full note - [
Friends ] sdk | In Unreal, remove duplicatedinclude
statements inPragmaFriendApi.h
andPragmaPlayerDataService.h
. | full note - [
Friends ] sdk | In Unreal, change references toFPragma_Friend_Friend
andFPragma_Friend_FriendOverview
to instead referenceFPragmaFriend
andFPragmaFriendOverview
, respectively. | full note - [
Friends ] platform | Update references toAccountRpc.GameIdentity
andAccountRpc.IdProviderAccount
to instead referenceAccountCommon.GameIdentity
andAccountCommon.IdProviderAccount.
| full note - [
Accounts ,Portal ] other | Update the Identity Provider Portal redirect URIs. | full note - [
Accounts ] platform | ChangeUpdateDisplayName
field names. | full note - [
Inventory ] sdk | Update usages ofUpdateItemV4
andUpdateItemsV0
and remove implementations of theItemUpdateV2
wrapper. | full note - [
Player Data ] platform | Update specific5-ext
pom files to use the new Player Data service. | full note - [
Infra & Tooling ] config | Remove anysdkCoreEnabled
config values from yourGameGatewayConfig
derivatives. | full note - [
Infra & Tooling ] platform | Update the Kotlin plugin in IntelliJ. | full note - [
Infra & Tooling ] sdk | In Unity, replace uses ofISession
andPragmaSession
withIConnection
andConnection
. | 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
returnFromGameInstance
flow 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
getPlayerIdentities
to 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
PartnerClientTokens
class contains data for partner client tokens that the game server should use when authenticating to Pragma Engine:gameToken
socialToken
- The
GameServerAllocation
class maps game servers with thePartnerClientTokens
it should use when authenticating to Pragma Engine:serverId
pragmaTokens
- The
FleetPlugin.add
’s second parameter,allocations
, is now a list ofGameServerAllocation
objects, which contain server IDs and a set ofPartnerClientTokens
for each allocated server:- Before:
add( serverPool: ServerPool, allocations: List<UUID>)
- After:
add( serverPool: ServerPool, allocations: List<GameServerAllocation>)
- The
GameInstanceHostPlugin.findHostForGameInstance
function has a newly addedclientTokenFunction
parameter which can be invoked to generatePartnerClientToken
objects. 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.cs
file for Unity SDK implementation - the
presenceExt.proto
file for defining theExtRichPresence
,ExtRichPresencePlayerRequest
, andExtRichPresenceBackendRequest
data.
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
OnPartyDataChanged
withOnPartyChanged
:original replacement GameLoopApi.OnPartyDataChanged
GameLoopApi.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 andfindHostForGameInstance
function to produce anExtHostRequest
, you do not need to use theclientTokenFunction
parameter.
Integration steps:
platform | In implementations of
GameInstanceHostPlugin
, adjust the signature of thefindHostForGameInstance
function to add the new parameter:- Before:
suspend fun findHostForGameInstance( gameInstance: GameInstance.GameInstance ): ExtHostRequest?
- After:
suspend fun findHostForGameInstance( gameInstance: GameInstance, clientTokenFunction: () -> PartnerClientTokens ): ExtHostRequest?
If your
GameInstanceHostPlugin
manages game servers outside of the Pragma Fleet service, consider invoking the newclientTokenFunction
to 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 theadd
function 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
serverId
instead 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 file
is 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
FPragmaFriendApi
events, either discontinue this practice or make a copy of theconst
data 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
include
statements if they now appear twice: - in
PragmaFriendApi.h
remove:#include "Async/Future.h"
- in
PragmaPlayerDataService.h
remove:#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_Friend
with references toFPragmaFriend
. All previous property accessors are now function calls, as shown in the following table:original replacement FPragma_Friend_Friend.SocialId
FPragmaFriend.SocialId()
FPragma_Friend_Friend.PlayerId
FPragmaFriend.PlayerId()
FPragma_Friend_Friend.DisplayName
FPragmaFriend.DisplayName()
In addition, the new
FPragmaFriend
class includes the following functions:PlayerIdByGameShardId()
: returns map of player’splayerIds
by game shardPresence()
: returnsPresence
for the player in a specific gamePresenceByGameShard()
: returnsPresence
s 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.SocialId
FPragmaFriendOverview.SocialId()
FPragma_Friend_FriendOverview.DisplayName
FPragmaFriendOverview.DisplayName()
In addition, the new FPragmaFriendOverview class includes the following functions:
PlayerId()
: returns theplayerId
of the userPlayerIdByGameShardId()
: returns all the playerIds of a potential friend inmap
form
[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.GameIdentity
AccountCommon.GameIdentity
AccountRpc.IdProviderAccount
AccountCommon.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/LinkTwitch
Contact 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
UpdateDisplayNameOperatorV1
andUpdateDisplayNameServiceV1
:original replacement updated_display_name
requested_display_name
display_name
updated_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
UpdateItemV4
as 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
UpdateItemsV0
as 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.xml
by 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.xml
with a new Module dependency at the top of the dependencies block. This dependency must come before theext-protos
artifact.<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.xml
by switching theartifactId ext
dependency to come before theartifactId server-base
dependency.<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
sdkCoreEnabled
config values from yourGameGatewayConfig
derivatives (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
ISession
andPragmaSession
withIConnection
andConnection
.original replacement Pragma.ISession
Pragma.PragmaSession
Pragma.IConnection
Pragma.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')
.