Python Présentation d'un bot atypique

Inscrit
27 Septembre 2016
Messages
3
Reactions
3
#21
- La partie détection de map : j'ai la position de la map en haut à gauche de l'écran. Mais Tesseract galère sur certaines maps (et ça me met en rogne, pardonnez l'expression). Avec ton idée de copier la pos dans le presse papier, je me suis dit… Pourquoi pas demander à mon personnage de me donner lui-même sa pos: %pos% dans le chat ? Sinon, j'ai pensé à train avec du ML mais ça me semble beaucoup de temps pour pas grand chose.
Passé la partie présentation des problèmes que l'on peut rencontrer pour son algorithme de CaT.
Personnellement, pour récupérer la position de mon personnage, je déplaçais mon curseur au milieu de ma minimap et je faisais de la reconnaissance d'image pour récupérer les coordonnées (ce qui m'évite ainsi d'écrire %pos% dans le chat à chaque fois, (j'avais eu la même idée à la base :D)

- Je n'ai pas compris la partie: "". Je n'ai pas compris ce que sont ces /clear et /travel. Peut-être ai-je loupé quelque chose. N'hésitez pas à me dire que oui, si c'est le cas (mais gentiment, hein?!).
Pour la partie /travel et /clear, la première est une commande à écrire dans le chat sous la forme "/travel -14 12" et qui lancera le voyage automatique vers cette carte (si tu as une monture autoguidée) :)
La commande /clear permet juste de vider la fenêtre de chat
De quoi régler ton pb de carte difficile d'accès :)


Pour la récupération d'indices, moi je me suis basé sur plusieurs sites, l'un où j'ai récupérer tous les indices dans le code source HTML, que j'ai stocké en local, et un autre site où j'utilise uniquement son API publique...
 
Inscrit
6 Decembre 2020
Messages
4
Reactions
0
#22
Merci Ayyy pour tes réponses.

J'ai compris à présent pour les commandes /clear et /travel. Merci, et ça me donne des idées. En plus, je ne savais pas que les montures autoguidée se commandaient ainsi.

De quoi régler ton pb de carte difficile d'accès
Je ne comprends pas en quoi ça m'aide à accéder aux maps difficiles d'accès (si tu parles des maps comme le temps Sram). :/
Ah si! Il faudrait que j'achète une monture autoguidée, non?

Personnellement, pour récupérer la position de mon personnage, je déplaçais mon curseur au milieu de ma minimap et je faisais de la reconnaissance d'image pour récupérer les coordonnées.
J'imagine que tu désactivais tous les symboles sur les cartes, non? (sinon les HDV et tavernes gênent dans les villes) Il faut alors juste trouver la pos qui apparait en blanc sur noir et c'est beaucoup plus facile pour Tesseract que la valeur de map en haut à gauche, je me trompe? (Ah moins que tu ne parles pas de récupérer les coordonnées avec du ML (comme Tesseract), mais autre chose, et dans ce cas là, je ne vois pas).

Pour la récupération d'indices, moi je me suis basé sur plusieurs sites, l'un où j'ai récupérer tous les indices dans le code source HTML, que j'ai stocké en local, et un autre site où j'utilise uniquement son API publique...
Si je comprends, tu utilisais le site en même temps que ton personnage avançait IG. Et c'est ce que je fais aussi. Je n'ai que la liste de tous les noms des indices possibles en local. Hors, ce que dis valchimiiste, c'est qu'il a TOUT téléchargé en local. Donc il n'a pas besoin de récupérer les déplacements à effectuer pour avancer dans sa CaT sur un site en même temps que son personnage avance parce que les déplacements sont en local aussi. Ca doit être possible, mais j'ai pas d'idée génie pour le faire.

Bisous :*
 
Inscrit
1 Juin 2020
Messages
43
Reactions
23
#23
Que pensez-vous de demander à mon personnage sa pos dans le chat? (%pos%) Je trouverais personnellement le comportement clairement suspicieux si je voyais cela. Je fais déjà de la modification d'image (OpenCV) pour ne pas demander à Tesseract de deviner des choses trop compliquées, mais ça ne fonctionne pas à tous les coups. En sniffant les données, cela pourrait marcher plus facilement?
C'est hilarant de lire ça. Comme quoi les memes idées viennent a tout le monde haha. A une époque je faisais effectivement ça. Je %pos% dans le chat et je le faisais copiercoller la position après avoir /clear le chat. Comme ça il sait ou il est précisément. Cependant je te conseille vraiment très fortement de tyryhard l'interprétation de paquets. Tu en tirereas bien plus d'efficacité. Par "peur" au début on se lance pas mais depuis que je sais interpréter des paquets et que j'ai codé un truc qui permet somehow de lire des paquets, tu obtiens tout mieux, et plus vite. C'est tout benef. Avec les paquets tu peux track ta position en permanence , et c'est bien mieux .

J'ai aimé la partie de stockage de donnée en local (cf. valchimiiste). J'ai essayé de tout stocker, mais je n'ai pas (encore) trouvé comment. Je pensais tout stocker dans un nested dictionary et cela dans un Json (pourquoi? je ne sais pas…). Le format du fichier est-il important?
Je stocke tout en txt et ça va INSANEMENT vite. Exemple simple : ma base de données d'indices fait a peu pres 38 000 lignes. Chaque ligne est un tuple avec ( "nomIndice", x, y). Il faut au programme < 1s pour tout charger. L'extension n'a ( pour moi ) aucune importance si tu n'utilises pas de lib qui bosse avec des fichiers spécifiques.


Pour la partie détection du perso et du monstre grâce aux 'pixels discriminants de mon perso' (cf. valchimiiste). Je comprend l'idée, valchimiiste. Mais je me pose la question des outils… Est-ce que c'est une méthode à la 'bourrin'? Si tu as le temps, et l'envi de poster un article qui t'as donné l'idée? Ou une aide? Un indice? Pour l'anecdote, j'ai longtemps cherché à trouvé une méthode me permettant de détecter un objet partiellement caché, et ce jusqu'à utiliser du ML (j'adore ça, le ML). Mais manque de datas (I guess), mes apprentissages ne marchaient pas aussi bien que je le souhaitais.
Alors. Je peux essayer de détailler un peu. En gros ce que j'ai fais, c'est que j'ai d'abord manuellement screenshot, dans un combat, en mode tactique, toutes les directions de mon personnage et toutes les directions de l'ennemi. J'ai donc eu 8 fichiers image. 4 de l'ennemi et 4 du mien. Ensuite j'ai screenshot juste une partie du terrain en prenant bien soin de faire en sorte d'y voir des obstacles, des endroits vides qui puissent servir de témoin.

Ensuite j'ai fais un soft qui met dans un set tous les pixels de chacune des images. Ca évite d'avoir plusieurs fois la meme couleur de pixels.

Je me retrouve donc avec 3 Set() de tous les différents pixels qui composent mon perso, l'ennemi, et des cases vides. Sauf que comme j'ai pas fais de découpage des persos ou de l'ennemi, j'ai aussi dans leurs sets, les pixels des cases sur lesquels ils sont posés ou de l'environnement.

Arrive donc la dernière partie ou j'élimine des sets Perso et Ennemi, tous les pixels en commun avec le set de pixel témoin ou j'avais screenshot un endroit vide du terrain. J'obtiens donc 2 sets de pixels dont les pixels sont caractéristiques et spécifiques, du perso et de l'ennemi. Ensuite en combat, je fais une analyse de 40x40 sur chaque case du terrain et je compte les pixels en commun avec l'un ou l'autre , perso ou ennemi. A la fin de la boucle, l'endroit qui a le plus de pixels communs avec le pixelSet du perso est ...la case ou est mon perso et pareil pour l'ennemi ;) .. En espérant que ce soit clair miantenant :)


". Je n'ai pas compris ce que sont ces /clear et /travel. Peut-être ai-je loupé quelque chose. N'hésitez pas à me dire que oui, si c'est le cas (mais gentiment, hein?!).
En gros j'utilisais la dd autopilotée. "/travel 2 3 " permet par exemple de faire un voyage autopilot vers (2,3). Je screenshotais le chat en boucle a la recherche du "Vous etes arrivé a destination". Donc je "/clear" pour clean le chat des messages précédents, puis je "/travel x y" . Quand je suis arrivé il analyse le "Vous etes arrivé a destination" et sais donc qu'on est arrivé. A l'époque .. avec les paquets tout ça est devenu obstolète..

, ce que tu veux dire par "cutoffs de détection". J'imagine que c'est en rapport avec la détection par Computer Vision. Une précision?
En gros ca c'est a "tatons". j'ai codé une fonction IsImgOnScreen() qui renvoie le % de vraissemblance que ce que je cherche soit présent. Mais quand la chose est effectivement la on n'est pas a 100%.. Il renvoie 94 ou 96 en fonction de la qualité du découpage et du screenshot. Choisir les bons cutoffs c'est faire en sorte que cette fonction ne me dise pas que l'image est la alors que non, ou qu'elle me dise que l'image n'est pas la alors que oui . :)

Pour les indices, j'ai juste codé un scraper ( qui a du bouclé jcrois pendant 2-3h au total ) qui fait en boucle des requetes sur toutes les maps, et toutes les directions possibles, avec un petit timeout, et qui stockait ça dans un set() ( pour éviter les redondances ) et ensuite jlai fais l'écrire dans un fichier texte. L'avantage colossal d'avoir sa propre BDD c'est de pouvoir ajouter les indices qui manquent par exemple ;)
 
Dernière édition:
Inscrit
6 Decembre 2020
Messages
4
Reactions
0
#24
Merci valchimiiste pour ces précisions!

1) Effectivement, j'ai peur de me lancer dans la lecture de paquets. Et je sais que ça doit être génial, mais je veux finir de coder "correctement" (only Computer Vision) ce que je fais pour l'instant avant de "changer" de registre (Je veux voir si je peux arriver au bout de ce que je veux faire sans lire de paquets pour l'instant). Mais une fois cela fait, je compte bien m'y lancer, et utiliser ce forum pour ça. J'ai regardé déjà quelques trucs, mais je ne comprends que très peu de ce que je lis, et j'ai peur de recevoir des réponses du style: "T'as pas assez bien regardé partout sur internet". Et en plus, ça serait le cas. x) Je préfère donc attendre…

2) J'ai opté pour un dict pour éviter les redondances de clé. Je vais essayer de tout récupérer bientôt.

3) Je pense avoir bien compris ton idée et explication! Merchii!

4) monture autopilotée, Ayyy m'a donné la réponse juste avant… Je n'y avais pas pensé… puisque je n'en ai pas et n'en ai jamais utilisé une. Sinon, sans ça, je pense qu'en sauvegardant toutes les maps impraticables, on doit pouvoir utiliser A* pour faire la même chose que la monture autopilotée… Mais ça demande du temps pour récupérer les datas. Même chose pour les paquets, je n'en suis pas encore là :/ (je demanderai un cours privé quand je me sentirai prêt x) ).

5) Alors, moi je fais avec du Computer Vision "basique" et ça marche bien sans modifier l'image de la map (mais ma fenêtre est pas en 800x'je sais pas quoi mais petit'). Je fais bouger la souris dessus pour vérifier que ce soit bien une taupe (je détecte le nom de la taupe ou non). Seul problème : quand elle est trop proche des côtés de la map, ça marche pas/pas bien. Mais ça doit pouvoir s'améliorer…

6) J'avais pas imaginé le fait de stocker toutes les datas (enfin si, mais pas pensé que ça serait possible et si rapide). C'est chose faite grâce à toi et j'ai bien compris les avantages que cela représente ;)

Bisous :*
 
Haut Bas