June 28th, 2022

Features #

  • New game loop configuration options available.
    • Description: We’ve added the following new config options for match lifecycle: SessionConfig.enableMatchReconnect and MatchLifecycleServiceConfig.enablePartyRecreate. These both default to true, so to switch off match reconnect and party recreation configs, you’ll need to switch them to false.
  • You can now configure game server version in the DefaultGameServerCompatibilityPlugin.
    • Description: To allow easy customization of a hardcoded game server version for CI/testing scenarios, we’ve introduced a gameServerVersion configuration class to the DefaultGameServerCompatibilityPlugin.
  • InventoryService now supports multiple updates to a single InstancedItem through match end processing or the various UpdateItem APIs.
    • Description: Previously, attempting to apply multiple updates to an instanced item would cause only the last update to apply. Now, Pragma Engine handles multiple updates.
    • Details: InstancedItemPlugin.UpdateResult has been updated with a new field serverInstancedItemUpdates which is a List<ServerInstancedItemUpdate>.

Integrations #

  • Modify your custom services by following the provided directions.

    • Description: We have reduced the number of thread pools in Pragma Engine to make the overall system more monitorable and configurable. This may affect your custom services.

    • Integration steps:

      • Make the following changes in your custom service.
      OriginalReplacement
      launchscope.launch
      asyncscope.async
      coroutineContextscope.coroutineContext
      • If you rely on PragmaNode being a CoroutineScope in your custom service, or if your service does not appear to run in Pragma Engine 0.0.73, please contact us to assess the best solution for your specific usage.
  • Remove the ProgressionData parameter from your implementations of StorePlugin and CraftingPlugin.

    • Description: To prepare for the deletion of ProgressionService, we are removing progression-related fields from various plugins.
    • Integration steps:
      • Remove the ProgressionData parameter from your implementations of the following plugins:
        • StorePlugin
        • CraftingPlugin
  • Replace usage of MatchProcessedV2Notification with MatchProcessedV3Notification.

    • Description: To prepare for the deletion of ProgressionService, we are disabling support for MatchProcessedV2Notification in order to remove progression-related data.
    • Integration steps:
      • Replace usage of MatchProcessedV2Notification with MatchProcessedV3Notification.
      OriginalReplacement
      MatchProcessedV2NotificationMatchProcessedV3Notification
  • Add new inventoryData parameter to update() method in custom implementations of InstancedItemPlugin.

    • Description: The InstancedItemPlugin interface has been updated. The update() method now expects inventoryData to be passed in. inventoryData contains a snapshot of the player’s inventory.

    • Integration steps:

      • Change the InstancedItemPlugin.update() method to include the new inventoryData parameter.
      OriginalReplacement
      fun update(
        initialInstancedItem: InstancedItem,
        instancedSpec:      InventoryContent.InstancedSpec,
        updateEntry: InventoryContent.UpdateEntry,
        inventoryContent: InventoryServiceContent,
        clientRequestExt: ExtInstancedItemUpdate?,
        serverRequestExt: ExtInstancedItemServerUpdate?
      ): UpdateResult
      
      fun update(
        initialInstancedItem: InstancedItem,
        instancedSpec:      InventoryContent.InstancedSpec,
        updateEntry: InventoryContent.UpdateEntry,
        inventoryContent: InventoryServiceContent,
        inventoryData: InventoryData,
        clientRequestExt: ExtInstancedItemUpdate?,
        serverRequestExt: ExtInstancedItemServerUpdate?
      ): UpdateResult
      
      • Note that the data class UpdateResult has also been updated with a new parameter, but as it has a default value, no integration steps are required.
  • You may need to create your own test factory if you use certain InventoryProtoTestFactory methods.

    • Description: Certain InventoryProtoTestFactory methods have been changed to return the default instance.

    • Integration steps:

      • If you use any of the below InventoryProtoTestFactory methods, create your own test factory with the provided replacement or an appropriate equivalent.
      OriginalReplacement
      InventoryProtoTestFactory.extStackableSpec()
      
      fun extStackableSpec(i: Int) = generateProto(ExtStackableSpec::class, i)
      
      InventoryProtoTestFactory.extInstancedItemServerGrant(I:Int)
      
      
      fun extInstancedItemServerGrant(i: Int) = generateProto(ExtInstancedItemServerGrant::class, i)
      

Bugs and Fixes #

  • Removed references to the awsRegion configuration in the MultiplayCapacityProvider, as this value will always be eu-west-1 according to Multiplay.