GS2 Blog

Game Server Services(https://gs2.io/) の最新情報をお届けします

GS2-Mission に特定の条件を満たしてからのカウンター上昇量を求めるスコープが追加されました

はじめに

GS2-Mission はゲーム内のミッション機能を実現するためのマイクロサービスです。
ミッションを表現するために、ミッションタスク と ミッションカウンター という2つのエンティティを持ち
エストクリア時に ミッションカウンター を上昇させ、ミッションタスクにはミッションカウンターの値が一定以上であれば達成とみなして報酬を受け取れるようにする というような定義を行うことになります。

機能追加の背景

ミッションカウンターは1つのカウンターを複数の切り口で値を参照できるようになっています。
具体的には、デイリー・ウィークリー・マンスリー・トータル という4つの切り口が用意されており「クエストをクリアした回数のカウンター」であれば
エストのクリア報酬では「1つのクエストをクリアしたカウンターを1上昇させる」という報酬を設定するだけで、
「今日クエストをクリアした回数」「今週クエストをクリアした回数」「今月クエストをクリアした回数」「ゲーム開始以降クエストをクリアした回数」といった値にアクセスが可能となり、これらをミッションタスクの条件に設定が可能です。

ここに「特定の条件を満たしてからのカウンター上昇量」という新しいオプションが追加されました。
具体的には「イベントが開催中か」という条件を設定して「イベント開催期間のクエストクリア回数」であったり、「メインクエスト10-10 をクリアしてからのクエストクリア回数」だったり、「クエストクリア回数10回達成」というミッションタスクの報酬を受け取ってからのクリア回数だったりを取得できるようになります。

機能追加の詳細

カウンターのマスターデータを定義する時にはどのようなスコープで値を記録するかを定義する必要があり CounterScopeModel で定義します。
CounterScopeModel は以下のフォーマットを持ちます。

CounterScopeModel

名前 有効化条件 必須 デフォルト 値の制限 説明
scopeType enum [resetTiming, verifyAction] “resetTiming” ~ 128文字 スコープの種類
resetType enum [notReset, daily, weekly, monthly] {scopeType} == “resetTiming” ~ 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 リセット時刻
conditionName string {scopeType} == “verifyAction” ~ 128文字 条件名
condition VerifyAction {scopeType} == “verifyAction” 条件

新しく追加されたフィールドは scopeType, conditionName, condition の3つのフィールドです。
scopeType に verifyAction を指定することで、新しい機能を利用することができるようになります。

conditionName には条件の名前を、condition にはカウントを開始する条件を定義します。
条件には各マイクロサービスが提供する VerifyAction が使用できます。

GS2-Mission トランザクションアクション | Game Server Services | Docs

たとえば、GS2-Mission の Gs2Mission:VerifyCompleteByUserId を使用すれば「特定のミッションタスクの報酬を受け取っているか」を検証することができますので、報酬を受け取ってからのカウント開始が可能となります。

続けて、ミッションタスクを定義する MissionTask モデル がもつ TargetCounterModel にも改修が加わっています。

TargetCounterModel

有効化条件 必須 デフォルト 値の制限 説明
counterName string ~ 128文字 カウンター名
scopeType enum [resetTiming, verifyAction] “resetTiming” ~ 128文字 スコープの種類
resetType enum [notReset, daily, weekly, monthly] {scopeType} == “resetTiming” ~ 128文字 目標リセットタイミング
conditionName string {scopeType} == “verifyAction” ~ 128文字 条件名
value long 1 ~ 9223372036854775805 目標値

こちらに追加されたのは scopeType と conditionName です。
scopeType に verifyAction を使用することで、新しく追加された仕様のスコープを参照するタスクを定義できます。
conditionName に TargetCounterModel で定義したものと同じ条件名を指定することで、具体的なスコープを指定することができ、そのスコープでのカウンター値が目標値に達していれば達成とするミッションを作ることができます。

(C) Game Server Services, Inc.