Что нового

[Автоматизация] Поиск цвета и клик по ней мышкой, с дальнейшим выполнением цикла

kamaz_masters

Новичок
Сообщения
8
Репутация
1
Уважаемые пользователи. Нужна ваша помощь. Не знаю как соединить не сколько функций в полноценный бот.
Мне нужно соединить поиск цвета в окне -> клик по ней мышкой -> выполнение функции.
Вот что нашел на форуме:
Наведение мыши на определенный цвет
Код:
Func drag()
    While 1
        Sleep(1000)
        $pCord = PixelSearch($pos[0]-20, $pos[1]-20, $pos[0]+20, $pos[1]+20, 0xFF0000, 20, 2)
        if @error = 0 then 
            MouseMove( $pCord [0], $pCord [1] , 5 ) 
        EndIf
    WEnd
EndFunc
Ищет цвет пока не найдет
Код:
While 1
    PixelSearch(...)
    If Not @error Then ExitLoop
    Sleep(50)
WEnd

И вот часть текста моего бота - не знаю как привязать поиск пикселей к нему.
Код:
$F1=True ; Разрешение на запуск функции Z1()


 While True

   If $F1 Then
   Z1() ; Запуск функции Z1()
   $F1=False ; Запрет запуска функции Z1()
   Sleep(1000)
   $T1=TimerInit() ; Включение таймера T1
  EndIf
 
 
   ; Проверка истечения таймером T1 10 секунд
  If TimerDiff($T1)> 10*1000 Then $F1=True ; Разрешение на запуск функции Z1()
	  
 WEnd

  Func Z1()
  ControlSend($hWnd, "", "", "{F1}")
  Sleep(200)
  EndFunc
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Как наметил так и выполняй
Код:
While 1
    $aCoord = PixelSearch(...)
    If @error <> 1 Then Func01($aCoord[0], $aCoord[1])
    Sleep(50)
WEnd

func Func01($x, $y)
mouseclick("left", $x, $y, 1)
SendF1()
endfunc

func SendF1()
;Сюда твой код #3 переписаный в функцию
endfunc
 
Автор
K

kamaz_masters

Новичок
Сообщения
8
Репутация
1
Попробывал вот такой метод.
Код:
Func Z12()
$Pos = PixelSearch(0, 0, 1024, 768, 0x36483b)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(100)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(300)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(100)
EndFunc
Записав поиск пикселя как одну из функций. Данная схема работает с условием что цвет есть на экране. Может кто подсказать как прописать условияе: если цвет не найдет то поиск по новой.


Добавлено:
Сообщение автоматически объединено:

Код:
$sPath = 'Процесс'

$answer = MsgBox(4, "Bot", "Продолжить?")

If $answer = 7 Then
MsgBox(0, "Bot", "Играйте честно!")
Exit
EndIf

$hWnd = WinGetHandle("Процесс (Window 1024x768)") ; Разрешение играемого окна

$F2=True ; Разрешение на запуск функции Z2()
$F3=True ; Разрешение на запуск функции Z3()
$F6=True ; Разрешение на запуск функции Z6()
$F8=True ; Разрешение на запуск функции Z8()
$F1=True ; Разрешение на запуск функции Z1()
$F12=True ; Наша новая переменная для разрешения запуска функции Z12()

While True

 If $F2 Then
   Z2() ; Запуск функции Z2()
   $F2=False ; Запрет запуска функции Z2()
   Sleep(1500)
   $T2=TimerInit()  ; Включение таймера T2
  EndIf
 
  If $F3 Then
   Z3() ; Запуск функции Z3()
   $F3=False ; Запрет запуска функции Z3()
   Sleep(1000)
   $T3=TimerInit() ; Включение таймера T3
  EndIf
  
  If $F6 Then
   Z6() ; Запуск функции Z4()
   $F6=False ; Запрет запуска функции Z4()
   Sleep(1000)
   $T6=TimerInit() ; Включение таймера T4
  EndIf
  
  If $F8 Then
   Z8() ; Запуск функции Z8()
   $F8=False ; Запрет запуска функции Z8()
   Sleep(1000)
   $T8=TimerInit() ; Включение таймера T8
  EndIf

 If $F1 Then
   Z1() ; Запуск функции Z1()
   $F1=False ; Запрет запуска функции Z1()
   Sleep(1000)
   $T1=TimerInit() ; Включение таймера T1
  EndIf
  
   If $F12 Then
   Z12() ; Запуск функции Z12()
   $F12=False ; Запрет запуска функции Z12()
   Sleep(1000)
   $T12=TimerInit() ; Включение таймера T12
  EndIf

; Проверка истечения таймером T2 10 секунд
If TimerDiff($T2)> 10*1000 Then $F2=True ; Разрешение на запуск функции Z2()

; Проверка истечения таймером T3 3 секунд
If TimerDiff($T3)> 3*1000 Then $F3=True ; Разрешение на запуск функции Z3()

; Проверка истечения таймером T6 8 секунд
If TimerDiff($T6)> 8*1000 Then $F6=True ; Разрешение на запуск функции Z6()

; Проверка истечения таймером T8 13 секунд
If TimerDiff($T8)> 13*1000 Then $F8=True ; Разрешение на запуск функции Z8()

; Проверка истечения таймером T1 20 минут
If TimerDiff($T1)> 20*60*1000 Then $F1=True ; Разрешение на запуск функции Z1()

; Проверка истечения таймером T12 10 секунд
If TimerDiff($T12)> 10*1000 Then $F12=True ; Разрешение на запуск функции Z12()

WEnd

; Функция Z3()

Func Z3()
ControlSend($hWnd, "", "", "{F12}")
Sleep(300)
ControlSend($hWnd, "", "", "{Tab}")
Sleep(200)
ControlSend($hWnd, "", "", "{F1}")
Sleep(500)
EndFunc

; Функция Z6()

Func Z6()
Sleep(500)
ControlSend($hWnd, "", "", "{F3}")
Sleep(800)
ControlSend($hWnd, "", "", "{F4}")
Sleep(300)
EndFunc

; Функция Z8()

Func Z8()
ControlSend($hWnd, "", "", "{F12 3}")
Sleep(100)
EndFunc

; Функция Z2()

Func Z2()
ControlSend($hWnd, "", "", "{F2}")
Sleep(300)
EndFunc

Func Z1()
ControlSend($hWnd, "", "", "{F11}")
Sleep(300)
EndFunc

; Функция Z12()

Func Z12()
$Pos = PixelSearch(0, 0, 1024, 768, 0x36483b)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(100)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(300)
MouseClick("left", $Pos[0], $Pos[1])
Sleep(100)
EndFunc

; КОНЕЦ


Вот сам бот. Не совсем получается реализовать свою задумку.
 

asa12

Новичок
Сообщения
66
Репутация
3
Код:
If $F2 Then
   Z2() ; Запуск функции Z2()
   $F2=False ; Запрет запуска функции Z2()
   Sleep(1500)
   $T2=TimerInit()  ; Включение таймера T2
  EndIf

Да нормально всё.
Sleep(1500) убери. У тя таймеры маленькие, скрипт не успевает по циклу проходить.
 
Автор
K

kamaz_masters

Новичок
Сообщения
8
Репутация
1
asa12
За это спасибо. Учту в дальнейшем. Но вопрос остается открытым - как реализовать в функции рекурсию? То есть если функция не находит цвет возвращался к начальному моменту, то есть к поиску цвета. Данные циклы бесконечны - нашел, кликнул - не нашел, ищу дальше пока не найду.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
чем ответ номер Раз не подошел?
 
Автор
K

kamaz_masters

Новичок
Сообщения
8
Репутация
1
axlwor
Прошу прощения, но не совсем его понял. Я скинул текст бота - не затруднит Вас по его примеру показать как будет выглядить Ответ №1?
 

axlwor

Скриптер
Сообщения
657
Репутация
147
этих ботов тут куча?
1. В основном цикле будет искаться пиксель
Код:
while 1
$pos = pixelsearch()
sleep(500)
wend

Ищется он вечно и бесконечно. С перерывами на...
2. Если что то нашлось, то @error <> 1. Значит поэтому условию начинаем что то делать.
Код:
If @error <> 1 Then Func01($aCoord[0], $aCoord[1])


По задумке. Это должно искать и что то выполнять. Теперь осталось понять что нужно выполнять и запихнуть это в func01.
Из условия задачи
Мне нужно соединить поиск цвета в окне -> клик по ней мышкой -> выполнение функции.
Код:
func Func01($x, $y)
mouseclick("left", $x, $y, 1, 1)
SendF1()
endfunc

На функцию SendF1() осталось неизвестное "выполнение функции"
 
Верх