Using Marauroa-Marauroa Database Structure
转自https://stendhalgame.org/wiki/Marauroa_Database_Structure
本文介绍了Marauroa数据库的表结构。 您可能希望了解High Level Database Access,它解释了从程序代码访问数据库的高级API。 文章Low Level Database Access描述了Marauroa如何在内部访问数据库以及如何为您自己的表添加支持。
Accounts
身份验证信息存储在表帐户中。 它由用户名,密码哈希,电子邮件地址和帐户创建的时间戳组成。 请注意,由于历史原因,指向帐户表的外键列不是名为account_id而是名为player_id。
出于安全原因,使用ip-address,timestamp和success标志在loginEvent表中记录每次登录(成功与否)。 列service用于告知游戏和网站的登录。 可选列种子存储预身份验证种子。 在尝试失败太多次后,Marauroa会自动阻止登录一段时间。
密码更改以类似方式记录。 除了正常的loginEvents之外,还存储旧密码哈希。 这是将被黑客入侵的帐户还原回其原始所有者的预防措施。
注意:出于隐私原因,定期删除此表中的旧行可能是个好主意。
Bans
不幸的是,有一些不友好的人,你可能需要远离。 表accountban和banlist存储此类禁令。
该表帐户是基于每个帐户的。 尝试登录的人显示原因。 帐户禁令可以自动失效。
表banlist存储基于ip-address和ip-address-ranges的禁令。 掩码255.255.255.255表示禁用一个单独的ip-address。(The mask 255.255.255.255 donates a single ip-address.)
RPObjects
玩家对象使用表格字符链接到其帐户。
注意:目前,rpobjects(包括那些插槽及插槽拥有的rpojbects)在Blob字段中被序列化。 在Marauroa版本1.x中它是一个关系。 不幸的是,这种方法性能不满足要求(MySQL在删除语句上非常慢)。 。这里提出一个开发中改进的关系结构的概念。
Game Logging
gameEvents存储游戏世界中发生的事件(杀死怪物,交易,传送等)带有时间戳和引发事件的玩家。 参数param1和param2取决于事件。
除非禁用Marauroa在表统计中每分钟记录统计信息。 这包括网络流量数据和在线玩家数量。
The whole picture
下图显示了Marauroa使用的所有表格。 但是,如果需要,游戏可以自由添加自己的表格(JMapacman和Marboard不需要额外的表格,但Stendhal大量使用这种可能性。)