エボニー王の帰還-バトルイベントについて考えてみた

エボニー王の期間には日本時間の水曜と土曜にバトルフィールドイベントがあります。これについてちょっと考えたみたいと思います。

内容とかどうやったらよいかはほかのブログ見てください

このゲーム長くやってますが、正直未だによく僕わかっていません。どの将軍が強いかとかもよくわかっていません。なので、このバトルフィールドイベントでどう過ごしたらよいかなどは詳しい人のブログをみてください。

この記事では、どっちかというとエンジニアらしく?なのかわからないですが仕組み?などを考察してみたいと思いました。なのでバトルイベントの過ごし方とか、この将軍を使えばよいとか全くないです

バトルイベントについて

エボニーではサーバー戦争以外に、週2回ほどバトルフィールドイベントがあります。このバトルフィールドに参加することで将軍を鍛えれたりもします。

対戦相手の決まり方について

対戦相手はシステムで自動できまります。運営の人が手動で決めているというわけではないみたいです。完全に自動化されていて、その決め方もブラックボックスです。

運営としては公平にしている

システムが自動化しているのですが、対戦相手は公平に決めているということみたいです。決して運営の意図があるわけではないみたいです。そもそもこれは運営といっても、カスタマーサポートの方には共有されることはないので、質問されてもこのようにいうしかないのだと思います。

公平とは思えない割り振り

実際に僕も参加していますが、相手が一人でもパワーが15Bなどいます。僕のパワーは2Bもないので、どう考えても抗えるわけないのです。

合計値だけで割り振りしているのではないかと思う説

同盟は所属するメンバーが多かったり一人あたりのパワーが多いほど同盟全体としてパワーがあがります。例えば1Bのメンバーが10人いる同盟と、10Bのメンバー一人の同盟は同盟のパワーとしては同じになります。

今はわかりませんが過去はこのやり方でやっているのでは?と思うようなことが何度かありました。あきらかにパワーバランスがおかしすぎる対戦もありました。

例えば同盟全体としては50Bだとしても、主力メンバーの多くは1Bとかで、平均は500Mだとしても、メンバーが多いため50B扱いとなります。バトルフィールドに参加は最大20名参加なので、仮に20名全員参加したとしても、参加者全体では20Bではなく、10Bもなかったりします。

ところが、同盟としては50Bなので、同じ50Bレベルの同盟がいたとすると、相手は10Bが2名で5Bが3名の5名とかの可能性もあります。当然こういうのは勝負なりません。

参加者の合計値で割り振られている説?

以前は上のやり方ではないかなと思いましたが、今は少しましになったのかなと思います。同盟全体ではなく、参加するメンバーのパワーの合計値で、対戦相手を決めているのではないかと思います。

計算は複雑にしていないのはなぜ?

エボニーはサーバー全体で2200程ありました。物理マシンではなく、おそらく仮想マシンだとしても、1台あたりのスペックは高いと思います。1台あたりに人数の制限はあると思いますが、常に2200台を稼働しているとなるのと、バトルフィールドなどはサーバーをまたいで計算すると思います。

バトルフィールドのサーバーは別にあると仮定すると、実際に稼働しているVMは2500−3000台はあるのかなと思います。例えばピンクジェムの決済系や、フィールドマップなどは別々サーバーで処理されていて、各同盟のいるサーバーはフィールドマップなどを読み込んでいるのではないかなと思ってます。

1つのサーバーに同盟は100近くいたりして、バトルフィールドへ参加できるのは上位20位の同盟となります。最大20名まで参加可能なので、1サーバーあたり400名のユーザーが同時に動くとすると

  • 400名×2200台=88万

となります。最大なので、実際にはここまでいかないでしょうが、それでも数万単位の人が時間帯をわけているとはいえ動くので、サーバーの負荷は相当あると思います。

処理がただでさえ高いのに、そこに複雑な計算式でバトルフィールドをマッチさせると、1台あたりの処理はさらにかかります。

つまり、運営側にとってはサーバーの負荷があがったり、処理コストが増大するだけで何もメリットがありません。運営としてはピンクジェムで決済されて売り上げになるので、それ以外はコストしかないです

複雑な処理をいれてサーバーがパンクするとかなら、至極シンプルな方法でマッチングさせるほうがコストとしては低くなるという事です

理想のマッチング

理想のマッチングは、

  1. 各同盟からからの参加者のパワーを取得してそれを合計。
  2. 合計から参加者をわって平均パワー値をだす
  3. 参加者と平均パワーの値を使って近似値の対戦相手をマッチング

というのがよいかなと思いますが、おそらく無理なのかなと思います。

そもそも計算式を根底から変える必要があるかもしれない

今のマッチング方法がどんな方法でやっているか不明ですが、すくなくとも参加者の数を考慮して対戦相手をマッチングしているというのはこれまでのバトルフィールドのやりとりからあり得ないと思ってます。

つまり、この方法を運営がやってみようと思っても、そもそも存在しないやり方を追加するため、プログラムを組み直す必要がどこからあるのか?既存のプログラムに追加するだけでいいのか?という調査から入る必要があります。

参加同盟だからな、例えば同盟のDBのあるテーブルからパワーの値を持ってきて、近いパワーをマッチングとかの数式でよいかもしれませんが、参加者の数を取得するとか、平均値を出して比較となると思った以上に修正が必要かもしれません

場合によっては設計からやり直しだとか、サーバーの連携方法を変えないといけないなど多岐にわたるので、やはり簡単にはいかないのだろうなと思ってます