Hellow !
Je vais vous présenter une fonction que j'ai créée (et bordélique à souhait) qui sert à détecter la taille de la fenêtre de D., puis de la zone cliente (en gros, sans les grosses bandes noires), et enfin initialiser les cases.
Qu'est-ce qu'initialiser les cases? Eh bien, dans D., je sais (sans avoir compté, rassurez-vous) qu'il y a 546 cases.
Donc, j'initialise leur emplacement en pixel.
Si ça reste flou, alors laissez-moi vous expliquer le but. J'avais l'intention de faire un bot récolte.
Pour se faire, je crée un fichier qui porte le nom de la position d'une map (par exemple -29,-42.dat), et qui contient toutes les cases qui contiennent du blé (par exemple 256,265,254 etc).
J'initialise donc au lancement du bot la position des cases, ainsi que les cases qui leur sont proches.
Ainsi, je n'ai pas besoin de chercher la couleur d'un pixel. L'avantage est que je n'ai pas à trouver les 15000 couleurs différentes de chaque blé, trouver sa position, etc.
Bien sûr, il faudra certainement vérifier par la suite si à telle case donnée la ressource est encore présente, mais je pense que c'est déjà une belle avancée.
Vous aurez besoin pour utiliser cette fonction de FastFind.au3 et ses DLL, ainsi que de la fonction __AddArray() ci-jointe.
Premier fichier que j'ai nommé _detect_client.au3
Cliquez pour révéler
Cliquez pour masquer
Vous aurez aussi besoin d'un deuxième fichier nommé _cases.au3
Cliquez pour révéler
Cliquez pour masquer
Si vous voulez virer les ConsoleWrite faites donc, c'est surtout du débuguage. Et la fonction _write_feedback que j'ai volontairement commentée, c'est une fonction qui écrit dans un ListView les différentes actions, les évènements, et les colorise de manière à mieux se repérer (voilà pourquoi je n'ai pas utilisé de simple Edit).
Il faudra, avec l'intégration dans votre code, que vous liez les deux fichiers ensemble. Moi, j'ai fais de cette manière (à mettre dans le même ordre) dans un fichier d'initialisation :
#include "functions/_detect_client.au3"
#include "variables/_cases.au3"
Si vous voulez de plus amples explications, si vous ne comprenez pas une partie de code, ou si vous n'arrivez pas à l'intégrer à votre script, demandez-moi :).
Je posterai peut-être bientôt un bot complet...
Enjoy !
EDIT : Les fichiers sont maintenant hébergés pour éviter la censure du nom de mes variables, et donc un dysfonctionnement des fonctions.
EDIT 2 : Voici la fonction __ArrayAdd() modifiée qui sert à insérer dans un Array 2D :
Cliquez pour révéler
Cliquez pour masquer
Func __ArrayAdd(ByRef $avArray, $vValue, $NestArray = True)
Local $iBoundArray0, $iBoundArray1, $iBoundArray2, $iBoundValue1
If IsArray($avArray) = 0 Then Return SetError(1, 0, -1); $avArray is not an array
$iBoundArray0 = UBound($avArray, 0); No. of dimesions in array
If $iBoundArray0 > 2 Then Return SetError(1, 1, -1); $avArray is more than 2D
$iBoundArray1 = UBound($avArray, 1); Size of array in first dimension
If $iBoundArray0 = 2 Then $iBoundArray2 = UBound($avArray, 2); Size of array in second dimension
If ($iBoundArray0 = 1) Or (IsArray($vValue) = 0) Or $NestArray Then
; If input array is 1D, or $vValue is not an array, or $NestArray = True (default) then save $vValue literally
If $iBoundArray0 = 1 Then
; Add to 1D array
ReDim $avArray[$iBoundArray1 + 1]
$avArray[$iBoundArray1] = $vValue
Else
; Add to 2D array at [n][0]
ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
$avArray[$iBoundArray1][0] = $vValue
EndIf
Else
; If input array is 2D, and $vValue is an array, and $NestArray = False,
; then $vValue is a 1D array of values to add as a new row.
If UBound($vValue, 0) <> 1 Then Return SetError(1, 2, -1); $vValue array is not 1D
$iBoundValue1 = UBound($vValue, 1)
If $iBoundArray2 < $iBoundValue1 Then Return SetError(1, 3, -1); $vValue array has too many elements
ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
For $n = 0 To $iBoundValue1 - 1
$avArray[$iBoundArray1][$n] = $vValue[$n]
Next
EndIf
; Return index of new last row in $avArray
Return $iBoundArray1
EndFunc ;==>__ArrayAdd