(最終更新日:2025/01/17)

あけおめ~。ヨコタニです。

そうでした。今日はグ羊*の救済をしに来たわけではありません。
(*グランブルー子羊のこと)

今回は2024年に行っていた「ドロップ集計の簡易化」についての日記的な内容です。

割と駄文。前回記事みたいなガチ回とはわけが違う。

それでも良ければ、入ってどうぞ。


注意筆者はプログラムずぶの素人です。
記事全体を通して、プログラム的な話があっても素人がごちゃごちゃ言ってるだけです。
真似してもいいけど自己責任だし、自分でよく考えてから行動してください。



rapture_20240902152418

 伝説が……はじまる。


2023年の8月下旬、『gbfdrop』というヒヒ集計を行う非公式のサービスがβテストを開始。
気が付けば古戦場なども挟みながら安定した稼働をしている同サービスを見て、同じような仕組みでヒヒイロカネ以外も集計できるようにしたら汎用性高くなって良さそうだよなとか思いつつ、実際に手を動かすことはなく時は過ぎる。

明確にリザルト収集を楽に実現することを目標にしたのは2024年1月あたり。
あるツイートを見たことから始まる──。


グラブルにはゲーム内のアイテムドロップデータの収集を行っている音黒くろさんという方がいらっしゃいます。
Twitter(自称𝕏)でグラブルの情報収集をしていれば一度は見たことあるはずのお方で、
周回量が要求されがちなグラブルで効率を追い求めると非常に助かる検証データを発信しておられます。
ドロップデータはGoogleスプレットシート上で収集され、ある程度まとまった数になると特定された箱割などを添えて音黒くろさんがツイートしてくれています。
当ブログでも頻繁に引用させてもらっています。感謝~(柚鳥ナツで再生してください)。

2024年1月の古戦場に新しく”果報の古箱”というアイテムが実装。
この果報の古箱は、開封するとランダムでアイテムが手に入るというもの。
これがデータ収集の対象となり、データ収集に協力できる騎空士を募集する音黒くろさんのツイートに"ある引用RT"がついていました。

ツイート主は古戦場ソロ1位常連で有名な ゆ(ケンタロス)さん。
ツイート内容は意味深なGoogleスプレットシートのリンクと意味深な文言……。
実はこれ、ブラウザの開発者ツール(F12)を通じてHTMLの要素をコピーし、ゆ(ケンタロス)さんのスプシに張り付けることで、音黒くろさんのスプシ上のデータ提出形式に整形してくれるという超有能スプシなんですね。

おお~。
なるほど~。

すごいな、この人古戦場一位取るだけじゃなくてスゴイスプシも作れちゃうのか。

ゆ(ケンタロス)さんのスプシで作ったデータを音黒くろさんのスプシに提出した自分は考える。
rapture_20241205044103
検証部のデータ収集にはこれまで全く協力できていなかったわけだが、提出するデータを簡単に作れるのなら協力し放題じゃね?

安直な思考である。

そして、
rapture_20241205044041
音黒くろさんに見つかり、ふぁぼられました(今風に言うといいねがついたの意)。

ああ、逃れられない!
rapture_20250116234308
ということで「グラブルのリザルト収集を簡単にできるシステムを作る」という2024年の目標が設定されたわけです。


ではタイマーをセットして


はい、よーいスタート

rapture_20250117111159




 なにが必要かを知る


てなわけで、ドロップしたアイテムなんかを簡単にデータ収集、
音黒くろさんのスプシに提出できるようにしたい。
ということは、

どうにかしてゲーム内のドロップアイテムの情報を簡単に収集
→簡単な手順で自身のスプシに収集した情報を記載、蓄積
→自身のスプシ上のデータを整形、音黒くろさんのスプシに提出できるような体裁にする
という流れが必要と考えた。

これらを実現するには、
 1.ゲーム内の情報を扱える形で収集する機構
 2.収集したデータを自身のスプシに記載していく機構
 3.蓄積したデータを整形する機構
が必要ということ。

1. は ゆ(ケンタロス)さんの方法や gbfdrop のマネをすればいけそう
2. は同上、またはクリップボード上のデータを AHK などマクロを組んで簡単にスプシにコピペすればいけそう?
3. はスプシをこねればいけそう

みたいに当時はザックリと考えていた。

俺くん、やれるか?

脳内俺くん「やっちゃいますか!やっちゃいましょうよ!(そのための 右手)」



 まずはリザルトを集めたい


順番に 1.ゲーム内の情報を扱える形で収集する機構 から着手していきたい。
つまり、バトルリザルトの情報を読み取れる仕組みを作ればいいわけだ。

バトルリザルトってどっちの?

いい質問ですね。"detailの方"です。

なんのこっちゃあって感じの人が居そうなので解説を。
result_multidetailの説明
バトルが終わった直後のリザルトは左の簡素な画面で、
これは"game.granbluefantasy.jp/#result_multi/1145141919810"みたいなURLをしている。
この画面の下に”バトル履歴へ”のボタンがあり、画像右のバトル履歴に遷移できる。
バトル履歴は"game.granbluefantasy.jp/#result_multi/detail/1145141919810/1"のようなURLとなっていて、これはマルチページのバトル履歴から見れるものと同一のページ。

前者のURLに/detailが追加されているため、後者を"detailの方"とここでは呼ぶこととする。
"detailの方"が情報量が多く、1週間以内なら何度でもアクセスできるが、"じゃない方"は一度しか表示できず情報として揮発性がある。

ちなみにソロバトルでは #result が用いられて、detail の方のリザルトは存在しない。
共闘は #result_multi でリザルトが表示されるが、detail の方は"#coopraid/record/detail/マルチID/部屋ID"となっていてちょっと特殊。部屋が解散されるとアクセスもできなくなる。

話をマルチのリザルトの話に戻すと、
"detailの方"のリザルトが情報収集に有利とわかるので、このdetailのリザルトを読み込める仕組みを作って情報を収集したいわけだ。リザルトに自分の総貢献度が記述されていないのが気に入らないけど、載っていないものはしょうがない。(一応自発者とMVPと準MVPは貢献度確認できる。)

リザルトの情報のうち集めたいデータとしては、データの管理のために敵の名前・バトル終了時刻は欲しい。与えたダメージも収集すれば貢献度の近似値としてつよばはの青箱率の調査にも使えそう。もちろんドロップしたアイテムの種類と数と配置も集めて……、なんてことを想定。収集する情報量をあえて少なくする理由もないので出来るだけかき集める方針に。

次は実際にデータを収集する仕組みを作っていかなければならない。

必要な情報のHTML要素をコピーなりして取得する仕組みが必要だが、どうしたものかね~



 AIと和解せよ


時は流れ、2024年7月下旬。
確か古戦場で失った至極100個集める短期目標を達成してだらだらしていた時期。

え?ちょっと待って? 1月から時間経ちすぎじゃない?
そう思われるかもしれません。
そんなもんです。4月にはブログ書いてるし、ねえ?

グラブルもひと段落して、リザルトを収集するシステムを作ろうかなと思い立ち、AIくんと対話を始めます。

俺くん「こういうリザルトを収集するchrome拡張機能って作れる?」

ChtaGPT4「おかのした」
Videotogif
!!!!!!!!!!!!!!!!!!!!!!!!(雁木SE)



おお、マジか。

gbfdropが恐らくdetailじゃない方のリザルトのHTMLを読んで、それを(gbfdropの)サーバーに送るなりしてヒヒランキングなんかを作っているのかな~とか素人ながらに考えていたから、理論上リザルト情報を収集できるchromeの拡張機能を作れるとは思っていたけども……
あっさりAIくんが必要とする拡張機能を作れると言ってくるとは。

思わぬ努力の抜け道を見つけてしまったため、ここから一気に進展。
rapture_20250117000726
プロト版が完成した。
自分のツイートを見てる感じ7月24日に作り出して、25日にはある程度形になったっぽい。
AIやばすぎるだろ。

プロト版の挙動を配信に載せてたので興味があれば見れます。
ブログ用に動画撮ってたはずなんだけど失くしちゃった。
(注意:キモオタク生声の配信で突然大きな音が出ます。
      何言ってるかも分からない。きも。

rapture_20250117001836
上の通り、"リザルトをブラウザで開くと必要な情報が自動でスプシに記載される"
という機能をもった拡張機能をAIとの対話だけで作れてしまいました。
対話型生成AIがあまりにも有能すぎる。

こうなったら人類はいますぐAIと手を取り合い、AIの肩を揉む練習をするべき。

または人類は銃をとり社会秩序を崩壊させAIが支配する社会そのもの消失させるべき。

どっちだよ。

これの仕組みは、
ユーザーが"game.granbluefantasy.jp/#result_multi/detail/"を開いたとき拡張機能が必要な情報を持ったHTMLの要素を抽出、リザルト件数が任意の数だけ溜まると拡張機能が情報をGoogleAppsScript(以下GAS)に送り、送られた情報をGASがスプシに書き込む
というかんじ。

思いのほかAIくん、というかChatGPT4くんが有能で、
1.ゲーム内の情報を扱える形で収集する機構 だけでなく
2.収集したデータを自身のスプシに記載していく機構 までも流れで実装できてしまった。

なんてこった。

はじめはブックマークレットなりでHTMLを抽出して、スプシにコピペ、
スプシ上でいじくり回して1件のデータに加工しようみたいなことを考えていたが、
ふとした思いつきでAIに投げてみたら完全上位互換の解決法が湧いてきて全部スキップできてしまった。

とは言ったものの、実際AIくんが一発で完成してくれたわけではない。
ここは勘違いされると過剰にAIくんが評価されてしまうので断っておく。
制作過程で色々エラー吐いたりするから、ある程度コードは読んだり調べたりする必要はあるし、当時、無料ユーザーはChatGPT4を使える回数に制限があって、別のアカウントでログインしなおして質問したりとかセコイ工夫はしてた。

具体的には、拡張機能の manifest.json の形式でマニフェストV2とマニフェストV3の仕様の違いによってエラーが出ていた時は、自分でググって不具合原因をAIくんに教えないと堂々巡りになったり、GoogleスプレットシートAPIの仕様を自分が理解できなかった時は別の手段としてGASを使うことを提案したりだとか、そんなかんじ。

世間ではAIは補助的なツールとして活用しよう!と言われていただけに、ほぼAIが主体的に拡張機能を作れてしまえたのは衝撃だった。

すげえなぁAI。

この時期からスプシの数式作るのもまずAIに聞くようになってしまった。

こうやって人はバカになっていくんだなあ。(スリザリンに人類は愚かポイントを贈呈)


このあとリザルトをtxtファイルに出力したほうがいいかなと仕様を変更したり、
シングルバトルにも対応したり、オプション画面を整備したりして数日は遊んでました。



 あとは簡単!とはいかない宝箱ドロップとリザルトの仕組み


残すは 3.蓄積したデータを整形する機構 のみ。
完成した拡張機能で収集したアイテムドロップのデータを音黒くろさんのスプシの体裁に整形する機構……
そんなスプシ上の数式なりGASなりを作ればいいわけで、それぐらいのことは拡張機能を作ることに比べればおちゃのこさいさい……

とはいかなかった。

理由を説明するために、まずはアイテムドロップ関係の仕組みをさらっておきましょう。
有識者の人、ここ間違ってたら教えてね。ホント。

敵を討伐すると宝箱がドロップします。
無題
このとき通常箱の宝箱の数が最大になった際の宝箱をドロップした順に1から番号を振って箱nと呼んでいます(画像は最大ドロップの時として)。
それぞれにはドロップ率が設定されていて、ドロップUP効果で確定していない場合は確率で出現します。宝箱の最大数はマルチによって様々です。通常箱の宝箱の種類は中身の入手するアイテムと対応していて、木箱・銀箱・金箱(と金箱くるりん)があります。順位赤箱の抽選が外れて通常箱の抽選を受けた時は順位赤箱の場所に通常箱があります。

手に入れたアイテムがリザルトで同じように箱1から順に並べば話は簡単なのですが、実際は宝箱(木箱>銀箱>金箱>赤箱>青箱)でソートされたうえで同一アイテムはひとまとめにされて表示されます。同一の宝箱の場合は箱nの数字が小さい順に並んでいて、第一ソート宝箱、第二ソート入手順のようなイメージでしょうか。
例えば箱1と箱3で木箱で同一のアイテムが手に入った時、リザルトでは一番初め(左上)にそのアイテムと合算数が表示されます。
昔はリザルトが箱1から順に文字で並んでいたはずなんですが、いつかのアップデートで現在の形になったはずです。


と仕組みを知ると分かるが、リザルトだけでは箱nから何が入手できたかを特定するのは難しい。
宝箱とリザルト、どちらの情報も収集していくと箱nからは何が抽選されるのかという「箱割」の情報を確定できるようになる(場合によってはできないこともあるけど)。
この確定した箱割の情報を使うことでリザルトのみから箱nから何が入手したかを明らかにすることは出来るが、ドロップしたすべての箱について箱nなのかを確定させるのは意外と難しい。
例えば、箱1と箱2に同一アイテムの抽選確率が存在した場合、リザルトにそのアイテムのドロップがあるならアイテムが箱1由来なのか箱2由来なのか判別出来ないのである。アイテムが銀箱から出るもので、箱1が金箱、箱2が銀箱なら、そのアイテムは箱2から出たと分かると言った具合だ。

結局、箱nから何を入手できたかという情報は宝箱とリザルトのどちらの情報も必要になるわけだ。


では本題に戻ろう。
最終的に音黒さんのスプシに提出できるようにデータを整えねばならないが、提出するデータは通常箱・自発赤箱・順位赤箱・青箱に何が入っていたかなどを記入する形式になっており、通常箱は箱1~箱6に何が入っていたか特定したうえで記入する形式になっている。

つまり、通常箱の箱1~箱6の特定が必要不可欠。
そして、現状集められるリザルト画面だけでは、箱を特定するための情報が足りないのだ。


てなわけで、宝箱ドロップの情報を得なければいけない。
しかし当時の知識ではデータ収集の仕方が全く分からなかった。
代用としてクエスト終了時の上に宝箱の情報があり利用しようとも考えたが、これは箱のドロップ順が得られないので不適切。(一応役には立つけど)
rapture_20250117103600

リザルトと同様にHTML上から情報を集めようとして格闘していたが、全然情報が記載されているところがわからない。
別の手段をとるとすれば、宝箱のドロップした画面を画像認識するとかになるのか?
いやー、うーん。
この情報だけ手動で記録していってもいいけど、今回の趣旨に添わないしどうすれば……。

困ったのでヒントを探しに筆者は開発者ツール(F12)でブラウザの奥地へと向かう。
草の根を分けながら色々調べていくなかで、ネットワークタブからJSONファイルを見てみると……
rapture_20241222090428 - コピー
rapture_20250117113322
おお、あった。

あったわ。

このget配列の数字が宝箱のドロップする順番と箱の種類で対応が取れている。
このデータを取得できるようになれば次のステップに進むことができる。

しかし。JSONの情報を従来の拡張機能の方法で手に入れることはどうやら困難なよう。
さて、どうやって宝箱の情報を手に入れようか・・・。
打開策が分からずプロジェクトは一時凍結される。

rapture_20240902152401


 わからなくてもわかることがある


時は少し過ぎて2024年9月、第74回「決戦!星の古戦場」(土属性有利)。
この回の古戦場から250HELLの追加、90HELLの降格、250HELLに必要なマリシャスクランプの追加やEXTREME・EXTREME+で獲得できるグラッジチャンクの入手量を大幅に改善するなどの調整が行われた。
(参考:これぐら2024年9月号 https://granbluefantasy.jp/pages/?p=54932 )

やはり注目すべきは肉のドロップ量増加。
1戦あたりの肉取得量の計算がざっくりでもできるように、リザルトを収集して平均から肉の1戦あたりのドロップ量を出しておきたいなと考えていた。
つまり、製作したリザルト収集拡張機能の使いどころさんである。

また新アイテムのマリシャスクランプのドロップ数や確率が分かれば古戦場の予定が立てやすくなるかも、ということで全体的に古戦場のリザルトを集めていった。
結果、
EX+         4420件
90HELL 3972件
100HELL 475件
150HELL 512件
200HELL 309件
のリザルトを収集。
これらのデータから一戦当たりの肉量や極星器のドロップ率などを出すことができた。

音黒くろさんの方でもデータ収集を行っていたのだが、自身は現状のシステムでは箱が特定できないので参加はできなかった。

また、2024年11月の第75回古戦場(風有利)でもリザルトの収集をして数値を合算、少しは精度を上げられたはず。

そんな感じでリザルトだけでわかることはあったので、わからないなりにわかることを積み重ねておりました。
意外と最終目標にたどり着けてなくても、やれる。工夫すれば。

あとは10月29日に実装された武極の試練もデータを取ってた。
2割強ぐらいで耳飾り(光・闇)って感じで、長めのフルオートするにはまあまあヤる寄りだったり。
耳飾り関係はこの後十天衆戦記に † 破壊 † されるんだけどね~。



 閑話休題 ハロウィンCP


10月、季節はハロウィーン。
グラブルでは2024年10月17日から11月1日朝までハロウィン限定クエストが実装。
同期間に「錬金術の工房」イベント=通称錬金イベが初開催されたこともあってかなり熱い期間だったことが記憶に新しい。

はよ第二回錬金イベやらないか? → 2月にくるぞ、やったぜ!

さて、このCPクエスト、実装されてすぐになんか半汁ドロップ多くね?という声が多く、ちょっと調査してみたい気持ちになっちゃいまして、
通常箱のドロップ率とかランタンのドロップ数とか調べてました。

当時は通常箱が全部ドロップしたかどうかを目視で確認するしかなく、宝箱ドロップのデータが簡単に得られる仕組みがあればな~って季節だった。

ランタンはシングルバトルのリザルト収集システムにランタンドロップ項目を追加してデータ収集。
こっちでは既存のシステムが役に立った。

ちなみに、通常CPクエストにおける通常箱1は基礎ドロップ率60%でしたが、
ハロCPは通常箱1の基礎ドロ率43%ぐらいでした。
半汁がドロップしやすかったのは半汁の占める内訳が多くなってたってだけっぽい。
(なぜ?)

ハロCPクエに必要な泥UP倍率が通常CPクエと違ったの、みんな知ってた?

俺は結構叫んでたよ?なんかいつもと違うゾって。

この後のCPクエは通常仕様に戻ってました。
つまり箱1ドロップ率60%。半汁も渋め。
なんだったんだ、ハロCPクエ。



 そして伝説へ


JSONファイルさえ読めるようになれば、あとはちょちょいのちょいやでぇ~
とジョイ君(洗剤のほう)になっていたわけですが、季節は冬、12月になってしまいました。
このままじゃジョイ君が暴走してトリコを調理しながら除夜の鐘を鳴らして2024年が終了してしまう。

今年の目標は今年のうちに。
「グランブルーも自由時間多めなタイミングだし、ここらで仕上げといきますか」と重すぎる腰をあげたのであった。

唐突に再開したわけですが、なんの計画もなく立ち上がったのではなくて、問題解決のヒントはある程度もらっていました。

ヒント1. ハロCPのとき同じようにドロップ率の調査をしている方がポストした「プロキシサーバーを使うと楽できるかな」みたいな呟き
ヒント2. 界隈に激震『【グラブル-システム狩りの光と闇】サイボーグ達が跋扈する戦場と化した「システム狩り」の現環境について完全解説!システム勢に愛用されるマクロやツールも紹介』という全部書いてあるnote

この2つのヒントからプロキシツールを用いればJSONの情報を取得できそうということで、再びAIとの対話を重ねていくと・・・

rapture_20241203223159
結果、必要なデータを取得できるようになりました。

仕組みとしては、通信をプロキシサーバーで中継させて、前述のJSON内にある必要な情報を取得し、Pythonでtxtファイルに出力、手動でスプシに張り付けというもの。
必要な情報はマルチのバトル画面やリザルトのURL末尾にあるRaid_idと前述の宝箱ドロップのget配列の2つ。
Raid_idは宝箱の情報とリザルトのアイテムドロップの紐付けを行うために取得し、
宝箱の情報は目的の情報、左からドロップした順番に箱の種類を表した数字が並ぶ。

このころには更に賢いChatGPT4oになってたようでさっくり作業が終了した。

なんでもできるじゃん。マジでやべえよAI。

あとは、これをスプシ上で整えてやると・・・
rapture_20250117013104
抜粋拡大
rapture_20241205041659pp
できました。
音黒くろさんのスプシに記入する形式に整形できてしまいました。

整形でやったことは、
まず箱割が特定されている前提でアイテムドロップの全パターンをGASでスプシに全記載、
それぞれのパターンに対応するリザルトの表示と宝箱ドロップの情報を作成して
これらと実際に収集したリザルトと宝箱ドロップのデータを照合させて、通常箱のそれぞれに何が入っていたかを特定させる。
あとは特定した情報を音黒くろさんのスプシ記入の体裁に変換するという流れ。
(結構パワー実装感ある。でもこれしか思いつかんかった。)


といった感じにドロップデータの収集からスプシ用の形式に整形までの流れが完成したので見事目的達成。
1年かかっているけど実働時間は1~2週間ぐらいじゃないかな。
生成AI様様っす。

今年の目標「グラブルのリザルト収集を簡単にできるシステムを作る」完了です!

はい、ここでタイマーストップ
記録は328日でWR(わーるどれこーど)です。
完走した感想ですが(激ウマギャグ)
いや~やる気さえあればすぐ終わるやつでしたね。
AIくんという強力な味方がいたおかげでかなりスムーズにいったとおもいます。
途中何度もくじけそうになりましたが、
たくさんのホモたちの声援に元気と精気をもらい
何とか最後まで走り抜けることができました。
詰めの甘いところも多いので後続の人は更新しやすいと思います。
俺もやったんだからさ(同調圧力)。


 まだ私は変身を残しています


やりたかったことはだいたい出来た。
でもまだ改良したり、改良余地があったりしたんでその話。

改良したのは揮発性のあるシングルバトルのリザルトデータの収集部分。
拡張機能でデータ収集すると不都合なことがあって、出力や送信をしていないデータはブラウザタブをリロードすると消失してしまうという欠点があった。
改善策があるのかもしれないけど、基本マルチのリザルトを収集していたため気を付けていれば運用上不都合は無かったのだ。
しかし、シングルバトルのリザルト収集は、"detailの方"が使えないのでバックリロをミスってしまうと癖でF5更新してしまうことがあって案外不便だった。
ということで、シングルバトルのリザルトデータも宝箱ドロップのデータのようにプロキシサーバー経由でjsonファイルを読んじゃえ、とPythonコードをAIくんと会話を重ねて作成。
数分で目的のコードが出来てしまい、あっけなく改良は完了。

この程度の機能を持たせるのであれば、拡張機能を作るのに比べ、プロキシサーバーを動かしてPythonのコードを実行させる方が労力と難易度はかなり低いと感じた。
HTMLとJSONでデータの構造がちょっと違うから、スプシ上で行うデータの整形工程は作り直しになったけど。
後続の人がいたらJSON読むのを主体にした方がいいよ。

detailの方は今まで通りHTML上の情報を取得する方針でいいかなと思ってる。
バトル履歴から簡単にアクセスできるかんね。


改良余地を言えばスプシ上のデータ整形のやり方と、拡張させて箱割特定に役立つ機構作り。
前者については、今のスプシがあまり汎用性の高くないことをしているから上手いこと改良したいなって感じ。
次に大規模なリザルト収集がしたくなったときにでも改良するかなあ。

後者は今のところ着手する気はないけど何かアイデアが浮かんだらやりたい。
そうなんだよね。方法から思いついてなくて着手できない。出来れば相当楽になるんだけどね。
人間が行う箱割特定の思考を形にしないといけないわけだからかなり難しい気がする。
あんまやる気はないよね。


あと関連して話したいことがあって、
「十天衆戦記」の探索パートの宝箱とアイテムドロップの集計もやっていたんだけど、
これもJSONを読む必要があったから宝箱ドロップのやり方と同様にプロキシサーバー経由でデータを取得した。
それで収集したデータをスプシ上でまとめあげ、得られた結果が当ブログの前回の記事になっている。

ドロップ集計の経験値が十天衆戦記の集計に繋がったのは個人的にはかなり嬉しい成果だった。
実際満足いく内容の記事も書けたことだし。
ちなみに前述のシングルバトルのリザルト収集の改良は、十天衆戦記のHELLリザルトを収集するため差し迫って作成した。

今後も気になることがあったらF12で色々見つけていきたいなって思ったよ。



 語らねばならない外部ツールについて


まあ避けては通れない話題。
気になるよなあ!こういう話はよお!

ここまで記事を見てもらった人は気が付いていると思うけど、データの収集に拡張機能とプロキシツールを使っている。

その使ってる拡張機能とか、外部ツールじゃね?
お前、BANされちゃうよ?(暗黒微笑)

みたいなことを言われると実際弱い。
のだが、当然自分はBANされるようなことをしているとは思っていない。
というか思ってたらしないだろうよ。

そう思う理由をたらたらと話したい。

まずリザルトの収集をする拡張機能には ある意味先駆者がいて、今回の記事にも登場しているgbfdropの存在がある。
gbfdropは現在多くのユーザーが利用しているなか、その使用に伴ったBAN報告は聞いたことがない。
またgbfdorpの開発者ブログでは規約違反に該当するかの見解を説明している。

『開発者ブログ:gbfdropは規約違反? 説明させてください』→ https://gbfdrop.jp/blog/entry/1

今回自分が作成した拡張機能もリザルトを収集しているだけであり、ゲームに影響を与えるものではない。
だいたいリンク先の内容と被るので多くの文字数を使って説明はしなくていいか。

プロキシツールについても同様。
拡張機能と同じくF12で見られる内容を収集しているに過ぎない。

一点、リンク先の内容と少し事情が異なるのは"ゲームで有利にならない"という点だろうか。
ドロップ検証をするという特性上、全くゲームで有利にならないとは言い切れないのが現実。
とはいえ情報で優位に立っているだけで直接ゲームで有利になっているわけではない。
F12で見れる内容ではあるわけだし、今回使ったもののあるなしによって情報格差が生じているわけでもない。
間接的にゲームで有利になっているのではないかと問われれば、それはドロップ検証がもつ有用性に他ならないと反論したい。

ちなみに前述の項で触れた「システムの光と闇」のnoteではプロキシツールを用いてリザルト回収を自動化しているかのような表現があり、これはゲームに直接有利となる要素となり、かなり黒に近いと感じる。(実際に裁定を下すのは運営なのでここでは断定口調は避ける。)
同じようなツールを用いているとはいえ、今回のようなリザルトデータの収集は、直接ゲームで有利になっているわけではないため自分の考えでは問題ないという判断になっている。

言い訳だらだらうるせえなあって感じかもしれないが、実際この辺の判断をするのは運営なのでユーザー同士がいくら議論しようが本質的には意味がない。
自分の考えをもって、それに従っていればいいと思う。
それでBANされたなら何も言うことないでしょう。黙ってグラブルから消えましょう。

あっ、言い忘れてました。
自分に悪意はないです。



 本末転倒になった話 + 検証というユーザー負担


BAN関係の続いて話さなければならないことがある。

外部ツールを用いて集めたドロップデータを検証データとして他人のスプシに記入していいのだろうか?

要するに"穢れ"の話だ。

実際のところ外部ツールを使用していることには間違いがないので、完全にクリーンでホワイトなデータではない。
手動でコツコツ収集したデータではないのだから。
そんなデータを、しかも他人のスプシに記載していいのだろうか。
・・・・・・、難しい問題かも。
前述したようにBANまわりの事情は運営にしか分からない。
そして線引きは各々が考えてやるもので、他人に強要するようなものではない。
ではもし誤った線引きをしていた自分が集めたデータを、他人のスプシに記入していたら、そのスプシの管理人に迷惑がかからないだろうか? 線引きが異なる人が嫌な思いをしないだろうか? 管理人に嫌がらせをしないだろうか?
考えすぎと簡単に言い切るのは難しい。

ただし、集めたデータはちゃんと正確なデータである。
簡易化した甲斐あって周回したほぼすべてのバトルにデータの収集を実行することができて集計件数も増やしやすい。(これは自分がいっぱいグラブル周回するからってのもあるけど。)

データとしては価値があるはず。
しかし、人によっては"穢れ"を感じる。
その場合迷惑がかかる可能性がある。

こういった考えが生じてしまい、最終目標であった"音黒くろさんのスプシに記載"というところにたどり着けなくなってしまった。

本末転倒である。

そういう事情で今のところ検証には協力出来ておらず、自分の集計結果をTwitterに放流するに留まっている。
うーーーーーん。まあ、ええか。



完全に"ついで"で話すのだが、「検証」自体について思っていることを話してみたい。

検証と一言で表せても実は色々種類がある。
"理論上の作戦"が実践できるかどうか調べるのも検証だし、バフ量や攻撃力計算式を特定するのもまた検証。
私が今回ここで触れていきたいのは、ゲーム内でマスクされた数値、バフ量、確率やドロップテーブルといったものの話だ。

イメージしやすいのは昔のモンハンの剥ぎ取りアイテムとかだろうか。
個人的には艦これの命中率、艦娘ドロップ率もこれに該当する。
グラブルでいうと基礎TA率なんかが分かりやすい。

これらのマスクデータを知る術は3通りあると思う。
1つめはゲーム内で知る手段があったり、公式による発表、攻略本が存在し情報を得られるといった正式な入手方法、
2つめはゲームの解析やサーバーへの不正なアクセスによって直接設定値を取得する方法、
3つめはユーザーがゲームプレイ上のデータを蓄積して統計的に設定値を推測する方法
である。
1つめの公式からの情報供給があれば問題解決なのだが、ないことが多い。
そうなると残る2つのいずれかを選ぶことになるが、2つめの方法はとてもじゃないがお行儀の良い行動ではなく、規約や倫理的に問題があるため、相当特別な状況じゃない限り選ぶべきではない。
となると3つめのユーザーによる検証でしか情報は手に入らないわけだ。
しかし、統計的な方法であるため検証には多くのデータが必要。
結果的に多数のユーザーが協力したり、多大な時間をかけてデータを集める必要があって普通に大変。

ここで思わないか?
始めから公式が情報開示すれば良くないか?と。

先ほど例にあげたモンハンなんかは最近のシリーズで図鑑から取得できるアイテムから確率までを確認できるようになっている。
(ゲーム性を持たせるために初回入手しないとマスクされていたりはするんだけど。)
最近ではこのように確率やバフ量といった数字を確認できるゲームが増えているように感じる。

何が言いたいか。

検証は単なるユーザー負担でしかない。
運営が数値をマスクすることはユーザーに負担をかけているのと同義!
と自分は考えている。

特にユーザーが多いゲームは、いずれマスクデータの検証を行う人が出てくるのであるから、
はじめから数値のマスクをするのを辞めてほしいということだ。

検証することそのものにゲーム性を感じ楽しんでいる人には反感を買いそうだが、自分はこう思っている。

検証する時間でもっと遊びたい。

グラブルに限らず多くのゲームに対する話ではあるが、度々考えてしまう話なのでついでに話してしまった。
艦これとかすごいよ、マスクデータの量。



 後続へのバトンタッチも兼ねたメモ


だいたい話おわった。

んだけど、HTMLやJSON上で確認できる数字とか、一応込み入った話もしておく。
興味ある人が微レ存かもしれないから。

例えばリザルト画面のHTMLを見ると、
456446446
獲得アイテムの下、prt-item-list内に獲得アイテムのそれぞれの情報があります。
databoxは箱の種類で1が木箱、2が銀箱、3が金箱、4が赤箱、11が青箱になっています。(他後述)
見ての通りdata-keyはitem-kindとitem-idを_でつないだもの。
item-kindはその名の通りアイテムの種類で1は武器、2は召喚石、10は一般トレジャーといったかんじ。
item-idは固有のものと思いきや、碧空の結晶(10_1)とエリクシール(4_1)などアイテム種が違うと被ることがあります。
個数がある場合はprt-article-countに数字があります。


宝箱ドロップのJSONは、敵が討伐されるラストアタック時の通信に情報が格納されています。
"ability_result.json"、"summon_result.json" 、"normal_attack_result.json"のいずれかになるはず。
該当のscenario内にcmd:"drop"があり、そのなかのget配列内に宝箱ドロップの情報があります。
左から出現する順番=箱nが若い順です。
ここでは宝箱くるりんの区別がなされています。
金箱は'3'、金箱くるりんは'10'となっている。なぜか赤箱の4はシングルクォーテーションがない。
自発で獲得トレジャー倍キャンペーンではget配列内に2つ[]が出てきます。
rapture_20250116211513

宝箱ドロップのうち緑箱や紫箱などは2段目の表示になります。
これらは該当のscenario内cmd:"win"があり、そのなかのother_treasuresにその他の箱のドロップが記載されています。
'13'は紫箱、'14'は紫箱くるりんといったかんじ。
OEトレハンで獲得した箱も2段目に表示されていて、'18'~'21'が該当しています。
またそれぞれのその他の箱については個別に記載されている項目があって、
これらは該当のscenario内cmd:"win"があり、そのなかのgreen_treasures内のget配列に緑箱が、purple_treasures内のget配列に紫箱の箱の情報が、overeffecttreasures内のget配列にOEトレハン追加箱の情報書かれています。
Videotogif (2)
ちなみに同様に敵が討伐されるラストアタック時の通信のstatas内にはtreasureの項目があり、treasure_type_nの宝箱が何個手に入ったかが記載されています。
くるりんした箱はくるりんしていない方の番号に加算されている感じ。
なぜかOEトレハン追加箱の金箱くるりん'21'はそのまま。
ここの情報は集計には使わなかったですが一応。

まとめるとこんな感じ。
rapture_20250117014034

こんな情報を有益だと感じる人はあんまりいないと思うけど、最近この辺りを理解したので細々と共有。
軽く検証しているときにドロップ画面を見逃してもF12を開いてさえいれば、ここで示した場所を確認することで見逃した情報を確認できるから便利かもね。



 おわりに


2024年はこんなことしてましたよ、といった日記でした。

1月に目標立てて12月に腰上げるの流石に悠長すぎないか?

そんなんだから一生子供なんだよ。

( ^ω^)・・・・・・。

。°(´ฅωฅ`)°。

皆さんは2024年目標達成できましたか?

2025年の目標を立てましたか?

今年こそは早め早めにやりたいことをやりきって、
余った時間でもっとたくさんのことをしたいな(小学生並の感想)。

はい。

ここまで読んでくれてありがとうございました。

じゃ、ことよろ~



rapture_20250117112812






 雑談


ジャングルジムのてっぺんで 空を見てたら
なぜだか涙が あふれてきた

皆さんは、グッチ裕三さんが念能力者だったらどんな"発"を習得していると思いますか?

わたしはグッチ裕三さんは念能力者ではないと思います。

お、今、任天堂からNS2の発表がありましたよ。
うわ、かっこいい~。

蛍光色のゲームとか遊び道具って海外のおもちゃみたいで少し憧れないですか?
レインボーアートDXとか。
子供の時はサッカーボールにゴムがついていて蹴ると戻ってくるおもちゃのCMがいっぱい放送されていた記憶があります。
昔は心くすぶられましたが、今は片思いのゲームがあるので欲しいとは思えなくなってしまいました。

その片思いの相手というのはですね、、え?

あー、ジャングルジムは最近減りましたよね。
わたしの家の近くの公園も10年ほど前まではおおきな遊具があったんですよ。
大きさでいうとアインシュタイン稲田ぐらいですね。
なにって器の大きさの話ですよ。
あと最近鉄棒と滑り台がなくなりましたね。
盗まれたんでしょうね。減らす理由もないでしょ。
わたしもお金があればね、盗まれた遊具たちをメルカリで競り落とすんですけどね、難しいですよ。
あなたなら買い戻せるんじゃないですか?
顔をそらさないで頂戴。
ちょっと、あなた顔を見せてみなさいよ。
わあ、あなた凄い顔ね。洗ってきた方がいいわよ。

あらやだ、これ呪力じゃない・・・。
──!?
いつの間に領域に足を踏み入れたのかしら。


── 急ぎ空を仰ぎ見る。見慣れた冬の曇り空。
しかし、踝から下はいつの間にか黒い泥のような呪力に浸されていた。
光を反射しない漆黒の泥水を見た瞬間から、脳が直感が、危険信号を発報している。
まずい。巻き込まれた。
目線を限りなく遠くの地面へと滑らせるも目の届く距離はすべて"黒"に侵されていた。
焦りと不安がアドレナリンを分泌させ心臓はけたたましい叫び声を上げているが、
意外にも冷静な頭脳は状況を把握して瞬時に肉体に指令を出していた。
逃げなければ。

これは結果術の極到、閉じない領域。
グッチ裕三さんの、『領域展開』だ──



正解は呪術師でした。




(筆者からのコメント)

今年も頑張ります!

押忍ッ!!