Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: loki on January 25, 2017, 08:58:43 AM
-
$toch=85
GETSCREEN
COLORMODE (5)
WAIT(2)
THREAD(d, 1)
IF_PICTURE_IN (634,240,824,525, "d1.bmp", 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("âíèç 1")
SCREENSHOT("d1")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d2.bmp", 16777215, $toch)
$d2=1
LCLICK(1169,318)
LOGWRITE ("âíèç 2")
SCREENSHOT("d2")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d3.bmp", 16777215, $toch)
$d3=1
LCLICK(1169,318)
LOGWRITE ("âíèç 3")
SCREENSHOT("d3")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d4.bmp", 16777215, $toch)
$d4=1
LCLICK(1169,318)
LOGWRITE ("âíèç 4")
SCREENSHOT("d4")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d5.bmp", 16777215, $toch)
$d5=1
LCLICK(1169,318)
LOGWRITE ("âíèç 5")
SCREENSHOT("d5")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d6.bmp", 16777215, $toch)
$d6=1
LCLICK(1169,318)
LOGWRITE ("âíèç 6")
SCREENSHOT("d6")
WAIT(90)
else
IF_PICTURE_IN (634,240,824,525, "d7.bmp", 16777215, $toch)
$d7=1
LCLICK(1169,318)
LOGWRITE ("âíèç 7")
WAIT(90)
end_if
end_if
end_if
end_if
end_if
end_if
end_if
end_thread
ищет только первый что не так то?
-
В потоке нет задержки при ненахождении, это будет сильно грузить процессор впустую. Обычно 25%.
Значит или всегда находит первый и дальше само собой пропускается, или остальные не находит.
Почему не сделать компактней
$toch=85
WAIT(1)
//...
THREAD(d, 1)
$d = 0
GETSCREEN
COLORMODE(5)
FOR($j=1, $j < 8)
IF_PICTURE_IN(634,240,824,525, STRCONCAT("d", $j, ".bmp"), 16777215, $toch)
$j = 100
$d = $j
LCLICK(1169,318)
LOGWRITE ("вниз ", $j)
SCREENSHOT(STRCONCAT("d", $j))
WAIT(90)
END_IF
END_CYC
WAITMS(100)
END_THREAD
Правда здесь заменили флаги $d1, $d2, $d3... на значение одной переменной $d. Всё равно картинки по этому коду не могут быть найдены одновременно несколько. Вот и получаем в $d номер найденной или 0.
P.S. Можно вопрос не касающийся кода? Какая версия кликермэна? Какая винда стоит? И какая у винды локализация, Винда изначально с русским основным или он поставлен позже? Какие стоят языки в системе кроме Англ. и Рус.?
Просто хочется понять, почему у многих в последнее время на форум попадает кодировка ISO 8859-1 (а может это Windows−1252). Прям табунами пошла. Кто виноват и что делать.
-
Вот еще вариант
$toch=85
DEFINE($d1,0)
DEFINE($d2,0)
DEFINE($d3,0)
DEFINE($d4,0)
DEFINE($d5,0)
DEFINE($d6,0)
DEFINE($d7,0)
WAIT(1)
THREAD(d, 1)
GETSCREEN
COLORMODE(5)
FOR($i=1,$i<8)
IF_PICTURE_IN (634,240,824,525, STRCONCAT("d",$i,".bmp"), 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("вниз ",$i)
SETVAR(STRCONCAT("$d",$i), 1)
SCREENSHOTEX(634,240,824,525, STRCONCAT("d",$i,"_"), 0)
WAIT(90)
END_IF
END_CYC
WAITMS(100)
end_thread
-
Я просто на 4.11 сижу и SETVAR не стал уже делать, хоть мысль была.
Просто здесь не нужна гора переменных, хватит одной.
И $d1, $d2, $d3... ставятся, но нигде не сбрасываются! Спорная польза от такого применения.
Вот если бы ему было нужно искать все и пометить какие нашли. И то удобней массив.
-
Я просто на 4.11 сижу и SETVAR не стал уже делать, хоть мысль была.
Просто здесь не нужна гора переменных, хватит одной.
И $d1, $d2, $d3... ставятся, но нигде не сбрасываются! Спорная польза от такого применения.
Вот если бы ему было нужно искать все и пометить какие нашли. И то удобней массив.
Ну из вопроса "ищет только первый что не так то?" выходит что нужно искать их все и отмечать найденные. Думаю что это только часть скрипта.
Да конечно массив разумнее.
-
Ну из вопроса "ищет только первый что не так то?" выходит что нужно искать их все и отмечать найденные.
Не факт. Ведь вложенность он не от балды поставил. И "ищет только первый" может не ищет когда там второй или третий. Может просто тупо изменение графики влияет, а не структура скрипта.
-
да нужно искать все сразу и кликать в область
ок тогда я и массовом пробовал
$toch = 80
GETSCREEN
COLORMODE(5)
WAIT(3)
THREAD(down, 1)
SCANPICTURE($darr1, 699,216, 823,710,"d1.bmp",-1,$toch)
SCANPICTURE($darr2, 699,216, 823,710,"d2.bmp",-1,$toch)
SCANPICTURE($darr3, 699,216, 823,710,"d3.bmp",-1,$toch)
SCANPICTURE($darr4, 699,216, 823,710,"d4.bmp",-1,$toch)
SCANPICTURE($darr5, 699,216, 823,710,"d5.bmp",-1,$toch)
SCANPICTURE($darr5, 699,216, 823,710,"d6.bmp",-1,$toch)
SCANPICTURE($darr5, 699,216, 823,710,"d7.bmp",-1,$toch)
$c = ARRSIZE($darr1)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d1")
LOGWRITE ("âíèç 1")
END_IF
$c = ARRSIZE($darr2)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d2")
LOGWRITE ("âíèç 2")
END_IF
$c = ARRSIZE($darr3)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d3")
LOGWRITE ("âíèç 3")
END_IF
$c = ARRSIZE($darr4)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d4")
LOGWRITE ("âíèç 4")
END_IF
$c = ARRSIZE($darr5)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d5")
LOGWRITE ("âíèç 5")
END_IF
$c = ARRSIZE($darr6)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d6")
LOGWRITE ("âíèç 6")
END_IF
$c = ARRSIZE($darr7)/2
IF(($c > 0)&($c < 4))
LCLICK(1170,324)
SCREENSHOT ("d7")
LOGWRITE ("âíèç 7")
END_IF
UNDEFINE($darr1)
UNDEFINE($darr2)
UNDEFINE($darr3)
UNDEFINE($darr4)
UNDEFINE($darr5)
END_THREAD
вообще ничо не находит
помогите с массивом
а так то да часть, 2 таких потока один кликает на одну область второй поток на вторую
не по теме: винда 7 ультим русик изначально кроме англ ничо не стоит кликер последний (мое имхо дело в теге код)
-
Я тебе уже написал правильный вариант. В цикле просматриваются все 7 картинок.
Почему у тебя
GETSCREEN
COLORMODE(5)
вынесено за поток и обновляется раз в 3 секунды, тогда как в потоке беспрерывно идет анализ. Без задержек это порождает бессмысленно высокую нагрузку.
Не работает и не находит это разные вещи. Делай лучше картинки.
-
спасибо огромное :)
картинки одни и теже только в первом варианте находит только первую
с массивом вообще не находит ни одну
-
не по теме: винда 7 ультим русик изначально кроме англ ничо не стоит кликер последний (мое имхо дело в теге код)
Не, дело в изначально нерусской винде.
-
дорогой ты мой человек Oraven а вот еще вопрос?
в конце разве не надо вот так
UNDEFINE($d1)
UNDEFINE($d2)
UNDEFINE($d3)
UNDEFINE($d4)
UNDEFINE($d5)
а то принтскрин один и тот же печатает
-
в конце разве не надо вот так
UNDEFINE($d1)
UNDEFINE($d2)
UNDEFINE($d3)
UNDEFINE($d4)
UNDEFINE($d5)
а то принтскрин один и тот же печатает
Какое отношение имеет UNDEFINE($d...) к принтскрину? Это вопрос риторический, можно не отвечать. Потому как никакого.
Скрины одинаковые, потому что
Почему у тебя
GETSCREEN
COLORMODE(5)
вынесено за поток и обновляется раз в 3 секунды, тогда как в потоке беспрерывно идет анализ.
И какой скрин ты хочешь сделать? До клика или после?
LCLICK(1170,324)
SCREENSHOT ("d3")
Если до, то и писать нужно перед кликом.
Если после... после клика должна быть пауза чтобы дать информации обновится. Но всё это будет когда решишь вопрос выше (с гетскрином).
-
нет нет я уже вариант взял который тут предложили в сообщении №2 от Oraven
извините что не пояснил что от своей версии отказался
все работает немного притормаживает но вот скриншот один и тотже печатает и
еще вот чего возникает иногда картинка ниже
или просит d8.bmp
хотя FOR($i=1,$i<8)
с чего хочет 8 :-[
версия проги 4.12.001; дата сборки: 25.03.2016
-
Код в своей версии ты забыл показать.
-
извините
DEFINE($d1,0)
DEFINE($d2,0)
DEFINE($d3,0)
DEFINE($d4,0)
DEFINE($d5,0)
DEFINE($d6,0)
DEFINE($d7,0)
DEFINE($u1,0)
DEFINE($u2,0)
DEFINE($u3,0)
DEFINE($u4,0)
DEFINE($u5,0)
DEFINE($u6,0)
DEFINE($u7,0)
WAIT(1)
THREAD(d, 1)
GETSCREEN
COLORMODE(5)
FOR($i=1,$i<8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$i,".bmp"), 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("âíèç ",$i)
SETVAR(STRCONCAT("$d",$i), 1)
SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$i,"_"), 0)
WAIT(90)
END_IF
END_CYC
WAITMS(100)
end_thread
//ââåðõ
THREAD(u, 1)
GETSCREEN
COLORMODE(5)
FOR($i=1,$i<8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$i,".bmp"), 16777215, $toch)
LCLICK(1174,267)
LOGWRITE ("ââåðõ ",$i)
SETVAR(STRCONCAT("$u",$i), 1)
SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$i,"_"), 0)
WAIT(90)
END_IF
END_CYC
WAITMS(100)
end_thread
вот никаких изменений кроме второго потока и координат
-
Используешь одинаковые переменные в разных потоках!
$i - переменная цикла.
-
вот это я балбес спасибо ::)
все заработало ура
-
Только вся конструкция сомнительная. 2 потока будут мешать друг другу своими GETSCREEN, редко но будут.
В таком варианте выигрыша в скорости не будет, ищи последовательно один, потом другой, без всяких потоков. Ну или в одном, если так нужно для другого.
-
хотя вот так наверное правда лучше
DEFINE($d1,0)
DEFINE($d2,0)
DEFINE($d3,0)
DEFINE($d4,0)
DEFINE($d5,0)
DEFINE($d6,0)
DEFINE($d7,0)
DEFINE($u1,0)
DEFINE($u2,0)
DEFINE($u3,0)
DEFINE($u4,0)
DEFINE($u5,0)
DEFINE($u6,0)
DEFINE($u7,0)
THREAD(down, 1)
GETSCREEN
COLORMODE(5)
FOR($d=1,$d<8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("âíèç ",$d)
SETVAR(STRCONCAT("$d",$d), 1)
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
WAIT(90)
else
FOR($u=1,$u<8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$u,".bmp"), 16777215, $toch)
LCLICK(1174,267)
LOGWRITE ("ââåðõ ",$u)
SETVAR(STRCONCAT("$u",$u), 1)
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$u,"_"), 0)
WAIT(90)
END_IF
END_CYC
END_IF
END_CYC
WAITMS(100)
end_thread
значительно быстрее спасибо
-
следующий вопрос: когда добавляю для анализа еще картинки, все встает колом, впоть до зависания кликера, как еще оптимизировать процесс? чтоб искать например 100 картинок
-
Нифига себе быстрее.
Зачем ты вкладываешь в ELSE? Говорю же последовательно ищи.
Сейчас на каждую $d ищет все 8 $u.
И получается 7 * 8 = 56 поисков. 56! ищется впустую. т.к. картинка не менялась.
следующий вопрос: когда добавляю для анализа еще картинки, все встает колом, впоть до зависания кликера, как еще оптимизировать процесс? чтоб искать например 100 картинок
Наверно ты их тоже так добавляешь. Поиск у тебя растёт в геометрической прогрессии. Бесполезный поиск.
-
и получаеться первое мое сообщение в которой я последовательно на каждую картинку писал чо делать :-[ или есть какие варианты еще
-
и получаеться первое мое сообщение в которой я последовательно на каждую картинку писал чо делать :-[ или есть какие варианты еще
ты не писал последовательно ты писал поиск вложенный
IF($first = 0)
$first = 1
FOR($i=1, $i < 8)
SETVAR(STRCONCAT("$d",$i), 0)
SETVAR(STRCONCAT("$u",$i), 0)
END_CYC
END_IF
GETSCREEN
COLORMODE(5)
FOR($d=1, $d < 8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("вниз ",$d)
SETVAR(STRCONCAT("$d",$d), 1)
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
WAIT(90)
GETSCREEN
COLORMODE(5)
$d = 1
END_IF
END_CYC
WAITMS(30)
FOR($u=1, $u < 8)
IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$u,".bmp"), 16777215, $toch)
LCLICK(1174,267)
LOGWRITE ("вверх ",$u)
SETVAR(STRCONCAT("$u",$u), 1)
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$u,"_"), 0)
WAIT(90)
GETSCREEN
COLORMODE(5)
$u = 100
END_IF
END_CYC
WAITMS(30)
Но по прежнему непонятно где обновляются переменные $d.. и $u..
Ты объясни, а то всех запутал.
На экране могут быть одновременно несколько разных картинок, например $u3 и $d5 ? Тебе нужно поймать "состояние" всех есть/нет. Или достаточно любой одной? Или достаточно одной из каждой серии d, u?
Могут ли одновременно находится на экране несколько одинаковых? Например две или три $u3 ? Нужно тогда определять координаты всех или достаточно одной.
-
Действительно нужен выход из цикла если найдено чтоб начать его заново.
Кроме того за место многочисленных $d1 нужно использовать массив. Тогда не сложно и 1000 картинок сделать.
Сначала создаем два массива (если у тебя есть еще лево право то 4) заполняем их нулями. Потом где то считываем нужный нам индекс
LOGWRITE ($arr_d[2]) // например узнаем найдена ли вторая картинка
//== Инициализация =====================================
// создаем 2 массива и заполняем их нулями
$count_image = 7 // количество картинок
FOR($a=0,$a<$count_image+1)
$arr_d[$a] = 0
END_CYC
FOR($a=0,$a<$count_image+1)
$arr_u[$a] = 0
END_CYC
SETTHREAD (down, 1) // запускаем потоки
START: // далее зацикленный скрипт
THREAD(down, 0)
GETSCREEN
COLORMODE(5)
FOR($d=1,$d<ARRSIZE($arr_d))
IF_PICTURE_IN (771,268,837,673, STRCONCAT("d",$d,".bmp"), 16777215, $toch)
LCLICK(1169,318)
LOGWRITE ("вниз ",$d)
$arr_d[$d] = 1
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("d",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
ELSE
IF_PICTURE_IN (771,268,837,673, STRCONCAT("u",$d,".bmp"), 16777215, $toch)
LCLICK(1174,267)
LOGWRITE ("вверх ",$d)
$arr_u[$d] = 1
WAITMS(50)
SCREENSHOTEX(771,268,837,673, STRCONCAT("u",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
END_IF
END_IF
END_CYC
WAITMS(100)
END_THREAD
-
Когда я говорил про массив в сообщении #3. Я и имел ввиду массив состояний или флагов, вместо кучи переменных.
А не поиск в массив.
-
на экране могут быть все сразу картинки и надо все сразу найти и нажать на одну из 2-х областей (группа картинок 1) либо на другую область ( группа картинок 2). каждый раз когда находит картинку относящаюся к группе 1 или к группе 2 давит на область экрана подходящую соответствующей группе картинок
щас попробую 23 ответ спасибо за участие очень приятно
-
на экране могут быть все сразу картинки и надо все сразу найти и нажать на одну из 2-х областей (группа картинок 1) либо на другую область ( группа картинок 2). каждый раз когда находит картинку относящаюся к группе 1 или к группе 2 давит на область экрана подходящую соответствующей группе картинок
щас попробую 23 ответ спасибо за участие очень приятно
Зачем тогда переменные для каждого?
Тогда и ищи группами последовательно.
-
нужно знать какая картинка сработала
вроде работает последний вариант сообщение 23 спасибо
-
эм запаздывает анализ поздно кликает
у меня идея: а если брать контрольную сумму картинки и ее сравнивать с контрольной суммой области анализа если сходиться то уже сравнивать картинку так будет быстрее?
-
запаздывание идет на минуту это очень много
-
Контрольную сумму чего ты собрался считать? Там же везде поиск. Или область поиска на 100% совпадает с размером образца?
На минуту... За минуту, можно всё изображение разобрать на атомы и собрать обратно. Что там делать минуту?
Может ты свою геометрическую прогрессию не пофиксил?
-
$toch=94 // точность поиска
// создаем 2 массива и заполняем их нулями
$count_image = 13 // количество картинок
FOR($a=0,$a<$count_image+1)
$arr_d[$a] = 0
END_CYC
FOR($a=0,$a<$count_image+1)
$arr_u[$a] = 0
END_CYC
SETTHREAD (down, 1) // запускаем потоки
START: // далее зацикленный скрипт
THREAD(down, 0)
GETSCREEN
COLORMODE(5)
FOR($d=1,$d<ARRSIZE($arr_d))
IF_PICTURE_IN (760,268,835,714, STRCONCAT("d",$d,".bmp"), -1, $toch)
LCLICK(1172,317)
LOGWRITE ("вниз ",$d)
$arr_d[$d] = 1
WAITMS(50)
SCREENSHOTEX(760,268,835,714, STRCONCAT("d",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
ELSE
IF_PICTURE_IN (760,268,835,714, STRCONCAT("u",$d,".bmp"), -1, $toch)
LCLICK(1167,269)
LOGWRITE ("вверх ",$d)
$arr_u[$d] = 1
WAITMS(50)
SCREENSHOTEX(760,268,835,714, STRCONCAT("u",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
END_IF
END_IF
END_CYC
WAITMS(100)
END_THREAD
THREAD(move, 1)
MOVE(1073,419)
MOVE(1070,552)
LCLICK(1070,552)
LOGWRITE ("подвигал")
WAIT(300)
END_THREAD
вот вообще весь скрипт
-
START: // далее зацикленный скрипт
И где он? далее идут патоки которые вообще работают в стороне. Скрипт начнется заново бесконечно снова и снова заполняя нулями массивы $arr_d $arr_u без задержек приводя к бессмысленной нагрузке.
Зачем вообще эти массивы и присвоение той или иной картинки значения 1
$arr_d[$d] = 1
Если это нигде потом не используется?
Вот так будет правильно, но вопрос с "нужностью" массивов пока не решен. Они тебе зачем?
$toch=94 // точность поиска
// создаем 2 массива и заполняем их нулями
$count_image = 13 // количество картинок
FOR($a=0,$a<$count_image+1)
$arr_d[$a] = 0
END_CYC
FOR($a=0,$a<$count_image+1)
$arr_u[$a] = 0
END_CYC
SETTHREAD (down, 1) // запускаем потоки
// далее зацикленный скрипт
WHILE(1)
MOVE(1073,419)
MOVE(1070,552)
LCLICK(1070,552)
LOGWRITE ("подвигал")
WAIT(300)
END_CYC
THREAD(down, 0)
GETSCREEN
COLORMODE(5)
FOR($d=1,$d<ARRSIZE($arr_d))
IF_PICTURE_IN (760,268,835,714, STRCONCAT("d",$d,".bmp"), -1, $toch)
LCLICK(1172,317)
LOGWRITE ("вниз ",$d)
$arr_d[$d] = 1
WAITMS(50)
SCREENSHOTEX(760,268,835,714, STRCONCAT("d",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
ELSE
IF_PICTURE_IN (760,268,835,714, STRCONCAT("u",$d,".bmp"), -1, $toch)
LCLICK(1167,269)
LOGWRITE ("вверх ",$d)
$arr_u[$d] = 1
WAITMS(50)
SCREENSHOTEX(760,268,835,714, STRCONCAT("u",$d,"_"), 0)
WAIT(90)
$d=ARRSIZE($arr_d) // выход из цикла
END_IF
END_IF
END_CYC
WAITMS(100)
END_THREAD
-
На вопрос о нужности массива ответа нет уже 3-ю страницу.
После каждого нахождения и клика пауза 90 сек. На фоне жалоб про минутное запаздывание ни на какие мысли не наводит?
-
происходит так: нет кликов потом кликает когда картинка ушла уже почти к концу области анализа.
если бы пауза была после клика все бы отлично было а то по картинке которая после клика видно что кликнул с запаздыванием