GS2-LoginReward

ログインボーナス機能

モード

ログインボーナスの提供方法は《スケジュールモード》と《ストリーミングモード》2種類の方式があります。

スケジュールモード

GS2-Schedule のイベントと関連付けて利用します。 報酬として配布するトランザクションアクションを各日程分定義します。 イベントの開始日時から24時間ごとに報酬が変化し、各報酬を1回受け取ることができます。 途中で取り逃がした報酬があった場合は、スキップされます。

ストリーミングモード

ストリーミングモードはストリームに設定された報酬として配布するトランザクションアクションを先頭から順番に配布します。 受け取らなかった日があったとしても、スキップはされずストリームの次の報酬が手に入ります。

ストリーミングモードのログインボーナスに GS2-Schedule のイベントを関連づけると、イベントの開始日時から24時間ごとにストリームの次の報酬を受け取ることができます。 設定しない場合は、報酬の種類が変化する時間をUTCタイムゾーンの24時間単位で指定して利用します。

繰り返し

ストリーミングモードのログインボーナスには繰り返し設定ができます。 繰り返し設定を有効にすると、ストリームの終端に到達した場合 翌日はストリームの先頭から報酬の受け取りを再開できます。 この機能を利用することで、常設のログインボーナスを7日ごとや30日ごとにループさせることができます。

見逃し補償

スケジュールモードで取り逃がした場合や、ストリーミングモードでもイベント開催期間中ではストリームのすべてのアイテムを入手できないような状態に陥った時に使える機能が見逃し補償機能です。 設定されたコストを支払うことで、取り逃がしたアイテムを入手することができます。

見逃し補償が利用できるのは GS2-Schedule のイベントと関連づけられたログインボーナスのみで、イベントの開始日からの経過日数までの報酬のみが受け取れます。 つまり、未来のログインボーナスはコストを支払っても受け取ることはできません。

スクリプトトリガー

ネームスペースに receiveScript を設定するとログインボーナス受取処理の前後で receivereceiveDone のスクリプトフックを呼び出せます。スクリプトは同期・非同期の実行方式を選択でき、非同期では GS2-Script や Amazon EventBridge を利用した外部連携にも対応します。

設定できる主なイベントトリガーとスクリプト設定名は以下の通りです。

  • receiveScript(完了通知: receiveDone): ログインボーナス受取の前後

マスターデータ運用

マスターデータを登録することでマイクロサービスで利用可能なデータや振る舞いを設定できます。

マスターデータの種類には以下があります。

  • BonusModel: 日次やストリーミング方式の報酬定義

マスターデータの登録はマネージメントコンソールから登録する他、GitHubからデータを反映したり、GS2-Deployを使ってCIから登録するようなワークフローを組むことが可能です。

バフによる補正

GS2-Buff と連携するとボーナスモデルの acquireActionsmissedReceiveReliefConsumeActions にバフを適用し、報酬内容や見逃し補償のコストをイベントに応じて動的に調整できます。

実装例

ログインボーナスの受け取り

    var result = await gs2.LoginReward.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).Bonus(
    ).ReceiveAsync(
        bonusModelName: "bonus-0001",
        config: null
    );
    const auto Future = Gs2->LoginReward->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        AccessToken
    )->Bonus(
    )->Receive(
        "bonus-0001", // bonusModelName
        nullptr // config
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError()) return false;

ログインボーナスの受け取り状態を取得

    var item = await gs2.LoginReward.Namespace(
        namespaceName: "namespace-0001"
    ).Me(
        gameSession: GameSession
    ).ReceiveStatus(
        bonusModelName: "bonus-0001"
    ).ModelAsync();
    const auto item = Gs2->LoginReward->Namespace(
        "namespace-0001" // namespaceName
    )->Me(
        AccessToken
    )->ReceiveStatus(
        "bonus-0001" // bonusModelName
    ).Model();

ログインボーナスの内容を確認

    var item = await gs2.LoginReward.Namespace(
        namespaceName: "namespace-0001"
    ).BonusModel(
        bonusModelName: "bonus-0001"
    ).ModelAsync();
    const auto item = Gs2->LoginReward->Namespace(
        "namespace-0001" // namespaceName
    )->BonusModel(
        "bonus-0001" // bonusModelName
    ).Model();

詳細なリファレンス