我正在使用 PHP 和 MySQL 制作浏览器 MMO。我在两种实现玩家库存的方法之间犹豫不决:
当从怪物/发现中制作/掉落时,物品会在物品表中创建一个新行,存储它的类型(例如匕首、药水......)、位置(在 X:Y 的地面上?在玩家 Z 的物品栏中?)可能还有一两个额外的字段。物品列表如下所示:(
id=728 ; type=14 ; location="i426" ; special="e8"
其中“i426”表示“在第 426 号玩家的物品栏中”,“e8”表示该物品具有第 8 号附魔)。
优点:我可以存储关于每个单独物品的数据——附魔、耐用性、以前的所有者......而且,这些物品很容易放置在任何位置;将物品放入拍卖行,这个系统是免费的 - 更不用说疯狂的可能性,比如物品里面的物品等等。
缺点:数百名玩家整天掠夺怪物并制作,这很快就会创建一个巨大的桌子,而且看起来很浪费。我担心这可能会在涉及项目时减慢整个游戏(我使用了很多 AJAX 巫术)。或:当玩家将物品放入他们的物品栏时,该玩家在数据库中的物品栏字段会更新,并在末尾附加新物品的类型(整数),并带有分隔符。典型的库存字段如下所示:
"|11|8|27|58|58"
优点:浪费更少。一个项目实例只是几个数字和一个分隔符。
缺点:没有关于项目的额外数据;每个实例都是一样的。此外,将项目放在图块上意味着图块需要自己的库存字段 - 等等,用于项目的每个可能位置。此外,此方法涉及在必须添加/删除项目时随时处理字符串,而不是简单地从表中删除一行。另一件事是玩家的物品栏可以存储可变数量的物品,所以这个字符串没有可预测的长度。
在之前的项目中,我使用了第二种方法。第一种方法看起来很有趣,但我不确定它是否符合我们的存储空间和服务器的速度。哪些方法最常用于 MMO 游戏?完全是另一个吗?我错过了一些优点或缺点吗?(如果这个问题有点主观,我很抱歉!)