September 13th, 2022

Features #

Twitch authentication now available.

  • Description: You can now use TwitchIdentityProviderPlugin to configure Twitch login with Pragma Engine.

Added endpoint that returns a map of grouped content data for any given content type.

  • Description: Added new getContentSourceOperatorV1 endpoint in Inventory service that returns content data grouped by source file for a given content type.

Party leaders can now assign a new leader or add additional leaders.

  • Description: A party leader can assign another player to be party leader by calling assignPartyLeaderV1 with the PragmaId of the player to assign.

    When PartyConfig enableTransferPartyLeader is true, the player that calls assignPartyLeaderV1 will lose leader privileges (default behavior). If enableTransferPartyLeader is set to false, the assignPartyLeaderV1 call will result in multiple leaders in the party.

  • Unity SDK:

    public void AssignPartyLeaderV1(PragmaId playerId, CompleteDelegate onComplete)
    
    public Future AssignPartyLeaderV1(PragmaId playerId)
    
    • Helper to get the list of all leaders: IReadOnlyList<IPartyPlayer> GetAllLeaders()
  • Unreal SDK:

    void UPragmaPartyService::AssignPartyLeaderV1(const FString& PlayerId, const FOnCompleteDelegate& OnComplete)
    
    TFuture<TPragmaResult<>> UPragmaPartyService::AssignPartyLeaderV1(const FString& PlayerId)
    
    • Helper to get the list of all leaders: TArray<UPragmaPartyPlayer*> UPragmaParty::GetAllLeaders() const

Deprecations #

If you’re using getHostPortMap on AbstractDaoNodeService, switch to hostPortSchemas in DatabaseConfig.

  • Description: Moving this functionality has allowed us to do some cleanup and remove unnecessary code. Any use of DbCleaner will need to be updated by removing the second argument.
OriginalReplacementRemoval Patch
AbstractDaoNodeService::getHostPortMapDatabaseConfig::hostPortSchemas0.0.85

Integrations #

If you currently have sharded inventory data, to prepare for the new dynamic sharding strategy, you’ll need to manually copy the inventory data to retain it.

  • Description: The default sharding strategy is changing. This update changes how we determine where data is stored and will impact studios with existing inventory and payment data who have multiple databases configured.

    You must manually copy inventory data in order to keep any that is in a sharded state.

  • Integration step:

    • Data copying: Manual data copying is very dependent on how many databases you currently have.

      You will need to back up all data, run a SQL copy of all relevant tables (inventory) from database shard 2 into shard 1, and configure inventory to utilize only one shard going forward.

      InventoryDaoConfig:
          databaseConfig:
              driver: "MYSQLDB"
              username: "superuser"
              password: "password"
              hostPortSchemas:
                  1: "localhost:3306/local_game_player_inventory1"
      

      You will then need to rebalance your data. Please reach out if you need any support so we can assist.

If you’re relying on default values in your configs, you’ll need to add back a shard to continue using both local shards, as the default behavior has been changed to use a single shard.

  • Description: For configs that rely on default values, this change will make your environment only use a single database shard.
  • Integration step: Add the second connection in your config to continue using both local shards.
  • Example:
InventoryDaoConfig:
    databaseConfig:
        driver: "MYSQLDB"
        username: "superuser"
        password: "password"
        hostPortSchemas:
            1: "localhost:3306/local_game_player_inventory1"
            2: "localhost:3306/local_game_player_inventory2"

For managed infrastructure customers, ensure that the 5-ext/buildkite/config.json file exists.

  • Description: All Pragma Engine-related Buildkite builds are now handled via the pragma-ci-cd-buildkite-plugin. As a result, Buildkite-related scripts have been migrated from pragma-engine into the plugin. As of this release, the Buildkite-related scripts are being deleted from pragma-engine, so you must ensure the pragma-ci-cd-buildkite-plugin is in use to continue using Buildkite.
  • Integration steps:
    • Confirm that 5-ext/buildkite/config.json exists. config.json only requires a plugin-version field. The file should look something like this:
    {
    "plugin_version": "0.0.43"
    }
    
    • Confirm that the value of plugin_version is at least equal to the version in 4-demo/buildkite/config.json.

Unreal SDK: Rename UpdatePlayerSelectionsV1 to CanUpdatePlayerSelectionsV1 to match naming patterns.

  • Description: This change was made to fix a naming inconsistency.
  • Integration step: Update the following instances:
OriginalReplacement
bool UPragmaPartyService::UpdatePlayerSelectionsV1() constbool UPragmaPartyService::CanUpdatePlayerSelectionsV1() const
bool UPragmaPartyService::UpdatePlayerSelectionsV1(FPragmaError& OutError) constbool UPragmaPartyService::CanUpdatePlayerSelectionsV1(FPragmaError& OutError) const

Bugs and Fixes #

Improved error messaging when linking accounts to other identity providers.

  • Description: For the HTTP endpoint /v1/account/linkidentityprovideraccount EXPECTED errors will now include the PragmaError ID and print out debug information when in DEVELOPMENT. UNEXPECTED errors will still return an empty 403 response.

SDK integration simplified with a new variable in the update-pragma-sdk.sh script that specifies the relative path within a Pragma Engine git repository.

The Arbiter repo has been moved to a new location. It will now be version tagged to provide an easier way to cross-reference against your own code.

Docs #

[Updated Services Guide] Quick Guide on kicking a player added to Party page.

[Updated Services Guide] New example for extension data on the Plugins and Extension Data page.

[Updated Introduction Guide] Updated instructions on the Initial Setup page.

[New Services Guide] Added page on Custom Errors to the Customization section.