Autoit Bot dofus 1.29 autoit

Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#1
Bonjour,

Je sollicite votre aide , étant débutant ( depuis hier .. ) je bloque sur un problème je vous explique :

Je souhaite faire un bot qui va ouvrir la banque et faire d'autre en tache de fond sur dofus 1.29 ( pendant que je regarde une vidéo par exemple )

Donc j'ai commencé à coder : premier clique sur le PNJ
puis voila mon problème , pas moyen de faire cliqué sur la petite box "Parler" qui apparaît une fois cliqué sur le PNJ ... ça fonctionne que quand mon curseur est sur la box ... du coup étant débutant vous êtes peut être plus apte à m'aider ...

voila des screens du problème :


Je vous fais part du code ( très simplifier lol )
les positions sont correct (x et y )
__________________________________________________________________________________________________________________________________________________________________

Func Win_Click($Title, $iButton = "left", $X = "", $Y = "", $iClicks = 1)
Local $Full = WinGetTitle ($Title)
Local $HWnD = WinGetHandle ($Full)
Local $MK_LBUTTON = 0x0001
Local $WM_LBUTTONDOWN = 0x0201
Local $WM_LBUTTONUP = 0x0202
Local $MK_RBUTTON = 0x0002
Local $WM_RBUTTONDOWN = 0x0204
Local $WM_RBUTTONUP = 0x0205
Local $WM_MOUSEMOVE = 0x0200
Local $i = 0
Local $Button,$ButtonDown,$ButtonUp,$MouseCoord
If IsHWnD ($HWnD) And WinExists ($Full) <> '0' Then

Select
Case $iButton = "left"
$Button = $MK_LBUTTON
$ButtonDown = $WM_LBUTTONDOWN
$ButtonUp = $WM_LBUTTONUP
Case $iButton = "right"
$Button = $MK_RBUTTON
$ButtonDown = $WM_RBUTTONDOWN
$ButtonUp = $WM_RBUTTONUP
EndSelect

If $X = "" OR $Y = "" Then
$MouseCoord = MouseGetPos()
$X = $MouseCoord[0]
$Y = $MouseCoord[1]
EndIf

For $i = 1 to $iClicks
DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$WM_MOUSEMOVE,"int","long",_MakeLong($X, $Y))
DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$ButtonDown,"int",$Button,"long",_MakeLong($X, $Y))
DllCall("user32.dll", "int", "SendMessage","hwnd", $HWnD,"int",$ButtonUp,"int",$Button,"long", _MakeLong($X, $Y))
Next
EndIf
EndFunc
Func _MakeLong($LoWord,$HiWord)
Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc


Win_Click("Adobe Flash Player 18","left",x,y,2) ; Clique sur le PNJ

Win_Click("Adobe Flash Player 18","left",x,y,1) ; Clique PNJ-Parler <--- ici ne fonctionne pas
 
Dernière édition:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
C'est juste une question de coordonnées je pense, je ne sais pas comment t'aider.
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#3
tu pense ? car c'est assez bizarre car le clique se fait bien exactement en plein milieu de la boite ( j'ai essayé de mettre mon perso et le clique se fait sur le perso ( derrière la boite , oui oui ... ) du coup j'ai l'impression que les coordonnées sont bonne , mais en même temps je suis nouveau depuis 2 jours dans le monde de la programmation ... Sinon saurais tu le faire avec un autre langage mon ami ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#4
Bah déjà faut se dire que si tu restes sur des coordonnées fixes pour tout ton bot, ça risque d'être quelque chose de très restreint.
Déjà l'utilisateur dépendra de la résolution que tu utilises et la moindre modification du jeu entrainera une refonte totale de ton bot.

Nous on a l'habitude sur cadernis de bosser sur des programmes socket, après si tu souhaites rester sur du pixel, tu peux mais je te recommande de faire des choses plus dynamiques comme la détection d'image ou de pixels sur l'écran.

Tu devrais regarder la section Tutoriels, ya beaucoup d'aide autoit.
https://cadernis.fr/index.php?forums/tutoriels.100/&prefix_id=8

Après tu peux aussi te tourner vers d'autres langages, c'est toi qui voit.
 

Arth

Contributeur
Inscrit
28 Aout 2016
Messages
80
Reactions
3
#5
Tiens j'y pense en lisant ton problème, tu as pensé à mettre une pause entre le moment ou la boite apparaît et ton click ? (dessolé de ne pas lire ton code mais je suis allergique à l'autoit ^^). quelque milliseconde, le temps de laisser flash afficher la boite et de lui donner une action.
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#6
Salut , Oui j'y avais penser , j'ai donc mis un bon Sleep(5000) ( 5sec ) et rien n'y fait malheureusement ... pour ce qui est des bots sockets j'y viendrais un jour :p après faut j'essai la detection pixel/image , mais , c'est possible en fenêtre minimiser ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
C'est fesable en bossant avec les processus, après je ne connais pas assez bien autoit.
En c# on a une api très complète à ce niveau, tu devrais faire des recherches.
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#8
D'accord , c'est ce que je vais faire car je t'avoue honnêtement que j'ai assez vaguement compris les notions d'api et tout le patati patata x) j'ai peut être trop négligé les tutos ><
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#10
Oui j'ai déja à peu près regarder tout ces sujets mais mon problème revient à celui du début , c'est bizarre tout fonctionne pour se déplacer ( je peux déplacer le perso de 50 map sur dofus sur 50 compte différent tout en étant sur league of legends par exemple ) mais impossible d’interagir avec des pnj ou des espèce de "menu déroulant" comme quand on clique sur le personnage on a un rectangle avec "baffer , envoyer un message privé , etc" , cette action semble impossible en tache de fond, même en fenêtre maximiser cela ne fonctionne que dans UN CAS : si mon curseur survol la boite/menu en question. En fait le but de la manœuvre final aurai été de recréé un follow tool comme celui présent sur la passerelle eratz gateway ( qui lui pour le coup doit être en socket peut être ? )
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#11
il me semble que le control de menu deroulant utiliser par dofus fonctionne comme cela, on a une zone (le menu) qui recoie levenement click une fois levenement click recus il va determiner via la position relative de ton curseur a la zone de click quelle ellement tu a clicker

Donc logiquement si tu envoie le click a la fenetre sans deplacer le curseur le controle est incapable de determiner quelle ellement a ete choisi en autoit je voie pas du tout comment fair mais avec lapi win32 sa peut se faire sans prendre le controle du curseur
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#12
et tu aurais une idée de comment faire ? x) ça l'air assez complexe n'empêche ...
 
Inscrit
20 Janvier 2017
Messages
5
Reactions
0
#13
Mdr excellent ce vieux ecorcia apres il jure qu'il ne bot pas :p
 
Inscrit
30 Decembre 2016
Messages
7
Reactions
0
#14
créé des bots = j'utilise des bots , logique transcendantal i'm done.
 
Inscrit
20 Janvier 2017
Messages
5
Reactions
0
#15
C'est ça tu le fait "pour apprendre" haha encore plus excellent
 
Inscrit
10 Septembre 2015
Messages
16
Reactions
0
#16
Les coordonnées x,y pour pouvoir cliquer sur la box sont correct ??
Si tu arrive à ouvrir la box tu devine facilement les coordonnées car la box s'ouvre toujours en dessous du clique a x,y du clique, donc suffit de rajouter un décalage et simuler le clique.
Ou le problème se situe sur la fonction "Win_Click" ?
 
Haut Bas