Edited at

Azure PlayFabでPlayStreamを使ってユーザーのBANを実装する


まえがき

Azure PlayFab を使用すると、ユーザーの操作やステータスの変化が PlayStream イベントとして PlayFab に記録されます。

今回はこの PlayStream をフックしてユーザーの BAN を実装してみます。


シナリオ

ゲーム内通貨の無限増殖バグなどが利用されたことを想定して、所持通貨が 10,000,000 を超えたユーザーをリアルタイムに BAN してみます。



※こんなものを実装するイメージです。


手順


1. 新しいルールを作成する

GameManager へログインし、 自動化 > ルール > 新しいルール を押します。


2. 名前、イベントタイプ、条件、アクションを設定する

それぞれの項目を設定します。

名前:

任意のわかりやすい名前を設定します。

イベントタイプ:

com.playfab.player_virtual_currency_balance_changed を選択します。

条件:

VirtualCurrencyName を選択して、チェックしたい通貨の名称を指定します。今回は GO (ゴールドの略)という通貨をチェック対象にします。

さらに AND 条件で VirtualCurrencyBalance を選択して、 BAN 対象の閾値を指定します。今回は 10,000,000 を閾値にします。

アクション:

種類プレイヤーをプレイ禁止にする を指定します。

禁止の理由にはわかりやすい任意のメッセージを入力します。

PlayFab 側の設定はこれで完了です。

簡単ですね。


3. Unity 側で BAN されている場合のエラーメッセージを表示する

ユーザーが BAN されている状態で PlayFab の API を呼び出した場合、AccountBanned というエラーコードが返ってきます。

これを利用して例えば雑に IF 文を挟んでエラーメッセージを表示することができます。

        var request = new LoginWithCustomIDRequest { CustomId = ApplicationContext.PlayFab.PlayFabDebugUserId, CreateAccount = true };

PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);

void OnLoginSuccess(LoginResult result)
{
// ログイン成功したときの処理
}

void OnLoginFailure(PlayFabError error)
{
// ログイン失敗したときの処理

if (error.Error == PlayFabErrorCode.AccountBanned)
{
// BAN されているときの処理
}
}


4. 動作確認

ユーザーに 10,000,000 ゴールドを付与したところ、その瞬間に自動的に BAN されたことが PlayStream モニターで確認できました。

Unity 側でも意図したメッセージが表示されました。


あとがき

PlayFab の PlayStream は強力なので使いこなして行きたいですね。

実績解除やログイン報酬を配ったりもできますし、アウトゲームのロジックはこれにどんどん寄せて行きたいなと思います。