Tuto By Armata (Ancien fofo) Spark.
J’ai enfin réussi à faire déplacer mon perso de manière acceptable, dans ce tutoriel je vais donc vous expliquer pas à pas ma méthode (qui n’est peut-être pas la meilleure).
Méthodes possibles :
- Cliquer un peu partout avec un peu de chance sa peut marcher ;-) mais bon…
- Cliquer sur les cases les plus proches et regarder si le perso bouge, pas terrible non plus.
- Placer la souris sur le perso (aura de déplacement doit être activé) puis chercher les pixels de couleur verte. J’ai utilisé cette méthodes quelque temps mais les cases non ciblable (pierre, arbre…) sont aussi verte donc le perso tante désespérément de monter dans les arbres lol avec les résultas auxquels on peu s’attendre :/
- Enfin le méthode que j’utilise actuellement et qui exploite la couleur orange des cases ou l’on peut se déplacer.
Pré-requis :
Il est évidant qu’avant de se déplacer il faut savoir où se trouve le perso, logique Oo.
Se déplacer c’est bien mais il serait bon de savoir où l’on va, il faut donc également savoir ou se trouve le monstre que l’on prend pour cible.
Problématique :
Et oui je bouge ma souris sur les cases orange, quoi de bien compliquer aller vous dire, en fait une grosse partie du problème réside dans le fait que les cases ne sont pas entièrement orange et donc difficile à repérer.
Nous sommes maintenant prêt :
1) Direction du déplacement.
2) Déplacement de la souris et vérification de la couleur de la case
3) Clique sur la bonne case
1) Direction du déplacement :
Pour cela j’ai simplement un système qui vérifie si le perso est a gauche ou a droite du monstre et s’il est au dessus ou en dessous.
If ($posPerso[0]- $posMonstr[0] <0) Then ; Compare les positions en x
$dirX=40 ; Le déplacement sera positif (Monstre à droite)
Else
$dirX=(-40) ; Le déplacement sera négatif (Monstre à gauche)
EndIf
If ($search1-$search3<0) Then ; Compare les positions en y
$dirY=20 ; Le déplacement sera positif (Monstre en dessous)
Else
$dirY=(-20) ; Le déplacement sera négatif (Monstre en dessus)
EndIf
2) Déplacement de la souris et vérification de la couleur de la case
Pour cela je créé une boucle a l’intérieur de laquelle j’ai déplacé la souris a l’aide des variables précédemment étalonnées, puis j’ai contrôlé la couleur de la zone autour du pointeur jusqu'à ce que la couleur ne soit plus orange.
Première partie, boucle :
Do
$posX=$ posPerso[0]+($dirX*$nb) ; incrément de la position en x
$posY=$ posPerso[1]+($dirY*$nb) ; incrément de la position en y
MouseMove($posX,$posY,1) ; placement du curseur
Sleep(1000) ; attente de une seconde
$zoneNb=zoneNbPixelOrange($posX,$posY,20) ; appel de sous fonction
$nb+=1 ; incrément de la variable de boucle
Until $zoneNb ==0 ; arrêt si aucun pixel n’est valide
Seconde partie, zoneNbPixelOrange :
Afin d’obtenir le meilleur résultat possible j’ai due scinder la couleur des pixels en couleur primaire. Sachant qu’un pixel orange ‘parfait’ se compose de 255 rouge, 104 vert et 0 bleu je fait donc un test dans mon code pour savoir si la couleur du pixel courant est proche du orange
Func zoneNbPixelOrange ($posX,$posY,$size=10)
Dim $x,$y,$nb=0
For $x=$posX-$size/2 To $posX+$size/2 ; boucle de parcours des lignes autours du curseur
For $y=$posY-$size/2 To $posY+$size/2 ; boucle de parcours des colonnes autours du curseur
$moy=decoupe(PixelGetColor($x,$y)) ; appel de fonction de découpage en couleur primaire RVB
$true=Dec($moy[0])>=200 And Dec($moy[1])>=52 And Dec($moy[1])<=152 And Dec($moy[2])<=50 ; teste des couleur (au moins 200 rouges, entre 52 et 152 vert et moins de 50 bleu)
If $true Then $nb+=1
Next
Next
Return $nb ; on retourne le nombre de pixels proche du orange
EndFunc
Afin de pouvoir travailler sur les couleurs primaires individuellement j’ai utilisé un code permettant la découpe de la couleur des pixels
Func decoupe($col)
Dim $i,$ret[3]
For $i=3 To 7 Step 2 ; boucle à trois passages (une par couleur)
$ret[$i/2-1]=StringMid(hex($col),$i,2) ; découpage de la valeur hexa en élément primaires
Next
Return $ret
EndFunc
Troisième et dernière partie, de loin la plus complexe, cliquer ;-)
$posX=$posX-($dirX) ; décrément de la position en x
$posY=$posY-($dirY) ; décrément de la position en y
MouseClick("left",$posX,$posY,1) ; clique sur la dernière cases de couleur orange
Ce tutoriel est appelé a évoluer car a ce jour les déplacement se font en lignes droites et le perso et bloquer par les obstacles, ce qui me plais moyennement. Je vais donc continuer mon travail d’investigation et je vous informerais dés que j’aurais un script plus complet.