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

# GS2-Mission SDK for Game Engine API リファレンス

ゲームエンジン向け GS2-Mission SDK の モデルの仕様 と API のリファレンス



## モデル

### EzComplete

ミッションの達成状況<br>

特定のミッショングループに対するユーザーのミッション達成状況と報酬受け取り状況を追跡します。達成済みタスク名と報酬受け取り済みタスク名を別々のリストで管理し、達成されたタスクと実際に報酬が受け取られたタスクを区別します。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| missionGroupName | string |  | ✓ |  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| completedMissionTaskNames | List&lt;string&gt; |  |  | [] | 0 ~ 1000 items | 達成済みのタスク名リスト<br>ユーザーが達成した（達成条件を満たした）ミッションタスクの名前です。カウンターが目標値に達するか検証アクションが成功した時点でこのリストに追加されます。報酬の受け取りの有無は問いません。 |
| receivedMissionTaskNames | List&lt;string&gt; |  |  | [] | 0 ~ 1000 items | 報酬の受け取り済みのタスク名リスト<br>ユーザーが達成報酬を受け取り済みのミッションタスクの名前です。報酬を受け取るには、タスクが達成済みリストに含まれている必要があります。 |

**関連するメソッド:**
evaluateComplete - ミッション達成状況を再評価する
getComplete - 特定ミッショングループのプレイヤーの達成状況を取得する
listCompletes - 全グループのプレイヤーのミッション達成状況を取得する


---

### EzCounter

カウンター<br>

カウンターはミッションの進行状況をゲームプレイヤー毎に保持するエンティティです。<br>
カウンターの値は関連付けられたタスクの期間ごとに集計されます。<br>

そのため、1つのカウンターは複数の値を持ちます。<br>
例えば、クエストのクリア回数カウンターであれば、今月のクリア回数、今週のクリア回数、今日のクリア回数、といった具合です。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |
| values | [List&lt;EzScopedValue&gt;](#ezscopedvalue) |  |  | [] | 0 ~ 32 items | 値<br>このカウンターのスコープ別の値のリストです。各エントリは特定のスコープ（リセットタイミングまたは検証アクション条件）のカウンター値と次回リセット時刻を保持します。1つのカウンターが複数のスコープの値を同時に保持します。 |

**関連するメソッド:**
deleteCounter - カウンターを完全に削除する
getCounter - 特定カウンターのプレイヤーの値を取得する
listCounters - プレイヤーの現在のカウンター値を取得する
resetCounter - カウンターの特定スコープをリセットする


---

### EzCounterScopeModel

カウンターリセットタイミングモデル<br>

カウンターのスコープを定義し、カウンター値のリセット方法とタイミングを決定します。スコープはリセットタイミング（毎日、毎週、毎月、一定日数ごと、またはリセットなし）か検証アクション条件のいずれかです。各カウンターは複数のスコープを持ち、異なる期間の値を追跡できます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| scopeType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"resetTiming",<br>&nbsp;&nbsp;"verifyAction"<br>}<br> |  |  | "resetTiming" |  | スコープの種類<br>カウンタースコープの定義方法を決定します。"resetTiming" は定期的なリセットスケジュールを使用し、"verifyAction" は検証アクションでカウンター値が適用されるかどうかを判定します。"resetTiming": リセットタイミング / "verifyAction": 検証アクション /  |
| resetType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"notReset",<br>&nbsp;&nbsp;"daily",<br>&nbsp;&nbsp;"weekly",<br>&nbsp;&nbsp;"monthly",<br>&nbsp;&nbsp;"days"<br>}<br> |  |  | "notReset" |  | リセットタイミング<br>このスコープのカウンター値がリセットされるタイミングを決定します。リセットしない（恒久累計）、毎日、毎週、毎月、一定日数ごとから選択します。scopeType が "resetTiming" の場合のみ使用されます。"notReset": リセットしない / "daily": 毎日 / "weekly": 毎週 / "monthly": 毎月 / "days": 一定日数ごと /  |
| resetDayOfMonth | int | {resetType} == "monthly" | ✓※ |  | 1 ~ 31 | リセットをする日にち<br>カウンター値がリセットされる月の日にちです。指定した値が月の日数を超える場合は、その月の最終日として扱われます。resetType が "monthly" の場合のみ使用されます。<br><br>※ resetType が "monthly" であれば 必須 |
| resetDayOfWeek | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"sunday",<br>&nbsp;&nbsp;"monday",<br>&nbsp;&nbsp;"tuesday",<br>&nbsp;&nbsp;"wednesday",<br>&nbsp;&nbsp;"thursday",<br>&nbsp;&nbsp;"friday",<br>&nbsp;&nbsp;"saturday"<br>}<br> | {resetType} == "weekly" | ✓※ |  |  | リセットする曜日<br>カウンター値がリセットされる曜日です。resetType が "weekly" の場合のみ使用されます。"sunday": 日曜日 / "monday": 月曜日 / "tuesday": 火曜日 / "wednesday": 水曜日 / "thursday": 木曜日 / "friday": 金曜日 / "saturday": 土曜日 / <br><br>※ resetType が "weekly" であれば 必須 |
| resetHour | int | {resetType} in ["monthly", "weekly", "daily"] | ✓※ |  | 0 ~ 23 | リセット時刻<br>カウンター値がリセットされる時刻（0〜23）です。毎日、毎週、毎月のリセットタイプと組み合わせて使用されます。<br><br>※ resetType が "monthly","weekly","daily"であれば 必須 |
| conditionName | string | {scopeType} == "verifyAction" | ✓※ |  |  ~ 128文字 | 条件名<br>この検証アクション条件スコープを識別する一意の名前です。カウンター内の対応するスコープ値の検索に使用されます。scopeType が "verifyAction" の場合のみ使用されます。<br><br>※ scopeType が "verifyAction" であれば 必須 |
| condition | [EzVerifyAction](#ezverifyaction) | {scopeType} == "verifyAction" | ✓※ |  |  | 条件<br>このスコープのカウンター値が適用されるかどうかを判定する検証アクションです。scopeType が "verifyAction" の場合のみ使用されます。<br><br>※ scopeType が "verifyAction" であれば 必須 |
| anchorTimestamp | long | {resetType} == "days" | ✓※ |  |  | 経過日数のカウントをする基準日時<br>UNIX 時間・ミリ秒<br><br>※ resetType が "days" であれば 必須 |
| days | int | {resetType} == "days" | ✓※ |  | 1 ~ 2147483646 | リセットする日数<br>基準日時からカウントされるカウンター値のリセット間隔の日数です。resetType が "days" の場合のみ使用されます。<br><br>※ resetType が "days" であれば 必須 |


**関連するモデル:**
EzCounterModel - カウンターモデル



---

### EzCounterModel

カウンターモデル<br>

カウンターモデルはミッションタスクの達成条件に設定可能なエンティティです。<br>
カウンターの値は複数のミッショングループから参照可能なため、1つのカウンターでウィークリーミッションとデイリーミッションといった複数のミッショングループの達成条件に設定ができます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | カウンターモデル名<br>カウンターモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| metadata | string |  |  |  |  ~ 1024文字 | メタデータ<br>メタデータには任意の値を設定できます。<br>これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 |
| scopes | [List&lt;EzCounterScopeModel&gt;](#ezcounterscopemodel) |  |  | [] | 1 ~ 20 items | カウンターのリセットタイミングリスト<br>このカウンターのスコープ（リセットタイミングまたは検証アクション条件）を定義します。1つのカウンターに複数のスコープを設定でき、異なる期間の値（例：デイリー、ウィークリー、累計を同時に）を追跡できます。 |
| challengePeriodEventId | string |  |  |  |  ~ 1024文字 | カウンターの操作が可能な期間を設定した GS2-Schedule イベントGRN<br>このカウンターの増減が可能な期間を定義する GS2-Schedule イベントを指定します。未設定の場合、カウンターはいつでも操作できます。 |

**関連するメソッド:**
getCounterModel - 特定のカウンター定義の詳細を取得する
listCounterModels - カウンター定義の一覧を取得する


---

### EzMissionGroupModel

ミッショングループモデル<br>

ミッショングループは、カウンターのリセットタイミングでタスクをグルーピングするエンティティです。<br>
たとえば、デイリーミッションで1つのグループ、ウィークリーミッションで1つのグループとなります。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | ミッショングループモデル名<br>ミッショングループモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| metadata | string |  |  |  |  ~ 1024文字 | メタデータ<br>メタデータには任意の値を設定できます。<br>これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 |
| tasks | [List&lt;EzMissionTaskModel&gt;](#ezmissiontaskmodel) |  |  | [] | 0 ~ 1000 items | ミッションタスクリスト<br>このグループに属するミッションタスクです。各タスクは達成条件（カウンターの閾値または検証アクション）と達成時に付与される報酬を定義します。 |
| resetType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"notReset",<br>&nbsp;&nbsp;"daily",<br>&nbsp;&nbsp;"weekly",<br>&nbsp;&nbsp;"monthly",<br>&nbsp;&nbsp;"days"<br>}<br> |  |  | "notReset" |  | リセットタイミング<br>ミッショングループの達成状況がリセットされるタイミングを決定します。リセットしない（恒久）、毎日、毎週、毎月、基準日時から一定日数ごとから選択します。"notReset": リセットしない / "daily": 毎日 / "weekly": 毎週 / "monthly": 毎月 / "days": 一定日数ごと /  |
| resetDayOfMonth | int | {resetType} == "monthly" | ✓※ |  | 1 ~ 31 | リセットをする日にち<br>ミッショングループがリセットされる月の日にちです。指定した値が月の日数を超える場合は、その月の最終日として扱われます。resetType が "monthly" の場合のみ使用されます。<br><br>※ resetType が "monthly" であれば 必須 |
| resetDayOfWeek | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"sunday",<br>&nbsp;&nbsp;"monday",<br>&nbsp;&nbsp;"tuesday",<br>&nbsp;&nbsp;"wednesday",<br>&nbsp;&nbsp;"thursday",<br>&nbsp;&nbsp;"friday",<br>&nbsp;&nbsp;"saturday"<br>}<br> | {resetType} == "weekly" | ✓※ |  |  | リセットする曜日<br>ミッショングループがリセットされる曜日です。resetType が "weekly" の場合のみ使用されます。"sunday": 日曜日 / "monday": 月曜日 / "tuesday": 火曜日 / "wednesday": 水曜日 / "thursday": 木曜日 / "friday": 金曜日 / "saturday": 土曜日 / <br><br>※ resetType が "weekly" であれば 必須 |
| resetHour | int | {resetType} in ["monthly", "weekly", "daily"] | ✓※ |  | 0 ~ 23 | リセット時刻<br>ミッショングループがリセットされる時刻（0〜23）です。毎日、毎週、毎月のリセットタイプと組み合わせて使用されます。<br><br>※ resetType が "monthly","weekly","daily"であれば 必須 |
| completeNotificationNamespaceId | string |  |  |  |  ~ 1024文字 | ミッションのタスクを達成したときのプッシュ通知<br>このグループ内のミッションタスクが達成された際にプッシュ通知を配信するために使用される GS2-Gateway のネームスペースGRNです。ゲームクライアントにリアルタイムで通知できます。 |

**関連するメソッド:**
getMissionGroupModel - 特定のミッショングループの詳細を取得する
listMissionGroupModels - ミッショングループの一覧を取得する


---

### EzMissionTaskModel

ミッションタスクモデル<br>

ミッションタスクは関連付けたカウンターの値が一定を超えたら報酬が貰える条件を定義するエンティティです。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| name | string |  | ✓ |  |  ~ 128文字 | ミッションタスクモデル名<br>ミッションタスクモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| metadata | string |  |  |  |  ~ 1024文字 | メタデータ<br>メタデータには任意の値を設定できます。<br>これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 |
| verifyCompleteType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"counter",<br>&nbsp;&nbsp;"verifyActions"<br>}<br> |  |  | "counter" |  | 達成条件種別<br>ミッションタスクの達成判定方法を指定します。"counter" は関連するカウンターのスコープ値が目標閾値に達したかを確認します。"verifyActions" は検証アクションを使用して達成条件を確認します。"counter": カウンター / "verifyActions": 検証アクション /  |
| targetCounter | [EzTargetCounterModel](#eztargetcountermodel) | {verifyCompleteType} == "counter" | ✓※ |  |  | 目標カウンター<br>ミッションタスクの達成判定に使用されるカウンター、スコープ、目標値を定義します。カウンターのスコープ値が指定された目標値に達するか超えた場合、タスクが達成されたとみなされます。<br><br>※ verifyCompleteType が "counter" であれば 必須 |
| verifyCompleteConsumeActions | [List&lt;EzVerifyAction&gt;](#ezverifyaction) | {verifyCompleteType} == "verifyActions" |  | [] | 0 ~ 10 items | タスク達成判定に使用する検証アクション<br>ミッションタスクの達成判定に使用される検証アクションのリストです。すべての検証アクションが成功した場合にタスクが達成とみなされます。verifyCompleteType が "verifyActions" の場合のみ使用されます。<br><br>※ verifyCompleteType が "verifyActions" であれば 有効 |
| completeAcquireActions | [List&lt;EzAcquireAction&gt;](#ezacquireaction) |  |  | [] | 0 ~ 100 items | ミッション達成時の報酬<br>プレイヤーがミッション達成報酬を受け取る際に実行される入手アクションのリストです。 |
| challengePeriodEventId | string |  |  |  |  ~ 1024文字 | 報酬が受け取り可能な期間を設定した GS2-Schedule イベントGRN<br>ミッションタスクの報酬を受け取ることができる期間を定義する GS2-Schedule イベントを指定します。未設定の場合、達成後いつでも報酬を受け取ることができます。 |
| premiseMissionTaskName | string |  |  |  |  ~ 128文字 | このタスクに挑戦するために達成しておく必要のあるタスクの名前<br>このタスクの報酬を受け取る前に達成しておく必要がある、同じグループ内の前提ミッションタスクを指定します。段階的なミッションチェーンの作成に使用します。 |

**関連するメソッド:**
getMissionTaskModel - 特定のミッションタスクの詳細を取得する
listMissionTaskModels - グループ内のミッションタスクの一覧を取得する


**関連するモデル:**
EzMissionGroupModel - ミッショングループモデル



---

### EzTargetCounterModel

目標カウンター<br>

ミッションの達成目標となるカウンターの情報

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| counterName | string |  | ✓ |  |  ~ 128文字 | カウンターモデル名<br>カウンターモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| scopeType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"resetTiming",<br>&nbsp;&nbsp;"verifyAction"<br>}<br> |  |  | "resetTiming" |  | スコープの種類<br>ミッション達成判定に使用するカウンタースコープの種類を指定します。"resetTiming" は特定のリセット期間のカウンター値を評価し、"verifyAction" は名前付き条件の値を評価します。"resetTiming": リセットタイミング / "verifyAction": 検証アクション /  |
| resetType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"notReset",<br>&nbsp;&nbsp;"daily",<br>&nbsp;&nbsp;"weekly",<br>&nbsp;&nbsp;"monthly",<br>&nbsp;&nbsp;"days"<br>}<br> | {scopeType} == "resetTiming" |  |  |  | 目標リセットタイミング<br>目標値と比較するカウンターのリセットタイミングスコープを指定します。例えば "daily" を選択すると、デイリーのカウンター値を確認します。省略した場合、ミッショングループのリセットタイミングが使用されます。"notReset": リセットしない / "daily": 毎日 / "weekly": 毎週 / "monthly": 毎月 / "days": 一定日数ごと / <br><br>※ scopeType が "resetTiming" であれば 有効 |
| conditionName | string | {scopeType} == "verifyAction" | ✓※ |  |  ~ 128文字 | 条件名<br>目標値と比較する検証アクション条件スコープの名前です。カウンターモデルのスコープで定義された conditionName と一致する必要があります。scopeType が "verifyAction" の場合のみ使用されます。<br><br>※ scopeType が "verifyAction" であれば 必須 |
| value | long |  | ✓ |  | 0 ~ 9223372036854775805 | 目標値<br>ミッションタスクが達成とみなされるために、カウンターのスコープ値が達するか超える必要がある閾値です。 |


**関連するモデル:**
EzMissionTaskModel - ミッションタスクモデル



---

### EzConfig

コンフィグ設定<br>

トランザクションの変数に適用する設定値

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| key | string |  | ✓ |  |  ~ 64文字 | 名前 |
| value | string |  |  |  |  ~ 51200文字 | 値 |

**関連するメソッド:**
batchReceiveRewards - 複数の達成ミッションの報酬をまとめて受け取る
receiveRewards - 達成したミッションの報酬を受け取る


---

### EzAcquireAction

入手アクション

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 入手アクションで実行するアクションの種類 |
| request | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |


**関連するモデル:**
EzMissionTaskModel - ミッションタスクモデル



---

### EzConsumeAction

消費アクション

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 消費アクションで実行するアクションの種類 |
| request | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |


---

### EzVerifyAction

検証アクション<br>

操作の実行前に条件を検証するアクションを定義します。<br>
取り逃がしボーナスの救済で、救済を許可する前に前提条件（ユーザーの資格、リソースの利用可能性など）を確認するために使用されます。<br>
action フィールドは検証アクションの種類を指定し、request フィールドには対応するリクエストパラメータが含まれます。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 検証アクションで実行するアクションの種類 |
| request | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |


**関連するモデル:**
EzCounterScopeModel - カウンターリセットタイミングモデル
EzMissionTaskModel - ミッションタスクモデル



---

### EzScopedValue

スコープ値<br>

特定のスコープ内のカウンター値を表します。各スコープ値は特定のリセットタイミング（例：毎日、毎週、毎月）または検証アクション条件の累積カウントを保持します。リセットタイミングが到来すると値はゼロにリセットされます。カウンター値には上限があり、増加しても最大値を超えることはありません。

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| scopeType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"resetTiming",<br>&nbsp;&nbsp;"verifyAction"<br>}<br> |  |  | "resetTiming" |  | スコープの種類<br>このスコープ値がリセットタイミングスケジュールに基づくものか、検証アクション条件に基づくものかを示します。"resetTiming": リセットタイミング / "verifyAction": 検証アクション /  |
| resetType | 文字列列挙型<br>enum {<br>&nbsp;&nbsp;"notReset",<br>&nbsp;&nbsp;"daily",<br>&nbsp;&nbsp;"weekly",<br>&nbsp;&nbsp;"monthly",<br>&nbsp;&nbsp;"days"<br>}<br> | {scopeType} == "resetTiming" | ✓※ |  |  | リセットタイミング<br>このスコープ値のリセットタイミングです。カウンター値がリセットされるまでの累積期間を決定します。scopeType が "resetTiming" の場合のみ適用されます。"notReset": リセットしない / "daily": 毎日 / "weekly": 毎週 / "monthly": 毎月 / "days": 一定日数ごと / <br><br>※ scopeType が "resetTiming" であれば 必須 |
| conditionName | string | {scopeType} == "verifyAction" | ✓※ |  |  ~ 128文字 | 条件名<br>このスコープ値が対応する検証アクション条件の名前です。この値がどの条件スコープに属するかを識別するために使用されます。scopeType が "verifyAction" の場合のみ適用されます。<br><br>※ scopeType が "verifyAction" であれば 必須 |
| value | long |  |  | 0 | 0 ~ 9223372036854775805 | カウント<br>このスコープの累積カウンター値です。カウンターが増加すると増え、減少すると減ります。値は最大値で上限が設けられ、ゼロを下回ることはありません。 |

**関連するメソッド:**
resetCounter - カウンターの特定スコープをリセットする


**関連するモデル:**
EzCounter - カウンター



---

### EzVerifyActionResult

検証アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 検証アクションで実行するアクションの種類 |
| verifyRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| verifyResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzConsumeActionResult

消費アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 消費アクションで実行するアクションの種類 |
| consumeRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| consumeResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzAcquireActionResult

入手アクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| action | 文字列列挙型<br>enum {<br>}<br> |  | ✓ |  |  | 入手アクションで実行するアクションの種類 |
| acquireRequest | string |  | ✓ |  |  ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
| statusCode | int |  |  |  | 0 ~ 999 | ステータスコード |
| acquireResult | string |  |  |  |  ~ 1048576文字 | 結果内容 |


**関連するモデル:**
EzTransactionResult - トランザクション実行結果



---

### EzTransactionResult

トランザクション実行結果<br>

サーバーサイドでのトランザクションの自動実行機能を利用して実行されたトランザクションの実行結果

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| transactionId | string |  | ✓ |  | 36 ~ 36文字 | トランザクションID |
| verifyResults | [List&lt;EzVerifyActionResult&gt;](#ezverifyactionresult) |  |  |  | 0 ~ 10 items | 検証アクションの実行結果リスト |
| consumeResults | [List&lt;EzConsumeActionResult&gt;](#ezconsumeactionresult) |  |  | [] | 0 ~ 10 items | 消費アクションの実行結果リスト |
| acquireResults | [List&lt;EzAcquireActionResult&gt;](#ezacquireactionresult) |  |  | [] | 0 ~ 100 items | 入手アクションの実行結果リスト |

**関連するメソッド:**
batchReceiveRewards - 複数の達成ミッションの報酬をまとめて受け取る
receiveRewards - 達成したミッションの報酬を受け取る


---

## メソッド

### batchReceiveRewards

複数の達成ミッションの報酬をまとめて受け取る<br>

同じグループ内の複数のミッションタスクの報酬を1回の呼び出しで受け取ります。<br>
ミッションUIの「一括受取」ボタンに対応します。プレイヤーが各ミッションの「受け取る」を1つずつタップする代わりに、まとめて受け取れます。<br>

指定されたすべてのタスクは達成済みかつ未受領の状態である必要があります。すべてのタスクの報酬が1つのトランザクションにまとめられます。<br>

たとえば「バトルに3回勝利」（報酬: ジェム50個）と「ゴールドを500収集」（報酬: ガチャチケット1枚）を達成している場合、両方のタスク名を指定して呼び出すと、ジェム50個 + ガチャチケット1枚が1回の操作で付与されます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| missionTaskNames | List&lt;string&gt; |  | ✓|  | 1 ~ 100 items | タスク名のリスト |
| gameSession | GameSession | | ✓|  |  | GameSession |
| config | [List&lt;EzConfig&gt;](#ezconfig) |  | | [] | 0 ~ 32 items | トランザクションの変数に適用する設定値 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| transactionId | string | 発行されたトランザクションID|
| stampSheet | string | ミッションの達成報酬を受領するスタンプシート|
| stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN|
| autoRunStampSheet | bool | トランザクションの自動実行が有効か|
| atomicCommit | bool | トランザクションをアトミックにコミットするか|
| transaction | string | 発行されたトランザクション|
| transactionResult | [EzTransactionResult](#eztransactionresult) | トランザクション実行結果|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var result = await domain.BatchReceiveRewardsAsync(
        missionTaskNames: new List<string> {
            "mission-task-0001",
            "mission-task-0002",
        },
        config: null
    );
    // New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
    // エラーが発生すると TransactionException がスローされます。
    // TransactionException::Retry() でリトライが可能です。

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var future = domain.BatchReceiveRewardsFuture(
        missionTaskNames: new List<string> {
            "mission-task-0001",
            "mission-task-0002",
        },
        config: null
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    // New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
    // エラーが発生すると TransactionException がスローされます。
    // TransactionException::Retry() でリトライが可能です。

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Complete(
        "mission-group-0001" // missionGroupName
    );
    const auto Future = Domain->BatchReceiveRewards(
        []
        {
            auto v = TOptional<TArray<FString>>();
            v->Add("mission-task-0001");
            v->Add("mission-task-0002");
            return v;
        }() // missionTaskNames
        // config
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


---

### evaluateComplete

ミッション達成状況を再評価する<br>

指定されたグループ内のすべてのカウンター値をミッションタスク条件と照合し、達成状況を更新します。<br>

通常、ミッションの達成判定はカウンターが加算されるたびに自動的に行われます。しかし、カウンターが既に加算された後に既存のグループに新しいミッションタスクを追加した場合、新しいタスクは自動的には評価されません。<br>

そのような状況でこのAPIを呼び出すと、プレイヤーの既存のカウンター値が新しいタスクの条件を満たしているかを遡ってチェックできます。<br>

例: デイリーミッションに「バトルに1回勝利」を新規追加した場合。今日既にバトルに勝利しているプレイヤーは条件を満たすカウンター値を持っていますが、システムはまだそれを認識していません。EvaluateComplete を呼び出すことで、チェックが行われ達成済みとしてマークされます。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzComplete](#ezcomplete) | 再評価後の達成状況|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var result = await domain.EvaluateCompleteAsync(
    );
    var item = await result.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var future = domain.EvaluateCompleteFuture(
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Complete(
        "mission-group-0001" // missionGroupName
    );
    const auto Future = Domain->EvaluateComplete(
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

```


---

### getComplete

特定ミッショングループのプレイヤーの達成状況を取得する<br>

指定されたミッショングループ内で、プレイヤーがどのミッションタスクを達成し、どの報酬を受領済みかを取得します。<br>

特定グループのミッション一覧画面を表示する際に使います。たとえば、各デイリーミッションとそのステータスを表示できます:<br>
- 「バトルに3回勝利」— 達成、報酬受取済み（チェックマーク）<br>
- 「ゴールドを500収集」— 達成、報酬受取可能!（受け取りボタン）<br>
- 「アイテムを10回使用」— 進行中: 7/10（プログレスバー）<br>

ListMissionTaskModels や GetMissionGroupModel と組み合わせてタスクの定義（目標、閾値、報酬）を取得し、GetCounter と組み合わせてプログレスバー用の現在のカウンター値を表示できます。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzComplete](#ezcomplete) | 達成状況|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Complete(
        "mission-group-0001" // missionGroupName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Complete(
        "mission-group-0001" // missionGroupName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Mission::Model::FComplete> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### listCompletes

全グループのプレイヤーのミッション達成状況を取得する<br>

すべてのミッショングループの達成状況と報酬受領状況を取得します。<br>
各エントリには、プレイヤーがどのミッションタスクを達成し（カウンターの閾値を満たし）、どの報酬を受領済みかが含まれます。<br>

ミッションの概要画面を作る際に使います。たとえば、未受領の報酬があるグループにバッジや通知ドットを表示できます:<br>
「デイリーミッション（報酬2件受取可能!）」「ウィークリーミッション（完了）」「実績（新着1件!）」<br>

ミッションタスクには2つの状態があります:<br>
- 達成（Completed）: カウンターが閾値を満たした状態（例: 「バトルに5回勝利」で5回以上勝利済み）<br>
- 受領（Received）: 達成したタスクの報酬をプレイヤーが受け取った状態<br>

「達成済みだが未受領」のタスクは、プレイヤーが報酬を獲得したがまだ受け取っていないことを意味します。UIではこの状態をハイライト表示すべきです。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| pageToken | string |  | |  |  ~ 1024文字 | データの取得を開始する位置を指定するトークン |
| limit | int |  | | 30 | 1 ~ 1000 | データの取得件数 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzComplete&gt;](#ezcomplete) | 達成状況のリスト|
| nextPageToken | string | リストの続きを取得するためのページトークン|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var items = await domain.CompletesAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var it = domain.Completes(
    );
    List<EzComplete> items = new List<EzComplete>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    const auto It = Domain->Completes(
    );
    TArray<Gs2::UE5::Mission::Model::FEzCompletePtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCompletes(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCompletes(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCompletes(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCompletes(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeCompletes(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeCompletes(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### receiveRewards

達成したミッションの報酬を受け取る<br>

プレイヤーが達成したミッションタスクの報酬を受け取ります。<br>
タスクは達成済み（カウンターが閾値を満たしている）かつ未受領の状態である必要があります。<br>

呼び出すと、設定された報酬がプレイヤーに付与されます。たとえばジェム100個、ガチャチケット、ゴールド500のような報酬です。<br>

ミッションUIの「受け取る」「受領」ボタンに対応します。一般的な流れ:<br>
1. プレイヤーが達成済みで受取可能な報酬のあるミッションを見る<br>
2. プレイヤーが「受け取る」ボタンをタップ<br>
3. ゲームが ReceiveRewards を呼び出す<br>
4. 報酬が付与され、タスクが「受領済み」としてマークされる<br>

タスクがまだ達成されていない場合や、報酬が既に受領済みの場合はエラーが返されます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。 |
| missionTaskName | string |  | ✓|  |  ~ 128文字 | タスク名<br>タスク固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| config | [List&lt;EzConfig&gt;](#ezconfig) |  | | [] | 0 ~ 32 items | トランザクションの変数に適用する設定値 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| transactionId | string | 発行されたトランザクションID|
| stampSheet | string | ミッションの達成報酬を受領するスタンプシート|
| stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN|
| autoRunStampSheet | bool | トランザクションの自動実行が有効か|
| atomicCommit | bool | トランザクションをアトミックにコミットするか|
| transaction | string | 発行されたトランザクション|
| transactionResult | [EzTransactionResult](#eztransactionresult) | トランザクション実行結果|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var result = await domain.ReceiveRewardsAsync(
        missionTaskName: "mission-task-0001",
        config: null
    );
    // New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
    // エラーが発生すると TransactionException がスローされます。
    // TransactionException::Retry() でリトライが可能です。

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Complete(
        missionGroupName: "mission-group-0001"
    );
    var future = domain.ReceiveRewardsFuture(
        missionTaskName: "mission-task-0001",
        config: null
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    // New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
    // エラーが発生すると TransactionException がスローされます。
    // TransactionException::Retry() でリトライが可能です。

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Complete(
        "mission-group-0001" // missionGroupName
    );
    const auto Future = Domain->ReceiveRewards(
        "mission-task-0001" // missionTaskName
        // config
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


---

### deleteCounter

カウンターを完全に削除する<br>

プレイヤーの指定されたカウンターとそのすべてのスコープ値を削除します。<br>
ResetCounter（特定のスコープのみリセット）とは異なり、プレイヤーがまだ一度も進捗を持っていなかったかのように、カウンター全体を削除します。<br>

特定カウンターのプレイヤーの進捗を完全にクリアしたいときに使います。たとえば、ミッションの完全リセット機能を実装する場合などです。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzCounter](#ezcounter) | 削除したカウンター|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "counter-0001"
    );
    var result = await domain.DeleteCounterAsync(
    );

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "counter-0001"
    );
    var future = domain.DeleteCounterFuture(
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Counter(
        "counter-0001" // counterName
    );
    const auto Future = Domain->DeleteCounter(
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
    const auto Result = Future->GetTask().Result();

```


---

### getCounter

特定カウンターのプレイヤーの値を取得する<br>

プレイヤーの特定カウンターの現在値を、すべてのスコープ値を含めて取得します。<br>
たとえば「battle_wins」カウンターの場合、日次=3、週次=12、累計=87 のような値が返されます。<br>

特定の目標に対するミッション進捗を表示する際に使います。たとえばデイリーミッションの横にプログレスバー「今日のバトル勝利数 3/5」のように表示できます。<br>

各スコープ値は異なる期間で追跡されたカウンターを表しており、短期的な進捗と長期的な進捗の両方を表示できます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>このカウンターインスタンスの基となるカウンターモデルの名前です。スコープやリセットタイミングを定義するカウンターモデル定義にリンクします。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzCounter](#ezcounter) | カウンター|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "quest_complete"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "quest_complete"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Counter(
        "quest_complete" // counterName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "quest_complete"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "quest_complete"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Counter(
        "quest_complete" // counterName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Mission::Model::FCounter> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### listCounters

プレイヤーの現在のカウンター値を取得する<br>

プレイヤーのすべてのカウンター値を取得します。<br>
各カウンターは特定のプレイヤーアクション（バトル勝利回数、アイテム収集数、ゴールド獲得量など）を追跡し、各スコープ（日次・週次・月次・累計）ごとの値を持ちます。<br>

プレイヤーのミッション進捗の概要を表示する際に使います。たとえば「今日のバトル勝利数: 3」や「クエスト累計クリア数: 42」のようにステータスやミッション画面で表示できます。<br>

カウンター値はプレイヤーがゲーム内でアクションを行ったとき（他サービスの報酬アクション経由）に自動的に加算され、ミッションタスクの閾値と自動的に照合されます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| gameSession | GameSession | | ✓|  |  | GameSession |
| pageToken | string |  | |  |  ~ 1024文字 | データの取得を開始する位置を指定するトークン |
| limit | int |  | | 30 | 1 ~ 1000 | データの取得件数 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzCounter&gt;](#ezcounter) | カウンターのリスト|
| nextPageToken | string | リストの続きを取得するためのページトークン|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var items = await domain.CountersAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    var it = domain.Counters(
    );
    List<EzCounter> items = new List<EzCounter>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    const auto It = Domain->Counters(
    );
    TArray<Gs2::UE5::Mission::Model::FEzCounterPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCounters(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCounters(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCounters(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCounters(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeCounters(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeCounters(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### resetCounter

カウンターの特定スコープをリセットする<br>

指定されたスコープのカウンター値のみをリセットします。<br>
たとえば、週次や累計の値に影響を与えずに、日次スコープだけをリセットできます。<br>

特定の期間の進捗を手動でリセットしたいときに使います。たとえば、プレイヤーが特殊アイテムを使ってデイリーミッションを再挑戦する際に「デイリーチャレンジ」カウンターをリセットするような場合です。<br>

指定されたスコープタイプに一致するスコープ付き値のみがリセットされ、その他のスコープ付き値は変更されません。

#### Request

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

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzCounter](#ezcounter) | 削除したカウンター|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "counter-0001"
    );
    var result = await domain.ResetCounterAsync(
        scopes: new List<Gs2.Unity.Gs2Mission.Model.EzScopedValue> {
            new Gs2.Unity.Gs2Mission.Model.EzScopedValue() {
                ResetType = "daily",
            },
            new Gs2.Unity.Gs2Mission.Model.EzScopedValue() {
                ResetType = "weekly",
            },
        }
    );
    var item = await result.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Counter(
        counterName: "counter-0001"
    );
    var future = domain.ResetCounterFuture(
        scopes: new List<Gs2.Unity.Gs2Mission.Model.EzScopedValue> {
            new Gs2.Unity.Gs2Mission.Model.EzScopedValue() {
                ResetType = "daily",
            },
            new Gs2.Unity.Gs2Mission.Model.EzScopedValue() {
                ResetType = "weekly",
            },
        }
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var future2 = future.Result.ModelFuture();
    yield return future2;
    if (future2.Error != null)
    {
        onError.Invoke(future2.Error, null);
        yield break;
    }
    var result = future2.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        GameSession
    )->Counter(
        "counter-0001" // counterName
    );
    const auto Future = Domain->ResetCounter(
        []
        {
            auto v = MakeShared<TArray<TSharedPtr<Gs2::UE5::Mission::Model::FEzScopedValue>>>();
            v->Add(
                MakeShared<Gs2::UE5::Mission::Model::FEzScopedValue>()
                ->WithResetType(TOptional<FString>("daily"))
            );
            v->Add(
                MakeShared<Gs2::UE5::Mission::Model::FEzScopedValue>()
                ->WithResetType(TOptional<FString>("weekly"))
            );
            return v;
        }() // scopes
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

    // obtain changed values / result values
    const auto Future2 = Future->GetTask().Result()->Model();
    Future2->StartSynchronousTask();
    if (Future2->GetTask().IsError())
    {
        return Future2->GetTask().Error();
    }
    const auto Result = Future2->GetTask().Result();

```


---

### getCounterModel

特定のカウンター定義の詳細を取得する<br>

カウンター名を指定して、スコープとリセット条件を含む詳細を取得します。<br>
カウンターが何を追跡し、その値がどのように管理されるかを把握する際に使います。たとえば、ミッションの進捗にどのアクションが寄与するかをプレイヤーに表示する場合などです。<br>

レスポンスにはこのカウンターに定義されたスコープのリストが含まれ、各スコープにはリセットタイプ（日次・週次・月次・なし）とリセットタイミングが設定されています。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| counterName | string |  | ✓|  |  ~ 128文字 | カウンターモデル名<br>カウンターモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzCounterModel](#ezcountermodel) | カウンターモデル|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).CounterModel(
        counterName: "counter-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).CounterModel(
        counterName: "counter-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->CounterModel(
        "counter-0001" // counterName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).CounterModel(
        counterName: "counter-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).CounterModel(
        counterName: "counter-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->CounterModel(
        "counter-0001" // counterName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Mission::Model::FCounterModel> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### listCounterModels

カウンター定義の一覧を取得する<br>

ネームスペースに定義されているすべてのカウンターモデルを取得します。<br>
カウンターはプレイヤーの行動を追跡し、ミッション達成の判定に使われる値です。たとえば「battle_wins」カウンターはバトル勝利回数を追跡し、「gold_collected」カウンターは獲得ゴールドの合計を追跡します。<br>

各カウンターモデルでは1つ以上の「スコープ」を定義します。スコープはカウンター値がどの期間単位で追跡されるかを決定します:<br>
- 1つのカウンターで日次・週次・月次・累計の値を同時に追跡できます<br>
- たとえば「battle_wins」カウンターは、今日の勝利数（日次スコープ）、今週の勝利数（週次スコープ）、累計勝利数（累計スコープ）を持てます<br>
- 異なるミッションタスクが同じカウンターの異なるスコープを参照できます（例: 「今日バトルに3回勝利」は日次スコープ、「累計100回勝利」は累計スコープを使用）<br>

カウンター値は通常、他のGS2サービスの報酬アクションとして自動的に加算されます（例: クエストクリア時やアイテム購入時）が、ゲームサーバーから手動で加算することもできます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzCounterModel&gt;](#ezcountermodel) | カウンターモデルのリスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.CounterModelsAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.CounterModels(
    );
    List<EzCounterModel> items = new List<EzCounterModel>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->CounterModels(
    );
    TArray<Gs2::UE5::Mission::Model::FEzCounterModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCounterModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCounterModels(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeCounterModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeCounterModels(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeCounterModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeCounterModels(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### getMissionGroupModel

特定のミッショングループの詳細を取得する<br>

ミッショングループ名を指定して、リセットタイプ、リセットタイミング設定、および含まれるミッションタスクのリストを含む詳細を取得します。<br>

特定グループ内のミッション一覧を表示する際に使います。たとえばプレイヤーが「デイリーミッション」タブをタップしたとき、このAPIを呼び出してすべてのデイリーミッションタスクとその詳細を取得します。<br>

レスポンスにはグループに定義されたミッションタスクが含まれ、各タスクには対象カウンターの条件と報酬の設定があります。<br>
GetComplete と組み合わせて、各タスクのプレイヤーの進捗状況と達成状態を表示できます。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループモデル名<br>ミッショングループモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzMissionGroupModel](#ezmissiongroupmodel) | ミッショングループモデル|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Mission::Model::FMissionGroupModel> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### listMissionGroupModels

ミッショングループの一覧を取得する<br>

ネームスペースに定義されているすべてのミッショングループを取得します。<br>
ミッショングループは個々のミッションをまとめるカテゴリです。たとえば「デイリーミッション」「ウィークリーミッション」「ストーリーミッション」「実績ミッション」のようなものです。<br>

各グループにはリセットタイプがあり、グループ内のミッションがいつリセットされるかを決定します:<br>
- notReset: リセットしない（「ステージ10をクリア」「キャラクター100体収集」のような恒久的な実績）<br>
- daily: 毎日リセット（例: 「今日バトルに3回勝利」）<br>
- weekly: 毎週リセット（例: 「今週5日ログイン」）<br>
- monthly: 毎月リセット（例: 「今月ゴールドを10,000消費」）<br>

ミッションのメイン一覧画面を作る際に使います。たとえば「デイリー」「ウィークリー」「実績」のタブを表示するような画面です。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzMissionGroupModel&gt;](#ezmissiongroupmodel) | ミッショングループモデルのリスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    var items = await domain.MissionGroupModelsAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    var it = domain.MissionGroupModels(
    );
    List<EzMissionGroupModel> items = new List<EzMissionGroupModel>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    );
    const auto It = Domain->MissionGroupModels(
    );
    TArray<Gs2::UE5::Mission::Model::FEzMissionGroupModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeMissionGroupModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeMissionGroupModels(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeMissionGroupModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeMissionGroupModels(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeMissionGroupModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeMissionGroupModels(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### getMissionTaskModel

特定のミッションタスクの詳細を取得する<br>

指定されたミッショングループ内の特定のミッションタスクを名前を指定して取得します。<br>
特定ミッションの詳細画面を表示する際に使います。目標、現在の進捗、報酬、達成済みかどうかを表示できます。<br>

レスポンスには以下が含まれます:<br>
- 対象カウンター名と閾値（プレイヤーが達成すべき目標）<br>
- 報酬アクション（受け取り時にプレイヤーが獲得するもの）<br>
- 前提タスク（先に達成が必要なタスク）がある場合はその情報<br>
- 達成判定の検証タイプ

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループモデル名<br>ミッショングループモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionTaskName | string |  | ✓|  |  ~ 128文字 | ミッションタスクモデル名<br>ミッションタスクモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| item | [EzMissionTaskModel](#ezmissiontaskmodel) | ミッションタスクモデル|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    ).MissionTaskModel(
        missionTaskName: "mission-task-0001"
    );
    var item = await domain.ModelAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    ).MissionTaskModel(
        missionTaskName: "mission-task-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    )->MissionTaskModel(
        "mission-task-0001" // missionTaskName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    ).MissionTaskModel(
        missionTaskName: "mission-task-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    ).MissionTaskModel(
        missionTaskName: "mission-task-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    )->MissionTaskModel(
        "mission-task-0001" // missionTaskName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Mission::Model::FMissionTaskModel> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

### listMissionTaskModels

グループ内のミッションタスクの一覧を取得する<br>

指定されたミッショングループ内のすべての個別ミッションタスクを取得します。<br>
各ミッションタスクは1つのミッション目標を表します。たとえば「バトルに5回勝利」「ゴールドを1,000収集」「ステージ3をクリア」のようなものです。<br>

各タスクでは以下が定義されます:<br>
- 対象カウンターと閾値（例: カウンター "battle_wins" が 5 以上）<br>
- プレイヤーが達成報酬を受け取ったときに付与される報酬（例: ジェム100個）<br>
- 前提タスク（オプション）（例: 「バトルに10回勝利」は「バトルに5回勝利」達成後にのみ表示される）<br>

ミッションシステムは自動的に動作します:<br>
1. プレイヤーがゲーム内で何かをすると（バトルに勝利、ゴールド収集など）、対応するカウンターが加算される<br>
2. システムがカウンター値がタスクの閾値を満たしているかチェックする<br>
3. 満たしていればタスクが「達成」としてマークされる<br>
4. プレイヤーは ReceiveRewards を使って報酬を受け取れる<br>

グループ内の各タスクの目標と報酬を含むミッション一覧を表示する際に使います。

#### Request

|  | 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128文字 | ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| missionGroupName | string |  | ✓|  |  ~ 128文字 | ミッショングループモデル名<br>ミッショングループモデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |

#### Result

|  | 型 | 説明 |
| --- | --- | --- |
| items | [List&lt;EzMissionTaskModel&gt;](#ezmissiontaskmodel) | ミッションタスクモデルのリスト|

#### 実装例




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    var items = await domain.MissionTaskModelsAsync(
    ).ToListAsync();

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    var it = domain.MissionTaskModels(
    );
    List<EzMissionTaskModel> items = new List<EzMissionTaskModel>();
    while (it.HasNext())
    {
        yield return it.Next();
        if (it.Error != null)
        {
            onError.Invoke(it.Error, null);
            break;
        }
        if (it.Current != null)
        {
            items.Add(it.Current);
        }
        else
        {
            break;
        }
    }

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    );
    const auto It = Domain->MissionTaskModels(
    );
    TArray<Gs2::UE5::Mission::Model::FEzMissionTaskModelPtr> Result;
    for (auto Item : *It)
    {
        if (Item.IsError())
        {
            return false;
        }
        Result.Add(Item.Current());
    }

```


##### 値の変更イベントハンドリング




**Unity (UniTask)**
```csharp
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeMissionTaskModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeMissionTaskModels(callbackId);

```

**Unity (Vanilla)**
```cs
    var domain = gs2.Mission.Namespace(
        namespaceName: "namespace-0001"
    ).MissionGroupModel(
        missionGroupName: "mission-group-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.SubscribeMissionTaskModels(
        () => {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    domain.UnsubscribeMissionTaskModels(callbackId);

```

**Unreal Engine 5**
```cpp
    const auto Domain = Gs2->Mission->Namespace(
        "namespace-0001" // namespaceName
    )->MissionGroupModel(
        "mission-group-0001" // missionGroupName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->SubscribeMissionTaskModels(
        []() {
            // リストの要素が変化した時に呼び出される
        }
    );

    // イベントハンドリングを停止
    Domain->UnsubscribeMissionTaskModels(CallbackId);

```


{{% alert title="Warning" color="warning" %}}このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。

ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。

そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
{{% /alert %}}

---

## イベントハンドラ

### OnCompleteNotification

ミッションのタスクを達成したときに使用するプッシュ通知

 | 名前 | 型 | 説明 |
| --- | --- | --- |
| namespaceName | string |ネームスペース名<br>ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。|
| groupName | string |ミッショングループ名<br>この達成状況レコードが属するミッショングループの名前です。ユーザーごと・ミッショングループごとに1つの達成状況レコードが存在します。|
| userId | string |ユーザーID|
| taskName | string |ミッションタスク名|

#### 実装例





**Unity (UniTask)**
```csharp

    gs2.Mission.OnCompleteNotification += notification =>
    {
        var namespaceName = notification.NamespaceName;
        var groupName = notification.GroupName;
        var userId = notification.UserId;
        var taskName = notification.TaskName;
    };
```

**Unity (Vanilla)**
```cs

    gs2.Mission.OnCompleteNotification += notification =>
    {
        var namespaceName = notification.NamespaceName;
        var groupName = notification.GroupName;
        var userId = notification.UserId;
        var taskName = notification.TaskName;
    };
```

**Unreal Engine 5**
```cpp

    Gs2->Mission->OnCompleteNotification().AddLambda([](const auto Notification)
    {
        const auto NamespaceName = Notification->NamespaceNameValue;
        const auto GroupName = Notification->GroupNameValue;
        const auto UserId = Notification->UserIdValue;
        const auto TaskName = Notification->TaskNameValue;
    });
```


---



