no-image

ブキごとのガチパワーを算出する

ブキごとのガチパワーが見れるサイトを作ってみた

ありそうでなかったブキごとのガチパワーを見れるサイトを作ってみました。

ニンテンドーオンラインとの比較
  • 公式はGlicko2レーティング、非公式はEloレーティングを使用

本来はGlicko2レーティングを使用すべきなのですが、このレーティング方式は対戦プレイヤー全てのレーティングとレーティング偏差などの情報がわかっていなければ求めることができません。

実際にその値を知っているのはニンテンドーだけであり、リザルトから得られるのは精々ウデマエXユーザのXパワー程度なのでより簡易的にレーティングを求められるEloレーティングを採用しました。

  • ウデマエX以下でもレーティングが計算できる

最も特徴的な点はこれかも知れません。ウデマエXは全体のアクティブユーザーのうち10%程度しかおらず、大多数のユーザーは自分のガチパワーを知ることができません。

このサイトはそれを可能にしたものです。

  • ブキごとのレーティングが計算できる

公式でも実装されていないこの機能。実際にブキごとにウデマエを設けてしまうとウデマエを上げるのがいくらなんでもめんどくさすぎるのでそれは致し方ない判断かと。

ただし、どのブキを選んでも対戦するプレイヤーのレベルはウデマエ次第なので、例えばスクイックリンでガチパワー1800まで上げておいて、今まで全く使ったことのない初心者レベルのパブロを使っても最初はガチパワーが1800程度だと推定されてしまいます。

これを防ぐために、いろいろ試行錯誤しているのでその部分も含めてコードを読んでいただけると幸いです。

えーっと、そのうちコードを追加しようと思います。具体的にはイロレーティングの公式を使ってそのブキの最初の10戦のデータから推定ガチパワーを出せるようにしようかと。

  • WebサーバとMySQLを扱える環境であれば誰でも使える

iksm_sessionを登録する必要があるのでこのサイトを一般向けに公開する予定はありませんが、データさえ揃えば誰でも同じ環境を作れるようにしてみました。

ただし、ブキの画像やメイン部分のJavascriptなどは任天堂のコードをそのまま使っているので配布ができません。各自揃える必要があります。

自分はChromeCacheViewerで集めましたが、他にもいろいろ手段はあると思います。

実際のコード

検証していないのでちゃんと動くかわかりませんが、大まかには大体動くはずです(意味が被っている)

MySQL

まずはMySQLをインストールします。多分他のデータベースでも動くけど、自分が検証したのがこれだけなので他はわかんないです。

のちのち追記

ユーザの追加

のちのち追記。

権限の追加

のちのち追記

データベースの作成

設定上はいろいろ使えるみたいになっているけれど、テーブル名はsplatoon2しか使えないみたいでした。

これは実装ミスなのでそのうちなんとかします。

Webサーバの準備

長くなるので省略。

コードのコピー

以下のコマンドを叩きます。

git clone https://github.com/tkgstrator/statsme.git

statsmeというディレクトリができるはずなので、それをWebサーバのドキュメントルートに設定しましょう。

以下、このstatsmeディレクトリ内の操作になります。

設定ファイルの編集

大まかに分けて二つの編集ファイルが存在します。

一つはデータベースに接続するためのユーザ情報、もう一つはiksm_sessionです。

config.php

lib/system/下にある、config.phpを編集します。

特にそんなに難しいことはしないです。

define("DB_SERVER","localhost"); // localhost
define("DB_NAME","splatoon2"); // splatoon2
define("DB_USER","DB_USER");
define("DB_PASSWD","DB_PASSWD");

現状、上二つのパラメータは設定しても意味のない死ぬステータスになっています。

iksm_session.php

何らかの方法でiksm_sessionを取得します。

これが比較的わかりやすいと思ったので、いかがでしょうか。

iksm_sessionの漏洩は重大なセキュリティ問題です。第三者に決して教えないようにしてください。

const iksm_session = array(
"a9a34f5a994************************",
);

このようにiksm_sessionを貼り付けます。

setup.php

setup.phpを実行すると基本的なファイルのダウンロードを開始します。

要するにニンテンドーのサーバからファイルを取得してきて、保存するツールです。

どんなファイルを保存するかは/lib/environment/下のfilemap.phpに書いてあります。これだけあれば一応困ることはないはず。

ニンテンドーのサーバにアクセスするので何回もsetup.phpを叩くようなことはやめましょう。一度実行すれば十分です。

また、データベースに必要なテーブルも作成します。ここまで実行できれば基本設定は完了です。

main.php

/lib/下のmain.phpを実行すると設定された情報を元にニンテンドーのサーバから戦績ファイルのダウンロードを行います。

戦績ファイルは現状、上位50件しか取得できないので連続してプレイする場合は2時間に1回くらいは取得しないと漏れてしまいます。

取得が終わるとレーティングの計算を行い、それを反映します。

ikawidget2Spl@Net2で保存したJSONファイルも利用できます。要するに生データであればすべて使えるのですが、残念ながらstat.ink形式のJSONファイルには対応していません。

定期実行はcronが便利ですのでそれを使いましょう。

main.phpは2回目以降の実行でレーティング計算を行うので、初めて使用する場合のみ2回実行してください。このややこしい仕様はそのうち直します。

まとめ

とりあえず簡単に自身のサーバに環境を整えられるようになったので、自分のサーバが吹っ飛んでも大丈夫になった気がする。

JSONデータもgzipとかで圧縮してどこかに保存できるようにしたいね。