はじめに
完全な新機能としてログインボーナスを実現するための機能の提供を開始しました。
機能追加の背景
これまでログインボーナスは 「GS2-Quest などを使って実現できなくはないので、そちらを利用してください」というアナウンスをしてきました。
しかし、GS2-Quest では開始・終了リクエストを呼び出す必要があったり、ちゃんと順番に挑戦するように制御が必要など、ログインボーナスを実現するのに最適なAPIが提供されているとは言い難い状態でした。
追加された機能の詳細
GS2-LoginReward はログインボーナスを実装するために最適化されたマイクロサービスです。
一般的に採用されているログインボーナスの事例として2つのケースを想定し、それぞれに対応できる2つのモードを用意しています。
- スケジュールモード
- ストリーミングモード
スケジュールモード
スケジュールモードは GS2-Schedule で管理しているイベントと関連づけて利用します。
マスターデータには、イベント開始日から順番にログインボーナスとして配布するアイテムを列挙します。
もし、ログインし忘れた日があった場合、その日のログインボーナスは受け取ることができずにスキップされます。
ストリーミングモード
ストリーミングモードはスケジュールモード同様、マスターデータにログインボーナスとして配布するアイテムを列挙しますが、
ログインし忘れた日があったとしても、順番にログインボーナスを受け取ることができます。
ストリーミングモードでは、GS2-Schedule のイベントと関連づけるかどうかは任意です。
GS2-Schedule のイベントを設定した場合は、イベントの開始日時から24時間ごとにログインボーナスを受け取ることができます。
指定しなかった場合は日付変更の閾値となる時間を指定します。
繰り返し設定
ストリーミングモードでは、《繰り返し設定》が可能です。
ストリームの終端まで報酬を受け取った翌日、ストリームの先頭から再度受け取れるようにするか、もうそのストリームからは報酬を受け取ることができなくなるかを設定します。
取り逃がし補填
まれにみられる実装として、ログインボーナスを受け取り損ねた時に遡って受け取れるようにする仕組みです。
設定されたコストを支払うことで、取り逃がしたログインボーナスを受け取れます。
スケジュールモードでは活用方法がイメージしやすいですが、実はストリーミングモードでも使用できます。
イベントが14日間開催されており、ログインボーナスも14日分用意されている場合、1日でもログインしそこねるとすべての報酬が受け取れなくなります。
こういったケースで取り逃がし補填の機能を利用することができます。
取り逃がし補填は GS2-Schedule のイベントを関連づけたログインボーナスでしか使用できず、未来の報酬を受け取ることはできません。
Unity からの使用例
ログインボーナスの受け取り
var result = await gs2.LoginReward.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).Bonus( ).ReceiveAsync( bonusModelName: "bonus-0001", config: null );
ログインボーナスの受け取り状態を取得
var item = await gs2.LoginReward.Namespace( namespaceName: "namespace-0001" ).Me( gameSession: GameSession ).ReceiveStatus( bonusModelName: "bonus-0001" ).ModelAsync();
ログインボーナスの内容を確認
var item = await gs2.LoginReward.Namespace( namespaceName: "namespace-0001" ).BonusModel( bonusModelName: "bonus-0001" ).ModelAsync();