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

11.26.2009

Quelques news

Comme dit précédemment, beaucoup de boulot en cette fin d'année et le projet (même s'il avance) n'évolue pas aussi vite que je l'aurai voulu. Les scripts sont toujours en cours de développement en mode 'stand-alone' (toujours pas trouvé le temps d'inclure définitivement l'install du LUA dans dotNet, même si 2 ou 3 clics devraient suffire ^^). Après si j'en croit la doc LUA il faudra enregistrer manuellement (aka importer) toutes les fonctions créées dans C#.NET ^^ La dessus j'espère avoir mal lu la doc et si quelqu'un connait un moyen d'importer en automatique tous les scripts LUA dans dotNet je suis preneur.

Niveau 'jouabilité', je pensais avoir trouvé le paquet permettant de se déplacer sur une map, mais tout ce que fait le perso pour le moment c'est bouger les bras une micro-seconde et rester sur place. Le paquet envoyé par le serveur contient bien sur ce que j'ai identifié comme étant des coordonnées X,Y,Z, l'ID du personnage utilisé, un compteur qui s'incrémente à chaque 'demande de déplacement client' (surement pour éviter un 'replay' de paquet coté client (bots, tentative de triche ou autre) ) mais contient en plus d'autres valeurs que je n'ai pu identifier pour le moment.
Une fois que j'aurai identifié le reste du paquet se sera déjà un peu plus fun de pouvoir se déplacer dans StGE ;)

11.17.2009

LUA Scripts

Les scripts LUA sont en cours d'écriture pour un total de 1000+ fichiers .lua et quasiment 10* plus de fonctions.
Ceux sont eux qui gèrent l'essentiel du gameplay comme les statistiques des personnages, les quêtes, les missions, les NPCs, les monstres, les events, les combats, les fonctions d'upgrade et d'enchant etc etc. Tout ce qui rentre dans l'aspect gameplay du jeu est intégré et développé en LUA.

11.13.2009

LUA

Après réflexion, il a été décide d'intégrer l'ensemble des fonctions du jeu en langage LUA. LUA est un langage de scripts fort apprécié dans le domaine du jeu video, il est utilisé entre autre dans le jeu World of Warcraft et FarCry.
Une librairie existe pour intégrer complètement LUA à .NET et est disponible ici.

11.12.2009

Classes

- Un grand travail de création des classes C# est en cours, avec l'équivalent (simplifié) d'une classe par "objet" du jeu.
Par exemple, une classe "commander" représentant une famille, une classe "commanderquest" pour les quêtes associées, une classe "pc" représentant chaque membre de la famille, etc etc.
Certaines d'entre elles avaient déjà été créées pour le loginserver ("account", "commmander", "pc" etc etc) d'autres plus spécifiques au gameserver restent à créer mais ne sont pas essentielles pour le moment.

- Utilisation d'un XMLserializer pour charger toutes les données de type "item", "job", etc etc