Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Terminator on February 18, 2015, 10:00:41 AM
-
Здравствуйте.
Написал скрипт с помощью справки и похожих примеров , но некоторые фрагменты не работают или работают не правильно.
Не пойму как обьеденить циклы и как можно ускорить процесс. И вообще упростить код
Помогите пожалуйста )
Ситуация такая:
Есть ряд 10ти цифр
http://clip2net.com/s/3cFqvNV,
http://clip2net.com/s/3cF0MO7,
они меняются при смене комнаты (обновлении страници) и мне нужно выбрать 2 заданных (в данном случае 7 и 8 ), и все из ряда если они есть.
Навожу курсор на цифру, она меняет фон http://clip2net.com/s/3cF1ndn, всплывает окно в произвольной области одной части экрана http://clip2net.com/s/3cFrxZ9.
Нажимаю его. Снова всплывает окно в другой области http://clip2net.com/s/3cFrpDq. Нажать.
Затем следующая цифра. И в конце обновление страницы.
Что я написал:
// поиск бледного пикселя вокруг полоски с цифрами, понять, что страница обновилась
WHILE(PXL(x,y) ! Бледный)
GETSCREEN (x, y, x1, y1)
WAITMS(RND(100,200))
END_IF
END_CYC
//$check = 0 //или так правильней?
//WHILE($check = 0)
// GETSCREEN (x, y, x1, y1)
// IF_PIXEL_IN (x, y, x1, y1, Бледный)
// $check = 1
// WAITMS(RND(100,200))
// END_IF
//END_CYC
//Ищем 7 оранжевую
$check = 0
WHILE($check = 0)
GETSCREEN (x, y, x1, y1) //вся полоска
IF_PICTURE_IN (x, y, x1, y1, "7оранжевый.bmp", -1)
$check = 1
move($_return1, $_return2)
END_IF
END_CYC
//Проверяем выделение сегмента с цифрой. Бывает не выделяется и окно не всплывает.
getscreen ([$_return1, $_return2, $_return1+10, $_return2+10])
WHILE(PXL($_return1,$_return2) ! Фон цифры)
WAITMS(10)
move($_return1-10, $_return2)
WAITMS(10)
move($_return1+10, $_return2)
WAITMS(10)
getscreen ([$_return1, $_return2, $_return1+10, $_return2+10])
END_CYC
//Ищем первое окно Готовности
$check = 0
WHILE($check = 0)
getscreen (x, y, x1, y1)
IF_PIXEL_IN (x, y, x1, y1, Желтый)
$check = 1
LCLICK($_return1, $_return2)
END_IF
END_CYC
//Ищем второе окно GOD
$check = 0
WHILE($check = 0)
getscreen (x, y, x1, y1)
IF_PIXEL_IN (x, y, x1, y1, Синий)
$check = 1
WAITMS(RND(10,50))
MOVE($_return1, $_return2)
END_IF
END_CYC
//клик для продолжения
WHILE(iskeydown(1)=0)
WAITMS(20)
LCLICK($_return1, $_return2)
END_CYC
//Потом тоже самое для 7зеленый.bmp, 8оранжевый.bmp, 8зеленый.bmp.
//Может попробовать поиск по сумме черных пикселей в области? только как узнать их количество в символе?
//Или может както можно задать поиск просто по символу?
KEYPRESS(116) //f5 (обновление страници) не срабатывает.
В итоге: когда цифра одна - выполняет.
А вот если цифр много.. приходится включать ручной режим )
Ковыряюсь 2 день. Перечитываю пока справку. может чтото подходящее найдется.
-
Можно и так. Только не хватает GETSCREEN в начале
GETSCREEN (x, y, x1, y1)
WHILE(PXL(x,y) ! Бледный)
GETSCREEN (x, y, x1, y1)
WAITMS(RND(100,200))
END_CYC
//или так правильней? Почти.
//$check = 0
//WHILE($check = 0)
// GETSCREEN (x, y, x1, y1)
// IF_PIXEL_IN (x, y, x1, y1, Бледный)
// $check = 1
// ELSE
// WAITMS(RND(100,200))
// END_IF
//END_CYC
//Ищем 7 оранжевую А если 7 нет? Будем конца света ждать? Где задержка после наведения? Подсказка не появляется мгновенно.
$check = 0
WHILE($check = 0)
GETSCREEN (x, y, x1, y1) //вся полоска
IF_PICTURE_IN (x, y, x1, y1, "7оранжевый.bmp", -1)
$check = 1
move($_return1, $_return2)
END_IF
END_CYC
//Проверяем выделение сегмента с цифрой. Бывает не выделяется и окно не всплывает.
10 миллисекунд это очень мало! Никакое окно нормально не всплывёт если ты будешь наводить/отводить указатель с такой частотой.
getscreen ([$_return1, $_return2, $_return1+10, $_return2+10]) Квадратные скобки лишние
WHILE(PXL($_return1,$_return2) ! Фон цифры)
WAITMS(10)
move($_return1-10, $_return2)
WAITMS(10)
move($_return1+10, $_return2)
WAITMS(10) Тоже скобки
getscreen ([$_return1, $_return2, $_return1+10, $_return2+10]) тоже скобки
END_CYC
//Ищем первое окно Готовности Паузы во время поиска и после клика...
$check = 0
WHILE($check = 0)
getscreen (x, y, x1, y1)
IF_PIXEL_IN (x, y, x1, y1, Желтый)
$check = 1
LCLICK($_return1, $_return2)
END_IF
END_CYC
//Ищем второе окно GOD Пауза во время поиска
$check = 0
WHILE($check = 0)
getscreen (x, y, x1, y1)
IF_PIXEL_IN (x, y, x1, y1, Синий)
$check = 1
WAITMS(RND(10,50))
MOVE($_return1, $_return2)
END_IF
END_CYC
//клик для продолжения Зачем это ожидание? Почему просто не кликнуть?
WHILE(iskeydown(1)=0)
WAITMS(20)
LCLICK($_return1, $_return2)
END_CYC
Не учтено, если будет не одна 7оранжевая...
//Потом тоже самое для 7зеленый.bmp, 8оранжевый.bmp, 8зеленый.bmp.
Сделать подпрограмму из всего, что выше. Имя искомого файла передавать в неё. Исправить момент, если цифра не найдена.
//Может попробовать поиск по сумме черных пикселей в области?
Попробуй. Должно быть проще, не нужно заготавливать картинки и делить цвета фона.
только как узнать их количество в символе?
Подсчитать скриптом. Тем же что и будешь потом сравнивать.
//Или может както можно задать поиск просто по символу? Нет
KEYPRESS(116) //f5 (обновление страници) не срабатывает.
Где в примере KEYPRESS(116) ? На каком это этапе?
Не срабатывает, потому что фокус не на окне браузера, а наверно на флеше. Оно и руками не будет срабатывать.
Фокус нужно перевести на основное окно браузера. F5 это его команда.
-
Спасибо за советы. Сейчас буду исправлять.
GETSCREEN в начале не написал, потому, что оно все равно из пустого буфера ничего не должно найти. А после "WHILE(PXL(x,y) ! Бледный)" тоже самое GETSCREEN (x, y, x1, y1). Просто первый цикл будет холостой. Кажеться, это не должно влиять на скорость. Или я ошибаюсь?
По поводу поиска,. Не пойму как задать поиск следующей цифры после того как одну нашли и нажали. вставлять такойже цикл только с меньшей областью сканирования? это 10 одинаковых циклов один в одном выходит.. должен быть другой вариант.
В том то и вопрос. Как эти 4 тройных (одинаковых) цикла обьеденить. Точно ведь можно. У меня не хаватает опыта.
Зачем ожидание? Ну, хочу убедиться, что все работает верно ) Потом перебью клик.
Ага перед ф5, надо навестись на края окна.
-
А у сумме выходит: 4 раза по 1 циклу из 5 циклов , 1 из этих 5ти - 10 один в одном.
Кучерявое дерево какоето выходит.
100% есть возможность написать както иначе.
-
Как правильно написать "если 132, то выполнять далее" ?
$var=132
IF(($var > 131) & ($var <133))
GETSCREEN
$count = PXLCOUNT (x,y, x1, y1, 0)
$count=$var
ELSE
LCLICK(x+5,y+5)
END_CYC
-
GETSCREEN
WHILE(PXLCOUNT (x,y, x1, y1, 0) ! 132)
WAITMS(50)
GETSCREEN
END_CYC
LCLICK($x+5,$y+5)
-
Ага. Благодарю.
-
А если задать выполнения поиска цифр в разных ячейках отдельными потоками.
Как задать последовательность выполнения, когда они найдут цифры одновременно?
Thread(7o) //Ищем 7 оранжевую
$check = 0
WHILE($check = 0)
GETSCREEN (x, y, x1, y1)
IF_PICTURE_IN (x, y, x1, y1, "7оранжевый.bmp")
$check = 1
WAITMS(RND(10,50))
move($_return1, $_return2)
END_IF
END_CYC
End_thread
Thread(7z) //Ищем 7 зеленую
$check = 0
WHILE($check = 0)
GETSCREEN (x, y, x1, y1)
IF_PICTURE_IN (x, y, x1, y1, "7зеленый.bmp")
$check = 1
WAITMS(RND(10,50))
move($_return1, $_return2)
END_IF
END_CYC
End_thread
-
Какие потоки? Брось и даже не смотри. В этой задаче потоки не нужны и даже вредны. Здесь всё последовательно.
-
Так чтож, будет состоять из одних только подпрограмм одинаковых?
//ищем пиксел области
$check = 0
WHILE($check = 0)
GETSCREEN (х, y, x1, y1)
IF_PIXEL_IN (х, y, x1, y1, Бледный)
$check = 1
ELSE
WAITMS(RND(100,200))
move(100,500)
END_IF
END_CYC
$x = a
$x1 = b
$x2.1 = c
$x2.2 = d
SUB (sub_1.7o)
//Ищем 7 оранж
$check = 0
WHILE($check = 0)
GETSCREEN ($x,y, $x1,y1)
IF_PICTURE_IN ($x,y, $x1,y1, "7or.bmp")
WAITMS(RND(10,50))
$check = 1
WAITMS(RND(10,50))
move($_return1, $_return2)
END_IF
END_CYC
WAITMS(RND(10,50))
//Ищем первое окно
$check = 0
WHILE($check = 0)
getscreen ($x2.1, y, x2.2, y1)
IF_PIXEL_IN ($x2.1, y, x2.2, y1, Желтый)
$check = 1
WAITMS(RND(10,50))
LCLICK($_return1+9, $_return2+9)
END_IF
END_CYC
WAITMS(RND(10,50))
//ищем окно 2
$check = 0
WHILE($check = 0)
getscreen (x, y, $x1, y2)
IF_PIXEL_IN (x, y, $x1, y2, Синий)
$check = 1
WAITMS(RND(10,50))
MOVE($_return1+9, $_return2+9)
END_IF
END_CYC
WAITMS(RND(10,50))
END_SUB
SUB (sub_1.8o)
END_SUB
SUB (sub_1.7z)
END_SUB
SUB (sub_1.8z)
END_SUB
SUB (sub_2.7o)
END_SUB
SUB (sub_2.7o)
END_SUB
Это правильно будет? и подпрограммы будут выполнятся последовательно, и между ними также можно дописывать код?
Подпрограмму можно вставлять в условия цикла?
-
Так чтож, будет состоять из одних только подпрограмм одинаковых?
Это правильно будет?
Неправильно. Подпрограммы для того и создаются, чтобы одинаковый код не плодить.
SUB(work, $name) //=============================================================
MOVE($_xmax,0)
WAITMS(50)
// поиск бледного пикселя вокруг полоски с цифрами, понять, что страница обновилась
GETSCREEN($x, $y, $x1, $y1) //вся полоска
WHILE(PXL($x,$y) ! Бледный)
GETSCREEN ($x, $y, $x1, $y1)
WAITMS(200)
END_CYC
//Ищем цифру
SCANPICTURE($ARR, $x, $y, $x1, $y1, $name)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR))
$digitX = $ARR[$ARR_NUM]
$digitY = $ARR[$ARR_NUM+1]
INC($ARR_NUM,2)
MOVE($digitX, $digitY)
WAITMS(100)
//Проверяем выделение сегмента с цифрой. Бывает не выделяется и окно не всплывает.
GETSCREEN($digitX-5, $digitY-5, $digitX+10, $digitY+10)
WHILE(PXL($digitX, $digitY) ! Фон цифры)
move($digitX-10, $digitY)
WAITMS(100)
move($digitX+10, $digitY)
WAITMS(500)
GETSCREEN($digitX-5, $digitY-5, $digitX+10, $digitY+10)
END_CYC
//Ищем первое окно Готовности
$check = 0
WHILE($check = 0)
GETSCREEN($x, $y, $x1, $y1)
IF_PIXEL_IN ($x, $y, $x1, $y1, Желтый)
$check = 1
LCLICK($_return1, $_return2)
WAITMS(250)
END_IF
WAITMS(50)
END_CYC
//Ищем второе окно GOD
$check = 0
WHILE($check = 0)
GETSCREEN($x, $y, $x1, $y1)
IF_PIXEL_IN ($x, $y, $x1, $y1, Синий)
$check = 1
MOVE($_return1, $_return2)
WAITMS(RND(50,100))
//клик для продолжения
LCLICK($_return1, $_return2)
WAITMS(RND(200,300))
ELSE
WAITMS(50)
END_IF
END_CYC
END_CYC
UNDEFINE($ARR)
END_SUB
//==============================================================================
// А обходить будем так:
work("7оранжевый.bmp")
work("7зеленый.bmp")
work("8оранжевый.bmp")
work("8зеленый.bmp")
-
Ура! Я чувствовал, что можно покороче.
Вы - мастер ) А это код какого языка?
Прокоментируйте пожалуста вот эти сегменты. Ато с трудом вьезжаю.
начало подпрограммы:
SUB(work, $name)
SCANPICTURE($ARR, $x, $y, $x1, $y1, $name)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR))
$digitX = $ARR[$ARR_NUM]
$digitY = $ARR[$ARR_NUM+1]
INC($ARR_NUM,2)
MOVE($digitX, $digitY)
WAITMS(100)
work("7оранжевый.bmp")
work("7зеленый.bmp")
work("8оранжевый.bmp")
work("8зеленый.bmp")
-
Да вот учу. Очень нравится мне этот кликер. Столько возможностей. И сам процес увлекательеый.
Маленький минус, что в справке очень мало возможных примеров. Гораздо легче осваивать уже на рабочих схемах при разных условиях.
Иначе, данных для сравнения и вывода взять негде.
вот, во вторм сегменте где открытие цикла.. переменные массива я всеравно не уловил. Пойду снова штурмовать справку.
-
Несколько раз прочитал статью Массивы http://crapware.aidf.org/forum/index.php?topic=319.0 (http://Массивы http://crapware.aidf.org/forum/index.php?topic=319.0). Довольно доступно разжеванно )
Вроде не сложно. Дело практики.
Всеравно не могу врубиться:
1. для чего 2рая строка "MOVE($_xmax,0)"
2. почему так оформлен этот сегмент:
WHILE ($ARR_NUM < ARRSIZE($ARR)) //условие, где от порядкового номера зависит количество точек наведения?
$digitX = $ARR[$ARR_NUM]
$digitY = $ARR[$ARR_NUM+1] //переменная от следующего порядкового элемента массива? они же на одной оси.
INC($ARR_NUM,2) //что это значит?
3. последовательность work"x.bmp", work"x1.bmp" играют роль? допустим, если надо в первую очередь выжимать 8рки (work"x1.bmp"), просто разделить на отдельные подпрограммы?
SUB(work, $name)
END_SUB
work("8оранжевый.bmp")
work("8зеленый.bmp")
SUB(work, $name)
END_SUB
work("7оранжевый.bmp")
work("7зеленый.bmp")
4. как заставить работать с координатами, с начала списка массива? или наоборот начать считывание координат с конца? По инфе из статьи, такой скрипт кликает картинки начиная с последней добавленной координаты.
-
1. для чего 2рая строка "MOVE($_xmax,0)"
MOVE($_xmax,0) // это передвинуть курсор в верхний правый угол монитора, чтобы не мешал анализировать графику.
2. почему так оформлен этот сегмент:
WHILE ($ARR_NUM < ARRSIZE($ARR)) //условие, где от порядкового номера зависит количество точек наведения?
$digitX = $ARR[$ARR_NUM]
$digitY = $ARR[$ARR_NUM+1] //переменная от следующего порядкового элемента массива? они же на одной оси.
INC($ARR_NUM,2) //что это значит?
WHILE ($ARR_NUM < ARRSIZE($ARR)) // цикл выполняется пока $ARR_NUM меньше числа размера массива
INC($ARR_NUM,2) // увеличиваем переменную $ARR_NUM на 2
$digitX = $ARR[$ARR_NUM] // присваиваем переменной $digitX значение из массива строка 0
$digitY = $ARR[$ARR_NUM+1] // присваиваем переменной $digitY значение из массива строка 0+1 тоесть 1
и тд. Каждый цикл переменная $ARR_NUM будет больше на 2 и на следующем проходе уже считаются троки 2 и 3 из массива.
3. последовательность work"x.bmp", work"x1.bmp" играют роль? допустим, если надо в первую очередь выжимать 8рки (work"x1.bmp"), просто разделить на отдельные подпрограммы?
SUB(work, $name)
END_SUB
work("8оранжевый.bmp")
work("8зеленый.bmp")
SUB(work, $name)
END_SUB
work("7оранжевый.bmp")
work("7зеленый.bmp")
Подпрограмма с именем SUB(work, $name) может быть только одна!
4. как заставить работать с координатами, с начала списка массива? или наоборот начать считывание координат с конца? По инфе из статьи, такой скрипт кликает картинки начиная с последней добавленной координаты.
Вот поиск всех картинок на экране и последовательное их прокликивание
Массив обрабатывается с начала
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, "picture.bmp", -1, 100)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
LCLICK($X, $Y) // Клик
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
Массив обрабатывается с конца
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, "picture.bmp", -1, 100)
$ARR_NUM = ARRSIZE($ARR_SCAN)
WHILE ($ARR_NUM > 0)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,-1)
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,-1)
LCLICK($X, $Y) // Клик
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
-
Здравствуйте.
Выбивает ошибку сценария http:http://clip2net.com/s/3cSiqNJ (http://http:http://clip2net.com/s/3cSiqNJ)
По разному пробовал. Не хочет работать.
Всеж правильно везде. А он упрямый )
-
Здравствуйте.
Выбивает ошибку сценария http:http://clip2net.com/s/3cSiqNJ (http://http:http://clip2net.com/s/3cSiqNJ)
По разному пробовал. Не хочет работать.
Всеж правильно везде. А он упрямый )
А скрипт твой где? Если было бы все правильно то и ошибок бы не было.
Предположительно, попытка чтения несуществующего элемента массива.