Emulation, par ou commencer ?

Inscrit
15 Juin 2017
Messages
33
Reactions
0
#1
Bonjour à tous,
Je post ce message ici ne sachant pas vraiment à qui m'adresser et ou faire ma demande assez particulière ... Désolé d'avance si c'est au mauvais endroit...

Je "débute" dans l'émulation de serveur d*fus, après avoir éplucher un grand nombre de sujet a droite a gauche sur Cadernis et Doz*nofelite ( qui au passage on une communauté des plus... Étrange si on peut appeler ça une communauté! ), j'ai eu l'occasion de bidouiller un peu sur les sources d'un émulateur que j'ai trouvé ( s*ump 2.10 ), etc etc.

Maintenant, j'aimerais vraiment attaquer, sérieusement, arrêter de faire du bricolage, et commencer a réellement apprendre a créer ( et non pas shluuuuuuuuuurp le travail d'autrui sans chercher a comprendre son fonctionnement ... ) outils divers ( créateur d'item?, de sorts?, de monstre? bref tous ceci ), pour arriver a créer quelque chose d’opérationnel afin de faire tourner correctement le jeu sur un serveur.

J'ai des connaissance en java, c#, et sql.

Ma question, au final c'est : Par ou commencer? Quel ligne directive suivre? Existe t'il de vrai tuto pour apprendre de A à Z l'émulation d*fus ? ( en passant si possible par toute les lettres de l’alphabet... )

Bref, j'ai soif de connaissance sur l'émulation, je ne demande qu'a apprendre!

Restant dispo pour toute question ou précision, merci d'avance! :)
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#2
si tu sais déjà comment aligner deux lignes de codes et que tu les comprends c'est un bon début.
maintenant si tu veux en savoir plus sur le fonctionnement de Dofus je te conseille d'éplucher de DofusInvoker, il a pleins d'informations utiles qui pourront t'aider.
Pour pouvoir découvrir ses secrets tu peux utiliser des logiciels comme JPEX qui pourront te montrer plus ou moins le code source du jeu.
 
Inscrit
15 Juin 2017
Messages
33
Reactions
0
#3
En effet, je pense être capable d'aligner deux ( allé, disons même trois! ) lignes de codes en les comprenants! :)

D'accord pour le dofusInvoker, je vais aller voir ça de plus prêt !
Merci du conseil!
 
Inscrit
25 Novembre 2015
Messages
169
Reactions
20
#4
Tu peux éplucher le DofusInvoker comme l'a souligné Fallen, mais tu ne devrai pas t'inspirer du code et le "traduire" dans ton langage. Tu devrais donc éplucher le DofusInvoker afin de comprendre le fonctionnement du jeu et essayer de reproduire toi même (à partir de rien) son fonctionnement. D'autant plus qu'un émulateur doit être scalable, rapide, et modulaire.
En effet, les sources du jeu sont les sources d'un client, pas d'un serveur, et la programmation côté serveur nécessite de prendre en compte pas mal d'aspect différents de la programmation pour faire quelques chose d'utilisable en production (si tu veux pouvoir tenir une charge de joueur conséquente sans problème du moins).
 
Inscrit
15 Juin 2017
Messages
33
Reactions
0
#5
@Nameless en effet j'ai commencé à regarder le dofusInvoker, mais y'a des éléments qui me semble assez flou, alors où j'ai mal cherché, ou alors il ne contient pas vraiment de code ?
Les seuls codes que j'ai trouvé dedans sont les fichiers as qui ne contiennent qu'une liste de méthode sans vraiment de code ( ça ressemblait à des getter / setter )
Je suppose que j'ai du mal cherché, puisqu'il est censé avoir quelques part une sorte de Main nan?

Du coup j'ai aussi commencé à analyser des paquets entrant et sortant avec wpe sur un serveur local. Avec les tutos du site, je pense commencer à comprendre comment communiquent client et serveur ... :)
 
Inscrit
14 Juin 2017
Messages
23
Reactions
0
#6
Si t'as un doute sur le code source que tu as extrait, je te conseille de directement télécharger ça : https://cadernis.fr/index.php?threads/2-41-1-120116-1-mise-à-jour-majeure.1932/
ça contient le code source du client décompilé. (Tous les fichiers .as comme tu dis).
Tu dois avant tout te mettre en tête que "coder un serveur privé D*fus" n'est aucunement différent de "coder un serveur de jeu". Il y a des inévitables comme la gestion de multiples connexions simultanées et autres.
Du coup, tu peux te baser sur n'importe quel cours trouvable sur internet pour apprendre à créer un serveur de jeu vidéo.
La différence va surtout être que, dans ce cas précis, le client existe déjà et tu dois faire en sorte qu'il fonctionne avec ton serveur sans jamais le modifier. C'est là qu'il devient intéressant d'avoir son code source parce-que tu peux tout analyser pour savoir comment il se comporte et "deviner" comment doit se comporter le serveur en retour.
 
Inscrit
15 Juin 2017
Messages
33
Reactions
0
#7
@Telokis merci pour le lien, je vais regarder ça de plus prêt !
Et sinon en effet faut que j'me mette dans la tête que je dois seulement "comprendre" et non chercher à modifier le client pour savoir comment ça fonctionne...

Et arrêtez moi si j'me trompe, mais en fait il n'y a aucun code, calcul etc exécuté par le client!
Le client se contente d'envoyer les infos au serveur, qui lui fait les calculs, avec toutes les données etc, et renvoie au client les informations qu'il doit afficher!

En tous cas merci à tous pour vos retours qui me donnent des pistes à suivre pour commencer, ça fait plaisir ! :D
 
Dernière édition:

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#8
Exactement, par exemple :
- Tu vas cliquer sur une cellule pour te déplacer, le client va simplement envoyer l'id de la cellule au serveur dans un paquet nommé GameMapMovementRequestMessage (Si mes souvenirs sont exacts).

- Le serveur va donc calculer tout le chemin, de la cellule actuelle du joueur à la cellule de destination (pathfinding), et renvoyer le chemin complet au client dans le paquet GameMapMovementConfirmMessage. Et va envoyer à tous les clients présents sur la map un paquet disant que le personnage du client va se déplacer sur X chemin.

- Le client à la réception du GameMapMovementConfirmMessage va tout simplement appeler son moteur graphique pour faire déplacer le personnage. (Mais ça, c'est pas notre problème).

Donc le rôle de l'émulateur sera de :
- Vérifier que la cellule est bien une cellule praticable.
- Vérifier que la cellule de destination n'est pas celle de départ (Sisi, c'est possible si le joueur modifie son paquet)
- Calculer le chemin.
- Mettre à jour la position du joueur.
- Dire à tous les clients sur la map que le joueur bouge.

Voilà un exemple concret :)
 
Inscrit
15 Juin 2017
Messages
33
Reactions
0
#9
J'avais donc vue juste! :D
Merci pour l'exemple, c'est niquel pour voir clairement qu'es qu'il ce passe!
 
Haut Bas