Implémenter un système de serveur et d'objet lié - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Implémenter un système de serveur et d'objet lié (/showthread.php?tid=7492) |
Implémenter un système de serveur et d'objet lié - Kerikou - 05-11-2015 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, RE: Implémenter un système de serveur et d'objet lié - rachids - 06-11-2015 Salut ! Pourquoi pas une table item avec un champ listant les serveurs sur lesquels l'objet en question serait utilisable ? Exemple, l'épée est dispo sur les serveurs 1,3,4,5 Code : items RE: Implémenter un système de serveur et d'objet lié - Ter Rowan - 07-11-2015 c'est plus compliqué de créer une requête avec un seul champ qui portent tous les serveurs pour déterminer les objets disponibles pour un serveur
restons sur une modélisation classique :
table objet:
id / nom / carac 1 / carac 2 (si pas trop de carac, sinon faire une autre table
table objet serveur
id serveur / id objet
select * from table_objet_serveur, table_objet
where
table_objet_serveur.id_serveur = "Mon Serveur" <= quel serveur m'intéresse ? and
table_objet_serveur.id_objet = table_objet.id <= je ne vois que les objets concernés par mon serveur RE: Implémenter un système de serveur et d'objet lié - CaptainJS - 07-11-2015 Est-ce que tu parle de tables destinées à l'instanciation du serveur ou de tables en cours de jeu ? parce que ça ressemble furieusement à du paramétrage de ton monde (serveur), et dans ce cas il vaut mieux je pense avoir des tables séparées pour définir les associations objets / serveurs sachant qu'elles n'interviendront pas dans la vue du serveur. RE: Implémenter un système de serveur et d'objet lié - Akira777 - 08-11-2015 Pour ma part, je gère ça via des tables différentes. Global : core_accounts core_servers Serveur 1 : s1_players s1_items Serveur 2 : s2_players s2_items Chaque entity qui est multi-serveur charge un préfix de table différent. J'ai pas trouvé plus simple. Evidement, en fonction de l'instance ça charge un fichier de config yaml différent (stocké dans APC). Et je me suis fait un cli pour gérer les serveurs. |