Pragma Engine 0.0.53

February 1st, 2022

  • Users can now use map accessors instead of iterating over an array all the time.
  • Platform can be configured to bind to a port different from what it advertises.
  • Unreal can now build with Unity and PCH disabled.
  • Required integrations:
    • Some protos have been renamed, so relevant imports and references will need to be updated. See full notes for complete list.
    • New matchmaking function must be added to successfully compile.
    • Added suspend to LobbyStrategy interface functions.
    • Update references to renamed TestFactory classes.
    • Changed config getter method names in BaseServerIT class.
  • Bugfix:
    • Removed unsupported WebSocket scheme in HTTP responses for GET /v1/info.

Features #

  • Users can now use map accessors instead of iterating over an array all the time.

    • Description: ItemCatalog now has InstancedEntriesMap and StackableEntriesMap.
  • Platform can be configured to bind to a port different from what it advertises.

    • Description: Platform can now be configured to bind to a port different from what it’s advertising, such as when used behind a dynamically registering load balancer. Unless explicitly set in configuration, these values will default to the relevant socialPort/gamePort config values. This change is backwards compatible.
    • Details:
      • SocialPlayerGatewayConfig has new value socialBindPort.
      • GamePlayerGatewayConfig has new values socialBindPort and gameBindPort.
  • Unreal can now build with Unity and PCH disabled.

    • Description: The Unreal SDK now builds properly with both “Unity” and “PCH” disabled (strict IWYU).
  • Added new hooks to Lobby service to enable refreshing cached inventory and progression.

    • Description: We’ve added refreshInventory and refreshProgression functions to the LobbyPlayer data class passed to existing lobby plugins. These allow you to trigger updates to cached information from the client.
    • Details:
      • refreshInventory and refreshProgression functions return an updated copy of data and recache the new result with that player.
      • These functions take in an InventoryClient and ProgressionClient respectively, which can be constructed and used from within the plugin.
      • These calls should be invoked sparingly–not on every plugin call. We recommend using ext fields to make an UPDATE command that can be called from the client if the player is in a lobby and an operation causing a cache refresh occurs.

Integrations #

  • Some protos have been renamed, so relevant imports and references will need to be updated.

    • Description: Protos have been updated for consistency. Please make the changes below to ensure compatibility.
    • Integration steps:
      • Renamed rewardsContent.proto to rewardContent.proto.
        • Any imports will need to be updated.
      • Renamed RewardsCount message to RewardCount.
        • Any references and imports will need to be updated.
      • Renamed RewardsTable message to RewardTable.
        • Requires updating any code referencing RewardsTable proto messages, as well as the following InventoryTestFactory methods:
          OriginalReplacement
          rewardsTables()rewardTables()
          rewardsTable()rewardTable()
      • Moved RewardsCatalog from RewardContent.proto to InventoryRpc.proto.
        • This message was only used by RPC, not content. Any references and imports will need to be updated.
      • Renamed references to the following content access properties in InventoryServiceContent:
        OriginalReplacement
        stackableItemSpecsstackableSpecs
        instancedItemSpecsinstancedSpecs
        catalogUpdateEntriesupdateEntries
        rewardsTablesrewardTables
      • Renamed the following content files in the 5-ext/content/shared/:
        OriginalReplacement
        CatalogCraftingEntries.jsonCraftingEntries.json
        CatalogUpdateEntries.jsonUpdateEntries.json
        InstancedItemSpecs.jsonInstancedSpecs.json
        StackableItemSpecs.jsonStackableSpecs.json
  • New matchmaking function must be added to successfully compile.

    • Description: Add new function addToMatchAndBuildMatchmakingDetails to implementations of MatchmakingStrategy plugin. This will be used in our upcoming game loop systems.
    • Integration step:
      • Paste the following no-op stub into any MatchmakingStrategy implementations:
override fun addToMatchAndBuildMatchmakingDetails(
  matchmakingKey: ExtMatchmakingKey,
  partiesByTeamId: MutableMap<Int, MutableSet<MatchmakingParty>>,
  partyToAdd: MatchmakingParty
): ExtCreateMatchV1Request? {
  return null
}
  • Added suspend to LobbyStrategy interface functions.

    • Description: Added suspend to function definitions setExtPlayerInfo and setExtLobbyInfo.
    • Integration steps:
      • You will need to make the following changes:

        OriginalReplacement
        fun setExtPlayerInfosuspend fun setExtPlayerInfo
        fun setExtLobbyInfosuspend fun setExtLobbyInfo
      • If the code is called in mockk every or verify blocks, you will also need to update:

        OriginalReplacement
        every { lobbyStrategy.setExtLobbyInfo... }coEvery { lobbyStrategy.setExtLobbyInfo... }
        verify { lobbyStrategy.setExtLobbyInfo... }coVerify { lobbyStrategy.setExtLobbyInfo... }
  • Update references to renamed TestFactory classes.

    • Description: You will need to update references to any of the TestFactory classes listed below. These have been renamed for increased clarity.
    • Integration step:
      • If you have any tests using any TestFactory from this table, you will need to update your references to the new class name:
        OriginalReplacement
        (pragma.inventory.)TestFactoryInventoryTestFactory
        (pragma.matchmaking.)TestFactoryMatchmakingTestFactory
        (pragma.)InventoryTestFactoryInventoryProtoTestFactory
        (pragma.)MatchmakingTestFactoryMatchmakingProtoTestFactory
  • Changed method names in BaseServerIT class

    • Description: getConfigAsJsonNode() has been renamed to getGame ConfigAsJsonNode() and getSocialConfigAsJsonNode() has been added.
    • Integration step:
      • You will need to change all calls to getConfigAsJsonNode() to getGameConfigAsJsonNode().

Bugfix #

  • Removed unsupported WebSocket scheme in HTTP responses for GET /v1/info.
    • Description: HTTP requests to the GET /v1/info endpoint will no longer return the nonfunctioning wsScheme in the authenticateBackend section.

Deprecations #

OriginalReplacement
ItemCatalog.InstancedEntries/StackableEntriesItemCatalog.StackableEntriesMap/InstancedEntriesMap
ContentData.get(Long)ContentData.get(String)
ContentDataNodeService::getOrLoadContent()use ContentDataNodeService::getHandler() OR the ContentDataProxy class