2

PHPとMySQLを使ってブラウザMMOを作っています。プレーヤーのインベントリを実装する 2 つの方法をためらっています。

  1. 作成/モンスターからドロップ/ファウンドされると、アイテムは Items テーブルに新しい行を作成し、そのタイプ (短剣のインスタンス、ポーションのインスタンスなど)、その場所 (タイル X:Y ? の地面) を格納します。プレイヤー Z のインベントリに ?) 追加のフィールドが 1 つまたは 2 つある可能性があります。アイテムのリストは次のようになります:
    id=728 ; type=14 ; location="i426" ; special="e8"
    (「i426」は「プレイヤー n°426 のインベントリ内」を意味し、「e8」はアイテムがエンチャント n°8 を持っていることを意味します)。
    長所 :エンチャント、耐久性、前の所有者など、個々のアイテムに関するデータを保存できます。また、アイテムは任意の場所に簡単に配置できます。このシステムでは、たとえばオークションハウスにアイテムを無料で入れることができます - アイテム内のアイテムなどのクレイジーな可能性は言うまでもありません.
    短所:何百人ものプレイヤーがモンスターを略奪し、一日中クラフトしているため、これはすぐに巨大なテーブルを作成し、かなり無駄に思えます. アイテムが関係するときはいつでも、これによりゲーム全体が遅くなる可能性があるのではないかと心配しています(私は多くのAJAXブードゥーを使用しています)。

  2. または :プレイヤーがインベントリにアイテムを入れると、データベース上のそのプレイヤーのインベントリ フィールドが更新され、新しいアイテムのタイプ (整数) が末尾に追加され、区切り文字が追加されます。典型的な在庫フィールドは次のようになります:"|11|8|27|58|58"
    長所:無駄が少ない。アイテム インスタンスは、数桁の数字と区切り記号です。
    短所:アイテムに関する余分なデータはありません。すべてのインスタンスは同じです。また、アイテムをタイルにドロップすると、タイルには独自の在庫フィールドが必要になります。アイテムの可能なすべての場所などです。さらに、この方法では、単にテーブルから行を削除するのではなく、アイテムを追加/削除する必要があるときはいつでも文字列を操作します。もう 1 つのことは、プレーヤーのインベントリにはさまざまな数のアイテムを格納できるため、この文字列の長さは予測できません。

以前のプロジェクトでは、2 番目の方法を使用しました。最初の方法は楽しそうに見えますが、ストレージ容量とサーバーの速度に適合するかどうかはわかりません. これらの方法のうち、MMO で最もよく使用されるのはどれですか? 全く別物ですか?私が見逃した長所や短所はありますか?(この質問が少し主観的で申し訳ありません!)

4

1 に答える 1

3

あなたの最良の設計は、アプローチ 1 のバージョンです。すべての項目に独自の行があり、そこに必要なすべての情報を配置します。最適化についてはまだ心配する必要はありません。後ほど、ユーザーがシステムをどのように使用しているか、どこにボトルネックがあるかを確認する時間があります。

ここでは、プログラミングを容易にし、明確で明確な状態の記述を行うように設計する必要があります。アイテムの「タイプ」ごとにマスター アイテム テーブルが必要です。このテーブルには、そのアイテムが何であり、どのように使用できるかに関する情報が保持されます。次に、作成 (またはインスタンス化) したら、項目テーブルに行を配置し、項目のそのインスタンスの詳細を記述します。移動すると、位置情報を更新できます。アイテムの管理に必要な情報だけを適切な場所に一度に保存できるので、無駄がありません。

テーブルに適切なインデックスを配置することで、何百万ものインデックスを簡単かつ迅速に管理できるようになります。

于 2012-03-14T12:29:22.297 に答える