05-11-2015, 01:06 PM
Bien le bonjour,
J'essaye d'implémenter un système de compte et de serveur sur mon jeu et je suis confronté à un soucis au moment de la conception. J'aimerais donc vos avis sur la méthode que vous utiliseriez et les avantages.
J'utilise symfony2 comme framework. L'objectif est de permettre l'ouverture de plusieurs serveurs ayant des paramètres de jeu différents. Il y a 3 entités : Account, User, Server.
- User = Compte de base avec couple pseudo/pass pour se connecter. (1 par joueur)
- Server = Environnement de jeu définnissant les différents paramètres de jeu (exemple : or de départ, vitesse de jeu, équipement disponible). Il n'y a pas de limite aux nombre de serveurs.
- Account = 1 par couple (User/Server). Représente un compte sur un environnement précis. Un User peut avoir plusieurs Accounts sur différents Server.
Jusque là pas de soucis. Les difficultés viennent quand je veux permettre à la création du serveur de définir la liste des objets utilisables ou non (exemple : Epee en bois sera utilisable sur le serveur 1 mais pas sur le serveur 2).
Solution 1 :
Pour chaque table (equipment, skills, team, etc...) ajouter un champ server, permettant de définir si l'objet est disponible.
Inconvénients : Duplication des lignes et code plus compliqué lors des opérations en base de données.
Id Server Name
_______________________
1 1 Epee en bois
1 3 Epee en bois
Solution 2 :
Pour chaque table (equipment, skills, team, etc...) ajouter une table (equipment_disponibility, ..) permettant de définir si l'objet est disponible.
Inconvénients: Multiplication des tables et obligation de jointures pour savoir si l'objet est dispo (perte de perfs ?)
Exemple Table Item :
Id Name
__________
1 Epee en bois
Table Item_disponibility
Id_item Id_server
__________________
1 1
1 3
Solution 3 :
Avoir une table base_item regroupant les caractéristiques d'un objet et préfixer chacune des tables par le numéro du serveur. Cette table préfixé serait une duplication de la table base avec uniquement les objets disponibles pour le serveur. L'ajout du préfixe a l'ensemble des tables peut être géré de manière automatique par Symfony via les Evenements Doctrine. Ainsi, il faut que chacune des tables soit préfixé par le numéro du serveur (imaginons que le jeu doit fonctionné à partir de 50 tables, la création d'un serveur créera automatiquament 50 nouvelles tables avec le préfixe du serveur).
Inconvénients : Il faut créer une nouvelle table pour chaque élément (srv1_equipment, srv1_team, srv1_skills) par serveur. chaque table est une duplication de la table de base. L'avantage est de ne posséder que les élements qui nous intéressent (facilité de dev et rapidité).
exemple Base_Item
Id Name Strength
_______________________
1 Epee en bois 10
exemple srv1_Item
Id Name Strength
__________________________
1 Epee en bois 10
Solution 4 : ???
Voilà voilà je ne sais pas si j'ai été clair, mais je me pose pas mal de questions sur la meilleure solution.
Si vous avez des avis ou de meilleures solutions n'hésitez pas
Merci d'avance,
J'essaye d'implémenter un système de compte et de serveur sur mon jeu et je suis confronté à un soucis au moment de la conception. J'aimerais donc vos avis sur la méthode que vous utiliseriez et les avantages.
J'utilise symfony2 comme framework. L'objectif est de permettre l'ouverture de plusieurs serveurs ayant des paramètres de jeu différents. Il y a 3 entités : Account, User, Server.
- User = Compte de base avec couple pseudo/pass pour se connecter. (1 par joueur)
- Server = Environnement de jeu définnissant les différents paramètres de jeu (exemple : or de départ, vitesse de jeu, équipement disponible). Il n'y a pas de limite aux nombre de serveurs.
- Account = 1 par couple (User/Server). Représente un compte sur un environnement précis. Un User peut avoir plusieurs Accounts sur différents Server.
Jusque là pas de soucis. Les difficultés viennent quand je veux permettre à la création du serveur de définir la liste des objets utilisables ou non (exemple : Epee en bois sera utilisable sur le serveur 1 mais pas sur le serveur 2).
Solution 1 :
Pour chaque table (equipment, skills, team, etc...) ajouter un champ server, permettant de définir si l'objet est disponible.
Inconvénients : Duplication des lignes et code plus compliqué lors des opérations en base de données.
Id Server Name
_______________________
1 1 Epee en bois
1 3 Epee en bois
Solution 2 :
Pour chaque table (equipment, skills, team, etc...) ajouter une table (equipment_disponibility, ..) permettant de définir si l'objet est disponible.
Inconvénients: Multiplication des tables et obligation de jointures pour savoir si l'objet est dispo (perte de perfs ?)
Exemple Table Item :
Id Name
__________
1 Epee en bois
Table Item_disponibility
Id_item Id_server
__________________
1 1
1 3
Solution 3 :
Avoir une table base_item regroupant les caractéristiques d'un objet et préfixer chacune des tables par le numéro du serveur. Cette table préfixé serait une duplication de la table base avec uniquement les objets disponibles pour le serveur. L'ajout du préfixe a l'ensemble des tables peut être géré de manière automatique par Symfony via les Evenements Doctrine. Ainsi, il faut que chacune des tables soit préfixé par le numéro du serveur (imaginons que le jeu doit fonctionné à partir de 50 tables, la création d'un serveur créera automatiquament 50 nouvelles tables avec le préfixe du serveur).
Inconvénients : Il faut créer une nouvelle table pour chaque élément (srv1_equipment, srv1_team, srv1_skills) par serveur. chaque table est une duplication de la table de base. L'avantage est de ne posséder que les élements qui nous intéressent (facilité de dev et rapidité).
exemple Base_Item
Id Name Strength
_______________________
1 Epee en bois 10
exemple srv1_Item
Id Name Strength
__________________________
1 Epee en bois 10
Solution 4 : ???
Voilà voilà je ne sais pas si j'ai été clair, mais je me pose pas mal de questions sur la meilleure solution.
Si vous avez des avis ou de meilleures solutions n'hésitez pas
Merci d'avance,