05-08-2008, 03:37 PM
Hello!
Petite question (avec grosse réponse, je suppose): Gestion d'inventaire.
Je possède une table contenant les types d'objets et leur caracs complètes
structure sans importance, du genre:
table `objets`
ID, Type, Sous-Type ...(pleins de caracs)
Dans mon inventaire, je préfère ne pas utiliser un ID par objet existant dans le monde... (Mes pièces d'or sont aussi des objets... si je commence à mettre 1 ID par pièce, je suis pas sorti...)
structure table `inventaire`
ID, ID_perso, ID_objet, Qtt, Equipe (0/1), Degat (valeur: 0 à 255)
Bref, j'ai pris le parti de me faire une clé reposant sur ces champs:
ID_perso, ID_objet... ce qui marche à merveille. Sauf que (évidemment), je dois gérer des dégats/usures sur certains objets (armes, armures)=> pour ceux là, j'ai rajouté un ID unique... (suis parti dans le système hybride) Chaque arme /armure étant limité à Qtt=1.
Problèmes:
1) c'est lourd niveau code
2) des trucs con, comme le "ON DUPLICATE KEY UPDATE" ne fonctionnent pas (ma clé est transférée sur l'ID, du coup)
3) Niveau équipement, le champ Equipe est a 1 ou 0 suivant équipé ou non.=> au chargement du perso (objet), je dois donc parcourir tout mon inventaire, jongler avec des variables temporaires, et vérifier que tout est bien là où il faut... et qu'il y a pas de doublons)=> lourd aussi.
Bref: je me retrouve avec de la lourdeur niveau code...
J'ai a priori plusieurs solutions:
1) mettre ID unique a tout, et tant pis pour les pièces d'or (voir mettre ca a part) (consommation bdd énorme, non?)
2) plus d'ID... les armes/armures traitées comme les autres, mais je dois modifier mon champs Degat... et concaténer les dégats des différentes armes en ma possession.
problème: quand mon perso fait "équiper"... quels dégats seront pris? (il en n'en équipe qu'un... ou je dois afficher une barre d'usure dans l'inventaire...)
3) des idées???
En dehors de ca... vaut-il mieux tester chaque emplacement d'inventaire au chargement du perso, et recontruire l'équipement à chaque appel... ou créer une table annexe, du genre:
ID_perso, Tete, Cou, Torse, Bras, main, Ceinture, Jambes, Pied
ou chaque champ contient l'ID de l'objet équipé?
Je dois dire que j'hésite entre ces possibilités...
Donc, si vous avez des avis/idées/propositions/benchmark, je suis grandement preneur ^^
Merci d'avance.
PS: je poste et je relis... y a un truc qui m'ennuie, dans cette question...
Petite question (avec grosse réponse, je suppose): Gestion d'inventaire.
Je possède une table contenant les types d'objets et leur caracs complètes
structure sans importance, du genre:
table `objets`
ID, Type, Sous-Type ...(pleins de caracs)
Dans mon inventaire, je préfère ne pas utiliser un ID par objet existant dans le monde... (Mes pièces d'or sont aussi des objets... si je commence à mettre 1 ID par pièce, je suis pas sorti...)
structure table `inventaire`
ID, ID_perso, ID_objet, Qtt, Equipe (0/1), Degat (valeur: 0 à 255)
Bref, j'ai pris le parti de me faire une clé reposant sur ces champs:
ID_perso, ID_objet... ce qui marche à merveille. Sauf que (évidemment), je dois gérer des dégats/usures sur certains objets (armes, armures)=> pour ceux là, j'ai rajouté un ID unique... (suis parti dans le système hybride) Chaque arme /armure étant limité à Qtt=1.
Problèmes:
1) c'est lourd niveau code
2) des trucs con, comme le "ON DUPLICATE KEY UPDATE" ne fonctionnent pas (ma clé est transférée sur l'ID, du coup)
3) Niveau équipement, le champ Equipe est a 1 ou 0 suivant équipé ou non.=> au chargement du perso (objet), je dois donc parcourir tout mon inventaire, jongler avec des variables temporaires, et vérifier que tout est bien là où il faut... et qu'il y a pas de doublons)=> lourd aussi.
Bref: je me retrouve avec de la lourdeur niveau code...
J'ai a priori plusieurs solutions:
1) mettre ID unique a tout, et tant pis pour les pièces d'or (voir mettre ca a part) (consommation bdd énorme, non?)
2) plus d'ID... les armes/armures traitées comme les autres, mais je dois modifier mon champs Degat... et concaténer les dégats des différentes armes en ma possession.
problème: quand mon perso fait "équiper"... quels dégats seront pris? (il en n'en équipe qu'un... ou je dois afficher une barre d'usure dans l'inventaire...)
3) des idées???
En dehors de ca... vaut-il mieux tester chaque emplacement d'inventaire au chargement du perso, et recontruire l'équipement à chaque appel... ou créer une table annexe, du genre:
ID_perso, Tete, Cou, Torse, Bras, main, Ceinture, Jambes, Pied
ou chaque champ contient l'ID de l'objet équipé?
Je dois dire que j'hésite entre ces possibilités...
Donc, si vous avez des avis/idées/propositions/benchmark, je suis grandement preneur ^^
Merci d'avance.
PS: je poste et je relis... y a un truc qui m'ennuie, dans cette question...
attendez, je cherche...