![見出し画像](https://assets.st-note.com/production/uploads/images/93104550/rectangle_large_type_2_e2c3b312f45650b999378c92bd2097c7.png?width=1200)
clusterのセーブ数上限を疑似的に突破する方法
結論から言うとロジックも配布してます。
clusterのセーブできる項目って100しかないんです(´・ω・`)
カミトコというワールドでは、住民システムを採用しており、そのため結構なセーブ枠を埋めてしまいます。というか今年の初めにはオーバーしてしまい、ある方法で回避しました。それでもなんだかんだとセーブ枠は既に60を超えています。
そんな時、カミトコではスタンプラリーを開催しようということで一番問題になったのはこのセーブ枠の壁です。スタンプラリーのスタンプ数は40、これをひとつひとつスタンプを獲得しているかしていないかを判定する必要があり、しかも継続的に楽しんでもらうためにもスタンプのデータをセーブする必要が出てきます。
そこで今回、セーブ枠の限界突破できる方法はないか?と思って考えたのが。
「よし二進法に変換しよう」
というものでした。何を言っているかわからないかもですが、ようするに1つのセーブ枠で記録できる内容が必ずしも一つではないということです。
BoolのON-OFFによる判定ではなく、Integerにしてしまい、その数値を0-1による二進法に記録内容を圧縮してしまおうというシンプルなものです。
例えばですが、1つのセーブ枠でIntegerをこんな風に管理します。
![](https://assets.st-note.com/img/1670766322300-jZuv94rJPX.png?width=1200)
1と0が羅列されたIntegerですがこの1と0には一つ一つON-OFFの情報が含まれています。この図でいえば9桁目は1・8桁目は0、7・6・5・4は1で・・・と行ったように0と1でON-OFFの情報を込めています。計算できる桁数の関係で有効なのは9桁目から2桁目の数値であり、これだけでも1つのセーブ枠で8個のON-OF情報が圧縮できます。
カミトコスタンプラリーは5つの分野で各8個のスタンプが用意されている理由もここにあります。
これは本当にシンプルな話で、プレイヤーに記録されてるIntegerの数値のなかで、例えば7桁目が1なのか0なのかを読み取るロジックを用意します。ちなみにプログラミングというものはよくわかんないのでロジックですべてやってます。つくづくプログラミングができる人がうらやましいです。無理。
とはいえ、ある特定の桁数が、1なのか0なのかを見つけるのは数式があれば可能なので、その数式に基づいてロジックを組むとこんな風になります。
![](https://assets.st-note.com/img/1670766903558-BK33JeaKtJ.png?width=1200)
まず、セーブされているIntegerのほしい桁数、画像では8桁目の数字を抽出する式になります。まず10の求めたい桁数+1乗で剰余算します。この場合ロジックでは「Modulo」を使います。次にその結果を10の求めたい桁数乗で除算しますこれは「Divide」を使います(当たり前か・・・)
で、まぁ、その数字が最後に1以上になっているか?なっていないか?(必然的に1または0か?を求めている)ということで最終的にここでBoolをON-OFFします。このBool結果はセーブせずに、必要な時に都度このロジックを経由させることでIntegerのセーブ一つで8個ほどのBoolのON-OFFを賄えます。
さて、でもそれ数字が重複しないの??という心配がある後思います。実はワールド入室時に必ずこのロジックを経由させています。また、これらの加算減算の時にも必ずこのロジックを経由させているのでBoolのON-OFFは有効になっていますので、このBoolのOn-OFFで二重に減算や加算されないようにすることができます。
具体例として、カミトコのスタンプラリーに使ったロジックを抽出して開会してますので参考にしてください。
え?Scriptなら楽勝だって?(´;ω;`)ブワッ
この記事が気に入ったらサポートをしてみませんか?