GS2-Experience トランザクションアクション

検証/消費/入手の各トランザクションアクションの仕様

アクションの組み合わせと同時実行

すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-Experience 固有の内容です。

GS2-Experience のトランザクションアクションは、ネームスペース・ユーザー・経験値モデル・プロパティの組で決まる 1 つのステータスを対象にします。ステータスは経験値・ランク・ランク上限・次のランクアップに必要な経験値をまとめて保持します。

操作 同じ行を重ねたとき 入れ子越し 別の対象になる境界 直列実行モード有効時
経験値の加算
AddExperienceByUserId
統合され、値が合算される 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 変わらず失敗する。加算は経験値への増分として書き込まれ、同じステータスへの 2 つの増分はそれぞれが持つ検査をまとめられないため
経験値の減算
SubExperienceByUserId
統合され、値が合算される 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 経験値の加算と同じ理由で、変わらず失敗する
経験値の設定
SetExperienceByUserId
同値なら統合。値が違えば発行時にエラー 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 入れ子越しでも成立する。同値なら通り、値が違えば後から実行された方の値になる
ランク上限の加算
AddRankCapByUserId
統合され、値が合算される 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 成立する。入れ子越しでも合算される
ランク上限の減算
SubRankCapByUserId
統合され、値が合算される 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 成立する。入れ子越しでも合算される
ランク上限の設定
SetRankCapByUserId
同値なら統合。値が違えば発行時にエラー 失敗する ネームスペース・ユーザー・経験値モデル・プロパティ 入れ子越しでも成立する。同値なら通り、値が違えば後から実行された方の値になる
他のアクションへの展開
MultiplyAcquireActionsByUserId
統合され、内側のアクションが 1 つのリストにまとめられる 自身は何も更新しない — 変わらない。自身は何も更新しない
検証アクション全般 まったく同じ検証は 1 件にまとめられる 読み取りだけなので衝突しない ステータス・検証タイプ・必要ランク / ランク上限 変わらない。読み取りだけなのでもともと衝突しない

更新する 6 つの行はすべて境界が同じです。同じステータスに対して違う行を 2 つ入れると、トランザクションが失敗します。経験値の加算とランク上限の加算、加算と減算、加算と設定は、どれも 1 つの境界に対する 2 つの行です。値を合算できるのは同じ行のアクションどうしだけです。直列実行モード(enableSequentialExecution または TransactionSettingV2)を有効にすると、この制約の一部はなくなりますが、経験値そのものについては残ります。経験値の設定とランク上限の 3 行はステータス全体を書き換えるため、同じステータスに対してこれらのうち 2 つを 1 つのトランザクションに入れられるようになります。値は、正規化後の実行順で後から実行された方のアクションの値になります(記述順ではありません)。経験値の加算・減算は違います。これらは経験値への増分として書き込まれ、他の増分とも、後から実行されるステータス全体の書き換えともまとめられません。経験値の加算・減算は 1 つのトランザクションにつき 1 つのステータスに 1 件までにし、同じステータスへのランク上限の更新や設定を同居させないでください。

multiplyValueSpecifyingQuantity を明示的に true にしたときだけ、しきい値が合算され数量に応じて倍になります。 未指定は、まったく同じ検証が 1 件にまとめられるだけです。明示的に true にした場合は検証タイプを問わず合算されます。しきい値を「1 個あたりの量」として宣言したことになるためです。less lessEqual では数量が増えるほど条件が緩むので、指定するときは意図を確認してください。

検証アクションはトランザクション開始時点のステータスを見ます。同じトランザクションで到達するランクやランク上限を検証することはできません。

MultiplyAcquireActionsByUserId はランクを読み取り、渡されたアクションに倍率を掛けて自身のトランザクションとして発行します。自身は何も更新しませんが、展開後のアクションが属するサービスの制限がそのまま当てはまります。

入れ子になったトランザクションに注意

並べて書けば 1 件に統合されたはずの AddExperienceByUserId 同士でも、片方が内側から届く場合はトランザクションが失敗します。報酬や抽選の中身まで含めて、1 つのトランザクションの中で同じステータスを更新する箇所が 1 つだけになるように設計してください。

直列実行モードを有効にしても、この失敗は無くなりません。内側のトランザクションは外側と同じ直列実行の区間で実行されるようになりますが、2 つの AddExperienceByUserId は同じ値への増分であり、それぞれが持つ検査をまとめられないため、引き続き失敗します。

制限を回避したい場合

経験値とランク上限の加算・設定は入手アクション、減算は消費アクションです。入手アクションどうしの衝突は acquireActionUseJobQueue を有効にすれば解消できますが、加算と減算の同居は enableAtomicCommit を無効にしないと解消しません。

同時実行とリトライ

ランクが変わらない範囲の加算・減算どうしは、同時実行のリクエストが何本重なってもコンフリクトしません。帯を条件にしていることの利点がここに出ます。

コンフリクト (409) が返るのは、並行する更新が積み重なって実際にランクが変わるところまで達した場合、同時にランク上限が変わった場合、管理コンソールやサーバー API からの変更と重なった場合です。リクエストの内容に問題があるわけではないので、リトライすれば成功します。付与を 1 回のリクエストにまとめると発生頻度を下げられます。


Verify Action

検証アクション

Gs2Experience:VerifyRankByUserId

ユーザーIDを指定してランクを検証

指定されたユーザーの現在のランクが指定された値に対する条件を満たすことを検証します。
6つの比較演算子をサポート:less、lessEqual、greater、greaterEqual、equal、notEqual。
検証条件を満たさない場合はエラー(BadRequest)を返します。

数量指定可能なアクション:いいえ

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
verifyType 文字列列挙型
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
✓
検証の種類
定義説明
lessランクが指定値未満であること
lessEqualランクが指定値以下であること
greaterランクが指定値超過であること
greaterEqualランクが指定値以上であること
equalランクが指定値と一致すること
notEqualランクが指定値と一致しないこと
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rankValue long 0 0 ~ 9223372036854775805 現在のランク
ランクアップ閾値テーブルを使用して累計経験値から算出されるランク(レベル)です。0 から開始し、経験値閾値を超えるごとに増加します。現在のランクキャップ値を超えることはできません。
multiplyValueSpecifyingQuantity bool false 数量指定した際に、検証に使用する値も乗算するか
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:VerifyRankByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "verifyType": "[string]検証の種類",
        "propertyId": "[string]プロパティID",
        "rankValue": "[long]現在のランク",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:VerifyRankByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  verifyType: "[string]検証の種類"
  propertyId: "[string]プロパティID"
  rankValue: "[long]現在のランク"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").verify.verify_rank_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    verifyType="[string]検証の種類",
    propertyId="[string]プロパティID",
    rankValue="[long]現在のランク",
    multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:VerifyRankCapByUserId

ユーザーIDを指定してランクキャップを検証

指定されたユーザーの現在のランクキャップ(バフ効果を含む)が指定された値に対する条件を満たすことを検証します。
6つの比較演算子をサポート:less、lessEqual、greater、greaterEqual、equal、notEqual。
検証条件を満たさない場合はエラー(BadRequest)を返します。

数量指定可能なアクション:いいえ

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
verifyType 文字列列挙型
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
✓
検証の種類
定義説明
lessランクキャップが指定値未満であること
lessEqualランクキャップが指定値以下であること
greaterランクキャップが指定値超過であること
greaterEqualランクキャップが指定値以上であること
equalランクキャップが指定値と一致すること
notEqualランクキャップが指定値と一致しないこと
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rankCapValue long
✓
0 ~ 9223372036854775805 現在のランクキャップ
このステータスが現在到達できる最大ランクです。初期値は経験値モデルの defaultRankCap に設定され、限界突破などのランクキャップ増加操作により maxRankCap まで引き上げることができます。
multiplyValueSpecifyingQuantity bool false 数量指定した際に、検証に使用する値も乗算するか
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:VerifyRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "verifyType": "[string]検証の種類",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:VerifyRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  verifyType: "[string]検証の種類"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").verify.verify_rank_cap_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    verifyType="[string]検証の種類",
    propertyId="[string]プロパティID",
    rankCapValue="[long]現在のランクキャップ",
    multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Consume Action

消費アクション

Gs2Experience:SubExperienceByUserId

ユーザーIDを指定して経験値を減算

指定されたユーザーのステータスから経験値を減算します。経験値は0を下回りません。
ランクはランクアップ閾値に基づいて自動的に再計算されます。

数量指定可能なアクション:はい

反転可能なアクション:はい

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
experienceValue long 0 0 ~ 9223372036854775805 失う経験値
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:SubExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]失う経験値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:SubExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]失う経験値"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").consume.sub_experience_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    experienceValue="[long]失う経験値",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:SubRankCapByUserId

ユーザーIDを指定してランクキャップを減算

指定されたユーザーのステータスのランクキャップを減算します。ランクキャップは0を下回りません。

数量指定可能なアクション:はい

反転可能なアクション:はい

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rankCapValue long
✓
0 ~ 9223372036854775805 現在のランクキャップ
このステータスが現在到達できる最大ランクです。初期値は経験値モデルの defaultRankCap に設定され、限界突破などのランクキャップ増加操作により maxRankCap まで引き上げることができます。
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:SubRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:SubRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").consume.sub_rank_cap_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    rankCapValue="[long]現在のランクキャップ",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Acquire Action

入手アクション

Gs2Experience:AddExperienceByUserId

ユーザーIDを指定して経験値を加算

指定されたユーザーのステータスに経験値を加算します。ランクはランクアップ閾値に基づいて自動的に再計算されます。
truncateExperienceWhenRankUp が true の場合、ランクアップ時に閾値を超えた余剰経験値は切り捨てられます。false(デフォルト)の場合は次のランクに繰り越されます。

数量指定可能なアクション:はい

反転可能なアクション:はい

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
experienceValue long 0 0 ~ 9223372036854775805 獲得経験値
truncateExperienceWhenRankUp bool? false ランクアップ時に残りの経験値を切り捨てるか
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:AddExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]獲得経験値",
        "truncateExperienceWhenRankUp": "[bool]ランクアップ時に残りの経験値を切り捨てるか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:AddExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]獲得経験値"
  truncateExperienceWhenRankUp: "[bool]ランクアップ時に残りの経験値を切り捨てるか"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").acquire.add_experience_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    experienceValue="[long]獲得経験値",
    truncateExperienceWhenRankUp="[bool]ランクアップ時に残りの経験値を切り捨てるか",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:SetExperienceByUserId

ユーザーIDを指定して経験値を設定

指定されたユーザーのステータスの経験値を指定の値に直接設定します。
更新前のステータスを ‘old’ として、更新後のステータスと共に返します。
ランクはランクアップ閾値に基づいて自動的に再計算されます。

数量指定可能なアクション:はい

反転可能なアクション:はい

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
experienceValue long 0 0 ~ 9223372036854775805 累計獲得経験値
このステータスが蓄積した合計経験値です。現在のランクはこの値からランクアップ閾値テーブルを使用して算出されます。現在のランクキャップに対応する閾値を超えて経験値を獲得することはできません。
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:SetExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]累計獲得経験値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:SetExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]累計獲得経験値"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").acquire.set_experience_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    experienceValue="[long]累計獲得経験値",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:AddRankCapByUserId

ユーザーIDを指定してランクキャップを加算

指定されたユーザーのステータスのランクキャップを加算します。ランクキャップは経験値モデルで定義された maxRankCap を超えることはできません。
ランクキャップは、指定されたプロパティでユーザーが到達可能な最大ランクを決定します。

数量指定可能なアクション:はい

反転可能なアクション:はい

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rankCapValue long
✓
0 ~ 9223372036854775805 現在のランクキャップ
このステータスが現在到達できる最大ランクです。初期値は経験値モデルの defaultRankCap に設定され、限界突破などのランクキャップ増加操作により maxRankCap まで引き上げることができます。
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:AddRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:AddRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").acquire.add_rank_cap_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    rankCapValue="[long]現在のランクキャップ",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:SetRankCapByUserId

ユーザーIDを指定してランクキャップを設定

指定されたユーザーのステータスのランクキャップ値を指定の値に直接設定します。
更新前のステータスを ‘old’ として、更新後のステータスと共に返します。
ランクキャップは経験値モデルで定義された maxRankCap で上限が制限されます。

数量指定可能なアクション:いいえ

反転可能なアクション:いいえ

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rankCapValue long
✓
0 ~ 9223372036854775805 現在のランクキャップ
このステータスが現在到達できる最大ランクです。初期値は経験値モデルの defaultRankCap に設定され、限界突破などのランクキャップ増加操作により maxRankCap まで引き上げることができます。
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:SetRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:SetRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").acquire.set_rank_cap_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    rankCapValue="[long]現在のランクキャップ",
    timeOffsetToken="[string]タイムオフセットトークン",
})

Gs2Experience:MultiplyAcquireActionsByUserId

ユーザーIDを指定して経験値の対象プロパティのランクに応じてリソースを加算

プロパティの現在のランク値に基づいて指定された rateName の入手アクション倍率を参照し、指定された入手アクションをその倍率(baseRate と組み合わせて)で乗算し、結果のアクションを実行するトランザクションを開始します。
ランクに基づく報酬スケーリングに使用され、高ランクほど比例して多くのリソースを獲得できます。

数量指定可能なアクション:はい

反転可能なアクション:いいえ

型 有効化条件 必須 デフォルト 値の制限 説明
namespaceName string
✓
~ 128文字 ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
userId string
✓
~ 128文字 ユーザーID
#{userId} と設定することでログイン中のユーザーIDに置換されます。
experienceName string
✓
~ 128文字 経験値モデル名
このステータスのランキングルールを定義する経験値モデルの名前です。どのランクアップ閾値テーブルとランクキャップ設定が適用されるかを決定します。
propertyId string
✓
~ 1024文字 プロパティID
ユーザースコープ内でこのステータスを一意に識別する開発者定義の識別子です。経験値を持つ GS2-Inventory のアイテムセット GRN や GS2-Dictionary のエントリー GRN の末尾に経験値モデルのサフィックスを付与した値を使用することを推奨します。
rateName string
✓
~ 128文字 報酬加算テーブル名
この報酬加算テーブルの一意な識別子です。特定の入手アクションに適用する倍率テーブルを指定する際に参照されます。
acquireActions List<AcquireAction> [] 0 ~ 100 items 入手アクションリスト
baseRate float 1 0 ~ 1000000 基礎倍率
timeOffsetToken string ~ 1024文字 タイムオフセットトークン
{
    "action": "Gs2Experience:MultiplyAcquireActionsByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rateName": "[string]報酬加算テーブル名",
        "acquireActions": [
            {
                "action": "[string]入手アクションで実行するアクションの種類",
                "request": "[string]アクション実行時に使用されるリクエストのJSON文字列"
            }
        ],
        "baseRate": "[float]基礎倍率",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
action: Gs2Experience:MultiplyAcquireActionsByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rateName: "[string]報酬加算テーブル名"
  acquireActions: 
    - action: "[string]入手アクションで実行するアクションの種類"
      request: "[string]アクション実行時に使用されるリクエストのJSON文字列"
  baseRate: "[float]基礎倍率"
  timeOffsetToken: "[string]タイムオフセットトークン"
transaction.service("experience").acquire.multiply_acquire_actions_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    experienceName="[string]経験値モデル名",
    propertyId="[string]プロパティID",
    rateName="[string]報酬加算テーブル名",
    acquireActions={
        {
            action="[string]入手アクションで実行するアクションの種類",
            request="[string]アクション実行時に使用されるリクエストのJSON文字列"
        }
    },
    baseRate="[float]基礎倍率",
    timeOffsetToken="[string]タイムオフセットトークン",
})