Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Автокликер через поиск изображения

Страниц (3): [1] 2 3 »
 

1. Ouroboros - 05 Января, 2014 - 18:14:48 - перейти к сообщению
В общих словах, нужен был автокликер, который бы в игре за меня нажимал кнопочки в текстовом диалоге. Проблема вот в чем, первые семь шагов в диалоге(квест , суть которого - начал разговор, помешал карты в колоде, вскрыл карты по очереди с первой по пятую, нажал играть снова), так вот сама проблема в последнем пункте, первые 7 клавиш неизменны и вне зависимости от того, какая комбинация карт попадается и в каком порядке открываю карты, клавиши для них останутся на тех же местах, а вот самая последняя меняется в зависимости от того, какую комбинацию собрал игрок, и ее местоположение на экране постоянно меняется.Подумалось мне, что нужно попробовать через программу не автокликера, а непосредственно Кибора.(Думал можно так, первые 7 шагов по экранным координатам, перед этим загрузить изображение последней интерактивной клавиши,и на восьмом шаге сделать if(findimage....)<1)goto loop; но вот загвоздка вышла, как бы я ни старался, он не распознает это самое изображение, хотя делал все и перепроверял .Что могло пойти не так?Вот код который у меня вышел(промежуточный,паузы между кликами и прочее не редактировал)

win w=window ("Lineage II   ", "l2UnrealWWindowsViewportWindow", -1);
int Image_0[55][13];loadimage (#Image_0[0][0], "C:\Image_11.bmp"Подмигивание;
int PosX_0[512];int PosY_0[512];
if(w!=0){
activate(w);
if (attach(w,1)!=0){
loop:

pause(998);
mouse(LEFT, 1144, 299);
pause(1061);
mouse(LEFT, 1158, 399);
pause(874);
mouse(LEFT, 1161, 327);
pause(967);
mouse(LEFT, 1146, 352);
pause(749);
mouse(LEFT, 1154, 380);
pause(780);
mouse(LEFT, 1166, 414);
pause(1076);
mouse(LEFT, 1163, 436);
pause(1233);


if(findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1444, 946, -1)<1) goto loop;
else{mouse(LEFT, PosX_0[0],Pos_Y_0[0]);}
goto loop;
}
первые 7 шагов выполняет как положено, на последнем не может "увидеть" изображение и возвращается к началу цикла. Помогите пожалуйста
2. Kibor - 05 Января, 2014 - 18:32:30 - перейти к сообщению
Насколько я знаю в линейке все панели и кнопки имеют полупрозрачность, поэтому не находит. Посмотрите тему тут.
Там показано как это проверить и выбрать подходящие части изображения для поиска.
Еще можно воспользоваться расширенной findimage для поиска по неполному совпадению с колебаниями в цветах. Подробнее.
3. Ouroboros - 06 Января, 2014 - 04:54:33 - перейти к сообщению
 Kibor пишет:
Насколько я знаю в линейке все панели и кнопки имеют полупрозрачность, поэтому не находит. Посмотрите тему тут.
Там показано как это проверить и выбрать подходящие части изображения для поиска.
Еще можно воспользоваться расширенной findimage для поиска по неполному совпадению с колебаниями в цветах. Подробнее.

Посмотрю, а так в общем, в коде нету никаких ошибок?Не синтаксических я имею ввиду)
4. Kibor - 06 Января, 2014 - 05:34:31 - перейти к сообщению
 Ouroboros пишет:
Посмотрю, а так в общем, в коде нету никаких ошибок?Не синтаксических я имею ввиду)


Есть синтаксическая:
 Ouroboros пишет:
else{mouse(LEFT, PosX_0[0],Pos_Y_0[0]);}


Разбор кода:
 Ouroboros пишет:
if (attach(w,1)!=0)

Зачем нужна функция attach? В коде будет проверка курсора? В случае если нет - привязка потока не нужна.

 Ouroboros пишет:
win w=window ("Lineage II ", "l2UnrealWWindowsViewportWindow", -1);

Зачем получается указатель на окно если потом не используется? Везде экранные координаты.

mouse(LEFT, 1144, 299); - экранные координаты.
С оконными так:
mouse(LEFT, x?, y?, 1, w); - x, y, оконные координаты игры относительно левого и верхнего угла окна.
Узнать их - навести на нужное место в окне игры мышку и нажать CTRL+SHIFT+S. Смотреть координаты в Кибор в (мышь в клиентской части окна)

Опять по поводу оконных координат в findimage. Последний параметр не -1 надо , а указатель на окно w.
Тогда надо будет клик по кнопке так: mouse(LEFT, PosX_0[0],PosY_0[0], 1, w);

Относительно поиска кнопки...
Кнопка должна 1 быть? Зачем тогда массив для приема координат? int PosX_0[512];int PosY_0[512];
Достаточно так int PosX_0, PosY_0;
и в findimage искать 1 изображение. Указать в первом параметре не -1, а 1.
if(findimage(1, #Image_0[0][0], 0, #PosX_0, #PosY_0, 0, 0, 1444, 946, w)<1)
Клик так:
mouse(LEFT, PosX_0,PosY_0, 1, w);

Так же если используем оконные координаты надо искать не по разрешению экрана, а по окну. Поэтому надо
if(findimage(1, #Image_0[0][0], 0, #PosX_0, #PosY_0, 0, 0, w.widthclient, w.heightclient, w)<1)

/////////////////////////////////////

Можно и экранные координаты использовать как у Вас, но тогда при сдвиге окна координаты записанные в
CODE:
......
mouse(LEFT, 1161, 327);
pause(967);
mouse(LEFT, 1146, 352);
.......

будут не верные.
Это можно решить вставив такой код после получения указателя:
 Цитата:
win w=window ("Lineage II ", "l2UnrealWWindowsViewportWindow", -1);
w.widthclient=ширина окна
w.heightclient=высота окна
w.leftclient=левый угол по x
w.topclient=левый угол по y
//Узнаются с помощью CTRL+SHIFT+S ПЕРЕД записью координат
moveclient(w);

Этот скрипт после запуска восстановит позицию и размеры окна как была при записи. Тогда можно использовать экранные координаты.

/////////////////////////////

Сумбурно? Я не могу так просто объяснить все нюансы. Предлагаю почитать
Функции для идентификации окон и контролов.
Переименование, сдвиг и изменение размеров окон.
Сканирование экрана и поиск изображений
5. Ouroboros - 06 Января, 2014 - 05:38:50 - перейти к сообщению
Все равно не выходит..много перепробовал с разбросом в цветах, процентами совпадений, но все равно никак, ни 1 раза он еще не находил нужную кнопку.В контекстном меню фон бэкграунда как бы черный, но он полупрозрачный и просвечивает местность чаров и т.п. Я подумал, что действительно выставив по неполному совпадению оно что-то да найдет, разные варианты пробовал, достичь результата так и не удалось. Прилагаю собственно кнопочку, которую нужно найти, и само окошко текста чтоли, помогите, может я что-то упускаю...

6. Kibor - 06 Января, 2014 - 05:45:27 - перейти к сообщению
Так я не смогу помочь. Надо смотреть самому как там конкретно надо. Возможно через доступ посмотрю позже.
7. Ouroboros - 06 Января, 2014 - 06:01:06 - перейти к сообщению
 Kibor пишет:
Так я не смогу помочь. Надо смотреть самому как там конкретно надо. Возможно через доступ посмотрю позже.

Все равно спасибо за ответ!
(Добавление)
Кажется мне, что я ввел вас в заблуждение, да и сам не по той дороге пошел.Я написал вам, что нужно нажимать одну кнопку, хотя на самом деле это не является кнопкой,гиперссылка чтоли? Вобщем от всего остального текста в квесте эти гиперссылки выделяются слабо-синим цветом, и буквы,ясно дело, в этих гиперссылках непрозрачные.Первые 7 шагов по координатам окна проходим, а можно ли сделать на последнем шаге так, чтобы искался цвет пикселя?и если цвет найден, то нажатие мыши и цикл по-новой?Возможно возникнет совпадение цветов на экране вокруг персонажа с тем же цветом, что и у ссылки, но это мало вероятно, темболее можно зумом приблизить так, чтобы виднелись совершенно другие оттенки, такое реализовать чисто теоретически можно?
8. Ouroboros - 06 Января, 2014 - 08:18:35 - перейти к сообщению
Проблему решил, вместо картинки целого предложения, максимально приблизил и выделил пиксель из слова и его искал как картинку. Большое спасибо за помощь) Последний вопрос, можно ли это как-то оформить в фоновый режим, как в автокликере?
9. Kibor - 06 Января, 2014 - 10:31:37 - перейти к сообщению
 Ouroboros пишет:
Проблему решил, вместо картинки целого предложения, максимально приблизил и выделил пиксель из слова и его искал как картинку.

Теоретически и так можно... Но я бы оставил этот способ для других подобных программ Хм

Постарался подробнее описать конкретно на Вашем примере как это надо делать в Кибор.

Подготовка изображений для поиска в Кибор

 Ouroboros пишет:
можно ли это как-то оформить в фоновый режим

Оформить можно, но в линейке не будет кликать в фоновом режиме. Только клавиатура.
10. Ouroboros - 06 Января, 2014 - 10:50:04 - перейти к сообщению
Cпасибо за разъяснение! И не жалко вам своего времени,добрый вы человек)

Powered by ExBB FM 1.0 Final