C#
Comprendre le protocole de Dofus
Okok ont attend sa avec impatience merci Bouh
On comprend mieux comment il a fait stump bouh2, un génie ce type^^
@BlueDream faudrait quand même mettre des règles pour éviter les ups de 6 ans…
On a pas énormément d'activité, on va éviter d'être trop exigeant, pour les messages inutiles, je suis d'accord.
navré, je n'avais pas fait attention à la date :-/
Bonjour, désolé de remonter le sujet, mais je commence a m'intéresser au protocole de D2 et j'ai deux trois petites questions.
je ne vais pas poser la question des 78 a la suite, j'ai compris que c'est une erreur de frappe.
Donc si je comprend bien, le packet est construit morceaux par morceaux, dans cette exemple Bonjour puis 123 ?
Petite question aussi, le Bonjour est en majuscule dans le code d'exemple non ?
donc si je comprend bien le truc, si je le fais en java, j'ai ceci:
String str = "Bonjour";
int n = 123;
ByteBuffer buffer = ByteBuffer.allocate(Integer.SIZE + str.length() + Integer.SIZE); // allocation (Taille de l'integer pour la taille de la chaine + taille chaine + taille integer pour 123)
buffer.order(ByteOrder.BIG_ENDIANT);
buffer.putInt(str.length()); // donc 0007
buffer.put(str.getBytes());
buffer.putInt(n);
System.out.println(Arrays.toString(byteBuffer.array()));
Bonjour, désolé de remonter le sujet, mais je commence a m'intéresser au protocole de D2 et j'ai deux trois petites questions.
je ne vais pas poser la question des 78 a la suite, j'ai compris que c'est une erreur de frappe.
Donc si je comprend bien, le packet est construit morceaux par morceaux, dans cette exemple Bonjour puis 123 ?
Petite question aussi, le Bonjour est en majuscule dans le code d'exemple non ?
donc si je comprend bien le truc, si je le fais en java, j'ai ceci:
String str = "Bonjour"; int n = 123; ByteBuffer buffer = ByteBuffer.allocate(Integer.SIZE + str.length() + Integer.SIZE); // allocation (Taille de l'integer pour la taille de la chaine + taille chaine + taille integer pour 123) buffer.order(ByteOrder.BIG_ENDIANT); buffer.putInt(str.length()); // donc 0007 buffer.put(str.getBytes()); buffer.putInt(n); System.out.println(Arrays.toString(byteBuffer.array()));
Tu pourras trouver une explication plus condenser par BlueDream et moi : https://github.com/OpenDofus/wiki/blob/master/pages/Protocole-reseau.md
Apres si c'est le header que tu veux inscrire c'est pas ça. ^^
Short pour l'id + byte pour le type de la taille + la taille du message + les infos du packet.
Si tu veux envoyer bonjour dans HeloConnectMessage tu dois faire : (short)(3 << 2 | 1) -> datas.Lenght -> datas
Bonjour à tous.
Tout d'abord merci Bouh2 pour cet excellent tutoriel ! Je pense que même plusieurs années après il est encore d'actualité (je me trompe?).
J'ai une petite question quant Bouh2 dis :
Attaquons maintenant la structure concrète d'un paquet dofus 2.0 :
[HEADER:[HI-HEADER:2 bytes (PacketId 6 bits + LengthType 2 bits)][LENGTH:LengthType (1/2/3) bytes]][MESSAGE:LENGTH bytes]
C'est-à-dire que l'id est en vérité encodée sur 8+6 bits (1 octet + 3 quarts) et le type de taille sur 2 bits (il peut donc contenir le nombre 0, 1, 2 ou 3)
Cela permet sans doute de raccourcir un peu la taille du header.
Si j'ai bien compris nous avons donc 14 bits disponible pour encoder l'id du packet et 2 bits pour encoder la taille ?
Ce qui signifierait si j'ai bien compris PacketId aurait donc comme taille 6/7/8/9/10/11/12 bits ?
Ah oui et pour finir ( si je suis HS ne me répondait pas à cette question ce n'est pas grave ^^)
À quoi servent ces types de fichier : d2o/d2i & d2p ?
En tout cas merci beaucoup pour vos tutoriels géniaux !
Cela m'apparaissait comme du charabia il y a quelques années maintenant que j'ai étudié l'informatique et que j'ai obtenue mon petit diplôme (BAC +2 mais ce n'est que le début :p). Je me sens prêt à plonger dans ce monde difficile, mais au combien merveilleux qu'est le développement de BOT :p
d2o = fichier générale du jeu, ils te donnent quelques infos non cruciale qui sont directement implanter dans le client, tu n'auras pas l'appareanceId des objets ou tu n'auras pas les stats exact des monstres.
d2i = les dictionnaire du jeu, dans le jeu chaque text a un Id en integer ou en string pour l'UI, tu trouveras tout les textes du jeu dans ces fichiers. (1 fichier par langue fr - en - de -jp - ...)
d2p = les fichiers qui contiennent les maps et les images du jeu. Tu y trouveras les icônes des items ou les tiles qui permettent de constituer les maps, mais tu a aussi les fichier map.d2p qui eux contiennent les informations relative a la map, le background, les cellules (toute les infos genre le tile de la cellule, si on peux marcher dessus, etc ...).
En faite le Header du packet seras différent selon la taille des datas envoyer dans le packet. Pour écrire ton packet voici comment ça ce passe pour un packet qui fait moins de 255 bits : Short (2 octet) + Byte + Tes datas
Et pour plus de 255 bits.? :/
Au dessus de la 2.41 alors car je ne l'est pas celle la :P
bonjour je veux savoir si ces protocoles restes valables
?
Oui c'est toujours les même paquets pour la réception.
Par contre pour les paquets que tu envoie au serveur, il y a une notion de _instance_id qui a été ajouté.
Je te redirige sur ce lien pour plus de détail : https://cadernis.com/d/491-tuto-bot-socket-les-fondamentaux
Oui c'est toujours les même paquets pour la réception.
Par contre pour les paquets que tu envoie au serveur, il y a une notion de _instance_id qui a été ajouté.
Je te redirige sur ce lien pour plus de détail : https://cadernis.com/d/491-tuto-bot-socket-les-fondamentaux
merci beaucoup pour ta repense
Yop j'ai du mal à comprendre le cas où lenBytes est 3. Il y a vraiment des messages qui font >60k octets ? J'ai un cas où mes 5 premiers octets sont [04 FF] [CC 00 05]. Je ne comprends pas ; cette taille est bien trop grande.
Quand lenBytes est 0, on fait quoi ? Il n'y a que le header, donc 2 bytes ? Ou il faut quand même compter quelque-chose en plus ?
Il n'y a pas l'id de l'expéditeur dans le message de mesage privé?
Un message peut être envoyé sur plusieurs paquets.