Что нового

[Автоматизация] Поворот камеры в сторону моба по радару.

Автор
N

Nurgllz

Новичок
Сообщения
26
Репутация
2
Без многооконки autoit не действует, gayguard блочит его.

Я тут тоже накопал кое что:
-Поиск кластера пикселей
-Мультипоточность в AutoIt

На выходных буду разбираться, пока что они сложноваты для моего разума)
 

djv

Новичок
Сообщения
1
Репутация
0
Жаль что тема как видимо загнулась =( Выложите хоть недоделанный бот :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Global $WinName = "PixelSearch"
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Opt("MustDeclareVars", 1) ;Форсируем задачу переменных. Тоесть после задания этой опции перед тем как нам использовать какую-либо переменную нам надо обозначить ее.
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("^{PAUSE}", "_Exit")
Global $Paused
Sleep(1000)
Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
        sleep(100)
        ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
EndFunc

Func _Exit()
    MsgBox(0,"","Выход")
    Exit
EndFunc

WinActivate($WinName)
WinWaitActive($WinName)
;~ opt("SendKeyDownDelay", 150)

;~ While 1WinActive($WinName)
;~ WinActivate($WinName)
;~ WinWaitActive($WinName)
;~ local $pos = MouseGetPos()
;~ MouseDown("Right")
;~ MouseMove($pos[0]+30, $pos[1], 100)
;~ MouseUp("Right")
;~ MouseClickDrag("left", $pos[0], $pos[1], $pos[0]+10, $pos[1], 100)
;~ Exit
While 1
    DefineArea()
WEnd
;~ WEnd

Func SearchTarget($x1, $y1, $x2, $y2)
    Local $var
    For $x = $x1 to $x2 Step 10
        For $y = $y1 To $y2 step 10
            MouseMove($x, $y, 0)
            Sleep(20)
            $var = PixelSearch(10, 85, 822, 551, 0xcecbc6)
            If Not @error Then 
;~                 PixelSearch($var[0]+1, $var[1], $var[0]+1, $var[1], 0xcecbc6)
;~                 if not @error Then
;~ Exit
                    GetTarget($x, $y)                    
                    ExitLoop(2)
;~                 EndIf
            EndIf
        Next
    Next
    MouseDown("Right")
    MouseMove($x-5, $y, 300)
    Sleep(500)
    MouseUp("Right")
;~     Send("{LEFT DOWN}")
;~     Sleep(1500)
;~     Send("{Left UP}")
EndFunc

Func GetTarget($x ,$y)
;~     MsgBox(0,"","")
    For $i = $y To $y-30 Step -1
        MouseMove($x, $i, 10)
        PixelSearch(10, 85, 822, 551, 0xcecbc6)
        if @error Then
            Sleep(1000)
            MouseDown("Right")
            MouseMove($i-5, $y, 300)
            Sleep(500)
            MouseUp("Right")
            
;~             Send("{LEFT DOWN}")
;~             Sleep(1500)
;~             Send("{Left UP}")
;~             MouseClickDrag("RIGHT", $i, $y, $i+20, $y, 100)
            Return
        Else
            ExitLoop
        EndIf
    Next
    MouseClick("left", $x, $i, 1, 0)
    Sleep(1000)
    Do
    PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
    if Not @error Then Kill()
    
    Until @error
;~     PixelSearch(10, 85, 822, 551, 0xcecbc6)
EndFunc


Func Kill()
    Local $exitloop = 0
    Do
        Do
            Send("{F1}")
            PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
        Until @error
        Send("{ESC}")
        Mouseclick("right")
        For $i = 1 To 10 step 1
            Send("{F4}")
            Sleep(100)
        Next
    For $i = 1 To 5 step 1
        PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
        If Not @error Then 
            ExitLoop
        Else
            $exitloop = 1
        EndIf
        Sleep(250)
    Next
    Until $exitloop = 1
    
    Sleep(100)
    Send("{F2}")
    Sleep(500)
    PixelSearch(453, 30, 453, 30, 0xAB3022, 5)
    If Not @error Then
        Kill()
    EndIf
EndFunc
        
Func DefineArea()
    Local $col = PixelSearch(10, 85, 822, 551, 0xFCFCFC)
    If Not @error Then
        Local Const $x1 = $col[0], $y1 = $col[1], $x2 = $col[0]+50,    $y2 = $col[1]+50
;~         For $ix = $x1 To $x2 Step 5
;~             MouseMove($ix, $y1, 10)
;~         Next
;~         For $iy = $y1 To $y2 Step 5
;~             MouseMove($x2, $iy, 10)
;~         Next
;~         For $ix = $x2 To $x1 Step -5
;~             MouseMove($ix, $y2, 10)
;~         Next
;~         For $iy = $y2 To $y1 Step -5
;~             MouseMove($x1, $iy, 10)
;~         Next
        SearchTarget($x1, $y1, $x2, $y2)
    Else
        local $pos = MouseGetPos()
        MouseDown("Right")
        MouseMove($pos[0]-5, $pos[1], 300)
        Sleep(500)
        MouseUp("Right")
    EndIf
EndFunc


    


















































; #FUNCTION# ;===============================================================================
;
; Name...........: PixelSearchEx
; Description ...: Ищит в заданной области поиска пиксели которые по мимо цвета соответствуют еще и задаваемым в отдельной функции условиям.
; Syntax.........: PixelSearchEx($x1, $y1, $x2, $y2, $col, $shade, $Case, $step, $hwnd)
; Parameters ....: $x1, $y1 - Координаты левого верхнего угла области поиска.
;                  $x2, $y2 - Координаты правого верхнего угла области поиска.
;                  $col - Цвет пикселя который мы будем искать в формате 0x000000.
;                  $shade - [опционально] Число от 0 до 255 отражающее варианты красного, зеленого и голубого оттенков цвета. По умолчанию 0 (точное совпадение).
;                  $Case - [опционально] Номер условия которое будет обработано после нахождения подходящего по цвету пикселя. По умолчанию 0 (не обрабатываем доп условия).
;                   $step - [опционально] Вместо того чтобы сканировать все пиксели подряд, можно использовать числа от 2 и выше чтобы задать шаг сканирования (для того чотбы ускорить процесс). К примеру задав 2, будет проверяться каждый второй пиксель. По умолчанию 1.
;                  $hwnd - [опционально] Заголовок окна которое должно будет использоваться командой.
; Return values .: Success - Возвращает одномерный массив содержащий координаты найденного пикселя. (Array[0] = x, Array[1] = y).
;                  Failure - Возвращает 0 и присваивает @error одно из следующих значений:
;                  @error = 1 : Если в области сканирования небыло найдено ниодного пикселя подходящего под заданные условия.
;                  @error = 2 : Если была попытка обратиться к не существующему условию.
; Author ........: Belfigor
; Modified.......:
; Remarks .......: 
; Related .......: 
; Link ..........; http://autoit-script.ru/index.php/topic,182.0.html
; Example .......; Ога
;
; ;==========================================================================================
Func PixelSearchEx($x1, $y1, $x2, $y2, $col, $shade=0, $Case = 0, $step=1, $hwnd=0) 
    Local Const $Con[8] = [$x1, $y1, $x2, $y2, "0x"&Hex($col, 6), $shade, $step, $hwnd] 
    While 1
        Local $Check = PixelSearch($x1, $y1, $x2, $y2, $Con[4], $Con[5], $Con[6], $Con[7]) 
        If Not @error Then 
            If CheckPixel($Check, $Case) Then 
                Return $Check 
            Else 
                If @error Then 
                    SetError(2) 
                    Return 0 
                Else
                    $x1 = $Check[0]+1
                    $y1 = $Check[1]
                    $y2 = $Check[1] 
                EndIf
            EndIf
        Else 
            If  $y2 < $Con[3] Then 
                $x1 = $Con[0]
                $x2 = $Con[2]
                $y2 = $Con[3] 
                $y1 = $y1+1 
            Else
                SetError(1) 
                Return 0 
            EndIf
        EndIf
    WEnd
EndFunc ;==> PixelSearchEx

; #FUNCTION# ;===============================================================================
;
; Name...........: CheckPixel
; Description ...: Хранит в себе различные задаваемые пользователем условия проверок пикселей. Обрабатывает пиксель по полученным из PixelSearchEx координатам на предмет соответствия полученному из PixelSearchEx условию
; Syntax.........: CheckPixel($Check, $Case)
; Parameters ....: $Check - Массив содержащий в себе X и Y координаты пикселя который необходимо проверить. ($Check[0] = x, $Check[1] = y).
;                  $Case - Номер условия которое будет использовано при обработке пикселя.
; Return values .: Success - Возвращает True
;                  Failure - Возвращает False
;                  @error = 1 : В случае попытки обратиться к незаданному условию.
; Author ........: Belfigor
; Modified.......:
; Remarks .......: Приведенные в CheckPixel условия - является лишь примером. Все условия проверок вам придется прописывать своими руками. 
;                   В прочем ничего не мешает вам использовать за основу уже имеющийся вариант CheckPixel.
;                   Так же ничего вам не мешает написать свою уникальную функцию, единственное условие которое от нее требуется это возврат True or False в PixelSearchEx
;                   В случае использования 0 как условия проверки, функция тут же вернут True а сам PixelSearchEx сработает как стандартный PixelSearch.
;                   То что в данном случае в условиях использованы только PixelSearch - не является ограничением функции. Условия можно дописывать какие угодно. На сколько хватит фантазии.
; Related .......: 
; Link ..........; http://autoit-script.ru/index.php/topic,182.0.html
; Example .......; Ога
;
; ;==========================================================================================
Func CheckPixel($Check, $Case)
    Select
        Case $Case = 0    
            Return True
        Case $Case = 1    
                                PixelSearch($Check[0]+3, $Check[1]+3, $Check[0]+3, $Check[1]+3, 0x00E125, 5)
            If Not @error Then Return True
        Case $Case = 2
                                PixelSearch($Check[0]-2, $Check[1]+5, $Check[0]-2, $Check[1]+5, 0x00E125, 5)
            If Not @error Then     PixelSearch($Check[0]-4, $Check[1]+2, $Check[0]-4, $Check[1]+2, 0x00E125, 5)
            If Not @error Then Return True
        Case $Case = 3
                                PixelSearch($Check[0]+7, $Check[1]+3, $Check[0]+7, $Check[1]+3, 0x00E125, 5)
            If Not @error Then  PixelSearch($Check[0]+3, $Check[1]+7, $Check[0]+3, $Check[1]+7, 0x00E125, 5)
            If Not @error Then  PixelSearch($Check[0]+9, $Check[1]+5, $Check[0]+9, $Check[1]+5, 0x00E125, 5)
            If Not @error Then Return True
        Case $Case = "Синий кружок"        
            MsgBox(0,'','!!!')
            Return True
                
        Case Else
            SetError(1)
            Return False
    EndSelect
    Return False
EndFunc ;==> CheckPixel


Ну если это тот скрипт который я думаю, он ищит крипов и убивает их, правда препятствия для него ректальны УГ короче.
 
Верх