2.16.2010

Retour sur le LoginServer

Le serveur d'authentification est maintenant terminé à 80% et permet ce que permet un serveur d'authentification officiel (les 20% de travail restant consisteront à de l'optimisation de code et d'autres choses que je définirai ci-dessous) c'est à dire :

- Création de nouveaux comptes ( Ça c'est ma petite touche personnelle)
- Création de nouvelles familles.
- Création de nouveaux personnages.
Ces derniers ont maintenant tous les "vrais" attributs, j'entends par là : stats, "starting level", Arme équipée par défaut si il en possède lors de la création (valable pour les UPCs surtout)
- Le tout est maintenant sauvegardé entièrement sous format XML. Avant aujourd'hui, je ne sauvegardais rien afin d'aller plus loin et plus vite dans le développement. Maintenant le serveur d'authentification sauvegarde correctement toutes les familles, comptes et personnages créés. Plus pratique quand même, dans le cadre d'un MMO.



Il restera à :
- Importer une partie des scripts (terminés pour le serveur d'auth.) afin de calculer à la volée les HP, MP des personnages (à moins que je ne décide de faire calculer ces données par le serveur et les sauvegarder "brutes" dans le fichier xml des personnages (?).
- Faire une vérification si le compte est déjà connecté, soit sur le Login Server, soit sur le Game Server et envoyer le message correspondant au client.
- Trouver comment le Login Server fait la liaison avec l'inventaire de la famille (que je ne pensais pas inclure dans le Login Server) pour savoir quel UPC peut être créé ou pas (à moins que ce ne soit encore une histoire de fichiers XML écrits par le Game Server et récupérés par le serveur d'auth.).

2.11.2010

News du

- Prise en compte du CashShop.
- Correction dans le système de chat : celui ci faisait planter le serveur suite à une modification quand on utilisait les Clan, Squad et Group chats.
- Ajout des Poses (^^)
- Ajout du code pour les objets.

Je me rend compte que je n'explique pas forcement beaucoup les étapes en détail, alors pour une fois je vais expliquer un peu plus comment ca marche :

Contrairement à d'autres MMO, la définition des objets (par exemple une arme) sont stockées dans 4 tables différentes, et non une seule. Si l'on prend l'exemple de cette dague :
 
La première table va stocker uniquement l'ID de la dague "blank", c'est à dire sans upgrade ni aucune modification. Ainsi, si le jeu contient 1000 objets, le serveur ne gérera qu'une seule table commune à tous les joueurs et contenant ces 1000 objets (on est loin d'une table comme lineage2, ou chaque objet de chaque utilisateur correspond à une ligne dans la base de données). De fait, le serveur indique juste au joueur qu'il est en possession de la "Queen's Dagger", position 1 (InventoryID 1) ici dans l'inventaire du screenshot. On a au final un :
SendInventory(TestFamily, ItemID=QueensDagger, ItemCount = 1, InventoryID =1)

Vous aurez compris, je dit au client qu'il est en possession d'une QueensDagger, une seule, et qu'elle est en position 1 dans l'inventaire. Remarquez au passage le peu d'informations stockées dans cette table (Owner, ItemID, ItemCount, InvID)

Ensuite le serveur va chercher dans une deuxième table si l'objet ayant l'inventoryID = 1 possède des enchantements. Dans l'exemple, il y en a, le serveur exécute l'équivalent de :
SendEnchantments(TestFamily, InventoryID =1, ATK=40, SPEED = 28 .....)

Puis si cette dague est enchantée, on envoie l'information :
SendUpgradedItem(TestFamily, InventoryID, Level=9, FinalAtk=69)

Et enfin, si la dague possède elle-même des sockets, on envoie aussi. (Il n'y en a pas dans notre exemple ^^)

L'avantage est, je le rappelle, de ne stocker par objet que les informations réellement nécessaires, et de n'envoyer au client que celles nécessaires également. Dans notre exemple, on n'envoie ni ne stocke les informations de sockets sachant que notre arme n'en possède pas.

Voila, j'ai pas envie de faire le laïus à chaque fois, au moins c'est fait une fois pour toute ;)

2.09.2010

C'est toujours mieux tard que jamais.

Je vais enfin prendre un peu de temps pour mettre à jour ce blog afin de donner quelques nouvelles concernant l'évolution du serveur, désolé pour l'attente ;)

Tout d'abord suite à plusieurs mises à jour du client j'ai constaté des changements dans les IDs des paquets envoyés par le serveur, ce qui m'a obligé à effectuer une mise à jour complète de la liste des paquets afin de prévenir le problème en cas de nouvelle mise à jour.

- Il est maintenant possible de se déplacer correctement sur les différentes cartes, l'élément qui manquait pour pouvoir se déplacer ayant été trouvé.
- Les différents chats (general, clan, group etc) sont maintenant disponibles.
- Possibilité d'interaction avec les NPCs.
- Et toujours ce système de scripts qui me bouffe clairement 90% de mon temps XD