GS2-Mission SDK for Game Engine API リファレンス
モデル
EzComplete
ミッションの達成状況
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
completedMissionTaskNames | List<string> | | [] | | 達成済みのタスク名リスト |
receivedMissionTaskNames | List<string> | | [] | | 報酬の受け取り済みのタスク名リスト |
EzCounterScopeModel
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
resetType | enum [’notReset’, ‘daily’, ‘weekly’, ‘monthly’] | ✓ | | ~ 128文字 | リセットタイミング |
resetDayOfMonth | int | {resetType} == “monthly” | | 1 ~ 31 | リセットをする日にち |
resetDayOfWeek | enum [‘sunday’, ‘monday’, ’tuesday’, ‘wednesday’, ’thursday’, ‘friday’, ‘saturday’] | {resetType} == “weekly” | | ~ 128文字 | リセットする曜日 |
resetHour | int | {resetType} in [“monthly”, “weekly”, “daily”] | | ~ 23 | リセット時刻 |
EzConfig
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
key | string | | | ~ 64文字 | 名前 |
value | string | | | ~ 51200文字 | 値 |
EzAcquireAction
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
action | enum [] | ✓ | | ~ 128文字 | スタンプシートを使用して実行するアクションの種類 |
request | string | ✓ | | ~ 1048576文字 | リクエストのJSON |
EzCounter
カウンター
カウンターはミッションの進行状況をゲームプレイヤー毎に保持するエンティティです。
カウンターの値は関連付けられたタスクの期間ごとに集計されます。
そのため、1つのカウンターは複数の値を持ちます。
例えば、クエストのクリア回数カウンターであれば、今月のクリア回数、今週のクリア回数、今日のクリア回数。といった具合です。
EzCounterModel
カウンターモデル
カウンターモデルはミッションタスクの達成条件に設定可能なエンティティです。
カウンターの値は複数のミッショングループから参照可能なため、1つのカウンターでウィークリーミッションとデイリーミッションといった複数のミッショングループの達成条件に設定ができます。
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
name | string | ✓ | | ~ 128文字 | カウンター名 |
metadata | string | | | ~ 1024文字 | メタデータ |
scopes | List<EzCounterScopeModel> | ✓ | [] | | カウンターのリセットタイミングリスト |
challengePeriodEventId | string | | | ~ 1024文字 | カウンターの操作が可能な期間を設定した GS2-Schedule イベントGRN |
EzMissionGroupModel
ミッショングループモデル
ミッショングループはカウンターのリセットタイミングでタスクをグルーピングするエンティティです。
たとえば、デイリーミッションで1つのグループ。ウィークリーミッションで1つのグループとなります。
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
name | string | ✓ | | ~ 128文字 | ミッショングループ名 |
metadata | string | | | ~ 1024文字 | メタデータ |
tasks | List<EzMissionTaskModel> | | | | ミッションタスクリスト |
resetType | enum [’notReset’, ‘daily’, ‘weekly’, ‘monthly’] | ✓ | “notReset” | ~ 128文字 | リセットタイミング |
resetDayOfMonth | int | {resetType} == “monthly” | | 1 ~ 31 | リセットをする日にち |
resetDayOfWeek | enum [‘sunday’, ‘monday’, ’tuesday’, ‘wednesday’, ’thursday’, ‘friday’, ‘saturday’] | {resetType} == “weekly” | | ~ 128文字 | リセットする曜日 |
resetHour | int | {resetType} in [“monthly”, “weekly”, “daily”] | | ~ 23 | リセット時刻 |
completeNotificationNamespaceId | string | | | ~ 1024文字 | ネームスペースGRN |
EzMissionTaskModel
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
name | string | ✓ | | ~ 128文字 | タスク名 |
metadata | string | | | ~ 1024文字 | メタデータ |
counterName | string | ✓ | | ~ 128文字 | カウンター名 |
targetValue | long | ✓ | | 1 ~ 9223372036854775806 | 目標値 |
completeAcquireActions | List<EzAcquireAction> | | [] | | ミッション達成時の報酬 |
challengePeriodEventId | string | | | ~ 1024文字 | 報酬が受け取り可能な期間を設定した GS2-Schedule イベントGRN |
premiseMissionTaskName | string | | | ~ 128文字 | このタスクに挑戦するために達成しておく必要のあるタスクの名前 |
EzScopedValue
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
resetType | enum [’notReset’, ‘daily’, ‘weekly’, ‘monthly’] | ✓ | | ~ 128文字 | リセットタイミング |
value | long | ✓ | 0 | ~ 9223372036854775806 | カウント |
メソッド
getComplete
ミッショングループを指定して達成したミッションを取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
accessToken | string | ✓ | | ~ 128文字 | ユーザーID |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Complete(
missionGroupName: "mission-group-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Complete(
missionGroupName: "mission-group-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Complete(
"mission-group-0001" // missionGroupName
);
const auto item = Domain.Model();
listCompletes
達成したミッションの一覧を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
accessToken | string | ✓ | | ~ 128文字 | ユーザーID |
pageToken | string | | | ~ 1024文字 | データの取得を開始する位置を指定するトークン |
limit | int | ✓ | 30 | 1 ~ 1000 | データの取得件数 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.CompletesAsync(
).ToListAsync();
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;
}
}
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
);
const auto It = Domain->Completes(
);
for (auto Item : *It)
{
}
receiveRewards
ミッションの達成報酬を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
missionTaskName | string | ✓ | | ~ 128文字 | タスク名 |
accessToken | string | ✓ | | ~ 128文字 | ユーザーID |
Result
| 型 | 説明 |
---|
transactionId | string | 発行されたスタンプシートのトランザクションID |
stampSheet | string | ミッションの達成報酬を受領するスタンプシート |
stampSheetEncryptionKeyId | string | スタンプシートの署名計算に使用した暗号鍵GRN |
autoRunStampSheet | bool | スタンプシートの自動実行が有効か |
実装例
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"
);
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry().
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Complete(
missionGroupName: "mission-group-0001"
);
var future = domain.ReceiveRewards(
missionTaskName: "mission-task-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
// New Experience ではスタンプシートはSDKレベルで自動的に実行されます。
// エラーが発生すると TransactionException がスローされます。
// TransactionException::Retry() でリトライが可能です。
// In New Experience, stamp sheets are automatically executed at the SDK level.
// If an error occurs, a TransactionException is thrown.
// you can retry with TransactionException::Retry().
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Complete(
"mission-group-0001" // missionGroupName
);
const auto Future = Domain->ReceiveRewards(
"mission-task-0001"
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
getCounter
ミッショングループを指定して達成したミッションを取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
accessToken | string | ✓ | | ~ 128文字 | ユーザーID |
counterName | string | ✓ | | ~ 128文字 | カウンター名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
counterName: "quest_complete"
);
var item = await domain.ModelAsync();
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
counterName: "quest_complete"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Counter(
"quest_complete" // counterName
);
const auto item = Domain.Model();
listCounters
達成したミッションの一覧を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
accessToken | string | ✓ | | ~ 128文字 | ユーザーID |
pageToken | string | | | ~ 1024文字 | データの取得を開始する位置を指定するトークン |
limit | int | ✓ | 30 | 1 ~ 1000 | データの取得件数 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.CountersAsync(
).ToListAsync();
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;
}
}
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
);
const auto It = Domain->Counters(
);
for (auto Item : *It)
{
}
getCounterModel
カウンターモデルを取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
counterName | string | ✓ | | ~ 128文字 | カウンター名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).CounterModel(
counterName: "counter-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).CounterModel(
counterName: "counter-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->CounterModel(
"counter-0001" // counterName
);
const auto item = Domain.Model();
listCounterModels
カウンターモデルの一覧を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.CounterModelsAsync(
).ToListAsync();
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;
}
}
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->CounterModels(
);
for (auto Item : *It)
{
}
getMissionGroupModel
ミッショングループ名を指定してミッショングループモデルを取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).MissionGroupModel(
missionGroupName: "mission-group-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).MissionGroupModel(
missionGroupName: "mission-group-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->MissionGroupModel(
"mission-group-0001" // missionGroupName
);
const auto item = Domain.Model();
listMissionGroupModels
ミッショングループモデルの一覧を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.MissionGroupModelsAsync(
).ToListAsync();
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;
}
}
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->MissionGroupModels(
);
for (auto Item : *It)
{
}
getMissionTaskModel
ミッションタスク名を指定してミッションタスクモデルを取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
missionTaskName | string | ✓ | | ~ 128文字 | タスク名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).MissionGroupModel(
missionGroupName: "mission-group-0001"
).MissionTaskModel(
missionTaskName: "mission-task-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).MissionGroupModel(
missionGroupName: "mission-group-0001"
).MissionTaskModel(
missionTaskName: "mission-task-0001"
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->MissionGroupModel(
"mission-group-0001" // missionGroupName
)->MissionTaskModel(
"mission-task-0001" // missionTaskName
);
const auto item = Domain.Model();
listMissionTaskModels
ミッションタスクモデルの一覧を取得
Request
| 型 | 必須 | デフォルト | 値の制限 | 説明 |
---|
namespaceName | string | ✓ | | ~ 32文字 | ネームスペース名 |
missionGroupName | string | ✓ | | ~ 128文字 | ミッショングループ名 |
Result
実装例
var domain = gs2.Mission.Namespace(
namespaceName: "namespace-0001"
).MissionGroupModel(
missionGroupName: "mission-group-0001"
);
var items = await domain.MissionTaskModelsAsync(
).ToListAsync();
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;
}
}
const auto Domain = Gs2->Mission->Namespace(
"namespace-0001" // namespaceName
)->MissionGroupModel(
"mission-group-0001" // missionGroupName
);
const auto It = Domain->MissionTaskModels(
);
for (auto Item : *It)
{
}
イベントハンドラ
OnCompleteNotification
ミッションのタスクを達成したときに使用する通知
名前 | 型 | 説明 |
---|
namespaceName | string | ネームスペース名 |
groupName | string | ミッショングループ名 |
taskName | string | ミッションタスク名 |
実装例
gs2.Mission.OnCompleteNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var groupName = notification.GroupName;
var taskName = notification.TaskName;
};
gs2.Mission.OnCompleteNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var groupName = notification.GroupName;
var taskName = notification.TaskName;
};
Gs2->Mission->OnCompleteNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto GroupName = Notification->GroupNameValue;
const auto TaskName = Notification->TaskNameValue;
});