Всем привет.
Решил изучать AutoIt для автоматизации рутинных действий по работе, но для начала решил потренироваться на играх.
Для начала захотел попробовать написать простого бота для игры, который в определенных моментах просто проходит по координатам и кликает на них либо один, либо 2 раза левой кнопкой мыши, а в других случаях пробует найти участок изображения и на основании того найдено оно или нет либо выдает ошибку, либо продолжает скрипт, а в некоторых случаях использует возвращаемые координаты найденного рисунка и подставляет их для клика мышью. Решил для этого воспользоваться функцией BmpSearch, т.к. с помощью нее по примеру у меня получилось сразу передвинуть мышь в тестовом скрипте, а с помощью ImageSearch.au3 не вышло и не смог её победить. Пиксельсерч не подходит из-за неудобства использования в конкретной задаче.
Я решил сразу подойти к задаче, по моему мнению, с правильной стороны и адекватно организовывать функции используемые многократно и потом лишь вызывать их с нужными параметрами, а не плодить одинаковый код.
Вот мой код на котором я пытаюсь разобраться с пользовательскими функциями:
Функция _MovCl отлично работает, вызываю её и передаю в виде параметров координаты и количество необходимых мне нажатий и функция грамотно отрабатывает. А вот обернуть функцию bmpsearch в свою функцию _Fbmp у меня не получается никак, я хотел бы в эту функцию передавать только ссылку на необходимый мне bmp файл и далее чтобы она возвращала координаты, либо ошибку, далее я бы уже с помощью условия If Then Else прописал бы, что в случае ошибки остановить скрипт, а если ошибки нет и изображение найдено, то либо продолжить скрипт, ибо условие выполнено, либо взять координаты изображения и подставить в функцию управления мышью. Но у меня постоянно выходят ошибки либо в массиве координат, либо в выражении If Else. Я до этого где-то прочитал, что внутри пользовательстких функций нельзя вызывать другие функции, может быть проблема в этом заключается, подскажите друзья как можно решить этот вопрос и можно ли подойти к решению данной задачи выбранным мной способом или возможно есть более адекватное решение, до которого я пока не смог дойти сам.
И еще один вопрос, если все же мое решение имеет место быть, есть ли способ назначить переменной значение координаты из массива, в данном примере можно ли сделать что-то подобное $x = $aCoords[1][2] , чтобы назначить переменной х значение координаты х найденного рисунка из массива?
Заранее спасибо за помощь всем кто отзовется :IL_AutoIt_1:
Решил изучать AutoIt для автоматизации рутинных действий по работе, но для начала решил потренироваться на играх.
Для начала захотел попробовать написать простого бота для игры, который в определенных моментах просто проходит по координатам и кликает на них либо один, либо 2 раза левой кнопкой мыши, а в других случаях пробует найти участок изображения и на основании того найдено оно или нет либо выдает ошибку, либо продолжает скрипт, а в некоторых случаях использует возвращаемые координаты найденного рисунка и подставляет их для клика мышью. Решил для этого воспользоваться функцией BmpSearch, т.к. с помощью нее по примеру у меня получилось сразу передвинуть мышь в тестовом скрипте, а с помощью ImageSearch.au3 не вышло и не смог её победить. Пиксельсерч не подходит из-за неудобства использования в конкретной задаче.
Я решил сразу подойти к задаче, по моему мнению, с правильной стороны и адекватно организовывать функции используемые многократно и потом лишь вызывать их с нужными параметрами, а не плодить одинаковый код.
Вот мой код на котором я пытаюсь разобраться с пользовательскими функциями:
Код:
#include <ScreenCapture.au3>
#include <BmpSearch.au3>
#include <AutoItConstants.au3>
WinActivate("Название окна")
_MovCl (956, 977,1)
_MovCl (940, 700,2)
_Fbmp("\1.bmp")
If @error Then MsgBox(0,"Error","Error Image not found")
Else MouseMove($aCoords[1][2], $aCoords[1][3], 10)
EndIf
Func _MovCl($ix=0,$iy=0,$cl=1)
If $cl=1 Then MouseClick("left",$ix, $iy,1,5)
If $cl=2 Then MouseClick("left",$ix, $iy,2,5)
Sleep(2000)
EndFunc
Func _Fbmp ($bmp=0)
_GDIPlus_Startup()
If $bmp=0 Then @error
$hBitmap = _ScreenCapture_Capture()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)
$hSource = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & $bmp)
$hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)
$aCoords = _BmpSearch($hSource, $hFind, 1)
Return $aCoords
EndFunc
Функция _MovCl отлично работает, вызываю её и передаю в виде параметров координаты и количество необходимых мне нажатий и функция грамотно отрабатывает. А вот обернуть функцию bmpsearch в свою функцию _Fbmp у меня не получается никак, я хотел бы в эту функцию передавать только ссылку на необходимый мне bmp файл и далее чтобы она возвращала координаты, либо ошибку, далее я бы уже с помощью условия If Then Else прописал бы, что в случае ошибки остановить скрипт, а если ошибки нет и изображение найдено, то либо продолжить скрипт, ибо условие выполнено, либо взять координаты изображения и подставить в функцию управления мышью. Но у меня постоянно выходят ошибки либо в массиве координат, либо в выражении If Else. Я до этого где-то прочитал, что внутри пользовательстких функций нельзя вызывать другие функции, может быть проблема в этом заключается, подскажите друзья как можно решить этот вопрос и можно ли подойти к решению данной задачи выбранным мной способом или возможно есть более адекватное решение, до которого я пока не смог дойти сам.
И еще один вопрос, если все же мое решение имеет место быть, есть ли способ назначить переменной значение координаты из массива, в данном примере можно ли сделать что-то подобное $x = $aCoords[1][2] , чтобы назначить переменной х значение координаты х найденного рисунка из массива?
Заранее спасибо за помощь всем кто отзовется :IL_AutoIt_1: