GS2-Schedule
ゲーム内のイベントなどのスケジュールを管理する機能を提供します。
このマイクロサービスだけでは機能しないため、他のマイクロサービスと連携して使用することが前提となります。
イベントの開催期間には2種類あります。 1つ目は、全てのプレイヤーが同じ期間を共有する「絶対期間」、2つ目は、プレイヤーごとに期間が異なる「相対期間」となります。
絶対期間
「1月1日〜1月3日でニューイヤーイベントを開催する」といったケースで使用する期間タイプです。
相対期間
「ゲーム開始から1週間」や「初めてボスを倒してから24時間」のように、プレイヤーによってイベントの期間が異なるケースで使用する期間タイプです。
相対期間を実現するための「トリガー」という仕組みがあります。 トリガーを実行したあと、指定された期間(ttl)がイベントの開催期間として扱われます。
トリガーの引き方の種類
トリガーを引く時に、すでにトリガーが引かれている場合のイベント期間の指定方法には複数の方式があります。
- トリガーを再起動する(renew)
- トリガーを延長する(extend)
- 何もしない(drop)
- イベントの繰り返し終了日時で有効期限を迎える(repeatCycleEnd)
- 次回の繰り返し開始日時で有効期限を迎える(repeatCycleNextStart)
- 絶対期間イベントの終了日時で有効期限を迎える(absoluteEnd)
repeatCycleEnd / repeatCycleNextStart / absoluteEnd は、繰り返し設定や絶対期間を持つイベントに合わせて有効期限を自動調整する方式です。
2020年1月1日 00:00にトリガーを引き、7日間の相対期間イベントが開始された場合、2020年1月3日 00:00にトリガーを再度引いたときの各動作は以下のようになります。
方式 | イベント終了日時 | |
---|---|---|
renew | 2020年1月10日 00:00 | トリガーの起動時点 2020年1月3日 00:00に7日間を追加 |
extend | 2020年01月14日 00:00 | すでに存在するトリガーの有効期限 2020年1月7日 00:00に7日間を追加 |
drop | 2020年01月7日 00:00 |
繰り返し設定
イベント期間のうち特定の曜日や時間帯だけを有効にしたい場合は RepeatSetting
で毎日・毎週・毎月・カスタムサイクルの繰り返しを定義できます。
マスターデータ管理
マスターデータを登録することでマイクロサービスで利用可能なデータや振る舞いを設定できます。
マスターデータの種類には以下があります。
EventMaster
: イベント期間と繰り返し設定
マスターデータの登録はマネージメントコンソールから登録する他、GitHubからデータを反映したり、GS2-Deployを使ってCIから登録するようなワークフローを組むことが可能です。
実装例
トリガーを引く
トリガーを引く処理はゲームエンジン用の SDK では処理できません。
GS2-Account のアカウント作成時のスクリプト内や、GS2-Quest のクリア報酬としてトリガーを引く、といった方法で実装してください。
開催中のイベント一覧を取得
var items = await gs2.Schedule.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).EventsAsync(
).ToListAsync();
const auto Domain = Gs2->Schedule->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
);
const auto It = Domain->Events(
);
TArray<Gs2::UE5::Schedule::Model::FEzEventPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}