June 1st, 2022

Features #

  • Inventory items can now be hidden from players.

    • Description: Player stats such as matchmaking ratings can be tracked as ext fields on instanced items. These items can now be hidden to avoid leaking data to players.

      The table below contains a list of affected service calls and their new behavior.

    Service callDescription
    craftV1, storePurchaseV4, updateItemV4, and updateItemsV0returned segments/deltas won’t contain items with tags that match the configuration
    getStoresV0return stores will not contain store entries with tags that match the configuration
    getInventoryV2returned inventory will not contain instanced and stackables whose corresponding content specs contain tags that match the configuration
    GameDataService.GetLoginDataV1 which uses InventoryService.GetLoginDatareturned player inventory and content items (stores, update entries, item catalog, crafting entries, etc) are all filtered based on the tags in the configuration
    GetInventoryServiceV3inventory data split by hidden and player visible items
    UpdateItemsPartnerV2, UpdateItemsServiceV2, and GrantItemsServiceV2segments/deltas split by hidden and player visible items
  • Game server hostname and port information can now be provided as part of the MatchReadyV1Notification.

    • Description: Previously, game servers communicated hostname and port information to game clients via ext behavior. We’ve promoted this functionality into base Pragma. Game servers can now provide hostname and port information through the MatchLifecycleService.MatchReadyV2 endpoint. However, if you’ve already implemented this functionality via ext, you can keep using that implementation indefinitely.
  • Operators can now clear all inventory caches.

    • Description: Added Operator endpoint for ClearAllInventoryCacheOperatorV1Request. This already existed as a Service endpoint, and is now available for Operator.
  • Partners can now get filtered Pragma account overviews.

    • Description: Added Partner endpoint for GetPragmaAccountOverviewsPartnerV1Request. This already existed as an Operator endpoint, and is now available via Partner.
  • Partners can now get full inventory for a player.

    • Description: Added Partner endpoint for GetInventoryPartnerV1Request. This already existed as an Operator endpoint, and is now available via Partner.
  • [Portal] The content catalog is now shown in a more readable format by default with JSON rendering of ext data.

  • [Portal] Date of player account creation and last login is now shown.

  • [Portal] Rendering of date and time throughout Pragma Portal is now consistent.

    • Description: Datetimes are now shown in 24h format in the browser’s timezone. On hover, the UTC datetime is shown. Example: 27 May 2022 14:34:12 (Europe/Bucharest).

Deprecations #

  • Remove any references to LeaderClientVersion field.
    • Description: The LeaderClientVersion field of EnterMatchmakingV2Request RPC and MatchmakingParty Kotlin object is being removed as it is unnecessary.
      OriginalReplacementRemoval Patch
      LeaderClientVersion field of EnterMatchmakingV2Request RPC and MatchmakingParty objectNo replacement needed0.0.71
  • Update deletePlayerInventory endpoints to new versions to remove Progression service data.
OriginalReplacementRemoval Patch

InventoryService.deletePlayerInventoryV1

  • InventoryRpc.DeletePlayerInventoryV1Request
  • InventoryRpc.DeletePlayerInventoryV1Response

InventoryService.deletePlayerInventoryV2

  • InventoryRpc.DeletePlayerInventoryV2Request
  • InventoryRpc.DeletePlayerInventoryV2Response
0.0.71
  • Update endpoints to new versions to capture Progression service removals.
    • Description: Endpoints that currently return progression-related data are being versioned to no longer include the progression data fields.

      The Inventory and Lobby service RPC calls only require integration if you’re calling them from a custom service. Pragma Engine handles all version bumps for Pragma-owned services.

OriginalReplacementRemoval Patch

InventoryService.matchEndV2

  • InventoryRpc.MatchEndV2Request
  • InventoryRpc.MatchEndV2Response

InventoryService.matchEndV4

  • InventoryRpc.MatchEndV4Request
  • InventoryRpc.MatchEndV4Response
0.0.72

LobbyService.lockV1

  • LobbyRpc.LockV1Request
  • LobbyRpc.LockV1Response

LobbyService.lockV2

  • LobbyRpc.LockV2Request
  • LobbyRpc.LockV2Response
0.0.72

MatchLifecycleService.matchEndV3

  • MatchLifecycleRpc.MatchEndV3Request
  • MatchLifecycleRpc.MatchEndV3Response

MatchLifecycleService.matchEndV4

  • MatchLifecycleRpc.MatchEndV4Request
  • MatchLifecycleRpc.MatchEndV4Response
0.0.72

Integrations #

  • Create a new recreateParty function definition.

    • Description: We’ve added a new plugin flow to the PartyService which will enable handling recreated parties with custom logic.
    • Integration steps:
      • Add a new recreateParty function definition to custom implementations of PartyPlugin in order to compile.
  • Replace listed InventoryRpc protos.

    • Description: We’ve completed the move from the listed protos and are now removing the old ones.
    • Integration step: Replace the listed InventoryRpc protos.
      OriginalReplacement
      InstancedDeltaInstancedDeltaV2
      InventoryDeltaV1DataInstancedDeltaV2
  • Move over from the Progression service to the Inventory service.

    • Description: The Progression service is being removed.
    • Integration step: If you are currently using the Progression service, please contact us for help moving over to the Inventory service.
  • Remove gatewayWorkerThreadpoolSize value in config YAML files.

    • Description: Ktor defaults create thread pools of the appropriate size, so this configuration is not needed.
    • Integration step: Remove gatewayWorkerThreadpoolSize value in config YAML files.
  • Add required Maven dependency to 5-ext/ext/pom.xml.

    • Description: We’re moving Test Factory classes into the core engine to better separate the proto auto generated code steps from the rest of the engine build. In the future, generated code will be embedded directly into the engine library, rather than linked through a library dependency. This will streamline incremental builds and make the overall engine project structure simpler.

    • Integration step: Add the following Maven dependency to 5-ext/ext/pom.xml if it is not already here. If pragma.mvn.version is undefined, match whatever version you are using for other engine dependencies (eg. ${revision}, or PRAGMA-LOCAL-SNAPSHOT).

      <dependency>
          <groupId>pragma</groupId>
          <artifactId>core</artifactId>
          <version>${pragma.mvn.version}</version>
          <type>test-jar</type>
          <scope>test</scope>
      </dependency>
      
  • Create a new local configuration file to continue using custom portlets.

    • Description: Custom portlets can now be loaded from any custom directory under platform/web/portal/src/portlets. If you currently have a portlets/5-ext directory with custom portlets, follow the integration steps to include them in the build.
    • Integration steps:
      • Create platform/web/portal/portalDevConfig.local.js (next to portalDevConfig.default.js).

      • Add the following contents to portalDevConfig.local.js:

        module.exports = {
            default: {
                'portlets.extraSrcDirs': ['5-ext']
            },
            deploy: {
                target: ['5-ext/portal']
            }
        }
        
  • Make the following changes for project structure improvements.

    • Description: To enable the recent project structure improvements, make the following changes, which are listed by file.
    • Integration steps:
      • In 5-ext/pom.xml:

        • Remove <module>ext-protos</module> from <modules>.
        • Add <groupid>[studio_name]</groupid> above <artifactId> tag.
        • Add the following properties block:
        <properties>
          <revision>[project_name]-LOCAL-SNAPSHOT</revision>
          <company>[project_name]</company>
          <pragma.version>LOCAL</pragma.version>
          <pragma.mvn.version>PRAGMA-LOCAL-SNAPSHOT</pragma.mvn.version>
        </properties>
        
      • In 5-ext/ext/pom.xml:

        • Change <parent><groupId>pragma</groupId></parent> to <parent><groupId>[studio_name]</groupId></parent> with your studio’s name in the brackets.
        • Change the following dependency block:
        OriginalReplacement
        <dependency>
            <groupId>pragma</groupId>
            <artifactId>ext-protos</artifactId>
            <version>${revision}</version>
        </dependency>
        <dependency>
            <groupId>pragma</groupId>
            <artifactId>ext-protos</artifactId>
            <version>${revision}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>[studio_name]</groupId>
            <artifactId>ext-protos</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>[studio_name]</groupId>
            <artifactId>ext-protos</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        
        • Change the following dependency block:
        OriginalReplacement
        <dependency>
            <groupId>pragma</groupId>
            <artifactId>core</artifactId>
            <version>${revision}</version>
        </dependency>
        
        <dependency>
            <groupId>pragma</groupId>
            <artifactId>core</artifactId>
            <version>${pragma.mvn.version}</version>
        </dependency>
        
      • For each of the dependencies listed, update ${revision} to ${pragma.mvn.version}. Be sure to check for and update two dependency blocks, one default, and one with <type>test-jar</type>:

        • pragma.core
        • pragma.server-base
        • pragma.social
        • pragma.game
        • pragma.game-common
        • Pragma.social-common
      • In 5-ext/ext-protos/pom.xml:

        • Make the following parent change:
        OriginalReplacement
        <parent>
            <groupId>pragma</groupId>
            <artifactId>5-ext</artifactId>
            <version>${revision}</version>
        </parent>
        
        <parent>
            <groupId>pragma</groupId>
            <artifactId>engine-settings</artifactId>
            <version>PRAGMA-LOCAL-SNAPSHOT</version>
            <relativePath>../../engine-settings.xml</relativePath>
        </parent>
        
        • Add <groupId>[studio_name]</groupId> above the <artifactId> tag.
        • Add <version>[studio_name]-LOCAL-SNAPSHOT</version> below the <artifactId> tag.
        • For each of the dependencies listed, update ${revision} to ${pragma.mvn.version}:
          • pragma.proto-defs
          • pragma.proto-defs (<type>test-jar</type>)
      • In 5-ext/ext-server/pom.xml:

        • For the pragma.server-base dependency, update ${revision} to ${pragma.mvn.version}.
        • Change <parent><groupId>pragma</groupId></parent> to <parent><groupId>[studio_name]</groupId></parent>.
        • Make the following dependency change:
        OriginalReplacement
        <dependency>
            <groupId>pragma</groupId>
            <artifactId>ext</artifactId>
            <version>${revision}</version>
        </dependency>
        
        <dependency>
            <groupId>[studio_name]</groupId>
            <artifactId>ext</artifactId>
            <version>${project.version}</version>
        </dependency>
        

Bugs and Fixes #

  • SDK RefreshToken flows now run at appropriate intervals.
    • Description: Authentication token intervals were previously dependent on clients’ clocks, leading to incorrect refresh intervals when clocks were incorrect. Token refresh intervals are now independent of player clocks.
  • Searching for display names containing the # (number sign) character now works properly.