我正在开发基于网络的RPG游戏,我希望能够运行不同的“服务器”,但我不确定最好的方法是什么。
第一个想法:创建一个名为“world”的表,当创建一个角色时,他们可以选择一个要加入的世界,通过获取一个将用于告知的world_id他们所处的世界。
第二个想法:从模板创建一个全新的数据库,然后使用带有ID的会话和一个用于连接到正确数据库的交换表。
请记住,我希望人们能够在自己的服务器上创建新的任务,项目,怪物等,而不会影响其他人。我知道可以用第一个想法完成,但我不确定这是否是最好的方法,因为我总是需要检查world_id是否有任何变化。我也有点担心使用会话来更改数据库,但由于它会处于切换状态,我认为没有人可以使用它来进行MySQL注入。
P.S:我希望用户帐户适用于所有数据库,因此他们无需创建新帐户即可在其他数据库上发布,也无需在论坛中发帖。
编辑:我不是说运行几个MySQL服务器,我的意思是使用这样的东西
function openConnection($db = 0){
switch($db){
case 1: $db_name = "database_two"; break;
case 2: $db_name = "database_three"; break;
case 3: $db_name = "database_four"; break;
case 4: $db_name = "database_five"; break;
default: $db_name = "database_one";
}
try{
$conn = new PDO("mysql:host=127.0.0.1;dbname={$db_name};","<user>","<password>");
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn -> exec("SET NAMES utf8");
$conn -> exec("USE {$db_name};");
return $conn;
}catch(PDOException $e){
echo "<b>ERROR:</b> ".$e->getMessage(); exit;
}
}
将所有游戏数据保存在不同的数据库中。
答案 0 :(得分:0)
Yemto,我也在开发基于网络的RPG。
尝试更改查看数据库的方式。数据库是一种存储和组织数据点的方法,如果用户请求它们,您可以访问这些数据点......
因此,我并没有真正意识到&#34;切换&#34;所有并发症的必要性。表等等,只要您可以将所需的所有世界数据存储在一个数据库中,然后将其传递给用户。
如果您需要收集符合特定条件的多个表数据,并匹配传入的user_id SESSION,您可以在同一个数据库中连接表,例如:
$qry =
'SELECT us.*, w.*, q.*
FROM user_stats us
INNER JOIN worlds w ON (w.world_id = us.world_id)
INNER JOIN quests q ON (q.quest_id = us.current_questnum)
WHERE us.user_id_fk = "' . $_SESSION['userid'] . '"';
然后,使用这些匹配和返回的数据(例如,对于那个$ _SESSION用户ID,返回世界2),您可以生成新的&#34; world&#34;前端的实体/环境(使用您的引擎...可以实例化一个新类,初始化tilemap和其中的其他对象)并将其传递给用户。