Autoit 2.3x Forgemagie en pixel (OCR, lecture chat, nouvelle interface)

Inscrit
26 Juin 2018
Messages
16
Reactions
0
#1
Bonjour à tous,

Je suis tout nouveau sur ce forum et débutant en bot.
Tellement débutant, qu'avant de débarquer sur ce forum, j'ignorais l'existence des "bot socket". En fait j'en avais vaguement entendu parlé, mais je comprends un peu mieux comment ça fonctionne grâce à vos tutos :)

Mon objectif est de faire un bot forgemage sur la version actuelle, donc sur l'interface de forgemagie actuelle.

J'ai des notions de programmation, et notamment en AutoIt.
Je pensais le coder en "pixel", car je n'ai strictement aucune notion de "socket". Et il me semble tout à fait réalisable.

Le point sensible du bot est selon moi le scan de l'interface non sélectionnable. Donc l'utilisation d'un OCR pour lire les valeurs de l'item, et les runes disponibles.

Après quelques tests avec Tesseract, un OCR en open-source, je suis assez satisfait du résultat. Le bot est capable de lire l'item.


Je m'apprête donc à me lancer dans la programmation du bot, mais je suis peut-être passé à côté d'un obstacle bien plus compliqué que l'OCR (Temps d'execution entre chaque rune, précision du scan, comment gérer les latences du serveur, etc...)
Je n'aimerais pas me faire bloquer par quelque chose d'insolvable en pixel dans la suite du projet, donc si vous avez des conseils à me donner n'hésitez pas.

Concrètement, savez-vous s'il est faisable de faire ce genre de bot en "pixel", ou est-ce que je dois forcément passer par du "socket" ?

Merci d'avance pour vos avis :)
 
Inscrit
16 Mars 2014
Messages
214
Reactions
30
#2
Si c'est juste un bot pour xp et up les métiers forgemagie en mode no brain bot pixel c'est largement jouable tant que ça reste du "spam" de rune après si c'est pour faire autre chose je pense que tu peux oublier
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#3
Non, c'est bel et bien un bot pour faire de beaux items.

Mes premiers test d'OCR sur des screenshot de forgemagie se sont très bien passé, ça me donne espoir dans cette méthode.
De plus, je peux croiser les résultats de l'OCR avec le texte de l'historique de forgemagie. S'il y a des dissonances entre les deux contrôles, je lance une alerte pour que l'utilisateur prenne la main. En espérant qu'il en fasse le moins possible pour être un maximum autonome.

La question que je me pose, c'est le temps que ça prendrait au programme pour faire un cycle complet de passage de rune. J'ai peur que le scan de l'item par l'OCR prenne un peu de temps (100ms par jet peut-être ?). Multiplié par le nombre de jet/ligne de l'item, et tout le reste du processus, je peux monter à >2000ms par cycle ce qui serait légèrement too much pour un bot.

L'utilisation d'un bot socket rendrait vraiment la tâche plus facile ?
 
Inscrit
20 Juin 2016
Messages
41
Reactions
2
#4
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#5
Des packets sont plus "faciles" à gérer à mon goût (et les données fiables), surtout que si laisser la fenêtre Dofus te dérange pas tu peux faire un MITM.

Si tu t'oriente là dessus tu auras surement besoin de https://cadernis.fr/index.php?threads/forgemagie-donnés-pour-débuter.2041/#post-22162 (mais bon laisse de côté ça pour l'instant).
Oui, si je m'oriente vraiment vers un MITM (Man In The Middle d'après ce que j'ai compris), j'aurais d'abord besoin de bien comprendre comment dialoguer avec le jeu.

L'approche pixel m'attirait pour son côté intuitif et visuel, mais je reconnais qu'il doit-être moins fiable. Et la fiabilité est ultra importante pour une application forgemagie.

A votre avis, il me faut combien de temps pour assimiler le MITM ?
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#6
J'ai un peu de mal à trouver des personnes prêtes à m'aider sur un bot pixel sur ce forum, je ne vous le cache pas :p

Néanmoins, de mon côté, j'ai continué de développer la fonction phare de ce bot forgemagie : Le scan de l'interface par un OCR.

Je suis confronté à deux principaux problèmes avec mon algorithme.
  1. La précision du scan
  2. Le temps d'exécution du scan
L'OCR fait encore quelques erreurs en scannant l'item. Il peut facilement confondre un "c" en "o". Cela complique un peu l'algo qui doit prendre en compte ce genre d'écart pour quand même retrouver la caractéristique en question.
Par exemple : Vltalité = Vitalité.
Il faut que je vérifie s'il ne fait pas d'erreur sur les nombres, car là, ça serait beaucoup plus gênant...

Le temps d'exécution est assez long. Très long même.
j'ai fait quelques tests sur un scan de 14 lignes (une page de forgemagie), et il met 5 secondes...
Cela comprends :
  1. Screenshot de la ligne
  2. Agrandissement de l'image x2 (pour l'OCR)
  3. Traitement de l'image par l'OCR
  4. Création d'un fichier result.txt
  5. Lecture du résultat
  6. Ecriture du résultat dans un autre fichier (pour cumuler les 14 lignes)

Alors soit, je suis face à un problème insolvable pour ce genre d'application, soit il existe un moyen d'optimiser sérieusement l'algorithme aussi bien en temps, qu'en précision...

kenny94
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#7
Je connais pas vraiment l'autoIt, peut-être que les problèmes de performance viennent de là.

Ça vaudrait sérieusement le coup de te pencher sur un autre langage pour faire ça. J'avais fait un bot FM en Python qui fonctionnait bien mais il y a quand même quelques truc qui sont complexes pour un bot pixel / computer vision. Par exemple certains items ont plus de 14 lignes de stats, et c'est typiquement les plus rentables à FM d'ailleurs.
Pour ton problème d'OCR, il y a Tesseract en Python qui fonctionne pas mal.
Tu pourrais aussi carrément faire ton propre OCR spécifique à Dofus et sa police avec des corrélations et tout, surtout pour les nombres puisque c'est vraiment critique pour ton application.
Sinon le vitalité/vltalité c'est pas vraiment gênant, c'est assez proche pour que tu codes un truc qui fasse le lien.
 
Inscrit
29 Avril 2019
Messages
2
Reactions
0
#8
'lu Kenny94 et Ugdha,

j'ai lu avec attention le forum.
Je pense qu'il est inutile de programmer un OCR pour cette tache.
L'historique des runes est suffisant pour programmer un bot autonome.
J'imagine qu'il faudrait rentrer une première fois les valeurs de l'item dans le programme, et pour la suite, ne se servir que de l'historique de forgemagie.
De cette manière on économise beaucoup de processus, a commencer par celui de la reconnaissance de caractère qui est longue et pas toujours précise.
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#9
C'est sûr que l'OCR est compliqué à implémenter correctement.
Seulement la lecture initiale des stats est obligatoire si on veut automatiser complètement le processus de FM.
Après en effet les deltas de stats provoqués par l'ajout de runes est un champ de texte qui peut être copié-collé, donc en effet pas besoin d'OCR pour ça. Après y'a peut-être moyen avec des commandes de chat de faire apparaître les jets d'un item un peu à la manière du %stats%, auquel cas on peut les copier-coller depuis le chat.
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#10
'lu Kenny94 et Ugdha,

j'ai lu avec attention le forum.
Je pense qu'il est inutile de programmer un OCR pour cette tache.
L'historique des runes est suffisant pour programmer un bot autonome.
J'imagine qu'il faudrait rentrer une première fois les valeurs de l'item dans le programme, et pour la suite, ne se servir que de l'historique de forgemagie.
De cette manière on économise beaucoup de processus, a commencer par celui de la reconnaissance de caractère qui est longue et pas toujours précise.
Hello,
En fait, ça a été ma première approche de passer uniquement par l'historique de forgemagie qui est bien du texte lui.
Il y a 2 gros problèmes avec cette méthode :
  1. C'est relativement long de rentrer intégralement les caractéristiques de l'item (jet, jet max, jet min. Il faut aussi saisir son inventaire de rune pour savoir où les chercher, et savoir combien on en a.
  2. C'est totalement instable. Les erreurs (et il y en a forcément) se cumulent pour finalement totalement désynchroniser le jet théorique du jet réel.
Depuis, je suis passé sur le bot socket pour info :p
 
Inscrit
29 Avril 2019
Messages
2
Reactions
0
#11
Hello,
En fait, ça a été ma première approche de passer uniquement par l'historique de forgemagie qui est bien du texte lui.
Il y a 2 gros problèmes avec cette méthode :
  1. C'est relativement long de rentrer intégralement les caractéristiques de l'item (jet, jet max, jet min. Il faut aussi saisir son inventaire de rune pour savoir où les chercher, et savoir combien on en a.
  2. C'est totalement instable. Les erreurs (et il y en a forcément) se cumulent pour finalement totalement désynchroniser le jet théorique du jet réel.
Depuis, je suis passé sur le bot socket pour info :p
oui je vois ! ton bot est fonctionnel ?
j'imagine qu'une fois que tout est programmé, il faudra randomiser les waiting time et les champs de hitbox pour sélectionner les runes, afin de ne pas se faire repérer ?
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#12
Bien qu'il était lent, il n'en était pas moins fonctionnel à l'époque. Mais l'interface a changé et je n'y ai pas retouché depuis.
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#13
Aussi, je cherche depuis un bon bout de temps sans trop de succès les lois de probabilité de la forgemagie.
Genre la proba de passage d'une rune en fonction de la rune, poids, objet, tout ça. Si quelqu'un a des ressources là dessus je suis hyper chaud.
Ça voudrait dire qu'on pourrait calculer le nombre de runes qu'il faudrait pour FM un objet à un jet particulier (avec un intervalle de confiance). Ça aurait vachement de valeur d'avoir un outil qui te dit "si tu fais ce FM, t'as 95% de chances d'être rentable".

Surtout si ton bot peut acheter les runes, faire le FM automatiquement et mettre en vente tout seul.
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#14
A ma connaissance, toutes ces formules de proba sont gérées côté serveur, et il n'est pas possible (sauf fuite d'info ?) de les récupérer.
C'est valable pour la forgemagie, mais pour les croisements de dragodindes aussi.
S'il existe certaines formules ou tendance sur internet, c'est à force de statistique sur des échantillons larges qui mènent à certaines conjectures.
Par exemple, un exo PA, PM ou PO a 1% de chance de passer en succès critique.
Ou bien, à partir de 200-250 vita, il faut utiliser des Ra Vi.

Je n'ai pas remis le nez dans la forgemagie depuis la mise à jour des runes de songe infini qui permettent de passer à coup sûr une rune. Est-ce qu'il est toujours rentable de faire de la forgemagie avec des runes "classiques" ?
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#15
Ah putain, je joue plus et j'étais même pas au courant du changement dans la MaJ des SI... J'ai checké rapidos de quoi il s'agissait et ça a pas l'air complètement pété, c'est juste des runes qui se mettent en fin de FM et qui verrouillent l'objet.

Comme ce qui coûte cher c'est justement d'arriver à cette fin de FM, ça n'enlèverait pas nécessairement de valeur à l'outil.

Il y a quelques infos officielles sur les probas de passage, notamment sur les seuils (15% min pour des non-exo, 1% min pour de l'exo). Il y a aussi beaucoup de hypothèses qui sont balancées un peu partout sans vrai consensus.

Ma démarche ça serait de formuler un plan vrai plan d'expériences avec une suite d'hypothèses qu'on testerait pour les valider ou les rejeter.
Pour tester les hypothèses, il n'y a pas trop d'autres solutions que d'aller dans le jeu et de faire des FM spécifiques jusqu'à avoir un échantillon représentatif.

Je pense pas qu'il y ait des milliards de lois de probas qui régissent la FM, donc si on a les bonnes hypothèses, elles devraient pouvoir se déterminer sans trop de problèmes, en tout cas si c'est des lois standard.

Et si on a ces loi on serait vraiment les rois du pétrole, ça serait monstrueux.
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#16
Honnêtement, pour avoir pas mal fouiné du côté de JoL, certaines personnes se sont vraiment determinés à trouver ces lois par étude statistique en collectant un maximum d'info avec plusieurs autres forgemages.
Cette étude dont tu parles a déjà été faite selon moi. Et les loi de proba qui on été conjecturés me semblent suffisemment proche de la réalité.
Quel intérêt aurait il de savoir que finalement c'est pas 1% de chance d'exo, mais 1.1% ou 0.9% ?
A partir du moment où on touche à de la petite série, il n'est plus vraiment utile d'être aussi précis sur les proba. Il faut au contraire avoir une bonne idée des tendances.
Celon moi, la grande valeur ajouté de l'outil serait d'appliquer très rigoureusement ces lois de proba, contrairement à un humain qui fini par fatiguer et faire des erreurs au bout de la Xième tentative d'exo.
Même si mon précédent projet en bot pixel n'était pas une grande réussite à cause de l'interface hasardeuse des pixels, l'algorithme n'en reste pas moins intéressant. Je pourrais te communiquer via mp ce que j'avais imaginé comme procédure pour la prise de décision du bot.
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#17
Je serais hyper intéressé par des liens vers les articles que tu as trouvé. Je n'ai pas trouvé de résultats satisfaisants perso.

Et le cas d'utilisation va au-delà de juste faire de la forgemagie. L'idée c'est de calculer le coût d'une FM avant même de la faire.

Si tu veux, le projet c'est :
- Avoir une base de données des prix de toutes les ressources et des items
- Avoir une base de donnée des ventes d'items pour savoir en gros combien de temps un item met à se vendre
- Avoir un algo qui puisse calculer le prix réel de craft d'un item en fonction de ce qu'il y a dans les HDV
- Avoir une estimation du coût de FM pour amener un item à un certain jet
- Avoir un algo qui combine tout ça pour choisir l'item le plus optimal en terme de rentabilité à craft + FM + vendre.
- Et finalement on automatise tout ça.

Là j'ai des bots qui scrapent les hdv, qui peuvent acheter et vendre, crafter des trucs, faire des FM... En gros tout sauf l'estimation du coût de FM qui est un maillon crucial de cette chaîne. Et pour l'avoir, il me faut les lois de proba du passage des rune pour simuler des FM.
 
Inscrit
26 Juin 2018
Messages
16
Reactions
0
#18
Projet très intéressant !

Effectivement, pour pouvoir estimer à peu près le coût de revient de ta FM, tu aura besoin de spécifier un minimum de lois de proba.
C'est un exercice intéressant que je n'ai jamais pensé à faire...
Je n'ai plus de lien sous la main pour t'aiguiller, mais je ne pense pas avoir déjà trouvé de discussion aussi fine sur ces lois de proba.
En général, l'exercice se cantonnais à déterminer le taux de passage d'un exo.

Après, tu peux aussi voir le problème à plus haut niveau et estimer combien coûte à peu près de remonter un item selon des critères tels que :
  • Le poid total du jet parfait ?
  • Le poid total du jet actuel ?
  • Pondérer le poids d'une caractéristique avec le prix de la rune associée ?
  • etc...
Là ça doit faire appel à ton expérience en tant que forgemage pour estimer ces coûts et affiner au fur et à mesure.

C'est super que tu ai déjà un bot HdV ! Je suis actuellement en train d'en développer un. Il peut scan les prix réels et moyens pour le moment. Je réfléchis à le faire acheter/vendre également.
Tu as également réussit à automatiser le scan des items craftables et leur recette ? Ca me donne de bonnes idées ça :)
 
Inscrit
22 Mars 2017
Messages
26
Reactions
12
#19
C'est bien ce que je pensais, y'a pas vraiment de thread qui va assez dans le détail. Et c'est malheureux qu'a chaque fois qu'il y en a un qui pose vraiment la question il se prenne une marée de "mAiS dE TouTe FaçOn c'ESt rAnDoM"...

Je scanne tous les items du jeu pour leur prix et leur stats s'il y en a, ça permet de voir comment évoluent les HDV, de calculer les turnover d'items, tout ça. C'est hyper important parce qu’hypothétiquement tu peux avoir un item qui parait super rentable à crafter, FM, et vendre, mais qu'en fait personne achète.

Donc en fait tu cherche pas à maximiser tes kamas, mais la vitesse à laquelle tu les accumule. Et ce que je code c'est en fait un algo d'optimisation qui cherche la solution qui maximise l'accumulation de kamas.

Pour les recettes des items, elles viennent des fichiers du jeu, donc elles sont connues et pas besoin de les scraper.
 
Haut Bas