Autoit [AutoIt] Le nouveau systeme de récolte ( Shift+Click )

Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#1
Bonjours a tous, vous l'aurez sans doute remarquer le système de récolte de D. a été modifié et il est maintenant possible d'empiler les actions grâce a SHIFT + Click.
Vous l'aurez donc compris, cela facilitera grandement les bot pixel en AutoIt, cependant j'aimerais savoir, selon vous, qu'elle serait la méthode la plus pratique :
- Enregistrer 15 positions de récolte manuellement et faire clicker le bot sur chacune d'elle tout en laissant enfoncer la touche SHIFT et recommencer une fois les 15 action terminer.
- Recherche le pixel de la ressource a récolter, accumuler 15 actions puis a chaque nouveaux pixel continue de clicker sur celui ci.

Merci de m'éclairer sur ce chemin sombre et sinueux.

Ps : si je suis pas claire, dit le moi.
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#2
Je trouve qu'enregistrer 15 positions, ce n'est pas très pratique. Car si l'un des céréales a été fauché entre temps, il fait quoi ? (J'ai pas testé cette nouvelle mise à jour.)
Si le perso passe au céréale suivant tout seul, c'est ok mais s'il clique quand même sur la céréale déjà récoltée, ça fait perdre du temps.
Moi, si je serais toi, je ferais comme avant, un clic progressif, ça ne fait pas perdre de temps du tout.
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#3
Mais le problème que je rencontre avec la recherche par pixel c'est que mon personnage bouge dans tous les sens il fait des trajets super long alors qu'il y a une ressource juste a coter c'est assez embêtant. Je ne sais pas comment y remédier.
 
A

Anonymous

Invité
#5
En meme temps , je suppose que vous faite une recherche sur toute l'aire de la fenêtre , l'aire étant déja prédéfinie, statique et non evolutive ?

Pour résoudre votre "problème", l'une des solutions, serai de faire une recherche de pixel autour de votre personnage, ou dans votre cas autour du précédent blé fauché ? et d'augmenter la recherche d'aire si il ne trouve pas.
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#6
Je n'ai jamais utiliser la .dll de FastFind, je vais donc certainement avoir besoin de votre aide pour m'aider :)
Actuellement j'ai rassemblé les différents pixels de la ressource que je souhaite récoltée a l'aide FFShowPixel, mais maintenant je ne sais pas comment utiliser le code obtenue pour l'implanté dans mon propre code de bot, même en ayant lu les différents tuto/aide a ce sujet.
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#8
Environ une 30aines de pixels différents.
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#9
J'ai regardé le code généré, tout est commenté, ça ne devrais pas te poser pas de problème. Si tu y arrives vraiment pas, tu tapes à la main dans ton code, une trentaine, c'est pas la mort.
 

KardSharpz

Membre Actif
Inscrit
17 Mars 2009
Messages
48
Reactions
0
#10
mon personnage bouge dans tous les sens il fait des trajets super long alors qu'il y a une ressource juste a coter
Moi j'ai coder mon bot paysa de cette façon. Une fauche après l'autre et non 15 actions enregistrer. À chaque ressources récolter, je fait une boucle qui attent le "nombre de cette ressource récolter". J'enregistre l'endroit où j'ai trouvé ce chiffre, puis je cherche les pixels de cette ressources en agrandissant la zone autour de cette endroit si je les trouve pas.

Pour améliorer, si tu ne trouve pas le chiffre de la ressources récolter après X sec, recommencer récolte.
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#11
Problème FastFind

Re, apres plusieurs jours de codage et de "démerdage" je n'arrive toujours pas a faire fonctionner mon code a cause de FastFind que je n'arrive pas a utiliser correctement.
Voici mon code :
Code:
#include "FastFind.au3" ; Wrapper to FastFind.dll, for lightning-fast pixel searches.

Global const $FFNB_CHANVRE_COLORS=31
Global const $gFFChanvreColors[$FFNB_CHANVRE_COLORS]=[0xACB525, 0x7D8119, 0x888F1E, 0x7F9912, 0x80841A, 0xAFB826, 0x7D9511, 0x829E12, 0x687C04, 0x7B7F19, 0xA2A822, 0x3F4D02, 0x758B0F, 0x7D9611, 0x7E9811, 0x697F04, 0x516303, 0x3B4802, 0xABB424, 0x7B9210, 0x84A213, 0xAFBA27, 0x89911E, 0xB0BB27, 0x85A313, 0x878F1E, 0x435302, 0xADB726, 0xA8B124, 0x83A113, 0xA4AB22]

global $gFFPos[2] = [0,0]; Last known position, default start for next search
global $gFFWin[4] = [0, 0, 0, 0]; Borders of default (or last) Window

Func FFFindNext($SearchPos=$gFFPos)
;In a 10x10 spot, we're first looking for the nearest spot with at least 4 pure color pixels. 
;If none, then we're looking for a spot with as much as possible pure color pixels
;If still none found, then we're looking for a spot with as much as possible pixels using ShadeVariation of 2
;You can adapt those parameters as needed
local $Res = FFBestSpot(10, 1, 4, $SearchPos[0], $SearchPos[1], -1, 2, true, $gFFWin[0], $gFFWin[1], $gFFWin[2], $gFFWin[3])
If IsArray($Res) Then
	$gFFPos[0] = $Res[0]
	$gFFPos[1] = $Res[1]
	FFAddExcludedArea($Res[0]-5, $Res[1]-5, $Res[0]+5, $Res[1]+5); This will avoid to detect same spot again later
	return $Res
Else
	SetError(1)
	return False
EndIf
EndFunc

Func FFStart($ColorList, $SearchPos=$gFFPos, $WinLimits=$gFFWin, $hWnd=-1) ; Set all settings to start search on a new list of colors
	FFResetExcludedAreas() ; New color list => we reset the restriction rectangles list
	FFResetColors() ; Start with an empty list of colors
	FFAddColor($ColorList)
	return FFFindNext()
EndFunc

Func _Ceuillette()
   global $MyWindowHandle = WinGetHandle("Oxydess")
   FFSetWnd($MyWindowHandle, True)
   for $FFCat = 0 to 0
	  Switch $FFCat
		 Case 0 
			local $SearchResult = FFStart($gFFChanvreColors)
	  EndSwitch

	  while (@Error = 0)
		 MouseClick("left",$SearchResult[0],$SearchResult[1]); Do here what you want once you find a good Spot. // On click sur la ressource	
		 sleep(2100); Position (center of spot) is in (x:$SearchResult[0], y:$SearchResult[1]) // On attends la récolte
		 _Combat(); $SearchResult[2] gives the number of good pixels found in 10x10 spot (1 min, or closest spot with at least 20) // On verifie si on entre pas en cbt
		 _FullPods() ; On vérifie que l'on est pas full pods
		 $SearchResult = FFFindNext() ; Looks for the next spot
	  Wend

   Next
EndFunc
Le problème vient de la fonction _Ceuillette() quand on a trouver un "good spot', une ressource en faite, et bien rien de ne se passe il ne click pas et il y a d'étrange petit symbole qui apparaissent tout autours du curseur de la souris.
J'ai donc besoin de votre aide pour résoudre ce problème, por favor !
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#12
Essaye d'afficher $SearchResult dans une MsgBox pour voir ce qu'il y a dedans.

A mon avis c'est cette ligne qui plante :

Code:
 local $SearchResult = FFStart($gFFChanvreColors)
Si tu essaye d'afficher $Res, ça ne va rien te marquer vu qu'une variable de tableau ne représente rien sans [x] à la fin, ça devrais t'afficher l'adresse de la première case du tableau, mais AutoIt en est incapable vu qu'il ne gère pas les pointeurs il me semble. Je pense que la "transmission de valeurs" ne s'est pas faite. Je me trompe peut-être, mais soit, il faut déclarer $SearchResult comme un tableau au préalable, soit faire :
$SearchResult[0]=$Res[0]
$SearchResult[1]=$Res[1]

A voir. Je ne suis pas sûr de moi.
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#13
J'ai fais comme tu m'a dis je reçois les bonne coordonnées dans la MsgBox mais en faite mon problème c'est qu'il repère des pixels la ou il ne devrait pas, en [5,0] par exemple, ce qui assez chiant et j'aimerais savoir quel paramètre il faudrait modifier pour réguler la zone de recherche. J'ai penser à
Code:
global $gFFPos[2] = [0,0]; Last known position, default start for next search
mais je ne suis pas sur.
Peux-tu m'aider sur ce point ?
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#14
Re: Problème FastFind

Code:
global $gFFWin[4] = [0, 0, 0, 0]; Borders of default (or last) Window
local $Res = FFBestSpot(10, 1, 4, $SearchPos[0], $SearchPos[1], -1, 2, true, $gFFWin[0], $gFFWin[1], $gFFWin[2], $gFFWin[3])
Change $gFFWin, et mets une fenêtre plus petite, moi j'ai mis : 330,60,1270,710.

Ça donne ça :



Mieux non ?
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#15
Ok je n'avais pas trouver le bon paramètre \o/, je vais voir si sa va mieux après avoir changer ce paramètre.

Edit : En effet sa va mieux depuis que j'ai changer ce paramètre même si quelque petit pixel sont présent aussi dans l'herbe mais bon je peux pas vraiment y faire quelque chose puisque si je le supprime je perd un grand nombre de ressource donc faudrait faire une zone d'exclusion mais je sais pas comment xD.
Sinon deuxième chose, est-il possible d'augmenter la zone de recherche apres le premier spot car quand je récolte ma ressource il a toujours une plante au sol ( non recoltable bien sur ) mais qui a des pixel identique a ceux de la plante récoltable. En gros si la ressource se trouve en [X,Y] chercher le prochain pixel pas avant un périmètre de [X+20,Y+20] par exemple.
Voili voilou, merci d'avance pour votre aide.
Kangogoo.

Edit2 : J'ai trouver pour les rectangle d'exclusion c'est bon, mais quand dois-je les ajouter, au tout début du code ou dans une fonction précise ?
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#16
Tu veux exclure quoi ? Et combien de temps ?
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#17
Je voudrais exclure la zone que je viens de récolter pendant un temps X qui correspond au temps qu'il faut à la plante pour repousser.

Pour info, voici ma zone de recherche ( en rouge ) et les zones d'exclusions ( en bleu ) :
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#18
C'est un travail d'orfèvre^^, surtout si tu le fais à chaque map :p
Tu peux le faire manuellement, en excluant chaque zone quand ton perso arrive sur la map, et les supprimer quand il en repart (si tu utilises plusieurs maps).
Sinon, tu peux faire un truc plus puissant, quand le perso clique sur le pixel, tu détecte si le perso va faucher ou pas, s'il n'y va pas, tu exclus la zone.
 
A

Anonymous

Invité
#19
Mais si quelqu'un est sur la même map que toi et qu'il fauche la ressource ? :o
 
Inscrit
5 Decembre 2010
Messages
114
Reactions
0
#20
NicoMasterChief a dit:
C'est un travail d'orfèvre^^, surtout si tu le fais à chaque map :p
Tu peux le faire manuellement, en excluant chaque zone quand ton perso arrive sur la map, et les supprimer quand il en repart (si tu utilises plusieurs maps).
Sinon, tu peux faire un truc plus puissant, quand le perso clique sur le pixel, tu détecte si le perso va faucher ou pas, s'il n'y va pas, tu exclus la zone.
Non je le fais que sur une seul map, il y a assez de chanvre sur cette map ( + 100 ) pour qu'il y en est toujours assez a récolter.
Pour la seconde idée sa serait intéressant mais je ne vois pas comment je peux savoir si il va faucher ou non.

lolodu92 a dit:
Mais si quelqu'un est sur la même map que toi et qu'il fauche la ressource ? :o
Ce n'est pas un problème le perso ne fauchera pas la ressource en question mais la map est très peu utiliser par les paysans ou alchimistes puisqu'il y en a d'autre plus intéressante tout autour.

kangogoo a dit:
Sinon deuxième chose, est-il possible d'augmenter la zone de recherche après le premier spot car quand je récolte ma ressource il a toujours une plante au sol ( non recoltable bien sur ) mais qui a des pixel identique a ceux de la plante récoltable. En gros si la ressource se trouve en [X,Y] chercher le prochain pixel pas avant un périmètre de [X+20,Y+20] par exemple.
Savez-vous comment je peux arriver a faire cela ? Est-il possible d'exclure un zone temporairement ( pendant 5 secondes par exemple ) ?
 
Haut Bas