Автокликер 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 осталось от страрого варианта, просто потереть коментарии забыл:)