Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Altraster on January 18, 2018, 12:53:28 PM
-
Доброго времени суток!
Недавно познакомился с программой, почиал учебники(видимо както косо почитал :-[), решил попробовать.
так вот решил сделать цикл с поиском определнного пикселя(не картинки) в списке, если кликер его не находит, то останавливается. Так вот, написал конструкцию вида
// 17.01.2018
#name "Прием по цвету"
$a=0
getscreen
while($a=0)
if( pxl(493,261 16777215))
dbclick(697,260)
wait(15)
ldown(374,45)
move(374,14)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
else
inc($a,1)
end_if
end_cyc
$a=0
lclick(31,1052)
halt
она не срабатывает, сразу уходит в lclick(31,1052)
halt
но если написать вот так:
// 17.01.2018
#name "Прием по цвету"
getscreen
if( pxl(493,261 16777215) )
dblclick(653,257)
wait(10)
ldown(382,45)
move(390,18)
lup(390,18)
waitms(1000)
lclick(777,115)
wait(5)
lclick(409,366)
wait(30)
lclick(274,80)
wait(60)
lclick(1590,215)
waitms(1000)
то все работает :o, но не останавливается когда не видит этот пиксель. ЧЯННЕТ? :'(
Просьба, по возможности, обьяснить нубяре что там не так. Заранее спасибо!
-
В первом примере цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает. Во втором, не совсем понял что надо, остановить скрипт? Если да то команду halt добавь в конце.
getscreen
if( pxl(493,261 16777215) )
dblclick(653,257)
wait(10)
ldown(382,45)
move(390,18)
lup(390,18)
waitms(1000)
lclick(777,115)
wait(5)
lclick(409,366)
wait(30)
lclick(274,80)
wait(60)
lclick(1590,215)
waitms(1000)
halt
end_if
-
// 17.01.2018
#name "Прием по цвету"
$a=0
while($a=0)
getscreen
if(pxl(493,261)=16777215)
dblclick(697,260)
wait(15)
ldown(374,45)
move(374,14)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
else
$a=1
end_if
end_cyc
lclick(31,1052)
halt
-
...цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает...
Вы противоречите сами себе, и путаете новичков.
-
Синтаксис не верен, да еще и ошибки в написании команд. Бери команды из шаблонов, не ошибешься.
Также getscreen в не цикла, если пиксел изначально найден то цикл никогда не завершится, потому как новый снимок не делается.
// 17.01.2018
#name "Прием по цвету"
$a=0
while($a=0)
getscreen
if(pxl(493,261) = 16777215)
DBLCLICK(697,260)
wait(15)
ldown(374,45)
WAITMS(50)
move(374,14)
WAITMS(50)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
else
$a = 1
end_if
end_cyc
lclick(31,1052)
halt
Еще вариант
// 17.01.2018
#name "Прием по цвету"
getscreen
while(pxl(493,261) = 16777215)
DBLCLICK(697,260)
wait(15)
ldown(374,45)
WAITMS(50)
move(374,14)
WAITMS(50)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
getscreen
end_cyc
lclick(31,1052)
halt
-
В первом примере цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает.
Разве не наобарот? пока a=0 то while работает?
Синтаксис не верен, да еще и ошибки в написании команд. Бери команды из шаблонов, не ошибешься. Также getscreen в не цикла, если пиксел изначально найден то цикл никогда не завершится, потому как новый снимок не делается.
Ну дык дата скрипта 17.01.2018 ;D учусь.
Спасибо за развернутый ответ.
$a=0
while($a=0)
getscreen
if(pxl(493,261) = 16777215)
DBLCLICK(697,260)
wait(15)
ldown(374,45)
WAITMS(50)
move(374,14)
WAITMS(50)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
else
$a = 1
end_if
end_cyc
lclick(31,1052)
halt
Сработало! Спасибо!
ещё вопрос: где можно посмотреть мануал по IF? и ещё точнее какие переменные можно писать в условие IF?
-
Бери второй вариант, не нужно здесь IF вкладывать во WHILE
getscreen(493,261,493,261)
while(pxl(493,261) = 16777215)
dbclick(697,260)
wait(15)
ldown(374,45)
move(374,14)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
getscreen(493,261,493,261)
end_cyc
lclick(31,1052)
halt
ещё вопрос: где можно посмотреть мануал по IF?
в встроенной справке
и ещё точнее какие переменные можно писать в условие IF?
Любые :). Вопрос странный.
-
Вообщем всем спасибо за ответы. Буду изучать программку дальше, ибо очень полезно)))
В результате получилось вот что:
$x=287 //фиксированно
$y=278 //+19
go:
getscreen
while(pxl($x,$y = 3984108)) //либо тык сразу, либо смешение в центр следующей строчки.
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(806,112)
wait(5)
lclick(826,134)
wait(5)
rclick(1183,340)
waitms(100)
lclick(1273,450)
waitms(100)
lclick(1284,265)
wait(30)
lclick(269,76)
wait(60)
getscreen
else
$y=$y+19
goto(go)
end_cyc
lclick(27,1060)
halt
Последнее: Обращение к GO: из тела While сработает или нет?(просто пока все шло без выполнения Else)
-
Не верный синтаксис! Я ж тебе исправлял.
while(pxl($x,$y = 3984108))
Правильно так
while(pxl($x,$y) = 3984108)
Какое может быть ELSE внутри цикла? ELSE может быть только в условиях!
Выпрыгивать из цикла через гото нельзя, это приводит к ошибкам.
Теперь непонятно когда цикл должен прекратиться?! Если пиксел совпал цикл выполняется, если не совпал увеличивается $y и снова выполняется :o А выходить то из него когда? Когда $y превысит размер экрана?
-
getscreen
while(pxl($x,$y) = 3984108) //тык в строчку
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(806,112)
wait(5)
lclick(826,134)
wait(5)
rclick(1183,340)
waitms(100)
lclick(1273,450)
waitms(100)
lclick(1284,265)
wait(30)
lclick(923,12)
wait(90)
getscreen
end_cyc
lclick(27,1060)
halt
Не верный синтаксис! Я ж тебе исправлял.
selffix
^_^ Я заметил что неправильный кусок кинул, но переписать сообщение времени небыло:)
за else & goto спасибо.
-
Снова я XDXDXD
Задача немного изменилась, теперь в заданном пикселе может не попасться нужный цвет, + изменился цвет поиска. Написал вот так:
$a=19
$x=1272
$y=258 //+19
getscreen
if(pxl($x,$y) = 0)
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(789,112)
wait(10)
lclick(423,364)
wait(30)
lclick(923,12)
wait(30)
lclick(1592,214)
waitms(100)
getscreen
else
$y=$y+$a //пробовал inc($y,19) тот же эффект.
end_if
lclick(27,1060)
halt
если в заданном пикселе цвет = 0 то он работает. А вот смещение по $y не срабатывает. Хотя почитал форум, написано все правильно...
-
Что правильно? Условие есть, цикла нет. Код выполняется и тут же останавливается.
-
Снова я:) вот что получилось и очень даже работает. Спасибо за терпение:)
$a=19
$b=0
$x1=1272
$x2=287
$y1=258
//start:
while($b=0)
getscreen
if(pxl($x1,$y1) = 0)
dblclick(770,$y1)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(789,112)
wait(10)
lclick(423,364)
wait(60)
lclick(923,12)
wait(60)
lclick(1592,214)
waitms(100)
getscreen
else
$y1=$y1+$a
end_if
getscreen
if(pxl($x2,$y1) = 16777215, 16251893)
$b=1
end_if
end_cyc
//goto(start)
lclick(27,1060)
halt
-
if(pxl($x2,$y1) = 16777215, 16251893) это тоже самое что и написать if(2 = 1 , 3), как это понимать?
правильно - if( (pxl($x2,$y1) = 16777215) | (pxl($x2,$y1) =16251893) )
если раскомментировать твои "goto", то цикл во второй раз уже не выполнится, так как при завершении цикла ранее $b=1
-
if(pxl($x2,$y1) = 16777215, 16251893) это тоже самое что и написать if(2 = 1 , 3), как это понимать?
правильно - if( (pxl($x2,$y1) = 16777215) | (pxl($x2,$y1) =16251893) )
Спасибо поправил.
если раскомментировать твои "goto", то цикл во второй раз уже не выполнится, так как при завершении цикла ранее $b=1
goto осталось от страрого варианта, просто потереть коментарии забыл:)