Salut, merci pour vos réponses. Mais je pense que pour régler le problème, il faut que je change radicalement mon code...
Voici la fonction utilisée et qui plante au bout d'un certain temps :
Cliquez pour révéler
Cliquez pour masquer
Func rechercheMonstre($couleurmob)
$mob_a=FFNearestPixel(0,0,$couleurmob,true,439,652,1316,734)
If @error=1 Then
Return 0
Else
Return $mob_a
EndIf
EndFunc
Et voici la fonction combat de mon bot :
Cliquez pour révéler
Cliquez pour masquer
Local $cbt=0
Local $nombreAttaques=0
Local $possible=1
Local $nombreCombats=0
Func combat($couleurmob) ; fct combat principale
If $cbt=0 Then
debutcombat() ; on lance la fct de début de combat
EndIf
detecterTour() ; savoir si c'est son tour
trouveMonstre($couleurMob) ; on va chercher le mob ---> fct complémentaire
EndFunc
Func debutcombat() ; fct de debut de cbt
pret() ; appuie sur le bouton pret
Sleep(5000)
$cbt=1
EndFunc
Func trouveMonstre($couleurMob) ; fonction complémentaire pour trouver le mob à attaquer
Local $trouve=0
While $trouve=0 ; tq pas de mob trouvé
$trouve=rechercheMonstre($couleurmob) ; on cherche le mob
If $trouve=0 Then ; si non trouvé
$nombreAttaques=0
passerTour()
Sleep(1000)
supprimerAiresExclues()
$possible=1
combat($couleurmob)
Else
possibiliteAttaque($couleurMob)
EndIf
WEnd
EndFunc
Func possibiliteAttaque($couleurMob)
If $possible=1 Then
cliquerSort()
EndIf
Sleep(500)
pointerMonstre($mob_a)
Sleep(1000)
$possible=attaquePossible($mob_a); on cherche à savoir si on peut l'attaquer
If $possible=0 Then ; si impossible
exclureAire($mob_a)
trouveMonstre($couleurMob)
Else
supprimerAiresExclues()
$possible=1
attaquerMonstre($couleurMob)
EndIf
EndFunc
Func attaquerMonstre($couleurMob)
If $nombreAttaques=0 Then
lancerSort($mob_a)
Sleep(3000)
$nombreAttaques+=1
$test=rechercheMonstre($couleurmob)
If $test=0 Then
Sleep(2000)
finCombat($couleurmob)
EndIf
trouveMonstre($couleurMob)
Else
lancerSort($mob_a)
Sleep(500)
$nombreAttaques=0
passerTour()
barreTourAbsente() ; on attend que la barre de tour disparaisse
Sleep(3000)
finCombat($couleurmob)
combat($couleurmob)
EndIf
EndFunc
Func finCombat($couleurmob)
If PixelGetColor(735,627)=0xFF6100 Then ; si le bouton pour fermer la fenêtre de combat est présent
Sleep(500)
MouseClick("left",735,627,1,0) ; alors on clique dessus
Sleep(500) ; on attends un peu qu'elle se ferme
$nombreCombats+=1 ; on incrémente la variable du nombre de combats de 1 pour compter les combats
If PixelGetColor(873,766)=0x322D25 Then ; si le perso est à la moitié de sa vie (environ)
MouseClick("left",325,740,1,0) ; alors on ouvre la fenêtre des émotes
Sleep(2000) ; on attend un peu qu'elle s'ouvre
MouseClick("left",330,660,1,0) ; on clique sur l'émote s'asseoir pour se reposer
Sleep(3000) ; on attend que le personnage soit assis
MouseClick("left",325,740,1,0) ; on ferme la fenêtre des émotes
Do
Sleep(10) ; on attend
Until PixelGetColor(867,749)=0xFF0000 ; jusqu'à ce qu'il ait repris assez de vie
EndIf
$cbt=0 ; ------> A TESTER !!!!!!!!!!!!!!!!
testInventaire()
main() ; et on relance la boucle de recherche de nouveau combat
EndIf
EndFunc
Func quitter() ; fonction qui peut être déclencher exclusivement par l'utilisateur
MsgBox(0,"Nombre de combats",$nombreCombats) ; affiche une boîte de dialogue affichant le nombre de combat effectué
Exit ; stop le script définitivement
EndFunc
Désolé, c'est pas tout le temps expliqué, et c'est un peu le bordel. Mais comme vous pouvez le voir, les fonctions s'appellent les unes les autres, ça fait que les variables sont jamais libérées de la pile, et je pense que c'est pour ça qu'elle plante... :S Je ne sais pas comment résoudre ça sans modifier totalement mon code :/