> For the complete documentation index, see [llms.txt](/llms.txt)

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

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




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

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

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

操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界
--- | --- | --- | ---
経験値の加算<br>`AddExperienceByUserId` | 統合され、値が合算される | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
経験値の減算<br>`SubExperienceByUserId` | 統合され、値が合算される | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
経験値の設定<br>`SetExperienceByUserId` | 同値なら統合。値が違えば発行時にエラー | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
ランク上限の加算<br>`AddRankCapByUserId` | 統合され、値が合算される | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
ランク上限の減算<br>`SubRankCapByUserId` | 統合され、値が合算される | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
ランク上限の設定<br>`SetRankCapByUserId` | 同値なら統合。値が違えば発行時にエラー | 失敗する | ネームスペース・ユーザー・経験値モデル・プロパティ
他のアクションへの展開<br>`MultiplyAcquireActionsByUserId` | 統合され、内側のアクションが 1 つのリストにまとめられる | 自身は何も更新しない | —
検証アクション全般 | 先勝ち | 読み取りだけなので衝突しない | 対象・検証タイプ・必要ランク / ランク上限

更新する 6 つの行はすべて境界が同じです。同じステータスに対して違う行を 2 つ入れると、トランザクションが失敗します。経験値の加算とランク上限の加算、加算と減算、加算と設定は、どれも 1 つの境界に対する 2 つの行です。値を合算できるのは同じ行のアクションどうしだけです。

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

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

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

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

### 制限を回避したい場合

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

### 同時実行とリトライ

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

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

---


## Verify Action

検証アクション

### Gs2Experience:VerifyRankByUserId

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:VerifyRankByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "verifyType": "[string]検証の種類",
        "propertyId": "[string]プロパティID",
        "rankValue": "[long]現在のランク",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:VerifyRankByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  verifyType: "[string]検証の種類"
  propertyId: "[string]プロパティID"
  rankValue: "[long]現在のランク"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定してランクキャップを検証<br>

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:VerifyRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "verifyType": "[string]検証の種類",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:VerifyRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  verifyType: "[string]検証の種類"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定して経験値を減算<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:SubExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]失う経験値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:SubExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]失う経験値"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定してランクキャップを減算<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:SubRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:SubRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定して経験値を加算<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:AddExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]獲得経験値",
        "truncateExperienceWhenRankUp": "[bool]ランクアップ時に残りの経験値を切り捨てるか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:AddExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]獲得経験値"
  truncateExperienceWhenRankUp: "[bool]ランクアップ時に残りの経験値を切り捨てるか"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定して経験値を設定<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:SetExperienceByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "experienceValue": "[long]累計獲得経験値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:SetExperienceByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  experienceValue: "[long]累計獲得経験値"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定してランクキャップを加算<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:AddRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:AddRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定してランクキャップを設定<br>

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

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

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

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




**JSON**
```json
{
    "action": "Gs2Experience:SetRankCapByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "experienceName": "[string]経験値モデル名",
        "propertyId": "[string]プロパティID",
        "rankCapValue": "[long]現在のランクキャップ",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Experience:SetRankCapByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  experienceName: "[string]経験値モデル名"
  propertyId: "[string]プロパティID"
  rankCapValue: "[long]現在のランクキャップ"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

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を指定して経験値の対象プロパティのランクに応じてリソースを加算<br>

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

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

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

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




**JSON**
```json
{
    "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]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

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]タイムオフセットトークン"
```

**GS2-Script**
```lua

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]タイムオフセットトークン",
})
```


---



