プレイヤー セグメント全体に対する一括アクション

このチュートリアルでは、セグメント内のすべてのプレイヤーに対して 1 つまたは複数のアクションを実行するタスクを作成するために必要な手順について説明します。

タスクは、ゲームのライブ操作の重要な部分です。 プレイヤーと関わる強力なツール セットが提供されます。

以下は一例です。

  • 過去 2 週間以内にログインしているすべてのプレイヤーに新年のスペシャル ギフトをプレゼントする。
  • 過去 1 週間に課金したプレイヤーに (課金ティアに応じて) 報奨を与える。課金額が多いほど価値の高いギフトをプレゼントする。
  • 最近のゲームのバグによって影響を受けたすべてのプレイヤーの破損ステータスを修正する。

このチュートリアルでは、Unicorn Battle サンプル アプリを使って、経験値 2,725 を超えるすべてのプレイヤーにスペシャル ギフトをプレゼントします。

前提条件

このチュートリアルを実行するには、Unicorn Battle サンプル アプリをインストールする必要があります。 詳細は Microsoft のブログ で確認するか、直接 GitHub リポジトリ に移動して指示に従ってください。

Unicorn Battle - 起動画面

複数 回のバトルをプレイして、キャラクターを最低でも レベル 2 にしてください。XP 経験値 2725 ポイントに到達できます。

Unicorn Battle - レベル 2

手順 1 - セグメントを作成する

最初の手順では、このアクションの影響を受けるプレイヤーのグループを定義するセグメントを作成します。 この場合は、高経験値セグメントを作成する必要があります。これは、経験値 2,725 を超えるすべてのプレイヤーと定義されます。

  • 左側のメニューの [PlayStream] を選択します。
  • [セグメント] タブを選択します。
  • 次に、[新しいセグメント] を選択します。
  • [セグメント名] を「高経験値プレイヤー」とします。
  • [Total_XP Gained (合計獲得経験値)] と呼ばれる 統計値2,725 を超える プレイヤーと定義します。

注意: 現在のスケジュールされたタスク システムは、セグメントあたり 1 秒あたり 10 から 15 個のタスクを処理できます。 セグメントを設計するときは、セグメントのサイズとタスクの実行時間を事前に計画します。 タスクを実行できる期間に制限はありませんが、特定の時間枠でタスクを実行する必要がある場合は、セグメントのサイズを適切に設定する必要があります。

ゲーム マネージャー - PlayStream - セグメント - 高経験値プレイヤー

手順 2 - このセグメントに対するタスクを作成する

  • [セグメント] タブを選択します。
  • 次に、[RUN TASK … (タスクの実行...)] を選択します。

ゲーム マネージャー - PlayStream - セグメント - タスクの実行

これにより、[サーバー]->[タスク] タブの [タスクの作成] ビューが表示され、選択したセグメントに基づいてさまざまなフィールドに事前入力されます。

ゲーム マネージャー - サーバー - タスク - タスクの作成

手順 3 - タスクにアクションを追加する

次でタスクの設定を完了できます。

  • 名前を「高経験値プレイヤーの報奨」に変更します。
  • レベル 2 以上のプレイヤーにギフトを与える」という説明を追加します。
  • [ADD ACTION (アクションの追加)]** を選択します。
    • 表示されるフィールドに「仮想通貨を与える」と入力します。
    • 仮想通貨コード: GM (「Gems」の省略)。
    • 金額: 20
  • スケジュールの設定は、現時点では [Manually (手動)] のままにします。
  • [SAVE AND RUN (保存して実行)] を選択し、タスクを実行します。

ゲーム マネージャー - サーバー - タスク - アクションの追加 - 保存して実行

手順 4 - タスクを監視する

[タスク] ビューで、実行中のタスクを確認できます。 最初、タスクのステータスは [InProgress (進行中)] ですが、セグメントが小規模なため、すぐに[Suceeded (成功)] に変わります。

ゲーム マネージャー - サーバー - タスク - タスクの成功

それでは、タスク実行の詳細を確認しましょう。 以前に実行した [タスク] の一覧で、完了したタスクを選択します。 以下のような重要な情報が表示されます。

  • 処理されたプレイヤーの数。
  • タスクの開始時間。
  • 完了までにかかった時間。
  • 起動された時のパラメーター。
  • 実行者。
  • 手動でスケジュールが設定されたかどうか、など。

タスクががまだ進行中の場合、[Task Instance Detail (タスク インスタンスの詳細)] ビューで進捗状況と、およその残り時間を確認できます。

ゲーム マネージャー - サーバー - タスク - タスク インスタンスの詳細

タスクが正常に実行されたことを確認するには、以下の手順に従ってください。

  • [プレイヤー] タブに移動します。
  • 自分のプレイヤーを選択します。
  • 次に、[イベント履歴] タブを選択します。
  • リストの直近のイベントは「player_virtual_currency_balance_changed」で、プレイヤーの Gems が 20 増加したことがわかります。

注意

このイベントを展開して詳細を確認できます。

ゲーム マネージャー - イベント履歴 - イベントの詳細

次の手順

このチュートリアルでは、セグメント内のすべてのプレイヤーにアクションを実行する手順を紹介しましたが、タスクには他にも多くのことができます。

以下にその例をいくつか紹介します。

タスクのスケジュールを設定する

タスクを手動で実行する必要はありません。タスクが自動的または定期的に実行されようにスケジュールを設定できます。 たとえば、24 時間以内にゲームをプレイしたすべてのプレイヤーのセグメントを作成し、これらのプレイヤーに経験値ボーナスを与えるタスクが毎日実行されるようにスケジュールを設定できます。

ゲーム マネージャー - PlayStream - セグメント - 24 時間以内のプレイヤー

ゲーム マネージャー - サーバー - タスク - スケジュール設定済みのタスク

各プレイヤーに CloudScript を実行する

一括アクションの最も強力な使用方法は、各プレイヤーに任意の CloudScript 機能を実行することです。 この CloudScript は、アイテムや通貨の付与、プレイヤー データの検査と変更など、PlayFab サーバーの API が実行できるあらゆることを実行できます。。

たとえば、毎週リセットされるイベント ランキングがあり、リセット前にすべてのプレイヤーを確認して、最後のイベントの値に基づいて報奨を与えることができます。 以下の例は Unicorn Battle を使用しています。

  1. 毎週リセットされ、Last の集計方法を使用する新しい統計 Event_QuestsCompleted を作成します。

    プレイヤー - ランキング - ランキングの編集

  2. Total_QuestsCompleted が変更されるたびにこの Event_QuestsCompleted を増分する、新しい PlayStream アクションを作成します。

    PlayStream - イベント アクション - イベント アクションの編集

  3. 一括アクションによって呼び出され、プレイヤー全体を確認して最後の値に基づいて報奨を与える CloudScript 機能を記述します。

// this function will be called as a bulk action by a scheduled task for players in a segment
handlers.GiveTieredReward = function (args, context) {
    var profile = context.playerProfile;

    var statVersion = 0;        // set to whatever version you need to use

    var getStatRequest = {};
    getStatRequest.PlayFabId = profile.PlayerId;
    getStatRequest.StatisticNameVersions = [{ "StatisticName": "Event_QuestsCompleted", "Version": statVersion }];

    try {
        getStatRequest.PlayerResult = server.GetPlayerStatistics(getStatRequest);
    } catch (e) {
    };

    if (getStatRequest.PlayerResult && getStatRequest.PlayerResult.Statistics.length > 0) {
        getStatRequest.lastScore = getStatRequest.PlayerResult.Statistics[0].Value
    }

    if (getStatRequest.lastScore && getStatRequest.lastScore > 2) {
        // give gift to all players with more than 2 quests completed in last event
        // in a real event we would want to use a lookup table of gifts
        // but here we are just hard-coding it
        var giftRequest = {};
        giftRequest.PlayFabId = profile.PlayerId;
        giftRequest.ItemIds = ["CrystalKey"];
        giftRequest.grantResult = server.GrantItemsToUser(giftRequest);
        return giftRequest;
    } else {
        return getStatRequest;
    }
}
  1. 新しい CloudScript バージョンを [Live (ライブ)] に設定し、すべてのプレイヤーに対して GiveTieredReward 関数を呼び出す新しいタスクを作成します。 タスクを [保存] および [実行] することを忘れないでください。

    サーバー - タスク - 新しくスケジュールされたタスク

  2. このタスクからのイベントは、PlayStream イベント デバッガーに表示されます。

    PlayStream - ダッシュボード - イベント デバッガー

  3. CloudScript イベントを実行した、プレイヤーがトリガーした任意のアクションを選択して (タイム スタンプを選択)、各プレイヤーに対する CloudScript の実行結果の詳細を確認できます。 これには、CloudScript が実行された時点でのプレイヤー プロファイルのスナップショットなど、有益な診断情報が含まれます。

    PlayStream - ダッシュボード - 未加工イベント JSON