PHPとMySQLを使ってブラウザMMOを作っています。プレーヤーのインベントリを実装する 2 つの方法をためらっています。
作成/モンスターからドロップ/ファウンドされると、アイテムは Items テーブルに新しい行を作成し、そのタイプ (短剣のインスタンス、ポーションのインスタンスなど)、その場所 (タイル X:Y ? の地面) を格納します。プレイヤー Z のインベントリに ?) 追加のフィールドが 1 つまたは 2 つある可能性があります。アイテムのリストは次のようになります:
id=728 ; type=14 ; location="i426" ; special="e8"
(「i426」は「プレイヤー n°426 のインベントリ内」を意味し、「e8」はアイテムがエンチャント n°8 を持っていることを意味します)。
長所 :エンチャント、耐久性、前の所有者など、個々のアイテムに関するデータを保存できます。また、アイテムは任意の場所に簡単に配置できます。このシステムでは、たとえばオークションハウスにアイテムを無料で入れることができます - アイテム内のアイテムなどのクレイジーな可能性は言うまでもありません.
短所:何百人ものプレイヤーがモンスターを略奪し、一日中クラフトしているため、これはすぐに巨大なテーブルを作成し、かなり無駄に思えます. アイテムが関係するときはいつでも、これによりゲーム全体が遅くなる可能性があるのではないかと心配しています(私は多くのAJAXブードゥーを使用しています)。または :プレイヤーがインベントリにアイテムを入れると、データベース上のそのプレイヤーのインベントリ フィールドが更新され、新しいアイテムのタイプ (整数) が末尾に追加され、区切り文字が追加されます。典型的な在庫フィールドは次のようになります:
"|11|8|27|58|58"
長所:無駄が少ない。アイテム インスタンスは、数桁の数字と区切り記号です。
短所:アイテムに関する余分なデータはありません。すべてのインスタンスは同じです。また、アイテムをタイルにドロップすると、タイルには独自の在庫フィールドが必要になります。アイテムの可能なすべての場所などです。さらに、この方法では、単にテーブルから行を削除するのではなく、アイテムを追加/削除する必要があるときはいつでも文字列を操作します。もう 1 つのことは、プレーヤーのインベントリにはさまざまな数のアイテムを格納できるため、この文字列の長さは予測できません。
以前のプロジェクトでは、2 番目の方法を使用しました。最初の方法は楽しそうに見えますが、ストレージ容量とサーバーの速度に適合するかどうかはわかりません. これらの方法のうち、MMO で最もよく使用されるのはどれですか? 全く別物ですか?私が見逃した長所や短所はありますか?(この質問が少し主観的で申し訳ありません!)