FFBE幻影戦争、ヘブバン式バックグラウンド周回

2022年6月24日金曜日

FFBE幻影戦争

t f B! P L

FFBE幻影戦争に実装されたックグラウンド周回、すごいいいなー。

寝てる間周回するには今までの放置周回の方がいいけれど、デイリーしたその後に1戦だけお目当てのステージを計測させて後はアプリ落としておけばしらんうちにレシピとかが集まってるなんて。


昨日バックグラウンド周回が実装されて、とりあえずリベルカの思珠集めるかー、で70回くらい周回指定して、んでストーリー見ようと思ったら「バックグラウンド周回を止めないとダメ!」って出てきてちょっと面食らったけど、まあ基本アプリを閉じてるときに周回できるようになった、と思えばいいんだよな。


スタミナ使ってほしい

あとバックグラウンド周回の細かい所だけど、既存のスタミナを使わないのは修正してほしい。

昔はレイド応援キャンペーンとかで配ってたスタミナ直配りを最近は毎日配ってくれてるけど、バックグラウンド周回も体力回復薬使うなら、もう既存のスタミナ溢れまくる。

いつからかわからないけどスタミナは基本1,000に張り付いたまんまになってる。


今持ってるスタミナをいくつバックグラウンド周回に回すか指定できればいいのに。

それか毎日配ってるスタミナ直配りを体力回復薬での配布に変えてほしい。最悪バックグラウンド周回でしか使えない特殊な回復薬でもいいし、このどっちかはしてほしい。


アイテム取得数で周回指定したい

既存の寝てる間周回にはアイテム取得数で周回指定できる。

でもバックグラウンド周回ではこれができない。どれくらい体力回復薬を使うかの指定しかできない。

バックグラウンド周回でもアイテム取得数で周回数を決めたくなる。


んでこれって実装できるのかなーと思って考えてみると、これを実装しようとするとデータ通信量が増えてサーバーの負担が増えるから嫌なんだろうなーと思う。

バックグラウンド周回って周回に必要な体力回復薬を使い切ったタイミングで、周回数とアイテムドロップ率をそれぞれかけるなりしてアイテムドロップの計算してるんだろう。


アイテム取得数で指定できるようにしちゃうと、ゲーム内でなにか画面遷移があるたび、とか何もなくても定期的にポーリングして今の周回数でアイテム取得数が指定の数に達してるか計算しないといけない。

端末側で計算すればいい、って話だろうけれど、そうなると改ざんできちゃうからヤだろうし。


んでたぶんただアイテムドロップ率と周回数をかけ算してるんじゃなくて、ランダムにちょっと多めに手に入ったり、ちょっと少なめだったりといった、揺らぎの数字も計算式に入れてるはずだし、そうなると毎回計算と言っても、その揺らぎの数字を別途データベースに保存しておかないといけなくてさらに面倒だもんなー。

じゃないと計算するたびにランダム値が変わって、欲しいアイテムの取得数が変わっちゃう。


サーバー通信も増えてデータベースもテーブル一つ増やさなくちゃ、でだるい、と。


……



んでここまで考えて、あれ?と思う。

こうすれば簡単に実装できるじゃん、と。


それならもうアイテム取得数でバックグラウンド周回指定したタイミング、その最初の段階で、サーバー側で何時間かかるか、揺らぎの数字も入れて全部計算しちゃって、サーバー側にその計算結果の時間を保存すればいい。

こうすれば画面遷移やポーリングでちょくちょく集まり切ってるかチェックする必要もないし、改ざんもできない。最終的にサーバー側に保存された時間が経過してない限りアイテムドロップしないわけだから。


サーバー側に何時間でバックグラウンド周回終了!っていうデータは保存しなくちゃいけなくなるけどそれは今も保存されてるハズ。


問題点はこの方法だと周回を途中で終えられない、っていう部分だけど、その時はもう一度キャンセル時に揺らぎを作り直してアイテムドロップ数を計算しなおせばいい。

ただこれだと、「あと10分の所で周回キャンセルしたのにすでにアイテム数超えてるんだけど」とか「あと5分だけだったのにまだ20個も足りてないんだけど、最後の1周で20個ドロップする計算してたの?」みたいなのが起こる。


てことで結局揺らぎの数字を保存しておかなくちゃいけないけど、バックグラウンド周回開始時にもう揺らぎの数字を格納する方法を取るしかないのかもしれない。

これならどのタイミングでバックグラウンド周回をやめても、揺らぎの数字が同じだかから、一次関数的なアイテムドロップ数の遷移になって、上記のようなバグ?は生まない。


結局、揺らぎの数字をバックグラウンド周回終了時に生成するか、開始時に生成してデータベースで持っておくかの違い、ってことかー。


ふーん、やろうと思えばけっこうすぐ実装できそうだなー。やろうと思えば。


んでバックグラウンド周回開始時に揺らぎの数字を生成する方のメリットとして、今現在のドロップ数を画面上に表示できるようになる。ユーザーとしてはこっちの方が親切な気がする。


……



これでいけるなー、って思ってたけど、この仕様がばれたらユーザーめっちゃきれそうだからやっぱダメだなー。

「んじゃバックグラウンド周回開始時にすでにドロップ数とそれにかかる時間決まってるってこと?もしかしてガチャもこの仕様なんじゃ…、消費者庁に怒られたゲームだからありえる」みたいなの言いそう。自分で自分の首絞めてるってわかってんのかな、こういうユーザーは。

さらにこの仕様がばれると「開始10分でのドロップ率を見て、集まりが悪かったら悪いテーブルに入ってるから、一度周回キャンセルしてもう一度バックグラウンド周回する方が時短になる」というテクニックも生まれそう。こっちは賢いな。


個人的にはそもそも周回なんて誤差どうでもいいから楽にしたい部分だから、アイテム取得数でバックグラウンド周回欲しいけど、ユーザーサイドで首を絞める形になってるから実装されないだろうな。

全然だめだったなー。


前回のタイム覚えといてほしいけれども…

んでたぶんこのバックグラウンド周回の不満点として、一番多いと思うのが、毎回毎回タイム計測するのだるい、っていう事だと思う。

確かにだるい。


同一パーティで同じマップに挑むなら前回のバックグラウンド周回タイムを覚えておいて欲しいっていうのはよーくわかる。


たぶん運営としてはデータベースの項目増やすのがイヤだったんだろうなー。

確かにオレがこのバックグラウンド周回を実装するとしてもデータベースの項目アホみたいに増えるからマップごと、そしてパーティごとの過去の計測ベストタイムを記憶しておく仕組みは入れたくない。

マップごとに挑戦パーティ詳細とタイムを覚えておくってなるなら、マップが増えるごとにレコードが増えるわけだし、そりゃいやだよなーという感じ。

んじゃユーザー端末側、ローカル保存にしてサーバーのデータベース使わなければいい、ってなるとローカル保存されてるタイム情報を改ざんして1秒で1周回とかできちゃうから、やっぱりここはガチャ情報と同じでサーバー側のデータベース管理にするしかない。


んじゃせめて全ユーザーそれぞれ、過去1回分のバックグラウンド周回のマップとパーティ、タイムを記憶するテーブルを作ってほしい。

んで全く同じマップに全く同じパーティで、そして前回と引き続いて挑戦する場合のみその前回のタイムを使えるようにしてほしい。

これならマップが増えてもレコードは増えないし、各ユーザーごとに「ユーザーID、前回バックグラウンド周回したマップID、パーティ、タイム」の4項目を1レコードにがつっと保存するだけでいいから大きな負担なく実装できると思う。

ていうかたぶん現状すでに、パーティ以外の項目はサーバー側に保存されるようになっているはず。

じゃないと端末側で不正に周回時間を変えたりできちゃうわけだから。周回終了後にサーバー側のレコードと端末側のデータの整合性をチェックしてちゃんと合ってたらバックグラウンド周回終了、アイテムゲット、っていう処理になってるはず。

それかそもそも端末側には一切データを置いてないのかもしれない。毎回ゲーム起動時にサーバー側からバックグラウンド周回の情報を送ってもらえばいい。


んじゃそのバックグラウンド周回用のテーブルに、パーティを記憶する項目を追加してそのまま使えばいいだけな気がする。


ぶっちゃけ特定のレシピが集まるまでは同じマップを同じパーティで周回するわけだから、これでだいぶ快適になると思うんだけどなー。

記事一覧

最新の記事

リバース1999、たてがみのやーつ

QooQ