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

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

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




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

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

GS2-Mission のトランザクションアクションは 2 種類の対象を扱います。

- カウンター : ネームスペース・ユーザー・カウンター名の組で決まります。リセット種別ごとに 1 つずつ値を保持します。
- ミッショングループの進行状況 : ネームスペース・ユーザー・ミッショングループの組で決まります。どのタスクを達成したか、どの報酬を受け取ったかをタスク単位で保持します。

操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 | 直列実行モード有効時
--- | --- | --- | --- | ---
カウンターの加算<br>`IncreaseCounterByUserId` | 統合され、値が合算される | 合算される | ネームスペース・ユーザー・カウンター名 | 変わらない。もともと合算されて成立する
カウンターの減算<br>`DecreaseCounterByUserId` | 統合され、値が合算される | 失敗する | ネームスペース・ユーザー・カウンター名 | 成立する。入れ子越しでも合算される
カウンターのリセット<br>`ResetCounterByUserId` | スコープが結合されて 1 件になる。合計が 20 スコープを超えると結合をやめ、2 つ目以降が黙って捨てられる | 失敗する | ネームスペース・ユーザー・カウンター名 | 成立する。内側から届くリセットは、外側がすでに書き込んだ状態の上に適用される。2 件が 1 つのアクションに結合されるわけではないので、20 スコープの結合規則はここには当てはまらない
カウンターの設定<br>`SetCounterByUserId` | 同値なら統合。値が違えば発行時にエラー | 失敗する | ネームスペース・ユーザー・カウンター名 | 入れ子越しでも成立する。同値なら通り、値が違えば後から実行された方の値になる
報酬の受け取り<br>`ReceiveByUserId` `BatchReceiveByUserId` | 統合され、タスク名が重複を除いて結合される | 失敗する | ネームスペース・ユーザー・ミッショングループ | 成立する。内側から届く受け取りは、外側がすでに書き込んだ状態の上に適用される
受け取りの取り消し<br>`RevertReceiveByUserId` | 同じタスクなら統合。別のタスクなら発行時にエラー | 失敗する | ネームスペース・ユーザー・ミッショングループ | 同じタスクでも違うタスクでも、入れ子越しなら成立する。それぞれが直前の書き込みの上に適用される。違うタスクの取り消しを 1 つのトランザクションに並べて書いた場合の拒否は、発行時に働くので変わらない
検証アクション全般 | まったく同じ検証は 1 件にまとめられる。`VerifyCounterValueByUserId` はしきい値が違う場合だけ両方が判定される | 読み取りだけなので衝突しない | 対象・検証タイプ・しきい値 | 変わらない。読み取りだけなのでもともと衝突しない

カウンターは加算だけが純粋な増分として書き込まれ、それ以外はカウンター全体を書き換えます。だから加算は入れ子越しでも合流しますが、減算・リセット・設定は境界が同じ他の行と同居できません。減算どうしが問題ないのは、実行前に 1 つの減算に統合されるからです。**直列実行モード（`enableSequentialExecution` または `TransactionSettingV2`）を有効にすると、この制約の一部はなくなります。同じカウンターに対する減算・リセット・設定は 1 つのトランザクションに入れられるようになります。いずれもカウンター全体を書き換え、それぞれが直前のアクションの書き込みを見られるためです。実行順はアクション名で決まるので、減算はリセットより先に、設定は最後に実行され、それまでの結果を上書きします。加算だけは違います。加算はカウンター全体の書き換えではなく 1 つのカウンター値への増分として書き込まれるため、同じカウンターへの減算・リセット・設定と同居させることは引き続きできません。**

**違うタスクの受け取りの取り消しを、1 つのトランザクションに並べないでください。** 取り消しの書き込み先はミッショングループ単位の 1 行で、タスク単位に境界を割れません。同じタスクの取り消しは何件並べても重複が除かれて 1 件になりますが、違うタスクの取り消しを 2 つ並べるとエラー (400) になります。この検査は入手アクションをまとめる時点で走るので、トランザクションを発行する API だけでなく、報酬を下見するだけの API でも同じエラーになります。受け取りは一括受け取りに畳んで解決されていますが、取り消しには配列を受け取る API がないため同じ手が使えません。**直列実行モードを有効にしても、これは変わりません。違うタスクを 2 つ並べると弾く検査は、トランザクションの発行時、いずれのアクションもまだ実行されていない時点で走るため、その後どう実行されるかには影響されません。**

同じミッショングループの受け取りは、いくつ並べても 1 件の一括受け取りにまとめられます。同じタスクを 2 回書いても重複が除かれるだけでエラーにはなりません。まとめた結果のタスク数が受け取り側の上限を超えた場合だけ、実行時に指定数超過のエラー (400) になります。

表にない組み合わせが 1 つあります。**同じトランザクションで達成したタスクの報酬を受け取ることはできません。** 達成はカウンターの加算の結果として記録されますが、受け取りはトランザクション開始時点の進行状況を見るため、その達成がまだ見えていません。トランザクションを分けてください。**直列実行モードを有効にしても、これは変わりません。上記の行どうしの衝突とは別の理由によります。報酬の受け取りが属する消費アクションは、カウンターの加算が属する入手アクションより実行モードによらず必ず先に実行されるため、直列実行モードのもとでも受け取りは加算より先に実行され、その達成をまだ見ることができません。**

一度に多数のタスクを受け取ると、1 回で確認できる量の内部上限に達することがあります。目安として、1 つのトランザクションで受け取るタスクが十数件を超えるあたりから起こりえます。多数の報酬を受け取るトランザクションが失敗する場合は、複数のトランザクションに分けてください。

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

検証アクションはトランザクション開始時点の状態を見ます。同じトランザクションで到達するカウンターの値や達成を検証することはできません。

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

カウンターの加算は入れ子越しでも安全です。どちらの経路から届いても 1 回の更新にまとまります。進行状況もタスクが違うかぎり安全です。

カウンターの減算・リセット・設定は違います。同じカウンターを内側と外側の両方から触ると、トランザクションが失敗します。報酬や抽選がミッションのカウンターを動かしていないか確認してください。**直列実行モードを有効にすると、この失敗は起こらなくなります。内側のトランザクションは外側と同じ直列実行の区間で実行されるようになるため、内側の更新は外側がすでに書き込んだ状態の上に適用されます。**

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

カウンターの加算と設定、受け取りの取り消しは入手アクション、カウンターの減算・リセットと報酬の受け取りは消費アクションです。加算と設定の衝突は `acquireActionUseJobQueue` を有効にすれば解消できますが、減算・リセットとの同居や、同じタスクの報酬を 2 回受け取ることは消費アクションどうしなので、`enableAtomicCommit` を無効にしないと解消しません。違うタスクの受け取りの取り消しはどちらの設定でも回避できません。検査はトランザクションの発行時、設定が適用されるより前に走ります。トランザクションを分けてください。

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

カウンターの加算は、同時実行のリクエストが何本重なってもコンフリクトしません。同じミッショングループでも、達成・受け取りの対象タスクが違えばコンフリクトしません。

カウンターの減算・リセット・設定、同じタスクの受け取り、管理コンソールやサーバー API からの変更は、リビジョンの照合を伴う書き込みなので、同じ対象への別の更新と重なるとコンフリクト (409) が返ることがあります。カウンターのリセット境界をまたいだ場合にも起こります。リクエストの内容に問題があるわけではないので、リトライすれば成功します。

---


## Verify Action

検証アクション

### Gs2Mission:VerifyCompleteByUserId

ユーザーIDを指定してミッションの達成状況を検証<br>

指定されたユーザーのミッションタスクの達成状況または受領状況を検証します。

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| verifyType | 文字列列挙型<br>enum {<br>"completed",<br>"notCompleted",<br>"received",<br>"notReceived",<br>"completedAndNotReceived"<br>}<br> |  | ✓|  |  | 検証の種類completed: 条件が達成済みであること / notCompleted: 条件が未達成であること / received: 報酬を受け取り済みであること / notReceived: 報酬が未受け取りであること / completedAndNotReceived: 条件が達成済みで、報酬を未受け取りであること /  |
| missionTaskName | string |  | ✓|  |  ~ 128文字 | ミッションタスクモデル名<br>ミッションタスクモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| multiplyValueSpecifyingQuantity | bool |  | | false |  | 数量指定した際に、検証に使用する値も乗算するか |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:VerifyCompleteByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "missionGroupName": "[string]ミッショングループ名",
        "userId": "[string]ユーザーID",
        "verifyType": "[string]検証の種類",
        "missionTaskName": "[string]ミッションタスクモデル名",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:VerifyCompleteByUserId
request:
  namespaceName: "[string]ネームスペース名"
  missionGroupName: "[string]ミッショングループ名"
  userId: "[string]ユーザーID"
  verifyType: "[string]検証の種類"
  missionTaskName: "[string]ミッションタスクモデル名"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").verify.verify_complete_by_user_id({
    namespaceName="[string]ネームスペース名",
    missionGroupName="[string]ミッショングループ名",
    userId="[string]ユーザーID",
    verifyType="[string]検証の種類",
    missionTaskName="[string]ミッションタスクモデル名",
    multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:VerifyCounterValueByUserId

ユーザーIDを指定してカウンター値を検証<br>

指定されたユーザーのカウンターのスコープ付き値が指定された条件を満たしているかを検証します。

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| counterName | 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: カウンター値が指定値と一致しないこと /  |
| scopeType | 文字列列挙型<br>enum {<br>"resetTiming",<br>"verifyAction"<br>}<br> |  | | "resetTiming" |  | スコープの種類<br>このスコープ値がリセットタイミングスケジュールに基づくものか、検証アクション条件に基づくものかを示します。resetTiming: リセットタイミング / verifyAction: 検証アクション /  |
| resetType | 文字列列挙型<br>enum {<br>"notReset",<br>"daily",<br>"weekly",<br>"monthly",<br>"days"<br>}<br> | {scopeType} == "resetTiming" | ✓※|  |  | リセットタイミング<br>このスコープ値のリセットタイミングです。カウンター値がリセットされるまでの累積期間を決定します。scopeType が `resetTiming` の場合のみ適用されます。notReset: リセットしない / daily: 毎日 / weekly: 毎週 / monthly: 毎月 / days: 一定日数ごと / <br>※ scopeType が "resetTiming" であれば必須 |
| conditionName | string | {scopeType} == "verifyAction" | ✓※|  |  ~ 128文字 | 条件名<br>このスコープ値が対応する検証アクション条件の名前です。この値がどの条件スコープに属するかを識別するために使用されます。scopeType が `verifyAction` の場合のみ適用されます。<br>※ scopeType が "verifyAction" であれば必須 |
| value | long |  | | 0 | 0 ~ 9223372036854775805 | カウント<br>このスコープの累積カウンター値です。カウンターが増加すると増え、減少すると減ります。値は最大値で上限が設けられ、ゼロを下回ることはありません。 |
| multiplyValueSpecifyingQuantity | bool |  | | false |  | 数量指定した際に、検証に使用する値も乗算するか |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:VerifyCounterValueByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "counterName": "[string]カウンターモデル名",
        "verifyType": "[string]検証の種類",
        "scopeType": "[string]スコープの種類",
        "resetType": "[string]リセットタイミング",
        "conditionName": "[string]条件名",
        "value": "[long]カウント",
        "multiplyValueSpecifyingQuantity": "[bool]数量指定した際に、検証に使用する値も乗算するか",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:VerifyCounterValueByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  counterName: "[string]カウンターモデル名"
  verifyType: "[string]検証の種類"
  scopeType: "[string]スコープの種類"
  resetType: "[string]リセットタイミング"
  conditionName: "[string]条件名"
  value: "[long]カウント"
  multiplyValueSpecifyingQuantity: "[bool]数量指定した際に、検証に使用する値も乗算するか"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").verify.verify_counter_value_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    counterName="[string]カウンターモデル名",
    verifyType="[string]検証の種類",
    scopeType="[string]スコープの種類",
    resetType="[string]リセットタイミング",
    conditionName="[string]条件名",
    value="[long]カウント",
    multiplyValueSpecifyingQuantity="[bool]数量指定した際に、検証に使用する値も乗算するか",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

## Consume Action

消費アクション

### Gs2Mission:ReceiveByUserId

ミッション達成報酬を受領する<br>

指定されたユーザーの指定ミッションタスクを受領済みとしてマークします。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| missionTaskName | string |  | ✓|  |  ~ 128文字 | タスク名 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:ReceiveByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "missionGroupName": "[string]ミッショングループ名",
        "missionTaskName": "[string]タスク名",
        "userId": "[string]ユーザーID",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:ReceiveByUserId
request:
  namespaceName: "[string]ネームスペース名"
  missionGroupName: "[string]ミッショングループ名"
  missionTaskName: "[string]タスク名"
  userId: "[string]ユーザーID"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").consume.receive_by_user_id({
    namespaceName="[string]ネームスペース名",
    missionGroupName="[string]ミッショングループ名",
    missionTaskName="[string]タスク名",
    userId="[string]ユーザーID",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:BatchReceiveByUserId

複数のミッションタスクの達成報酬を一括で受領状態にする<br>

同じミッショングループ内の複数のミッションタスクを一括で受領済みとしてマークします。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| missionTaskNames | List&lt;string&gt; |  | ✓|  | 1 ~ 100 items | タスク名のリスト |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:BatchReceiveByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "missionGroupName": "[string]ミッショングループ名",
        "userId": "[string]ユーザーID",
        "missionTaskNames": [
            "[string]タスク名"
        ],
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:BatchReceiveByUserId
request:
  namespaceName: "[string]ネームスペース名"
  missionGroupName: "[string]ミッショングループ名"
  userId: "[string]ユーザーID"
  missionTaskNames: 
    - "[string]タスク名"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").consume.batch_receive_by_user_id({
    namespaceName="[string]ネームスペース名",
    missionGroupName="[string]ミッショングループ名",
    userId="[string]ユーザーID",
    missionTaskNames={
        "[string]タスク名"
    },
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:DecreaseCounterByUserId

ユーザーIDを指定してカウンターを減算<br>

指定されたユーザーのカウンターから指定値を減算します。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| value | long |  | ✓|  | 1 ~ 9223372036854775805 | 減算する値 |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:DecreaseCounterByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "counterName": "[string]カウンターモデル名",
        "userId": "[string]ユーザーID",
        "value": "[long]減算する値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:DecreaseCounterByUserId
request:
  namespaceName: "[string]ネームスペース名"
  counterName: "[string]カウンターモデル名"
  userId: "[string]ユーザーID"
  value: "[long]減算する値"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").consume.decrease_counter_by_user_id({
    namespaceName="[string]ネームスペース名",
    counterName="[string]カウンターモデル名",
    userId="[string]ユーザーID",
    value="[long]減算する値",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:ResetCounterByUserId

ユーザーIDを指定してカウンターをリセット<br>

指定されたユーザーの指定されたスコープのカウンター値をリセットします。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |
| scopes | [List&lt;ScopedValue&gt;](../sdk/#scopedvalue) |  | ✓|  | 1 ~ 20 items | スコープリスト |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:ResetCounterByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "userId": "[string]ユーザーID",
        "counterName": "[string]カウンターモデル名",
        "scopes": [
            {
                "scopeType": "[string]スコープの種類",
                "resetType": "[string]リセットタイミング",
                "conditionName": "[string]条件名",
                "value": "[long]カウント",
                "nextResetAt": "[long]次回リセットタイミング",
                "updatedAt": "[long]最終更新日時"
            }
        ],
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:ResetCounterByUserId
request:
  namespaceName: "[string]ネームスペース名"
  userId: "[string]ユーザーID"
  counterName: "[string]カウンターモデル名"
  scopes: 
    - scopeType: "[string]スコープの種類"
      resetType: "[string]リセットタイミング"
      conditionName: "[string]条件名"
      value: "[long]カウント"
      nextResetAt: "[long]次回リセットタイミング"
      updatedAt: "[long]最終更新日時"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").consume.reset_counter_by_user_id({
    namespaceName="[string]ネームスペース名",
    userId="[string]ユーザーID",
    counterName="[string]カウンターモデル名",
    scopes={
        {
            scopeType="[string]スコープの種類",
            resetType="[string]リセットタイミング",
            conditionName="[string]条件名",
            value="[long]カウント",
            nextResetAt="[long]次回リセットタイミング",
            updatedAt="[long]最終更新日時"
        }
    },
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

## Acquire Action

入手アクション

### Gs2Mission:RevertReceiveByUserId

ミッション達成報酬を未受領状態にする<br>

ミッションタスクの受領状態を未受領に戻します。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| missionTaskName | string |  | ✓|  |  ~ 128文字 | タスク名 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:RevertReceiveByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "missionGroupName": "[string]ミッショングループ名",
        "missionTaskName": "[string]タスク名",
        "userId": "[string]ユーザーID",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:RevertReceiveByUserId
request:
  namespaceName: "[string]ネームスペース名"
  missionGroupName: "[string]ミッショングループ名"
  missionTaskName: "[string]タスク名"
  userId: "[string]ユーザーID"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").acquire.revert_receive_by_user_id({
    namespaceName="[string]ネームスペース名",
    missionGroupName="[string]ミッショングループ名",
    missionTaskName="[string]タスク名",
    userId="[string]ユーザーID",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:IncreaseCounterByUserId

ユーザーIDを指定してカウンターを加算<br>

指定されたユーザーのカウンターに指定値を加算します。<br>
加算後、このカウンターを参照するすべてのミッションタスクが自動的に再評価され、新たに達成されたミッションが changedCompletes レスポンスで返されます。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| value | long |  | ✓|  | 1 ~ 9223372036854775805 | 加算する値 |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:IncreaseCounterByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "counterName": "[string]カウンターモデル名",
        "userId": "[string]ユーザーID",
        "value": "[long]加算する値",
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:IncreaseCounterByUserId
request:
  namespaceName: "[string]ネームスペース名"
  counterName: "[string]カウンターモデル名"
  userId: "[string]ユーザーID"
  value: "[long]加算する値"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").acquire.increase_counter_by_user_id({
    namespaceName="[string]ネームスペース名",
    counterName="[string]カウンターモデル名",
    userId="[string]ユーザーID",
    value="[long]加算する値",
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---

### Gs2Mission:SetCounterByUserId

ユーザーIDを指定してカウンターを設定<br>

指定されたユーザーのカウンターのスコープ付き値を直接設定し、既存の値を置き換えます。<br>
変更前と変更後のカウンター状態、および新たに達成されたミッションが changedCompletes レスポンスで返されます。

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

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

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |
| userId | string |  | ✓|  |  ~ 128文字 | ユーザーID<br>`#{userId}` と設定することでログイン中のユーザーIDに置換されます。 |
| values | [List&lt;ScopedValue&gt;](../sdk/#scopedvalue) |  | |  | 0 ~ 20 items | 設定する値のリスト |
| timeOffsetToken | string |  | |  |  ~ 1024文字 | タイムオフセットトークン |




**JSON**
```json
{
    "action": "Gs2Mission:SetCounterByUserId",
    "request": {
        "namespaceName": "[string]ネームスペース名",
        "counterName": "[string]カウンターモデル名",
        "userId": "[string]ユーザーID",
        "values": [
            {
                "scopeType": "[string]スコープの種類",
                "resetType": "[string]リセットタイミング",
                "conditionName": "[string]条件名",
                "value": "[long]カウント",
                "nextResetAt": "[long]次回リセットタイミング",
                "updatedAt": "[long]最終更新日時"
            }
        ],
        "timeOffsetToken": "[string]タイムオフセットトークン"
    }
}
```

**YAML**
```yaml

action: Gs2Mission:SetCounterByUserId
request:
  namespaceName: "[string]ネームスペース名"
  counterName: "[string]カウンターモデル名"
  userId: "[string]ユーザーID"
  values: 
    - scopeType: "[string]スコープの種類"
      resetType: "[string]リセットタイミング"
      conditionName: "[string]条件名"
      value: "[long]カウント"
      nextResetAt: "[long]次回リセットタイミング"
      updatedAt: "[long]最終更新日時"
  timeOffsetToken: "[string]タイムオフセットトークン"
```

**GS2-Script**
```lua

transaction.service("mission").acquire.set_counter_by_user_id({
    namespaceName="[string]ネームスペース名",
    counterName="[string]カウンターモデル名",
    userId="[string]ユーザーID",
    values={
        {
            scopeType="[string]スコープの種類",
            resetType="[string]リセットタイミング",
            conditionName="[string]条件名",
            value="[long]カウント",
            nextResetAt="[long]次回リセットタイミング",
            updatedAt="[long]最終更新日時"
        }
    },
    timeOffsetToken="[string]タイムオフセットトークン",
})
```


---



