💍

『ラストピリオド』のレガリア所持枠いっぱい問題をどうにかした話

2021/12/21に公開

『ラストピリオド』エンジニアのT.Iです。
今年の1月に 「レガリア保管庫」 機能をリリースしましたので、そちらに関連する記事となります。

レガリアとは

[ヘルプより引用]

レガリアとは、ユニットに装備させることでステータス上昇など様々な効果が得ることのできるアイテムです。
主にクエストドロップや交換所から獲得することができます。

このレガリアにはC〜Sまでのランクがあり、特定の素材アイテムを使用してレベルを上げることができます。(一部のレガリアは決まったランクでしか入手できません)
また、レガリアによっては決まったレガリアを素材として使用することで進化させたり、決まった範囲からランダムな能力を持つ潜在能力を付与できたりもします。

※いろいろ書いてはいますが、ここではただ単に「装備アイテム」という認識で問題ありません。

以前の問題点

レガリアは強力な効果を持つものがほとんどなのでいっぱい持っておきたいのですが、
そこで問題になっていたのが ストレージ(所持枠) 問題です。

現在レガリアは最大で400個まで所持することができますが、イベントでしか入手できない限定レガリアや進化素材としてよく使われるレガリアなどを貯めておくと、意外とすぐいっぱいになっていました。


クエストスタート時にレガリア枠を超えて所持していると上のようなダイアログが出てきてしまい、進化や売却などで空きを作るまでクエストに挑戦ができなくなってしまいます。

そのため、「レガリア発掘祭」などのレガリア収集イベントの周回時にはストレスの要因にもなっておりました。

対応内容

レガリアをそのままいくらでも持てるようにするのはデータベース的にも限界があるため、
現在ユニークデータとして取り扱っているレガリアを他のアイテム同様にスタックできるように対応を行い、「保管庫」として別のストレージを持てるようにしました。

レガリア枠と保管庫のデータ構成について

1. レガリアのデータを見てみる

レガリア1つにつき、以下のデータを持っています。太字はユニークデータです。

  • ユニークID
  • レガリアのマスターデータID(種類や進化の有無を管理)
  • 経験値
  • レベル
  • 進化回数(+値)
  • ランク(C〜S)
  • 装備状態やお気に入り状態
  • Newバッジの表示フラグ
  • 潜在効果の付与状況(一部のレガリアにのみランダムでつけられる追加効果)
  • 入手時刻、更新時刻(いわゆるcreated_atやupdated_at)

2. ユニークデータを除外

ここから、ユーザー操作によって変更される可能性があるデータを除外するとこうなります。
最低限、これだけあればどのレガリアなのかが把握出来ます。

  • レガリアのマスターデータID
  • ランク(C〜S)

3. 別ストレージとして管理できるようデータを追加

ここからさらに保管数などを管理するデータや、UIの表示に使用するデータを追加したものが下記になり、こちらが「レガリア保管庫」側のデータとなります。

  • 保管庫用のユニークID
  • レガリアのマスターデータID
  • ランク(C〜S)
  • 保管数
  • Newバッジの表示フラグ
  • 最後に保管数が増えた時間(入手順ソートに使用)
  • 入手時刻、更新時刻

ユニークなレガリアではなくなったため、実質所持数に制限がない状態でレガリアを持ち続けることができるようになります。(厳密にはint上限という型的な上限はありますが…)

レガリアの所持枠と保管庫のやりとりについて

ここまで決まったところで、
あとはここのストレージから出したり入れたり、売ったり進化素材として使えるようにする機能を追加していきます。

保管と取り出し

<u>「レベル1、経験値0、進化回数0想定」のいわゆる新品同様のレガリア</u>のみ保管庫に入れられるという仕様があったため、
保管庫から取り出す場合はその通りになるようデータを再現しています。

保管庫に入れる場合にもその条件に従えば良いのですが、リリース当時の状態では所持枠が溢れている状態のユーザーが大半でして1個1個格納するのは大変手間であると判断したため、
所持レガリア枠から<u>以下の状態のレガリアを一括</u>で送ることができるようにしています。

  • レベルが上がっていない(レベル1)
  • 経験値が入っていない
  • 進化していない(+値が0。なお一部例外があります)
  • 装備されていたり、お気に入りセット(パーティを構成するためのユニットとレガリアのセット)に登録されたりしていない
  • お気に入り状態ではない
  • 潜在効果が付いていない


(こちらは当時私が保管庫リリース後に一括保管した時のスクショになります。なかなか多い…)

自動保管

このままではクエストレガリアいっぱい問題は忘れた頃にまたやってきますので、クエスト側にも手を加えました。

オプションに「レガリア自動保管設定」を追加し、こちらをONにすることで今後はクエストやプレゼントボックスからレガリアを獲得した時に、レガリア枠ではなく保管庫に直接送られるようにしました。
「レガリアをドロップしたはずなのに見つからない!」とならないよう、オプション制にさせていただいております。

潜在効果がついているレガリアについては、
先述の通りレガリア側のデータにしか「潜在効果の付与状況」を持っていないため、
自動保管はできるものの一度取り出すともう保管庫には戻せないようになっています。

まとめ

レガリア保管庫については特にトラブルもなくリリースができ、これで所持枠いっぱい問題は概ね解決することができました。
保管庫リリース後の次のバージョンアップでは「クエストのオート周回機能」もリリースされましたので、快適な周回が行えるようになれたのかなと思っております。

データの制約こそありますが、ストレージ問題を抱えている方がおりましたら参考にしていただけますと幸いでございます。

また、先日リリースされたばかりのバージョン2.9.0では、大変だったレガリア進化を改善するための新機能として「自動進化」も追加されておりますので、当機能と合わせて快適なレガリアライフをお送りください!
(オート周回、自動進化については別のエンジニアが担当されました)

GitHubで編集を提案
Happy Elements

Discussion