Java ActionScript3 to Java

Inscrit
7 Avril 2018
Messages
3
J'aime
0
#1
Je cherche depuis 2 jours sans trouver comment faire pour récupérer tous les messages ect... et en faire des classes java... Merci d'avance
 
Inscrit
16 Mars 2014
Messages
192
J'aime
59
#2
1 - Tu télécharges JPEXS
2 - Tu ouvres DofusInvoker.swf avec tu vas dans scripts/com/ankamagames/dofus/network/messages
3 - Tu exportes le dossier
Après le plus chiant c'est lire tous les fichiers AS3, récupérer la partie qui t’intéresse et re-format le tout pour correspondre au format d'une class java par exemple
 
Inscrit
26 Mars 2011
Messages
21
J'aime
4
#3
Tu peux utiliser les expressions reguliere pour automatiser la conversion, ou bien utiliser des tools existants (d2json par exemple)
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#6
Pourquoi tu ne codes pas un ProtocolBuilder ?
Que veux tu dire exactement par ProtocolBuilder ?

Dans mon programme, j'associe en gros les IDs des messages D2 a des classes Java qui représentent les messages.
Mais il faut bien que je sache comment les dé-sérialisés (ou les sérialisés dans le cadre de l'envoie).

Du coup j'ai une classes Java par messages avec sa méthode permettant de le dé-sérialiser qui utilise des méthodes comme readVarInt, readUTF que j'ai porté en Java à partir des sources D2.

Mais tu es bien obligé de porter ces méthodes de dé-sérialisation (et de sérialisation) des messages dans le langage de ton bot.
Et également les méthodes qui seront utilisés pour dé-sérialiser et sérialiser tes messages.

C'est ce qui peut être laborieux quand on développe un bot et c'est ce que cherche a automatiser Lukyrouge3 et que moi je fais manuellement.
 
Inscrit
2 Juin 2018
Messages
15
J'aime
2
#7
Que veux tu dire exactement par ProtocolBuilder ?

Dans mon programme, j'associe en gros les IDs des messages D2 a des classes Java qui représentent les messages.
Mais il faut bien que je sache comment les dé-sérialisés (ou les sérialisés dans le cadre de l'envoie).

Du coup j'ai une classes Java par messages avec sa méthode permettant de le dé-sérialiser qui utilise des méthodes comme readVarInt, readUTF que j'ai porté en Java à partir des sources D2.

Mais tu es bien obligé de porter ces méthodes de dé-sérialisation (et de sérialisation) des messages dans le langage de ton bot.
Et également les méthodes qui seront utilisés pour dé-sérialiser et sérialiser tes messages.

C'est ce qui peut être laborieux quand on développe un bot et c'est ce que cherche a automatiser Lukyrouge3 et que moi je fais manuellement.
Un protocole builder, te permettra d'automatiser les taches que tu fais actuellement et qui sont répétitives alors qu'en informatique il faut être feignant d’après le principe DRY ;). en gros, ce que j'appelle ProtocolBuilder c'est le petit programme qui va te traduire les scripts de Dofus (AS) en Java. Voici des protocoles builder pour que tu saisisses un petit peu l'idée :D :

https://github.com/yamidevs/ProtocolBuilder-2.3.7
https://github.com/thenameless314159/DofusProtocolBuilder/tree/master
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#8
Du coup je n'en code pas pour plusieurs raisons :
  • Faire un outil qui traduit proprement de l'AS en Java me prendrait du temps (Plus je pense qu'a traduire les messages dont j'ai besoins au fur et à mesure que mon projet évolue). C'est vraiment outil à part, et c'est un bot socket que j'ai envie de développer. ^^
  • Il y a certains morceaux de code qui proviennent de JPEXS que je préfère ré-écrire pour que ça colle parfaitement aux conventions de code de mon projet et pour améliorer l'algorithme utilisé en général (J'aimerais éviter les while (true) avec des break dedans par exemple ^^).
  • Je ne suis pas fan des outils qui te génère du code automatiquement en général ...
 
Inscrit
16 Mars 2014
Messages
192
J'aime
59
#9
Du coup je n'en code pas pour plusieurs raisons :
  • Faire un outil qui traduit proprement de l'AS en Java me prendrait du temps (Plus je pense qu'a traduire les messages dont j'ai besoins au fur et à mesure que mon projet évolue). C'est vraiment outil à part, et c'est un bot socket que j'ai envie de développer. ^^
  • Il y a certains morceaux de code qui proviennent de JPEXS que je préfère ré-écrire pour que ça colle parfaitement aux conventions de code de mon projet et pour améliorer l'algorithme utilisé en général (J'aimerais éviter les while (true) avec des break dedans par exemple ^^).
  • Je ne suis pas fan des outils qui te génère du code automatiquement en général ...
- ça te prendra du temps certes mais t'en feras économiser beaucoup plus au final
- comme je dis plus haut dans mon premier message tu récupères les morceaux de code AS3 dont tu as besoin (variables, types des variables, noms etc...) et tu ré-écrit le tout en suivant tes conventions, format pour que le tout colle à ton projet ...
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#10
- ça te prendra du temps certes mais t'en feras économiser beaucoup plus au final
- comme je dis plus haut dans mon premier message tu récupères les morceaux de code AS3 dont tu as besoin (variables, types des variables, noms etc...) et tu ré-écrit le tout en suivant tes conventions, format pour que le tout colle à ton projet ...
Actuellement c'est ce que je fais, je récupère bien les morceaux de code AS3 dont j'ai besoins pour les ré-écrire.
Ça ne me prend pas énormément de temps, et je n'ai pour le moment pas besoins d'un outil qui le fais a ma place (c'est pratiquement du copié/collé avec un peu de formatage).

Étant donné que je devrais en plus repasser derrière le code généré pour qu'il respecte les conventions de code de mon projet , je ne pense pas qu'un tel outil me fasse gagner du temps mais plus en perdre ...
 
Inscrit
2 Juin 2018
Messages
15
J'aime
2
#11
Actuellement c'est ce que je fais, je récupère bien les morceaux de code AS3 dont j'ai besoins pour les ré-écrire.
Ça ne me prend pas énormément de temps, et je n'ai pour le moment pas besoins d'un outil qui le fais a ma place (c'est pratiquement du copié/collé avec un peu de formatage).

Étant donné que je devrais en plus repasser derrière le code généré pour qu'il respecte les conventions de code de mon projet , je ne pense pas qu'un tel outil me fasse gagner du temps mais plus en perdre ...
Si tu le fais convenablement il n'y aura aucun souci, après tout dépend de l'ampleur de ton projet dans le sens où si ton bot à terme manipulera énormément de messages différents. Par exemple pour un émulateur tu ne feras jamais la traduction à la main.
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#12
Si tu le fais convenablement il n'y aura aucun souci, après tout dépend de l'ampleur de ton projet dans le sens où si ton bot à terme manipulera énormément de messages différents. Par exemple pour un émulateur tu ne feras jamais la traduction à la main.
Si je fais l'outil convenablement, il va se contenter de traduire les messages AS vers Java, son but n'est pas de renommer des variables, mettre de la javadoc, des commentaires en général ... Donc je vais forcement devoir repasser dessus (ce qui va me coûter du temps).

Je préfère passer une fois dessus pour de bon. ^^

Après ça dépend effectivement du projet et du développeur, moi j'aime bien maîtriser parfaitement le code que je produis et je n'aime pas vraiment ce type d'outil.

Une fois que l'outil est fais et partagé, je ne doute pas que ça puisse aider des gens qui sont adeptes de ces outils, mais c'est pas vraiment un outil qui m'amuserait a développer. ^^
 
Dernière édition:
Inscrit
5 Mai 2012
Messages
368
J'aime
47
#13
Imagine demain Ankama décide de changer l'ordre de lecture/écriture de chaque message et de changer les IDs.
Tu va tout refaire à la main ?

Et puis crois moi, même sans ca, l'outils est plus rapide a créer que tout faire à la main si c'est un bot full socket.
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#14
Imagine demain Ankama décide de changer l'ordre de lecture/écriture de chaque message et de changer les IDs.
Tu va tout refaire à la main ?

Et puis crois moi, même sans ca, l'outils est plus rapide a créer que tout faire à la main si c'est un bot full socket.
De toute façon pour moi il faudra repasser derrière cet outil pour corriger certaines choses si tu veux un code propre.
Du coup oui si tu te contente de générer un code sans documentation et avec des algorithmes étrange et illisible que tu as récupéré de JPEXS et que tu laisse ça dans ton projet oui tu vas gagner du temps. Mais moi je préfère éviter.

L'idéal pour moi, se serait d'avoir un repo git régulièrement mis à jour qui contient tout ces messages en Java et qui pourrait être utilisé comme une lib.
Ce projet pourrait être initialisé avec un programme qui convertis l'AS vers du Java et avec les gestes manuels pour rendre le tout propre.

Encore une fois, c'est un projet a part, ça demande du temps, et je n'ai pas pour le moment la motivation pour faire ce type de projet.
 
Dernière édition:
Inscrit
16 Mars 2014
Messages
192
J'aime
59
#15
De toute façon pour moi il faudra repasser derrière cet outil pour corriger certaines choses si tu veux un code propre.
Du coup oui si tu te contente de générer un code sans documentation et avec des algorithmes étrange et illisible que tu as récupéré de JPEXS et que tu laisse ça dans ton projet oui tu vas gagner du temps. Mais moi je préfère éviter.
Ta l'air d'avoir du mal à comprendre que le code c'est toi va le "générer" et par conséquent rien ne sera "étrange" et encore moins "illisible", ou pour le dire plus clairement c'est comme si tu prenais une class java d'un message que tu a traduis à la main et qu'il va te servir de base, "template" pour tout les autres messages AS3 non traduit et du coup tout les messages suivront le même format que ta class java fait "main"
 
Inscrit
3 Janvier 2017
Messages
32
J'aime
17
#17
Ta l'air d'avoir du mal à comprendre que le code c'est toi va le "générer" et par conséquent rien ne sera "étrange" et encore moins "illisible", ou pour le dire plus clairement c'est comme si tu prenais une class java d'un message que tu a traduis à la main et qu'il va te servir de base, "template" pour tout les autres messages AS3 non traduit et du coup tout les messages suivront le même format que ta class java fait "main"
Je pense que je vais arrêter de répondre sur ce sujet ...

Dans mes messages, je n'ai pratiquement pas de code étant donné qu'ils héritent d'une classe commune qui gère le plus gros. (Le format de mes classes est donc gérer dans cette classe mère)
J'ai juste des méthode de sérialisation et dé-sérialisation que je redéfinis dans mes classe filles (les messages a proprement parlé).

Ces méthodes sont très rapide a convertir (au final ça ne me dérange pas plus que ça a faire, au moins je comprend bien comment sont sérialisés les messages), et je n'éprouve pas le besoins pour le moment d'avoir un outil qui me traduis des messages automatiquement.
Par contre un outil qui convertis de l'AS en Java me paraît plus long a implémenter et je suis pratiquement sur que je ne rentabiliserai pas le temps que j'ai investi dans un tel outil.

Par exemple sur le lien github que vous m'avez envoyé, il y a un projet qui a l'aire d'avoir été généré avec un outil de traduction automatique dont vous m'avez parlé.
Je vois qu'il y a pas mal de variables avec des noms de ce style : param1, param2, param3, _loc1_, _loc2_ ...

Il n'y a aucune documentation sur les méthodes et les classes non plus.

Je ne doute pas que ça fonctionne, mais étant très a cheval sur la qualité de code, je ne pourrai pas m'empêcher de modifier tout ça. ^^

EDIT : Je ne dénigre pas le travail qui a été fais sur le repo en question, l'outil a parfaitement convertis le code AS vers C# comme il fallait le faire, simplement le résultat ne me conviendrait pas.
Si vous avez un autre repo contenant le résultat de ce genre d'outil, mais avec des noms de variables correctement nommés et avec de la documentation cohérente, je suis éventuellement intéressé de savoir comment ça fonctionne et je vous invite a me le transmettre par MP. ;)
 
Dernière édition:

tazman59

Rédacteur
Inscrit
20 Decembre 2012
Messages
120
J'aime
36
#18
Pour les variables, en fait tu n'as pas le choix. Le client est un minimum offusqué ce qui fait que tu n'as pas accès au nom des variables (Sauf dans le client BETA). Donc les _loc_1, param1 c'est normal. Tu dois normalement avoir les même noms (à moins que tu utilises le client BETA).

Crois en mon expérience, le ProtocolBuilder est un outil essentiel qui fait gagner des heures de boulot inutile et rébarbatif !

Rien ne t'empêche de monter un ProtocolBuilder qui fonctionne exactement comme tu le souhaites, c'est à dire de retranscrire les variables et les méthodes Serialize / Deserialize et de peaufiner le reste à la main.

A toi de décider, n'oublie pas que le développeur est fainéant mais très rusé ;)
A+
 
Dernière édition:
Haut Bas