Documentation index for AI agents

GS2-Experience Transaction Actions

Specification of verify/consume/acquire transaction actions

Combining actions, and concurrency

The background common to every service is collected in Combining Transaction Actions. Read that first; the rest of this section is what GS2-Experience adds to it.

The transaction actions of GS2-Experience address one status, identified by the combination of namespace, user, experience model, and property. A status holds the experience value, the rank, the rank cap, and the experience required for the next rank together.

OperationRepeated in one transactionAcross a nested transactionBoundary that separates targets
Adding experience
AddExperienceByUserId
Combined, and the values are added upFailsnamespace, user, experience model, property
Subtracting experience
SubExperienceByUserId
Combined, and the values are added upFailsnamespace, user, experience model, property
Setting experience
SetExperienceByUserId
Combined if equal; rejected when the transaction is issued if the values differFailsnamespace, user, experience model, property
Adding to the rank cap
AddRankCapByUserId
Combined, and the values are added upFailsnamespace, user, experience model, property
Subtracting from the rank cap
SubRankCapByUserId
Combined, and the values are added upFailsnamespace, user, experience model, property
Setting the rank cap
SetRankCapByUserId
Combined if equal; rejected when the transaction is issued if the values differFailsnamespace, user, experience model, property
Expanding into other actions
MultiplyAcquireActionsByUserId
Combined, and the inner actions are gathered into one listUpdates nothing itself
All verify actionsFirst winsNo collision, because they only readtarget, verify type, required rank or rank cap

The six update rows all share one boundary, so any two different rows against the same status make the transaction fail. Adding experience together with adding to the rank cap, adding together with subtracting, adding together with setting: all of these are two rows on one boundary. Values can only be added up between actions on the same row.

An update arriving across a nested transaction fails even where the total stays within the band of the current rank.

Verify actions look at the status as of the start of the transaction. You cannot verify a rank or a rank cap that is reached by the same transaction.

MultiplyAcquireActionsByUserId reads the rank and issues the actions it was given, multiplied, as a transaction of its own. It updates nothing itself, but the restrictions of the services those expanded actions belong to apply as they are.

Take care with nested transactions

Even two AddExperienceByUserId, which would have been combined if written side by side, make the transaction fail when one of them arrives from the inside. Take the contents of any rewards or draws into account as well, and design so that only one place in a transaction updates one status.

If you want to avoid these restrictions

Adding to and setting experience or a rank cap are acquire actions; subtracting is a consume action. Turning acquireActionUseJobQueue on clears collisions between acquire actions, but an addition together with a subtraction needs enableAtomicCommit turned off.

Concurrency and retries

Additions and subtractions that stay within a rank do not collide however many concurrent requests overlap. This is what the band guard buys.

A conflict (409) is returned when concurrent changes pile up far enough to actually change the rank, when the rank cap changes at the same time, or when a change made through the console or the server API overlaps. Nothing is wrong with the request, so retrying will succeed. Gathering grants into one request reduces how often this happens.


Verify Action

Gs2Experience:VerifyRankByUserId

Verify rank by User ID

Verifies that the specified user’s current rank satisfies a condition against a specified value. Supports six comparison operators: less, lessEqual, greater, greaterEqual, equal, notEqual. Returns an error (BadRequest) if the verification condition is not met.

Quantity specification supported: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
verifyTypestring (enum)
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
Type of verification
DefinitionDescription
lessRank is less than the specified value
lessEqualRank is less than or equal to the specified value
greaterRank is greater than the specified value
greaterEqualRank is greater than or equal to the specified value
equalRank is equal to the specified value
notEqualRank is not equal to the specified value
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rankValuelong00 ~ 9223372036854775805Current Rank
The rank (level) derived from the cumulative experience value using the rank threshold table. Starts at 0 and increases as experience thresholds are crossed. Cannot exceed the current rank cap value.
multiplyValueSpecifyingQuantityboolfalseWhether to multiply the value used for verification when specifying the quantity
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:VerifyRankByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "verifyType": "[string]Type of verification",
        "propertyId": "[string]Property ID",
        "rankValue": "[long]Current Rank",
        "multiplyValueSpecifyingQuantity": "[bool]Whether to multiply the value used for verification when specifying the quantity",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:VerifyRankByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  verifyType: "[string]Type of verification"
  propertyId: "[string]Property ID"
  rankValue: "[long]Current Rank"
  multiplyValueSpecifyingQuantity: "[bool]Whether to multiply the value used for verification when specifying the quantity"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").verify.verify_rank_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    verifyType="[string]Type of verification",
    propertyId="[string]Property ID",
    rankValue="[long]Current Rank",
    multiplyValueSpecifyingQuantity="[bool]Whether to multiply the value used for verification when specifying the quantity",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:VerifyRankCapByUserId

Verify rank cap by User ID

Verifies that the specified user’s current rank cap (including buff effects) satisfies a condition against a specified value. Supports six comparison operators: less, lessEqual, greater, greaterEqual, equal, notEqual. Returns an error (BadRequest) if the verification condition is not met.

Quantity specification supported: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
verifyTypestring (enum)
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
Type of verification
DefinitionDescription
lessRank cap is less than the specified value
lessEqualRank cap is less than or equal to the specified value
greaterRank cap is greater than the specified value
greaterEqualRank cap is greater than or equal to the specified value
equalRank cap is equal to the specified value
notEqualRank cap is not equal to the specified value
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rankCapValuelong
0 ~ 9223372036854775805Current Rank Cap
The maximum rank this status can currently reach. Initially set to the experience model’s defaultRankCap, and can be raised up to maxRankCap through rank cap increase operations such as limit breaking.
multiplyValueSpecifyingQuantityboolfalseWhether to multiply the value used for verification when specifying the quantity
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:VerifyRankCapByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "verifyType": "[string]Type of verification",
        "propertyId": "[string]Property ID",
        "rankCapValue": "[long]Current Rank Cap",
        "multiplyValueSpecifyingQuantity": "[bool]Whether to multiply the value used for verification when specifying the quantity",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:VerifyRankCapByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  verifyType: "[string]Type of verification"
  propertyId: "[string]Property ID"
  rankCapValue: "[long]Current Rank Cap"
  multiplyValueSpecifyingQuantity: "[bool]Whether to multiply the value used for verification when specifying the quantity"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").verify.verify_rank_cap_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    verifyType="[string]Type of verification",
    propertyId="[string]Property ID",
    rankCapValue="[long]Current Rank Cap",
    multiplyValueSpecifyingQuantity="[bool]Whether to multiply the value used for verification when specifying the quantity",
    timeOffsetToken="[string]Time offset token",
})

Consume Action

Gs2Experience:SubExperienceByUserId

Subtract experience by User ID

Subtracts experience points from the specified user’s status. Experience will not go below 0. Rank is automatically recalculated based on the rank-up threshold values.

Quantity specification supported: YES

Reversible action: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
experienceValuelong00 ~ 9223372036854775805Lost Experience
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:SubExperienceByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "experienceValue": "[long]Lost Experience",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:SubExperienceByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  experienceValue: "[long]Lost Experience"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").consume.sub_experience_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    experienceValue="[long]Lost Experience",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:SubRankCapByUserId

Subtract rank cap by User ID

Decreases the rank cap of the specified user’s status. The rank cap will not go below 0.

Quantity specification supported: YES

Reversible action: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rankCapValuelong
0 ~ 9223372036854775805Current Rank Cap
The maximum rank this status can currently reach. Initially set to the experience model’s defaultRankCap, and can be raised up to maxRankCap through rank cap increase operations such as limit breaking.
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:SubRankCapByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "rankCapValue": "[long]Current Rank Cap",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:SubRankCapByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  rankCapValue: "[long]Current Rank Cap"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").consume.sub_rank_cap_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    rankCapValue="[long]Current Rank Cap",
    timeOffsetToken="[string]Time offset token",
})

Acquire Action

Gs2Experience:AddExperienceByUserId

Add experience by User ID

Adds experience points to the specified user’s status. Rank is automatically recalculated based on the rank-up threshold values. When truncateExperienceWhenRankUp is true, excess experience beyond the rank-up threshold is discarded on rank up; when false (default), it carries over to the next rank.

Quantity specification supported: YES

Reversible action: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
experienceValuelong00 ~ 9223372036854775805Gained Experience
truncateExperienceWhenRankUpbool?falseWhether to truncate the remaining experience when ranking up
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:AddExperienceByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "experienceValue": "[long]Gained Experience",
        "truncateExperienceWhenRankUp": "[bool]Whether to truncate the remaining experience when ranking up",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:AddExperienceByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  experienceValue: "[long]Gained Experience"
  truncateExperienceWhenRankUp: "[bool]Whether to truncate the remaining experience when ranking up"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").acquire.add_experience_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    experienceValue="[long]Gained Experience",
    truncateExperienceWhenRankUp="[bool]Whether to truncate the remaining experience when ranking up",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:SetExperienceByUserId

Set experience by User ID

Directly sets the experience value for the specified user’s status to an exact value. Captures and returns the state before the update as ‘old’, in addition to the updated status. Rank is automatically recalculated based on the rank-up threshold values.

Quantity specification supported: YES

Reversible action: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
experienceValuelong00 ~ 9223372036854775805Cumulative experience gained
The total experience value accumulated by this status. The current rank is derived from this value using the rank threshold table. Experience cannot be gained beyond the threshold corresponding to the current rank cap.
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:SetExperienceByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "experienceValue": "[long]Cumulative experience gained",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:SetExperienceByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  experienceValue: "[long]Cumulative experience gained"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").acquire.set_experience_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    experienceValue="[long]Cumulative experience gained",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:AddRankCapByUserId

Add rank cap by User ID

Increases the rank cap of the specified user’s status. The rank cap cannot exceed the maxRankCap defined in the Experience Model. The rank cap determines the maximum rank a user can achieve for the specified property.

Quantity specification supported: YES

Reversible action: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rankCapValuelong
0 ~ 9223372036854775805Current Rank Cap
The maximum rank this status can currently reach. Initially set to the experience model’s defaultRankCap, and can be raised up to maxRankCap through rank cap increase operations such as limit breaking.
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:AddRankCapByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "rankCapValue": "[long]Current Rank Cap",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:AddRankCapByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  rankCapValue: "[long]Current Rank Cap"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").acquire.add_rank_cap_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    rankCapValue="[long]Current Rank Cap",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:SetRankCapByUserId

Set rank cap by User ID

Directly sets the rank cap value for the specified user’s status to an exact value. Captures and returns the state before the update as ‘old’, in addition to the updated status. The rank cap is capped at the maxRankCap defined in the Experience Model.

Quantity specification supported: NO

Reversible action: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rankCapValuelong
0 ~ 9223372036854775805Current Rank Cap
The maximum rank this status can currently reach. Initially set to the experience model’s defaultRankCap, and can be raised up to maxRankCap through rank cap increase operations such as limit breaking.
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:SetRankCapByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "rankCapValue": "[long]Current Rank Cap",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:SetRankCapByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  rankCapValue: "[long]Current Rank Cap"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").acquire.set_rank_cap_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    rankCapValue="[long]Current Rank Cap",
    timeOffsetToken="[string]Time offset token",
})

Gs2Experience:MultiplyAcquireActionsByUserId

Multiply resources according to the rank of the property subject to the experience value by specifying user ID

Looks up the acquire action rate for the specified rateName based on the property’s current rank value, multiplies the specified acquire actions by that rate (combined with baseRate), and starts a transaction to execute the resulting actions. This is used for rank-based reward scaling, where higher ranks earn proportionally more resources.

Quantity specification supported: YES

Reversible action: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Unique Namespace name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Specify #{userId} to substitute the currently logged-in user’s ID.
experienceNamestring
~ 128 charsExperience Model name
The name of the experience model that defines the ranking rules for this status. Determines which rank threshold table and rank cap settings are applied.
propertyIdstring
~ 1024 charsProperty ID
A developer-defined identifier that uniquely identifies this status within the user’s scope. It is recommended to use a value that appends an experience model suffix to the GS2-Inventory Item Set GRN or GS2-Dictionary Entry GRN that possesses the experience.
rateNamestring
~ 128 charsReward addition table name
A unique identifier for this reward addition table. Referenced when specifying which multiplier table to apply to a particular acquire action.
acquireActionsList<AcquireAction>[]0 ~ 100 itemsList of Acquire Actions
baseRatefloat10 ~ 1000000Base rate
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Experience:MultiplyAcquireActionsByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "experienceName": "[string]Experience Model name",
        "propertyId": "[string]Property ID",
        "rateName": "[string]Reward addition table name",
        "acquireActions": [
            {
                "action": "[string]Type of Acquire Action",
                "request": "[string]JSON string of the request used when executing the action"
            }
        ],
        "baseRate": "[float]Base rate",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Experience:MultiplyAcquireActionsByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  experienceName: "[string]Experience Model name"
  propertyId: "[string]Property ID"
  rateName: "[string]Reward addition table name"
  acquireActions: 
    - action: "[string]Type of Acquire Action"
      request: "[string]JSON string of the request used when executing the action"
  baseRate: "[float]Base rate"
  timeOffsetToken: "[string]Time offset token"
transaction.service("experience").acquire.multiply_acquire_actions_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    experienceName="[string]Experience Model name",
    propertyId="[string]Property ID",
    rateName="[string]Reward addition table name",
    acquireActions={
        {
            action="[string]Type of Acquire Action",
            request="[string]JSON string of the request used when executing the action"
        }
    },
    baseRate="[float]Base rate",
    timeOffsetToken="[string]Time offset token",
})