March 1st, 2022

  • Limited Access Event Mode is now available via the Pragma Portal.
  • Required integration:
    • 5-ext/ext-protos/pom.xml has been updated and needs to be regenerated.
    • The Portal configuration location has changed.
    • longRangeProxy has been deprecated.
      • Removed InstancedItemPlugin.init method.
      • Updated RewardSelectorPlugin.init parameters.
    • runBlockingTestWithTimeout has been removed.
    • As part of a code cleanup, many runBlocking calls have been removed.
    • Several party ext protos have been renamed.
  • Improvements and bug fixes
    • Additional validation for storeEntries in Stores.json.
    • Fixed a crash in the SDK when trying to handle valid CraftV1 responses that contained Errors associated with the craft attempt.

Integrations: #

  • 5-ext/ext-protos/pom.xml has been updated and needs to be regenerated.
    • Description: 5-ext/ext-protos/pom.xml has been updated to add compatibility with Apple Silicon.
    • Integration steps:
      • Move your existing 5-ext/ext-protos/pom.xml out of the pragma-engine directory. (If you have never customized this file, you may instead delete it.)
      • Run make ext to regenerate the pom.xml file.
      • If you made customizations to this file, diff the new and old pom.xml files and manually restore the changes you have made.
  • The Portal configuration location has changed.
    • Description: Portal config has been moved out of game-config.json and social-config.json and is now in YAML (e.g. LocalConfig.yml or CommonConfig.yml) as part of the FilePortalModulePlugin settings.
    • Integration steps:
      • Most users will not want to directly translate the game-config.json and social-config.json to the yml; the defaults should remain in place for the majority of portal uses. Your config file should only have these entries (with the portalSource value being the path to the folder containing the portal HTML and JavaScript files):
      game:
        pluginConfigs:
          GameOperatorGatewayNodeService.portalPlugin:
            class: "FilePortalModulePlugin"
            config:
              portalSource: "web/portal-base"
      social:
        pluginConfigs:
          SocialOperatorGatewayNodeService.portalPlugin:
            class: "FilePortalModulePlugin"
            config:
              portalSource: "web/portal-base"
      
      • If you are doing something custom, you’ll want to include the relevant sections in the config to add or override the settings. Here’s an example:
      game:
        pluginConfigs:
          GameOperatorGatewayNodeService.portalPlugin:
            class: "FilePortalModulePlugin"
            config:
              portalSource: "custom/portal/path" //override
              modules:
                1: "PlayerSupport"
                2: null //disable a module
                3: "ContentCatalogs"
                100: "MyCustomGameModule" //add custom module
              defaultModule: "MyCustomGameModule" //override
              discordClientId: "DISCORD_CLIENT_ID" //override
      social:
        pluginConfigs:
          SocialOperatorGatewayNodeService.portalPlugin:
            class: "FilePortalModulePlugin"
            config:
              portalSource: "custom/portal/path" //override
              modules:
                1: "Accounts"
                2: null //disable a module
                100: "MyCustomSocialModule" //add custom module
              defaultModule: "MyCustomSocialModule" //override
              discordClientId: "DISCORD_CLIENT_ID" //override
      
  • longRangeProxy has been deprecated.
    • Description: Please use randomProxy instead of longRangeProxy.
    • Details:
      • See 2-pragma/core/src/main/kotlin/pragma/utils/RandomProxy.kt for implementation details.
      • See 2-pragma/core/src/test/kotlin/pragma/utils/RandomProxyTest.kt for example usages.
      • Note the two integration items below regarding InstancedItemPlugin.init and RewardSelectorPlugin.init.
  • Removed InstancedItemPlugin.init method.
    • Description: Removed InstancedItemPlugin.init as longRangeProxy has been removed.
  • Updated RewardSelectorPlugin.init parameters.
    • Description: longRangeProxy has been deprecated.
    • Integration step: use randomProxy in place of longRangeProxy.
OriginalReplacement
fun init(
  randomProxy: LongRangeProxy,
  content: InventoryServiceContent
)
fun init(
  content: InventoryServiceContent
)
  • runBlockingTestWithTimeout has been removed.
    • Description: We have updated the runBlocking functions for unit tests.
    • Integration steps:
      • Use runTest in place of runBlockingTestWithTimeout for unit tests.
      • Use runIntegrationTest in place of runBlockingTestWithTimeout for integration tests.
OriginalReplacement

runBlockingTestWithTimeout

runTest for unit tests

runIntegrationTest for integration tests

  • As part of a code cleanup, many runBlocking calls have been removed.

    • Description: Many runBlocking calls have been removed. This will require changes in your codebase.
    • Integration step: Make the following changes in your code.
    OriginalReplacement
    TestAccountManager.operatorClientTestAccountManager.getOperatorClient()
    TestAccountManager.partnerClientTestAccountManager.getPartnerClient()
    PragmaClientFactory.playerEndpointInfoPragmaClientFactory.getPlayerEndpointInfo()
    PragmaClientFactory.operatorEndpointInfoPragmaClientFactory.getOperatorEndpointInfo()
    PragmaClientFactory.partnerEndpointInfoPragmaClientFactory.getPartnerEndpointInfo()
  • Several party ext protos have been renamed.

    • Description: As part of the ongoing development of the party service, a couple ext protos have been renamed. You will need to make changes in 5-ext to have empty definitions for these new protos in order to compile.
    • Integration step: Make the following changes in 5-ext/ext-protos/src/main/proto/shared/partyExt.proto.
    OriginalReplacement
    ExtPartyDetailsExtPublicPartyData
    ExtPartyPlayerExtPublicPlayerData

Features: #

  • Limited Access Event Mode is now available via the Pragma Portal.
    • Description: Limited Access Events (LAEs) restrict which Players can log in and stay logged in to a specific Game Shard by associating Player Groups to an LAE. LAEs also have a start and an end date that will indicate how long the LAE is enforced. LAEs can be turned on in the portal by setting a Game Shard Access Mode to Specific Groups.

Bugs and fixes: #

  • Additional validation for storeEntries in Stores.json.
    • Description: The content system will now ensure that StoreEntries have receivedQuantityByCatalogId field populated. This check is performed during content apply and service startup, and the engine will not start if this field is missing.
  • Fixed a crash in the SDK when trying to handle valid CraftV1 responses that contained Errors associated with the craft attempt.