August 2nd, 2022
Features #
- A Party leader can now specify a list of preferred game server zones to be used by the Matchmaking service to select a GameServerZone for a match.
- Description: Party leaders specify a list of
PreferredGameServerZones
, which is included in the Party serviceCreatePartyV1
call and can be updated withSetPreferredGameServerZonesV1
. This list can then be used byMatchmakingStrategy.addToMatchAndBuildMatchmakingDetails
to select a singleGameServerZone
to be used in Matchmaking. Game servers should pass in theGameServerZone
toMatchCapacityService.StartReportCapacityPolling
. - Related notes: See related deprecation, feature, and integration notes for
GameServerZone
.
- Description: Party leaders specify a list of
- A
GameServerZone
can now be mapped to a Multiplay region using theMultiplayCapacityProvider
.- Description:
MultiplayCapacityProvider
can now take aGameServerZone
and map it to a Multiplay region. To use this, provide a new configuration to mapGameServerZones
to MultiplayRegionIds
and remove the oldregionId
field from the config.
If usingAllocateV2
,gameServerZone
is passed into the allocation. You can then query the Multiplay local proxy to get the game server zone to be passed to the SDK’sMatchmakingService.StartReportCapacityPolling
. Note that to use multiple region support, you will need to implement all related game server zone integrations. - Example:
game: pluginConfigs: MatchCapacityService.capacityProvider: class: "pragma.matchcapacity.MultiplayCapacityProvider" config: gameServerZoneToMultiplayRegionId: gameServerZone1: "b7a6d0e8-a9eb-11eb-8c6a-7d2df11035b2" gameServerZone2: "291b8a29-468d-4eef-aeb8-7591402c4044"
- Related notes: See related deprecation, feature, and integration notes for
GameServerZone
.
- Description:
- Added two methods on both SDKs for kicking a player from a party.
- Description: Players can be kicked from a party, which prevents them from rejoining the party unless they receive a new invitation.
KickPlayerV1
makes an RPC call to kick the providedPlayerId
from a party, andCanKickPlayerV1
lets the client know if it’s able to execute a kick.
When a player is kicked, everyone in the party receives aPartyDetailsV1Notification
to update the party state, and the kicked player receives aRemovedV1Notification
with aKICKED
reason.
- Description: Players can be kicked from a party, which prevents them from rejoining the party unless they receive a new invitation.
- [Portal] All
config.json
data has been relocated toportalDevConfig.default.js
to prevent merge conflicts and ease custom portlet development.- Description: The
/platform/web/portal/src/assets/public/config.json
config has been removed, and all data has been relocated to/platform/web/portal/portalDevConfig.default.js
, which can now be extended locally like all other portal configurations. Theconfig.json
data can be found underapp.config
andapp.extraConfig
configuration keys. This only affects studios with active development on custom portlets when running the Portal locally in development mode. - Example:
To enable a custom portlet, the following needs to be added to
/platform/web/portal/portalDevConfig.local.js
:
module.exports = { default: { "app.extraConfig": { modules: ["MyCustomPortlet"] } }, }
- Description: The
Deprecations #
Update
MatchCapacityService.StartReportCapacityPolling
to take the new parameterGameServerZone
.- Description: The
StartReportCapacityPolling
function in the MatchCapacity service takes the new parameterGameServerZone
. You will need to either update your code in the SDKs or pass in an empty string.
Original Replacement Removal Patch Unity: public void StartReportCapacityPolling( string serverId, string gameVersion, float timeout, MatchAllocatedDelegate onComplete )
Unity: public void StartReportCapacityPolling( string serverId, string gameVersion, string gameServerZone, float timeout, MatchAllocatedDelegate onComplete )
0.0.80 Unreal: void UPragmaMatchCapacityService::StartReportCapacityPolling( FString ServerId, FString GameVersion, float Timeout, const FMatchAllocatedDelegate& OnComplete )
Unreal: UPragmaMatchCapacityService::StartReportCapacityPolling( FString ServerId, FString GameVersion, FString GameServerZone, float Timeout, const FMatchAllocatedDelegate& OnComplete )
0.0.80 - Related notes: See related integration and feature notes for
GameServerZone
.
- Description: The
Replace the listed RPC request implementation calls with their replacements, as they are being removed.
- Description: This is part of our larger engine cleanup. If you’re using any of these calls in plugins or custom services, replace them and apply transforms when necessary.
original replacement removal patch Service::requestRpcAndTransform()
Service::requestRpc()
0.0.80 RpcClient::requestRpcAsync()
async { requestRpc() }
0.0.80 Service::requestRpcAsync()
async { requestRpc() }
0.0.80 Service::requestRpcAsyncAndTransform()
async { Service::requestRpc() }
0.0.80
- Description: This is part of our larger engine cleanup. If you’re using any of these calls in plugins or custom services, replace them and apply transforms when necessary.
Update SDK configuration with new authorization tokens.
- Description: The original
partnerSessionAuthToken
config value in Unity/Unreal SDKs was built before the separation of Social and Game backend tokens. The new config valuespartnerSessionGameAuthToken
andpartnerSessionSocialAuthToken
have been added to allow Partner sessions to designate specific tokens per backend. The original config value will be removed in 0.0.80.
Add apartnerSessionSocialAuthToken
config option for situations where a Partner session needs to connect to the Social backend, and provide it with a Partner Social token.
In the Unreal/Unity SDK, update any configs with a Partner session auth token (such as inpragma.json
).original replacement removal patch partnerSessionAuthToken
partnerSessionGameAuthToken
0.0.80
- Description: The original
Integrations #
- If you’ve customized your
CapacityTracker
orMatchmakingStrategy
, you will need to update your plugins for the newGameServerZone
features.- Description: Studios who have customized their own
CapacityTracker
orMatchmakingStrategy
will need to update their plugins. These two game loop plugins allow the user to set upGameServerZone
flows within their match loop. - Integration steps:
- Update implementations of the
CapacityTracker
add
function to receive a new parameter indicating whichGameServerZone
a game should be created in. - Update implementations of the
MatchmakingStrategy
functionaddToMatchAndBuildMatchmakingDetails
to return aPair<ExtCreateMatchV1Request, String>?
. The second new string return value allows the plugin to indicate whichGameServerZone
the match should be created in. If you don’t want to useGameServerZone
, use an empty string here.original replacement ExtCreateMatchV1Request?
Pair<ExtCreateMatchV1Request, String>?
- Update implementations of the
- Description: Studios who have customized their own
- Add new
ExtHiddenPartyData
andExtHiddenPlayerData
proto definitions topartyRpcExt.proto
.- Description: The new
ExtHiddenPartyData
andExtHiddenPlayerData
protos will allow you to store temporary data about players and parties throughout the game loop. - Integration step: Add the following proto definitions to
ext-protos/src/main/proto/shared/partyRpcExt.proto
in order to successfully compile.message ExtHiddenPartyData { } message ExtHiddenPlayerData { }
- Description: The new
- If you’ve implemented your own MatchCapacity provider, remove the
coroutineScope
argument from theinit()
method.- Description: To increase product maintainability and reliability,
CapacityProvider.init()
no longer takescoroutineScope
as an argument. - Integration step: If you’ve implemented your own MatchCapacity provider from the ground up, remove
coroutineScope
from itsinit()
method. If you’ve extended an existing Pragma Engine MatchCapacity provider, no action is required.
If you still needcoroutineScope
support, please reach out to us directly.
- Description: To increase product maintainability and reliability,
- [Portal] If you’ve written a custom
PortalModulePlugin
, CORS definitions need to be rerouted into their respective gateways.- Description: Anyone who has written a custom
PortalModulePlugin
will need to reroute CORS definitions. TheattachPortalModule
function on the Portal plugin has been removed and the install CORS functionality has been moved out to the gateways. - Integration step: Update
attachPortalRoutes
to take in anApplication
instead of aRouting
object. For example:
- Description: Anyone who has written a custom
Original | Replacement |
---|---|
|
|
- [Unreal] Update C++ Raw Service class names from
Pragma
to the root of your proto package.- Description: For any generated raw services, the C++ class names have changed to use the root of your proto package instead of
Pragma
. - Integration step: Update generated custom raw service names:
original replacement UPragmaCustomServiceRaw
UGameCustomServiceRaw
- Description: For any generated raw services, the C++ class names have changed to use the root of your proto package instead of
Docs #
- [New Services Guide] Dependent Jobs services guide is now live!
- [Updated Services Guide] Updated Login & Session services guide with information about dependent jobs.
- [Updated Services Guide] Updated Party services guide with a quick guide on using local game servers with Party matchmaking.
- [New Services Guide] New Custom Services landing page is now live!
- Description: The brand new Custom Services landing page provides the information needed to get started with extending Pragma Engine using custom services.
- [API Reference] Third-level nesting of types within packages for API ref docs is now live.
- [Pragma Blog] Setting Up Pragma Engine video tutorial is now live!
- [Tech Blog] The Pragma Engine Tech Blog is now live!
- Description: The Tech Blog provides friendly, accessible articles about Pragma Engine’s features, functions, and capabilities.
- [New Tech Blog articles] The Stackables series is now live!