mardi 19 février 2008

Inventaire

J'ai étendu le principe développé dans le post précédent à l'inventaire. C'est assez similaire:

- L'inventaire est modifié
- Une trigger ajoute l'identifiant d'avatar à la liste des inventaires modifiés
- Une autre trigger réveille le serveur
- Le serveur récupère les nouveaux inventaires et les envoie à qui de droit

Il y a cependant une petite différence. Un des avantages du système est que je n'ai plus à me préoccuper de redistribuer les informations d'inventaire: même si l'on ajoute un composant totalement indépendant qui va modifier la base de données, toute modification sera immédiatement répercutée sur les utilisateurs. L'on peut donc par exemple penser à un système de commerce séparé, pourquoi pas dans un navigateur internet, qui irait en temps réel répercuter les actions dans le jeu. Ou pourquoi pas un composant "artisanat" qui permette de transformer certains matériaux en objets? Ou encore un composant "La main des Dieux" qui permette au maitre du jeu de faire apparaitre des artéfacts de quête dans le sac du joueur.

Un petit point d'optimisation ici est l'envoi juste avant la requête, dans une table temporaire, des avatars actuellement connectés. Ainsi, la requête est faite en joignant la table de l'inventaire, la table des avatars dont l'inventaire a été modifié, et la table des avatars actuellement connectés, de manière à n'envoyer vers le serveur que les inventaires qui doivent être réellement distribués (l'inventaire a été modifié ET le joueur est connecté). Si l'on a par exemple 1000 joueurs connectés, et que l'on modifie l'inventaire de 1000 joueurs, mais que seuls 50 d'entre eux étaient connectés, l'on envoie seulement vers le serveur 50 inventaires. L'écriture des données sur la table des avatars actuellement connectés est très rapide, puisque c'est une copie directe, et que l'on a donc pas besoin de faire une ribambelle d'INSERT qui ralentiraient le tout.

Aucun commentaire: