Bonjour alors j'ai décidé de vous faire un vrai gros joli tuto qui vous prend par la main de " Autoit ? C'est quoi ça ?" à " Voila mon premier bot :)"
on commence par les bases. ( Je me base sur mon expérience personnelle et mon propre parcours)
donc :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
de ce tutoriel très bien fait vous allez faire :
- toute la grande partie 1 ( variable , instructions conditionnelles, boucles etc)
vous devez réussir le tp du jeu du plus ou moins.
puis dans la partie de la gui vous allez faire :
- les gui jusqu'à la fin de koda ( franchement vous pouvez vous permettre de survoler un peu les premiers chapitres car koda fais tout pour vous et vous n'avez pas réellement à apprendre la syntaxe. Vous y reviendrez plus tard si le besoin s'en fait ressentir)
- [facultatif] : "un script propre et lisible" c'est pas obligatoire mais intéressant et utile à lire. Mais comme les utilisez "tidy autoit source " dans scite ( partie tool) et cela ce fait tout seul. mais c'est pratique pour comprendre les codes des autres etc. Bref utile mais pas obligatoire
à présent vous pouvez quitter ce tutoriel car le tp sur la cryptographie est inutile et trop compliqué ( oui je ne sais pas ce qu'il fait là )
à présent on quitte le tutoriel. On passe avec moi
donc on va apprendre à faire des bots simples sur des jeux comme dofus ou en navigateur.
voila les fonctions qui vous seront utiles :
donc les bases :
un bot c'est bien que la fenêtre chez l'utilisateur est toujours au même endroit
donc un coup de
et le tour est joué ( j'aime bien 800 600 , c'est petit mais ça a l'avantage de s'adapter à pas mal de résolutions)
à présent on va faire ça sous forme de "que souhaite tu faire ?"
index:
I recherche à l'écran
1: rechercher et cliquer sur un élément
2: verification que un élément change ou pas
II mouvements et simulations diverses
1: toutes les touches du clavier like a boss à la vitesse de l'éclair!
2 : bot combat
3: utiliser les fichiers ini pour ajouter les trajets à votre bot
I : recherche à l'écran
1: rechercher et cliquer sur un élément :
La base de tout les bots pixels !
on commence par gérer notre fenêtre correctement :
"oh mais il détecte pas/ou presque pas!"
c'est normal : configurée ainsi la fonction va rechercher l'exact pixel à l'écran or il suffit que le pixel varie un tout petit peu pour que cela ne soit plus correct
il faut donc faire ainsi :
pour mes bots sur wakfu j'utilise 1.5
"bon ok je l'ai trouvé mon pixel mais j'en fait quoi ?"
alors on affecte une variable au résultat :
respectivement : les pos x et y de l'élément trouvé.
on va donc ( enfin) cliquer dessus :
2 solutions :
vous l'avez compris : une jolie erreur qui fait planter tout le programme.
comment faire donc ?
c'est là qu'entre "isarray". Démonstration :
et voila :) j'utilise ce genre de code dans les bots et cela ne m'à presque jamais fait défaut :D
2: vérification qu'un élément y est ou pas :
pour cela il existe pixelchecksum mais je ne l'ai jamais aimé car je le trouve trop peu précis et pas maniable ( je ne l'ai pas énormément creusé non plus, libre à vous de l'utiliser si vous trouvez que c'est un excellent outil)
pour cela on va donc utiliser PixelGetColor c'est parti :
moi je m'en sers que très peu. J'ai dans l'idée de m'en servir pour recalibrer le pixelsearch mais c'est encore au stade expérimental
ce pour quoi je m'en sers par contre : vérifier si le personnage à bougé ou non.
je m'explique. au cours de vos bots si vous avancez un peu vous serez amené à quitter le mode "personnage statique" et le faire bouger sur la carte ( exemple pour un bot mineur qui dois se déplacer tout seul dans la mine)
donc voila comment je fais :
ici je récupère la position de la souris ( qui a bougé il y a peu) (1)
puis je récupère le pixel de la position ( 2)
a ce moment là le bot bouge ( c'est plus compliqué mais je simplifie avec un mouseclick)
donc : l'idée c'est ça : on récupère un pixel , on bouge le perso , on reprends le pixel au même endroit et là si ce sont les mêmes cela signifiera que le bot n'a pas bougé ;)
puis :
tant que les deux valeurs sont pareilles
et voila la fin de la partie 1 ! avec ces bases vous devriez pouvoir faire un bot récolte sur dofus/wakfu :) ou faire ce que vous avez à faire quoi ^^
II mouvement et simulation
1: toutes les touches du clavier like a boss à la vitesse de l'éclair!
Cette fois ci on va cheater sur un doodle de google , vous savez celui du 100 m haies ?
pour cela on va utiliser la commande "send"
tout simplement :
send est très utile pour les bots de flood ;)
exemple :
2) bot combat:
C'est le genre de bot qui est très populaire si bien géré*:
alors il est important d'avoir un personnage qui attaque à distance. On va utiliser pixelsearch encore.
Une fonction très très utile c'est: AdlibRegister
cette fonction permet de lancer une autre fonction à une intervalle régulière. On va s'en servir pour vérifie si on est en combat ou pas
puis faites votre func d'attaque , il vous faudra chercher sur le monstre une couleur visible quel que soit son orientation ( de face etc) utilisez les raccourcis claviers si possible pour lancer l'attaque:
à partir de ça vous pouvez faire un vrai bot combat;)
3) utiliser les fichiers ini et faire un début de trajet
Un outil très puissant est les fichiers .ini pour cela on va avoir besoin de quelques notions*:
Un fichier .ini se présente ainsi
[section]
clef = valeur
clef2 = valeur
etc
Donc on va utiliser les fonctions liées à l'ini
ex*:
IniRead
IniReadSection
IniReadSectionNames
etc
Cherchez dans la doc, toutes commencent par "ini"
Concrètement un trajet on va dire hum:
donc on fait
Donc $key permettra d'aller plus tard de bouger a l'intérieur du fichier:)
le -1 c'est "si je ne trouve rien je renvoie -1"
Donc on va mettre un petit if pour ajouter une erreur:
exit
endif
Voilà pour l'erreur gérée:) règle n°1: ne jamais faire confiance à l'utilisateur
à présent on va faire le script qui exploite tout ça:p
donc:
Bon c'est bien tout ça mais on va enchaîner un peu , bien sur notre ami while est là
voilà donc là il va parcourir joyeusement le monde de votre jeu
vous pouvez ajouter un petit beep à la fin pour fétêr ça:)
voilà quelques pistes d'améliorations que je ne fait pas ici par manque de temps/flemme*:
faites un inireadsection avec un uboud après et ça vous donnera plus ou moins le nombre exact d'actions qu'il y a dans votre .ini
ex:
n'hésitez pas à utiliser un inireadsectionnames:
ensuite vous avez vu que j'utilise une variable "$trajetpos" , non je ne n'ai pas rangé préalablementle chemin du fichier ini regardez:
cela ouvre une fenêtre de choix de fichier avec comme titre "Trajet", elle s'ouvre dans le dossier où se trouve le script et filtre tout les fichiers ne laissant que les .ini:3 assez pratique vous en conviendrez x)
vous pouvez combiner ça avec une autre partie du tuto pour faire par exemple qu'il aille de la banque à un champ puis une fois à destination ajoutez un call("fonction_recolter")
je vous expliquerais comment faire un créateur de trajet précis plus tard ainsi que un trajet qui va à des positions précises et qui plus est qui va se déplacer sur une map et parfois se déplacer parfois récolter des ressources.
postez ce que vous aimeriez savoir ou explorer ;)
on commence par les bases. ( Je me base sur mon expérience personnelle et mon propre parcours)
donc :
Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
de ce tutoriel très bien fait vous allez faire :
- toute la grande partie 1 ( variable , instructions conditionnelles, boucles etc)
vous devez réussir le tp du jeu du plus ou moins.
puis dans la partie de la gui vous allez faire :
- les gui jusqu'à la fin de koda ( franchement vous pouvez vous permettre de survoler un peu les premiers chapitres car koda fais tout pour vous et vous n'avez pas réellement à apprendre la syntaxe. Vous y reviendrez plus tard si le besoin s'en fait ressentir)
- [facultatif] : "un script propre et lisible" c'est pas obligatoire mais intéressant et utile à lire. Mais comme les utilisez "tidy autoit source " dans scite ( partie tool) et cela ce fait tout seul. mais c'est pratique pour comprendre les codes des autres etc. Bref utile mais pas obligatoire
à présent vous pouvez quitter ce tutoriel car le tp sur la cryptographie est inutile et trop compliqué ( oui je ne sais pas ce qu'il fait là )
à présent on quitte le tutoriel. On passe avec moi
donc on va apprendre à faire des bots simples sur des jeux comme dofus ou en navigateur.
voila les fonctions qui vous seront utiles :
winmove : nous permet de placer la fenêtre comme on veut
winactivate : permet de mettre la fenêtre au premier plan : très pratique
pixelsearch : très très très pratique même indispensable pour les bots de récolte ou autre : il cherche un pixel dans un carré selectionné et ensuite retourne les pos x y de l'élément
mousemove : bouge la souris à des coordonées données
mouseclick : clique à une certaine coordonée
send : simule l'appui de touches au clavier
mousegetpos : retourne la position de la souris, très efficace pour les bots type "clicks pré-enregistrés"
et d'autres fonctions que vous découvrirez par vous même ^^
donc les bases :
un bot c'est bien que la fenêtre chez l'utilisateur est toujours au même endroit
donc un coup de
PHP:winmove($fenetre,"",0,0,800,600)
et le tour est joué ( j'aime bien 800 600 , c'est petit mais ça a l'avantage de s'adapter à pas mal de résolutions)
à présent on va faire ça sous forme de "que souhaite tu faire ?"
index:
I recherche à l'écran
1: rechercher et cliquer sur un élément
2: verification que un élément change ou pas
II mouvements et simulations diverses
1: toutes les touches du clavier like a boss à la vitesse de l'éclair!
2 : bot combat
3: utiliser les fichiers ini pour ajouter les trajets à votre bot
I : recherche à l'écran
1: rechercher et cliquer sur un élément :
La base de tout les bots pixels !
on commence par gérer notre fenêtre correctement :
puis on va rechercher le pixel :PHP:winmove($fenetre,"",0,0,800,600)
lire : on recherche dans un carré de x = 0 , y = 0 à x1 = 800 , y1 = 600 la couleur $couleurPHP:PixelSearch(0,0,800,600,$couleur)
"oh mais il détecte pas/ou presque pas!"
c'est normal : configurée ainsi la fonction va rechercher l'exact pixel à l'écran or il suffit que le pixel varie un tout petit peu pour que cela ne soit plus correct
il faut donc faire ainsi :
ici il cherchera le pixel et les pixel variant de 1 ombre ( possible de mettre de valeurs come 0.5)PHP:PixelSearch(0,0,800,600,$couleur,1)
pour mes bots sur wakfu j'utilise 1.5
"bon ok je l'ai trouvé mon pixel mais j'en fait quoi ?"
alors on affecte une variable au résultat :
et à ce moment là il y a une petite subtilité : il va renvoyer un tableau à 2 cases : $pos[0] et $pos [1]PHP:$pos = PixelSearch(0,0,800,600,$couleur,1)
respectivement : les pos x et y de l'élément trouvé.
on va donc ( enfin) cliquer dessus :
2 solutions :
soit on essaye de rendre le code plus compact ( et on perd moins de temps) :soit mousemove ($pos[0],$po[1])
puis mouseclick("left")
donc au final :mouseclick("left",$pos[0],$pos[1])
mais attention : que ce passe t'il si le pixelsearch ne trouve rien? et bien il ne mettra pas un tableau dans $pos et mouseclick ne fonctionnera pasPHP:$pos = PixelSearch(0,0,800,600,$couleur,1) mouseclick("left",$pos[0],$pos[1])
vous l'avez compris : une jolie erreur qui fait planter tout le programme.
comment faire donc ?
c'est là qu'entre "isarray". Démonstration :
bien sur le tout est à mettre dans une boucle si vous souhaitez qu'il se fasse plus d'une fois :PHP:$pos = PixelSearch(0,0,800,600,$couleur,1) $test = isarray($pos) if $test = 1 then mouseclick("left",$pos[0],$pos[1]) else msgbox(0,"fail","ehhh non plus rien en vue") endif
PHP:$pos = PixelSearch(0,0,800,600,$couleur,1) $test = isarray($pos) while $test = 1 mouseclick("left",$pos[0],$pos[1]) sleep(100) ; toujours un sleep dans une boucle pour ne pas bouffer trop de puissance $pos = PixelSearch(0,0,800,600,$couleur,1) ; on recherche la valeur $test = isarray($pos) ; on regarde si on trouve toujours la valeur pour la prochaine fois Wend msgbox(0,"fail","a pu!")
et voila :) j'utilise ce genre de code dans les bots et cela ne m'à presque jamais fait défaut :D
2: vérification qu'un élément y est ou pas :
pour cela il existe pixelchecksum mais je ne l'ai jamais aimé car je le trouve trop peu précis et pas maniable ( je ne l'ai pas énormément creusé non plus, libre à vous de l'utiliser si vous trouvez que c'est un excellent outil)
pour cela on va donc utiliser PixelGetColor c'est parti :
moi je m'en sers que très peu. J'ai dans l'idée de m'en servir pour recalibrer le pixelsearch mais c'est encore au stade expérimental
ce pour quoi je m'en sers par contre : vérifier si le personnage à bougé ou non.
je m'explique. au cours de vos bots si vous avancez un peu vous serez amené à quitter le mode "personnage statique" et le faire bouger sur la carte ( exemple pour un bot mineur qui dois se déplacer tout seul dans la mine)
donc voila comment je fais :
PHP:$check_pos = MouseGetPos() ;1 $check = PixelGetColor($check_pos[0], $check_pos[1]) ;2
ici je récupère la position de la souris ( qui a bougé il y a peu) (1)
puis je récupère le pixel de la position ( 2)
a ce moment là le bot bouge ( c'est plus compliqué mais je simplifie avec un mouseclick)
là je génère une autre recherche au même endroit que la première :PHP:mouseclick("left",$pos[0],$pos[1])
PHP:$check2 = PixelGetColor($check_pos[0], $check_pos[1])
donc : l'idée c'est ça : on récupère un pixel , on bouge le perso , on reprends le pixel au même endroit et là si ce sont les mêmes cela signifiera que le bot n'a pas bougé ;)
puis :
tant que les deux valeurs sont pareilles
mais vous pouvez aussi ruser avec pixelsearch en recherchant dans un carré de 1 pixel le pixel qui devrais arriver ( plus utile pour les éléments fixe de l'interface)PHP:While $check = $check2 Beep(247) ;on fait un beep pour prévenir l'utilisateur Sleep(30000) ; on patiente car l'élément perturbateur devrais bouger normalement MouseClick("left", $pos[0], $pos[1]) ;on reclique pour aller à la position initialement prévue $check2 = PixelGetColor($check_pos[0], $check_pos[1]); on reteste voir si il a bougé ou pas WEnd
et voila la fin de la partie 1 ! avec ces bases vous devriez pouvoir faire un bot récolte sur dofus/wakfu :) ou faire ce que vous avez à faire quoi ^^
II mouvement et simulation
1: toutes les touches du clavier like a boss à la vitesse de l'éclair!
Cette fois ci on va cheater sur un doodle de google , vous savez celui du 100 m haies ?
pour cela on va utiliser la commande "send"
tout simplement :
dans la doc ( f1) vous avez toutes les lettres de send ( donc les touches genre control ou alt)PHP:#cs on met une fonction de sécurité #ce func stop() exit endfunc hotkeyset("{END}","stop") ; appelle la fonction stop si on appuie sur la touche "fin" while 1 ; boucle infinie send("{left}") ; fleche de gauche send("{right}") ; fleche de droite Wend
send est très utile pour les bots de flood ;)
exemple :
PHP:func stop() exit endfunc hotkeyset("{END}","stop") $i = 0 ; on initialise un compteur $msg = inputbox("flood","quel message flood ?") ;ouvre une fenêtre qui demande à l'utilisateur while $i <= 50 send($msg) ; on envoie le message ( a supposer que la barre d'envoi soit déjà selectionnée , si non un petit mouseclick s'impose ;) sleep(100) Wend msgbox(0,"flood","Fini!")
2) bot combat:
C'est le genre de bot qui est très populaire si bien géré*:
alors il est important d'avoir un personnage qui attaque à distance. On va utiliser pixelsearch encore.
Une fonction très très utile c'est: AdlibRegister
cette fonction permet de lancer une autre fonction à une intervalle régulière. On va s'en servir pour vérifie si on est en combat ou pas
donc on fais une fonction détection c'est assez simple*:PHP:AdlibRegister(detection,500) ; on lance la fonction détection toutes les 500 millisecondes
pour plus de précision on ferais mieux de faire cette recherche sur un carré de pixel très petit ( voire 1 pixel) , à vous de voirPHP:func detection() $detect_cbm = pixelsearch($couleur_det,0,0,800,600,2) if isarray($detect_cmb) call("attack") endif endfunc
puis faites votre func d'attaque , il vous faudra chercher sur le monstre une couleur visible quel que soit son orientation ( de face etc) utilisez les raccourcis claviers si possible pour lancer l'attaque:
et mettez donc cela par exemple dans un bot métier et il gérera les aggros dans dofus:)PHP:func attaque() ;on selectionne l'attaque $detect_cbm = pixelsearch($couleur_det,0,0,800,600,2) while isarray($detect_cmb) send("{1}") ;on cherche le monstre $pos_monstre = pixelsearch($couleur_monstre,0,0,800,600,2) ; on clique dessus mouseclick("left",$pos_monstre[0],$pos_monstre[1]) send("^{w}");on passe le tour sleep(15000); on attends que le monstre joue Wend send("{enter}"); on ferme la fenêtre de loot endfunc
à partir de ça vous pouvez faire un vrai bot combat;)
3) utiliser les fichiers ini et faire un début de trajet
Un outil très puissant est les fichiers .ini pour cela on va avoir besoin de quelques notions*:
Un fichier .ini se présente ainsi
[section]
clef = valeur
clef2 = valeur
etc
Donc on va utiliser les fonctions liées à l'ini
ex*:
IniRead
IniReadSection
IniReadSectionNames
etc
Cherchez dans la doc, toutes commencent par "ini"
Concrètement un trajet on va dire hum:
On l’appellera (trajet.ini)[move]
1 = droite
2 = haut
3 = bas
4 = gauche
donc on fait
PHP:iniread(trajet.ini,move,$key,-1)
Donc $key permettra d'aller plus tard de bouger a l'intérieur du fichier:)
le -1 c'est "si je ne trouve rien je renvoie -1"
Donc on va mettre un petit if pour ajouter une erreur:
msgbox(0,"erreur","impossible de reconnaître de .ini ou la clef associée à cette valeur")PHP:$trajet = iniread(trajet.ini,move,$key,-1) if $trajet = -1 then
exit
endif
Voilà pour l'erreur gérée:) règle n°1: ne jamais faire confiance à l'utilisateur
à présent on va faire le script qui exploite tout ça:p
PHP:switch $trajet case "droite" mouseclick(.....);oui bon à vous de gérer le mousemove pour qu'il soit pile poil du bon coté:p case "gauche" etc case bas etc case haut etc endswitch
donc:
PHP:$trajet = iniread(trajet.ini,move,$key,-1) if $trajet = -1 then msgbox(0,"erreur","impossible de reconnaître de .ini ou la clef associée à cette valeur") exit endif switch $trajet case "droite" mouseclick(.....);oui bon à vous de gérer le mousemove pour qu'il soit pile poil du bon coté:p case "gauche" etc case bas etc case haut etc endswitch
Bon c'est bien tout ça mais on va enchaîner un peu , bien sur notre ami while est là
PHP:$trajet = iniread(trajet.ini,move,$key,-1) while $trajet <> -1 if $trajet = -1 then msgbox(0,"erreur","impossible de reconnaître de .ini ou la clef associée à cette valeur") exit endif switch $trajet case "droite" mouseclick(.....);oui bon à vous de gérer le mousemove pour qu'il soit pile poil du bon coté:p case "gauche" etc case bas etc case haut etc endswitch $key += 1 Wend
voilà donc là il va parcourir joyeusement le monde de votre jeu
vous pouvez ajouter un petit beep à la fin pour fétêr ça:)
PHP:beep() msgbox(0,"bot","fini*!")
voilà quelques pistes d'améliorations que je ne fait pas ici par manque de temps/flemme*:
faites un inireadsection avec un uboud après et ça vous donnera plus ou moins le nombre exact d'actions qu'il y a dans votre .ini
ex:
je dis à peu près étant donné que je dois ajouter un:PHP:$trajet = IniReadSection($trajetpos, "move"); $trajet_taille = UBound($trajet_dim)
pour avoir le nombre exact, mais cela peut varier suivant les scripts ^^PHP:$trajet_taille -= 1
n'hésitez pas à utiliser un inireadsectionnames:
ça range le titre des sections dans un tableau:)PHP:$trajet_type = IniReadSectionNames($trajetpos)
ensuite vous avez vu que j'utilise une variable "$trajetpos" , non je ne n'ai pas rangé préalablementle chemin du fichier ini regardez:
PHP:
[QUOTE]
$trajetpos = FileOpenDialog("Trajet", @ScriptDir, "ini (*.ini)") [/QUOTE]
cela ouvre une fenêtre de choix de fichier avec comme titre "Trajet", elle s'ouvre dans le dossier où se trouve le script et filtre tout les fichiers ne laissant que les .ini:3 assez pratique vous en conviendrez x)
vous pouvez combiner ça avec une autre partie du tuto pour faire par exemple qu'il aille de la banque à un champ puis une fois à destination ajoutez un call("fonction_recolter")
je vous expliquerais comment faire un créateur de trajet précis plus tard ainsi que un trajet qui va à des positions précises et qui plus est qui va se déplacer sur une map et parfois se déplacer parfois récolter des ressources.
postez ce que vous aimeriez savoir ou explorer ;)
Last edited: