Продолжаю писать бота для игры. После нескольких недель использования pixelsearch и pixelgetcolor понял насколько они могут быть быть не надёжны. На сайте игры произошли какие-то изменения и всё перестало работать. Прям вот с начала и до конца. Мышь промахивается. Пиксели не тех цветов. Координаты известных цветов неверны. Решил бороться через bmpsearch. Собственно родилась такая вот внутренняя функция, которая подготавливает BMPsearch к работе, производит щелчок мыши, засыпание и удаляет объекты.
Не знаю есть ли смысл приводить весь код целиком - у вас он просто не запустится. Но суть такая. Есть пять аккаунтов. И цикл от 1 до 5. В теле цикла по сути просто всё время ищутся картинки и кликается по ним. А иногда и просто без поиска картинок по другим условиями происходит щелчок мыши.
Проблема в том что периодически программа крешится с одной и той же ошибкой (см. картинку). Почему периодически? Потому что я постоянно вношу изменения и иногда всё ок. Иногда крэш. Например в последний раз я попытался уйти от циклов где много раз выполняется моя функция ClickIfPictureSleep. Так вот стало хуже. В цикле сейчас крутится простой pixelchecksum. Ошибка всегда одна и та же. Что-то не так с bmpsearch.
Если надо могу выложить рабочий код и оптимизированный, но не рабочий. Но мне кажется что я что-то не так делаю внутри своей функции ClickIfPictureSleep.
Почему-то не могу вложить картинки...
Код:
Func MoveClickSleep($xPos, $yPos, $speed, $sleep) ;X Y скорость мыши и засыпание
MouseMove($xPos, $yPos, $speed)
MouseClick("left", $xPos, $yPos, 1, 1)
Sleep($sleep)
EndFunc ;==>MoveClickSleep
Func ClickIfPictureSleep($pic, $sleep1)
_GDIPlus_Startup()
Local $hBitmap0 = _ScreenCapture_Capture()
Local $hImage0 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap0)
Local $hSource0 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage0)
Local $hBmp0 = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\" & $pic)
Local $hFind0 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp0)
Local $aCoords0 = _BmpSearch($hSource0, $hFind0)
If Not @error Then
MoveClickSleep($aCoords0[1][2] + Int(($aCoords0[1][0]) / 2), $aCoords0[1][3] + Int(($aCoords0[1][1]) / 2), 2, $sleep1)
Return SetError(0)
Else
Return SetError(1)
EndIf
$aCoords0 = 0
_WinAPI_DeleteObject($hBitmap0)
_GDIPlus_BitmapDispose($hImage0)
_WinAPI_DeleteObject($hSource0)
_GDIPlus_BitmapDispose($hBmp0)
_WinAPI_DeleteObject($hFind0)
_GDIPlus_Shutdown()
EndFunc ;==>ClickIfPictureSleep
Не знаю есть ли смысл приводить весь код целиком - у вас он просто не запустится. Но суть такая. Есть пять аккаунтов. И цикл от 1 до 5. В теле цикла по сути просто всё время ищутся картинки и кликается по ним. А иногда и просто без поиска картинок по другим условиями происходит щелчок мыши.
Проблема в том что периодически программа крешится с одной и той же ошибкой (см. картинку). Почему периодически? Потому что я постоянно вношу изменения и иногда всё ок. Иногда крэш. Например в последний раз я попытался уйти от циклов где много раз выполняется моя функция ClickIfPictureSleep. Так вот стало хуже. В цикле сейчас крутится простой pixelchecksum. Ошибка всегда одна и та же. Что-то не так с bmpsearch.
Если надо могу выложить рабочий код и оптимизированный, но не рабочий. Но мне кажется что я что-то не так делаю внутри своей функции ClickIfPictureSleep.
Почему-то не могу вложить картинки...