Что нового

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

CrazyKing

Новичок
Сообщения
24
Репутация
0
Добрый день!
Изначально было необходимо поиском по всему экрану найти координаты пикселя и кликнуть на него.
Делал так:
Код:
While $bPaused
$coord = PixelSearch(@DesktopHeight, 0, 0, @DesktopWidth, 0x4B535A) ;Кожа 
If Not @error Then
    MouseClick("left", $coord[0], $coord[1])
	sleep(3000)
EndIf
$coord = PixelSearch(@DesktopHeight, 0, 0, @DesktopWidth, 0x765329) ;Телега с едой
If Not @error Then
    MouseClick("left", $coord[0], $coord[1])
	sleep(3000)
EndIf
$coord = PixelSearch(@DesktopHeight, 0, 0, @DesktopWidth, 0xDCE6F4) ;Чайник
If Not @error Then
    MouseClick("left", $coord[0], $coord[1])
	sleep(3000)
EndIf
$coord = PixelSearch(@DesktopHeight, 0, 0, @DesktopWidth, 0x836940) ;Мешок зерна
If Not @error Then
    MouseClick("left", $coord[0], $coord[1])
	sleep(3000)
EndIf
$coord = PixelSearch(@DesktopHeight, 0, 0, @DesktopWidth, 0x5B3E11) ;Бочка
If Not @error Then
    MouseClick("left", $coord[0], $coord[1])
	sleep(3000)
EndIf
WEnd
WEnd
В цикле искал сразу несколько пикселей, при нахождении кликал.
Возникла проблема, на экране очень много идентичных пикселей, и скрипт кликает не туда куда надо. :mad:
Возможно ли сделать что-то вроде такого условия:
  • если найдены координаты двух пикселей рядом, кликать по центру между ними;
  • либо в одном условии искать сразу несколько пикселей на определённом растоянии и кликать на один из них.
Возможно у вас будут другие варианты решения моей проблемы, буду благодарен за помощь.
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
не кто не сталкивался с такой проблемой? :'(
 

nowost

Знающий
Сообщения
178
Репутация
17
выложи скрин, думаю станет понятнее что ты ищешь
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
На примере бочек. Если взять один пиксель, то скрипт летает по всему монитору и ищет похожие и соответственно натыкается не только на бочки. Вот мне и надо как-то унифицировать эти бочки, что бы скрипт тыкал туда куда надо.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А что происходит с бочкой, когда ты по ней кликнул?
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Исчезает.


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

Нашел что-то вроде этого:
Код:
#include <ImageSearch.au3>
Opt("MustDeclareVars", 1)
Dim $Color[4] = [0x4DB849, 0x3981C3, 0x2F7ABB, 0xFCD209]
Dim $Shade[4] = [5, 5, 5, 5]
Example(145, 628, 1500, 1500)

Func Example($x1, $y1, $x2, $y2)
    Local $var = PixelSearch($x1, $y1, $x2, $y2, $Color[0], $Shade[0])
    If Not @error Then
        For $i = 1 To 3 Step 1
            $var = PixelSearch($var[0]+1, $var[1], $var[0]+1, $var[1], $Color[$i], $Shade[$i])
            If Not @error Then
                If $i = 3 Then
                    MouseMove($var[0], $var[1])
                    MsgBox(0,"","Found")
                Else
                    ContinueLoop
                EndIf
            Else
                MsgBox(0,2,"Not Found")
                ExitLoop
            EndIf
        Next
    Else
        MsgBox(0,1,"Not Found")
    EndIf
EndFunc
Как я понимаю идёт поиск по 4-ём пикселям, но не как не могу взять в толк, как он считает расстояние от первого пикселя. Даже если пытаюсь указать один цвет, всё равно не находит. :'(
 

nowost

Знающий
Сообщения
178
Репутация
17
а если мышку навести на бочку что происходит ?


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

может меняется курсор или тултип какой вылазит ?
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Он подсвечивает бочку, и надпись появляется.
 

nowost

Знающий
Сообщения
178
Репутация
17
так води мышкой по всему экрану и жди когда надпись появится. как появилась то кликай
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Там флеш, я боюсь он надпись не найдет и при этом он не только на нужные предметы мышку наводит, а они по всей карте спрятаны.
 

nowost

Знающий
Сообщения
178
Репутация
17
ну попробуй всеже,
Код:
MouseGetCursor
может отловит
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Эта фунция возвращает значение под курсором? Примерчик не дадите?
 

nowost

Знающий
Сообщения
178
Репутация
17
ну вы по ссылке то пройдите в справку. там вроде понятно написано и пример есть. Функция возвращает состояние курсора. Часы, стрелка итд... Возможно получится отловить состояние курсора, если скажем ID курсора изменилось, то значит под курсором кликабельный объект
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
CrazyKing
Создайте двумерный массив, заполните его данными вида:
OFFSETX, OFFSETY, COLOR.

1)Делаете в цикле скриншот окна с игрой;
2)Разбираете его на двумерный массив пикселей вида [X][Y] = Color;
3)Находите все цвета ( любой цвет с сундука );
4)Прямо в цикле поиска при совпадении условия проверяем соседние пиксели исходя из нашего шаблона:
If aPixels[X+OFFSETX][Y+OFFSETY] = COLOR Then $iMatches += 1

5)И наконец исходя из количества найденных совпадений ( $iMatches ) вы можете судить - сундук это или нет.
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
:blink: К сожалению пока это для меня тёмный лес. Попробую завтра что нибудь с курсором придумать, спасибо за наводку.
 

Milex

Новичок
Сообщения
1
Репутация
0
CrazyKing, так для игры Settlers Online есть скрипт готовый для поиска коллекционных предметов.

Скрипт «Подсветка коллекций» делает проще сбор коллекционных предметов, позволяет сэкономить массу сил, времени и гарантирует 100%-й результат. Суть метода заключается в замене картинок предметов на изображение красного шарика.
http://osettlers.com/ru/toolbox/illumination-collections
Результат использования скрипта:
illumination_collections_3.png
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Видел такую прелесть, но там, как я понимаю, необходимо почти каждый раз допиливать браузер сторонней утилитой. Но за наводку спасибо.
 
Верх