Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Dampil on March 16, 2016, 08:14:49 PM

Title: Поиск строки из скриншота
Post by: Dampil on March 16, 2016, 08:14:49 PM
Доброго времени суток! Проблемка небольшая возникла при попытке написания "бота" для браузерки glory-wars.net. Имеется необходимость оценки числового параметра в окне. В принципе, можно делать скриншот и оценивать картинки, но диапазон интересующих чисел от 0 до 16, соответственно код начинает попахивать индуизмом и лишними if. Вот и возник вопрос, есть ли возможность из окна выцепить число напрямую. Пока писАл, появились мысли насчёт проверки по картинке... Просьба всё-таки ответить, если указанная выше возможность существует
Title: Re: Поиск строки из скриншота
Post by: quant13 on March 16, 2016, 09:26:29 PM
http://crapware.aidf.org/forum/index.php?topic=33.msg8320#msg8320

Кнопку "Поиск" с форумов можно удалять. Она больше никому нафиг не нужна.
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 16, 2016, 09:58:46 PM
http://crapware.aidf.org/forum/index.php?topic=33.msg8320#msg8320

Кнопку "Поиск" с форумов можно удалять. Она больше никому нафиг не нужна.

И тебе привет и спасибо за конструктивную, пусть и несколько негативно эмоционально окрашенную критику. Прошу прощения, в силу обстоятельств субъективного характера не смог придумать поисковый запрос
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 16, 2016, 11:16:13 PM
Kirill, там всё проще: тупо счётчик, согласно которому можно сделать за день N одних действий и M других. Прозрачность и иные "извращения" отсутствуют.
Вид строки примерно:
"Баллов первого вида: N+#10#13+Баллов второго вида: M"
Если и того и другого по нулям, то ставим перса работать.
Сорь за некоторое косноязычие описания строки, учился "Объектному дяде Боре" да и то давно. Подумываю над вариантом проверки равенства N и M нулю по картинке, что сразу отрежет почти весь диапазон, указанный выше
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 17, 2016, 12:05:03 AM
Всем спс за поддержку. Криво-косо, но уже работает. Если кому нужен скрипт, к понедельнику(скорей всего) выкину сюда
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 19, 2016, 10:34:43 PM
то ли лыжи не едут, то ли смазаны плохо...
Сегодня скрипт перестал работать от слова "совсем". Кто-нить сталкивался с таким? Сам скрин и "поисковые" файлы выложил, сделаны в одном окне, при одинаковом разрешении.
Code: (clickermann) [Select]
getscreen
if_picture_in(300,629, 513,661,"1.bmp")
остальной код не выкладываю, сбой в самом начале идёт:(
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 20, 2016, 04:47:23 PM
насчёт изменения - не совсем понял. Просто пробовал без цветокоррекции делать со свежего скрина "вырезку", эффекта ноль. Или имелось в виду, что меняется цветовое наполнение фрагмента при перезагрузке страницы? то бишь, часть экрана заливается цветом, на глаз неотличимым от чёрного(например), но с некоторыми отклонениями по "составляющим" цвета?
с применением цветокоррекции( рекомендую COLORMODE(6)) сохраняете и ищите новые.
если правильно понял, то что-то типа
Code: (clickermann) [Select]
getscreen
colormode(6)
screenshotex(по интересующим координатам)
для сохранения "образца"?
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 20, 2016, 05:27:25 PM
кстати, закономерный вопрос. В одной из тем писАлось, что if_picture_in - вполне себе процедура. При этом в хелпе напрямую указано, что это тот же if. Так всё же, условие или процедура?
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 20, 2016, 05:34:57 PM
Code: (clickermann) [Select]
getscreen
colormode(6)
if_picture_in(268,690,424,716,"shot0001.bmp")
//   beep(100,1000) использовал для проверки выполнения условия
   if_picture_in(270,650,426,678,"shot0000.bmp")
      move(230,241)
      wait(3)
      LCLICK(230,241)  // город
      wait(3)
      move(283,289)
      wait(3)
      LCLICK(283,289)  // работа
      wait(3)
      move(833,620)
      wait(3)
      LCLICK(833,620)  // встаём на час
      wait(3590)
      move(956,194)
      wait(3)
      LCLICK(956,194)  // идём за голдой
      wait(3)
      move(759,626)
      wait(3)
      LCLICK(759,626)  // берём голду
   end_if   
end_if
мб, где-то в коде накосячил? Хотя, сомневаюсь, без условий кликает, аж за ушами трещит
"образцы" сняты тоже при колормод 6, размер "окна поиска" больше искомого изображения.
Title: Re: Поиск строки из скриншота
Post by: Кликермен on March 20, 2016, 06:36:39 PM
Code: (clickermann) [Select]
getscreen
colormode(6)
if_picture_in(268,690,424,716,"shot0001.bmp", -1, 100)
//   beep(100,1000) использовал для проверки выполнения условия
   if_picture_in(270,650,426,678,"shot0000.bmp", -1, 100)
      move(230,241)
      wait(3)
      LCLICK(230,241)  // город
      wait(3)
      move(283,289)
      wait(3)
      LCLICK(283,289)  // работа
      wait(3)
      move(833,620)
      wait(3)
      LCLICK(833,620)  // встаём на час
      wait(3590)
      move(956,194)
      wait(3)
      LCLICK(956,194)  // идём за голдой
      wait(3)
      move(759,626)
      wait(3)
      LCLICK(759,626)  // берём голду
   end_if   
end_if
 

поколдуи если что над процентом соответствия, снизь 100, но менее, чем 70%
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 20, 2016, 07:13:35 PM
Всем спс за советы. Мешал бот для WoW под названием WRobot(мог бы и догадаться, он и Punto Switchery портит работу, такое чуйство, что с буфером активно работает. Не уверен на все 100, ибо строение системы помню только в плане вытесняющей многозадачности) и/или долгое невыключение компа. Заработало, блин. Следствие второго закона Чизхольма в действии ;D Жаль, плюсомёт в форум не встроен, всем бы выразил "спс" за терпимость к моим завываниям.. Как и обещал, код выложу как только "докручу". Пока только устраивается на работу, если все "баллы" закончились.

Кстати, появилась непонятка: scanpicture выдавал массив на полторы тысячи элементов... Эт как? Если правильно понимаю, он должен выдавать координаты нахождения искомого изображения или я не правильно понимаю?
Title: Re: Поиск строки из скриншота
Post by: Vint on March 21, 2016, 09:01:29 AM
кстати, закономерный вопрос. В одной из тем писАлось, что if_picture_in - вполне себе процедура. При этом в хелпе напрямую указано, что это тот же if. Так всё же, условие или процедура?
Это гибрид.

Кстати, появилась непонятка: scanpicture выдавал массив на полторы тысячи элементов... Эт как? Если правильно понимаю, он должен выдавать координаты нахождения искомого изображения или я не правильно понимаю?
Значит нашлось полторы тысячи совпадений с образцом.
Title: Re: Поиск строки из скриншота
Post by: dramster on March 21, 2016, 09:51:41 AM
Кстати, появилась непонятка: scanpicture выдавал массив на полторы тысячи элементов... Эт как? Если правильно понимаю, он должен выдавать координаты нахождения искомого изображения или я не правильно понимаю?
вероятно массив набрал 1000 элементов не за одно выполнение scanpicture. дело в том, что перед выполнением scanpicture, массив не обнуляется, и все найденные координаты искомой картинки добавляются в конец массива.
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 21, 2016, 06:01:19 PM
если не обнулять массив, то результаты суммируются. К примеру координаты разных картинок могут сливаться в один массив или поиск одной картинки в цикле по времени, тоже за продолжительное время насканирует 1500 координат- это 750 раз найдена картинка.
при этом, с учётом того, что массив не инициализировался, за один проход получилось случайное число+2 координаты от найденной картинки. Так?
Title: Re: Поиск строки из скриншота
Post by: Кликермен on March 21, 2016, 06:16:11 PM
Quote
за один проход получилось случайное число+2 координаты от найденной картинки. Так?

за один проход получаем массив  из 2 элементов, координат х, у, твоеи картинки.  и все.   перед   scanpxl очищаи массив через undefine/ никаких случаиных чисел у тебя там быть не может
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 21, 2016, 08:36:06 PM
за один проход получаем массив  из 2 элементов, координат х, у, твоеи картинки.  и все.   перед   scanpxl очищаи массив через undefine/ никаких случаиных чисел у тебя там быть не может
некритично в данном случае. Прост интересовало наличие картинки в "окне". Спс за ответ, тем не менее
Title: Re: Поиск строки из скриншота
Post by: Vint on March 22, 2016, 08:27:27 AM
некритично в данном случае. Прост интересовало наличие картинки в "окне". Спс за ответ, тем не менее
Если интересовало наличие, зачем тогда SCANPICTURE?
IF_PICTURE_IN и всё.
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 24, 2016, 10:35:59 PM
Такое чувство, что сетевой разум против меня и нео - смерть его:( Или же Kirill прав и надо периодически менять картинку. Эххх, задумка проработала 3 дня. Выкладывать тупой клик по кнопкам считаю недостойным сего форума. Всем сорь за отнятое время и спс за помощь
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 25, 2016, 01:54:33 PM
Такое чувство, что ты не воспринимаешь или не внедряешь  советы.
Судя по твоим высказываниям, процент совпадения картинок, ты не используешь и с очисткой массива не разобрался. Ещё одна из самух распостранённых причин "поломки" работающего скрипта, изменение время отклика сайта, обычно это случается в конце месяца, когда лемит гигабайт превышен и провайдер снижает скорость или игре или игроку и сразу все настроенные задержки котику под хвостик, что загружалось полсекунды, крузипся по 30 и весь скрипт за это время пролетает мимо. Могут быть и другие причины ваших неполадок.  :'(
ни в коем случае не осуждаю, не писАл ни куска "кода" сюда.
Code: (clickermann) [Select]
sub (wcl, $x,$y)
   wait(rnd(2.2,3)
   move($x,$y)
   waitms(Rnd(250,340))
   lclick($x,$y)
end_sub

wait(1)
wcl(106,15)  //открываем первую вкладку
wcl(173,237)
wcl(231,182)  //в харчевню
wcl(416,204)  //на поручения
getscreen
colormode(8)
if_picture_in(268,690,424,716,"AP.bmp",-1,95)
   if_picture_in(267,651,456,690,"QP.bmp",-1,95)
      wcl(156,246)  // город
      wcl(239,288)  // работа
      wcl(822,637)  // встаём на час
      wait(3595)
      wcl(960,176)  // идём за голдой
      wcl(720,661)  // собираем
      wait(RND(3,5))
   end_if
else
//в ходе игры очки поручений расходуются быстрей, чем очки действия, так что одного двойного условия достаточно
   wcl(173,237)
   wcl231,182)   //в харчевню
   wcl(416,204)  //на поручения
   wcl(922,600)  //начинаем
   wait(5)
   wcl(837,652)  // клик на "показать результат"
   wcl(643,515)  //"в харчевню"
   wcl(922,600)  //берём награду
   wait(595)     //ждём окончания отдыха   
   wait(900)
end_if
по поводу wait и waitms в подпрограмме: wait - для ожидания прогрузки картинки(слихвой хватает на моём кабельном канале, на других, не пробовал), waitms - ожидание между перемещением курсора и кликом по элементу окна.
процент делал от 70 до 95. Результат: очки действия(AP.bmp) ищутся, очки поручений(QP.bmp) - нет.
Согласен, повторюсь, на основании предыдущих сообщений можно было предположить, что я мало понимаю и никого не слушаю, просто пытаюсь пробить головой стену.
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 25, 2016, 01:58:26 PM
Согласен, не учтён ещё один игровой момент - пвп. Но там достаточно странная система поиска для невипов, так что не стал мудрить лишний раз. насчёт обнуления массивов: вполне логично поблагодарил за напоминание о необходимости явной инициализации переменных. В итоге, на тот момент старый(без scanpicture) код вполне себе заработал, так что необходимость в работе с массивами как таковыми отпала напрочь
Title: Re: Поиск строки из скриншота
Post by: Vint on March 25, 2016, 03:15:49 PM
В 28 строке не хватает скобок
wcl(231,182)   //в харчевню

Так же не хватает закрывающей скобки во 2 строке
Code: (clickermann) [Select]
wait(rnd(2.2,3)
К тому же функция RND целочисленная
Quote
RND (a, b) - числовая функция; возвращает целое число, выбранное случайно из заданного интервала
В итоге у тебя первый параметр "2.2" воспринимается как строка или логическая 1 и задержка фактически RND(1,3), т.е. 1, 2 или 3 сек.
Вот демонстрация:
Code: (clickermann) [Select]
FOR($i=0, $i < 10)
   print(rnd(8.2,10))
END_CYC
HALT

Указывай в милисекундах
Code: (clickermann) [Select]
WAITMS(rnd(2200, 3000))
Title: Re: Поиск строки из скриншота
Post by: Dampil on March 25, 2016, 04:20:05 PM
спс за совет, попробую.
**********, да в какОм состоянии я логику продумывал?! Всем ещё раз спс, ошибка была не только в командах
Title: Re: Поиск строки из скриншота
Post by: Kedrick on April 04, 2016, 03:01:19 PM
Если цифру в поле игры можно выделить мышкой или даблкликом, то я использую такой изящный способ распознавания:

Code: (clickermann) [Select]
DBLCLICK(738,793)    // выделяем цифру двойным кликом
WAITMS (50)
KEYDOWN (#CTRL)  // копируем в буфер
WAITMS (50)
KEYDOWN (#C)
WAITMS (50)
KEYUP (#C)
KEYUP (#CTRL)
$summ = INT(FROMCLIP())  // назначаем переменной значение из буфера

А дальше уже работаем с назначенной переменной как душе угодно. И никакого распознавания тысяч картинок, которые хитровыделанный админ может менять в день по 3 раза, то керн шрифта, то сам шрифт, то цвет шрифта, то цвет фона, то еще что-то. Меня в определенный момент задрало перефоткивать картинки раз в неделю и сделал вот так. Таким-же способом можно определять и появление нужного текста в нужном месте. Главное чтобы оно было не кликабельно и было выделяемым. Во флешах не проканает.
Title: Re: Поиск строки из скриншота
Post by: Kedrick on April 04, 2016, 03:20:18 PM
по твоему копирование экрана в буфер гетскрином с последующим поиском там нужной картинки более изящно чем копирование в буфер нужного куска текста?
Ну-ка расскажи нам маэстро, что придумал ты.