Bonjour tout le monde,
Après une grosse pause je jeu ankama, je me suis mis à wakfu et comme d'hab ... l'envie d'automatiser les choses sont vite arriver :teeth:
J'ai eu pas mal d'aide ici concernant mon premier bot sur dofus qui répondait parfaitement à mes attentes. Je vais donc vous partager ce que je fais pour wakfu, mes avancements et mes blocages.
Je suis parti sur du AutoHotkey car je n'ai absolument pas les compétence de faire du sniffer :p
Pour le moment ce que je maitrise bien :
- la récolte de ressource classique
- déplacement dans le havre sac
Ce qui va arrivé et qui ne va pas me poser de soucis :
- la récolte d'une ressource rare et replanté l'espace libéré
- chemin plus optimisé pour la récolte
- meilleur gestion des tempo
- la gestion de la dimension de la fenêtre (ça va être super simple vu que wakfu est un jeu "centré"
Mon blocage actuel :
- l'antibot qui marche bien pour ce jeu -_- C'est un jeu de cpatcha avec des images un peu floues. J'ai amélioré mes fonctions avec de la reco d'image par pour ce maudit captcha pour le moment je n'ai pas trouvé la bonne recette. En jouant sur la tolérance j'arrive à de la réussite mais pas 100% et le malus est trop impactant pour que ça soit acceptable.
Voici le code sans commentaire avec mes premiers tests sur le bot :)
#Requires AutoHotkey v2.0
SendMode "InputThenPlay"
global nombreNettoyage := 0
global coeffSleep := 1
global windowWidth :=0
global windowHeight :=1
^q::
{
ExitApp
}
^p::
{
Pause -1
}
^j::
{
;fonction_init()
;fonction_bloc_bas()
;fBasDroite(3)
;sleep 2000
;fonction_bloc_haut()
fonction_test()
}
fonction_init(){
global coeffSleep , windowWidth , windowHeight
ActiveHwnd := WinExist("WAKFU")
WinActivate "WAKFU"
Sleep coeffSleep*1000
WinGetClientPos &Xpos, &Ypos, &W, &H
ToolTip W " x " H, 0,0
windowHeight := H
windowWidth := W
}
fonction_recolte(varX,varY){
ToolTip "recolte lancement" ,500,500
global coeffSleep , windowWidth , windowHeight
MouseMove varX , varY
Sleep coeffSleep*145
MouseClick "right"
Sleep coeffSleep*500
;on cherche la main de récolte
ToolTip "recolte ressource" ,500,500
if(ImageSearch(&FoundX, &FoundY, 0, 0, 1920, 1080, "D:\AutoHotkey\scriptTom\Wakfu\img\recolte.png")){
;ressource classique
MouseMove FoundX+5 ,FoundY+5
Sleep 500
MouseClick "left"
Sleep 500
;en cours de recolte
fonction_en_recolte()
}else {
;ressource rare
}
ToolTip "detection combat" ,500,500
fonction_en_combat()
}
fonction_recolte_triple_bas(){
;bas
fonction_recolte(900,550)
;gauche
fonction_recolte(900,500)
;droite
fonction_recolte(1020,555)
}
fonction_recolte_double_bas(){
;gauche
fonction_recolte(900,500)
;droite
fonction_recolte(1020,555)
}
fonction_recolte_triple_haut(){
;gauche
fonction_recolte(900,500)
;droite
fonction_recolte(1020,555)
;haut
fonction_recolte(1020,490)
}
fonction_recolte_double_haut(){
;gauche
fonction_recolte(900,500)
;droite
fonction_recolte(1020,555)
}
fonction_en_combat(){
sleep 500
if(ImageSearch(&FoundX, &FoundY, 0, 0, 1920, 1080, "*100 D:\AutoHotkey\scriptTom\Wakfu\img\fight.png")){
;détection du combat
maCouleur := PixelGetColor(925,230)
While(maCouleur = "0x000000")
{
ToolTip "En combat !" ,500,500
maCouleur := PixelGetColor(925,230)
Sleep 5000
}
}
}
fHautGauche(nbPas){
decalageX:=-55*nbPas
decalageY:=-30*nbPas
MouseMove 965+decalageX,545+decalageY
Sleep 500
MouseClick "left"
Sleep 500
}
fBasGauche(nbPas){
decalageX:=-55*nbPas
decalageY:=30*nbPas
MouseMove 965+decalageX,545+decalageY
Sleep 500
MouseClick "left"
Sleep 500
}
fBasDroite(nbPas){
decalageX:=55*nbPas
decalageY:=30*nbPas
MouseMove 965+decalageX,545+decalageY
Sleep 500
MouseClick "left"
Sleep 500
}
fHautDroite(nbPas){
decalageX:=55*nbPas
decalageY:=-30*nbPas
MouseMove 965+decalageX,545+decalageY
Sleep 500
MouseClick "left"
Sleep 500
}
fonction_bloc_bas(){
fonction_recolte_triple_bas()
fBasGauche(1)
fonction_recolte(1015,515)
maBoucle := 0
while(maBoucle<10){
fonction_recolte_triple_bas()
fBasGauche(1)
maBoucle++
ToolTip maBoucle, 0,0
}
fonction_recolte_double_bas()
}
fonction_bloc_haut(){
fonction_recolte_triple_haut()
fHautDroite(1)
fonction_recolte(900,550)
maBoucle := 0
while(maBoucle<10){
fonction_recolte_triple_haut()
fHautDroite(1)
maBoucle++
}
fonction_recolte_double_haut()
}
fonction_en_recolte(){
ToolTip "recolte in" ,500,500
while(1){
if(ImageSearch(&FoundX, &FoundY, 0, 0, 1920, 1080,"*100 D:\AutoHotkey\scriptTom\Wakfu\img\recolte_en_cours.png")){
while(ImageSearch(&FoundX, &FoundY, 0, 0, 1920, 1080,"*100 D:\AutoHotkey\scriptTom\Wakfu\img\recolte_en_cours.png")){
sleep 200
}
Break
}
}
ToolTip "recolte out" ,500,500
}
fonction_test(){
count :=0
x2:=0
y2:=0
if(ImageSearch(&FoundX, &FoundY, 0, 0, 1920, 1080,'*90 *TransBlack D:\AutoHotkey\scriptTom\Wakfu\img\test.png'))
{
found := []
y :=0
loop {
x := 0
lastFoundY := 0
isFind := ImageSearch(&foundX, &foundY, x, y, 1920, 1080, '*90 *TransBlack D:\AutoHotkey\scriptTom\Wakfu\img\test.png')
while(isFind) {
if (lastFoundY = 0 || lastFoundY = foundY) {
found.Push({x: foundX, y: foundY})
x := foundX + 20
lastFoundY := foundY
sleep 2000
MouseMove foundX,foundY
count++
isFind:=ImageSearch(&foundX, &foundY, x, y, 1920, 1080, '*90 *TransBlack D:\AutoHotkey\scriptTom\Wakfu\img\test.png')
} else
break
}
y := lastFoundY + 20
} until (x = 0)
}
MsgBox "Fini " count
}
N'hésitez pas si vous avez des question/remarques. Je peux également mettre des photos si vous le souhaitez.
Pour ceux qui veulent l'utilisez, je n'ai pas fait d'interface, c'est au raccourci :)
à bientôt !