10-07-2009, 02:46 PM
Pour enregistrer l'instance d'un objet, y a la serialisation en php. Pour ma part, j'utilise une table qui recense les items, au sens abstrait, pas au sens instance donc. Dans la table, il y a les champs communs à tous les objets : id, nom, description, image, le gain d'attaque / défense / vitalité.... que ça apporte au perso etc. Les instances sont stockées dans des tables intermédiaires, genre perso_items, ou ville_items, ou que sais-je encore, ça dépend de la problématique. Dans ces tables, il y a un champs "params" qui contient en vrac et en serializé, toutes les caractéristiques propres à l'item en question. Là on se situe au niveau de l'instance.
Ensuite, pour gérer le comportement des items, ça se fait en objet. Y a une classe abstraite "item", qui définit quelques propriétés / méthodes de bases, puis des sous-classes, et encore des sous-classes, et pourquoi pas encore des sous-classes. Exemple : Item => arme => Arme à deux mains => Épée => Épée qui roxe sa maman. Avec le champ libre "params", je peux ainsi stocker les infos de n'importe quel item et recréer une instance très facilement.
Je parle au présent mais tout n'a pas été implémenté, vu que j'ai plus le temps de bosser dessus... Mais c'est comme ça que je procède / comptais procéder. Pareil pour mes NPC. J'ai une classe abstraite, ensuite plusieurs sous-classes : NPC marchand, NPC bavard, NPC salopard ( là j'invente, mais c'est pour l'exemple :p )... Et les classes des dits NPC : NPC001, NPC002 etc ( où le nombre correspond à l'identifiant du NPC, le même qu'en base ).
Je pourrai pas me passer de la BDD par contre, pour faire l'inventaire des objets d'un joueur, des NPC d'une map ou autre, ce serait un peu chiant. L'inconvénient de tout mettre dans un seul champ peut être qu'on ne peut pas faire de tri sur les données qui sont dans le dit champ. Mais pour ma part ce n'est pas un problème, étant donné que si jamais je dois faire des tris, il se fera sur les colonnes principales de l'objet ( nom, type d'objet, gain de vitalité & co ).
Ensuite, pour gérer le comportement des items, ça se fait en objet. Y a une classe abstraite "item", qui définit quelques propriétés / méthodes de bases, puis des sous-classes, et encore des sous-classes, et pourquoi pas encore des sous-classes. Exemple : Item => arme => Arme à deux mains => Épée => Épée qui roxe sa maman. Avec le champ libre "params", je peux ainsi stocker les infos de n'importe quel item et recréer une instance très facilement.
Je parle au présent mais tout n'a pas été implémenté, vu que j'ai plus le temps de bosser dessus... Mais c'est comme ça que je procède / comptais procéder. Pareil pour mes NPC. J'ai une classe abstraite, ensuite plusieurs sous-classes : NPC marchand, NPC bavard, NPC salopard ( là j'invente, mais c'est pour l'exemple :p )... Et les classes des dits NPC : NPC001, NPC002 etc ( où le nombre correspond à l'identifiant du NPC, le même qu'en base ).
Je pourrai pas me passer de la BDD par contre, pour faire l'inventaire des objets d'un joueur, des NPC d'une map ou autre, ce serait un peu chiant. L'inconvénient de tout mettre dans un seul champ peut être qu'on ne peut pas faire de tri sur les données qui sont dans le dit champ. Mais pour ma part ce n'est pas un problème, étant donné que si jamais je dois faire des tris, il se fera sur les colonnes principales de l'objet ( nom, type d'objet, gain de vitalité & co ).