まえがき
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 モニターで確認できました。
あとがき
PlayFab の PlayStream は強力なので使いこなして行きたいですね。
実績解除やログイン報酬を配ったりもできますし、アウトゲームのロジックはこれにどんどん寄せて行きたいなと思います。