August 16th, 2022

Features #

Added a new MatchLifecycleConfig feature called inProgressMatchTimeoutMillis for setting timeouts for in-progress matches.

  • Description: The new inProgressMatchTimeoutMillis configuration allows you to set a timeout for in-progress matches. enablePartyRecreate is honored in case of a match timing out, so if enabled, the players will be put back into a party. This change is backwards compatible.
  • Details: To use this feature, in your game configuration, find MatchLifecycleConfig.inProgressMatchTimeoutMillis, and specify the milliseconds you want a game to go for before expiring the match completely. Any subsequent MatchEnd payloads for that match will be ignored.
  • Example:
game:
  serviceConfigs:
      MatchLifecycleServiceConfig:
          inProgressMatchTimeoutMillis: 10000 // exp match in 10 sec

New configuration allows you to define the endpoint for email verification links.

  • Description: To decouple the SocialGameGatewayConfig from the Account service, we’ve added a new configuration for defining where email verification links go. This is backwards compatible.
  • Example:
social:
  serviceConfigs:
      AccountServiceConfig:
          verificationEmailEndpoint: "http://127.0.0.1:11000//v1/account/verifyemailv1"

Added RPC endpoints for applying inventory operations.

  • Description: We’ve added endpoints for applying inventory operations such as stackable and instanced item grants and updates, instanced items to destroy, and rewards to grant.
  • Details:
    • applyInventoryOperationsOperatorV1
    • applyInventoryOperationsPartnerV1
    • applyInventoryOperationsServiceV1

Added new fields for deleting instanced items on MatchEnd and in response to creating or updating an instanced item.

  • Description: Fields have been added for destroying instanced items in two locations: InstancedItemPluginResult (in response to creating or updating an item) and InventoryOperationsPlugin.InventoryOperations (on MatchEnd).
  • Details:
    • InstancedItemPluginResult is returned by InstancedItemPlugin.newInstanced and InstancedItemPlugin.update.
    data class InstancedItemPluginResult(
    val extInstancedItem: ExtInstancedItem,
    val rewardGrants: List<RewardGrant> = listOf(),
    val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(),
    val stackableItemGrants: List<StackableItemGrant> = listOf(),
    val serverInstancedItemUpdates: List<ServerInstancedItemUpdate> = listOf(),
    val instancedItemsToDestroy: List<InstanceId> = listOf() // NEW FIELD
    )
    
    • InventoryOperationsPlugin.InventoryOperations is returned by InventoryOperations.getInventoryOperationsFromMatchEnd.
    data class InventoryOperations(
    val stackableItemGrants: List<StackableItemGrant> = listOf(),
    val stackableItemUpdates: List<StackableItemUpdate> = listOf(),
    val instancedItemGrants: List<InstancedItemGrant> = listOf(),
    val instancedItemServerGrants: List<InstancedItemServerGrant> = listOf(),
    val instancedItemUpdates: List<InstancedItemUpdate> = listOf(),
    val rewardGrants: List<RewardGrant> = listOf(),
    val instancedItemsToDestroy: List<InstanceId> = listOf() // NEW FIELD
    )
    

Integrations #

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 values partnerSessionGameAuthToken and partnerSessionSocialAuthToken have been added to allow Partner sessions to designate specific tokens per backend.
  • Integration steps:
    • In the Unreal/Unity SDK, update any configs with a Partner session auth token (such as in pragma.json).
      originalreplacement
      partnerSessionAuthTokenpartnerSessionGameAuthToken
    • Add a partnerSessionSocialAuthToken config option for situations where a Partner session needs to connect to the Social backend, and provide it with a Partner Social token.

Replace the listed RPC request implementation calls with their replacements, as they are being removed.

  • Description: This is part of our larger engine cleanup.
  • Integration step: If you’re using any of these calls in plugins or custom services, replace them and apply transforms when necessary.
    originalreplacement
    Service::requestRpcAndTransform()Service::requestRpc()
    RpcClient::requestRpcAsync()async { requestRpc() }
    Service::requestRpcAsync()async { requestRpc() }
    Service::requestRpcAsyncAndTransform()async { Service::requestRpc() }

Update PartyPlugin implementation by migrating any logic from recreate into returnFromMatchmaking and returnFromMatch.

  • Description: The method recreate has been replaced by the returnFromMatchmaking & returnFromMatch methods. These two new methods have a more flexible interface and allow a subset of the whole party to be returned to the Party service.
  • Integration steps:
    • Open PartyPlugin implementations.
    • Replace implementations of recreate with the new functions returnFromMatchmaking and returnFromMatch.
    • Delete implementation of recreate from interface.
      originalreplacement
      recreatereturnFromMatchmaking & returnFromMatch

Bugs and Fixes #

Added a new fix for cleaning up a match if MatchLifecycleServiceConfig.enablePartyRecreate is disabled.

  • Description: When MatchLifecycleServiceConfig.enablePartyRecreate is disabled, Pragma Engine now properly unsets all game loop related session data, and the SDKs properly clean up their cached Party information.

Docs #

[Updated Services Guide] Updated Extension Data section on the Party page to include information like hidden data.

[New Introduction Page] Added a generated configuration table.

[Updated Introduction Page] Updated the Plugins & Extension Data section within Introduction.

[Updated Services Guide] Added new content to the Plugins & Extension Data section within Customization.

[Updated Services Guide] Replaced the “Dependent Jobs” page with a new Concurrency page which contains information on both concurrency and dependent jobs in Pragma Engine.