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

Основной раздел => Общие вопросы => Topic started by: 66kaban on March 03, 2020, 08:33:51 PM

Title: как создать цикл?
Post by: 66kaban on March 03, 2020, 08:33:51 PM
нужен такой скрипт
кликаем в точку А
кликаем в точку Б
если в точке Б цвет 111, то кликаем в точку В. повторяем этот цикл пока в точке Б цвет не станет 222
если в точке Б цвет 222, то кликаем в точку Д.

waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет 
GETSCREEN
IF(PXL(1229,34) = 111)
    Lclick(867,802) // клик в точке В
WAITMS(600)
$check = 1 // Выходим из цикла
ELSE
WAIT(1)
END_IF
END_CYC
waitms(600)
$check = 0
GETSCREEN
IF(PXL(1229,34) = 222) // если в точке Б белый
 Lclick(937,286) // клик в точке Д
WAITMS(600)
$check = 1 // Выходим из цикла
ELSE
WAIT(1)
END_IF

не получается создать цикл:
если в точке Б цвет 111, то кликаем в точку В. повторяем этот цикл пока в точке Б цвет не станет 222
Title: Re: как создать цикл?
Post by: Hito on March 03, 2020, 09:22:57 PM
Учитывая, что вопрос не по языку скрипта, а по алгоритму (это значит, что человек сам думать не особо хочет), мне все же интересно - из какого цикла ты выходишь в 23-ей строке...?
Code: (clickermann) [Select]
waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет
   GETSCREEN
   IF(PXL(1229,34) = 111)
      Lclick(867,802) // клик в точке В
      WAITMS(600)
      $check = 1 // Выходим из цикла
   ELSE
      WAIT(1)
   END_IF
END_CYC
waitms(600)
$check = 0
GETSCREEN
IF(PXL(1229,34) = 222) // если в точке Б белый
   Lclick(937,286) // клик в точке Д
   WAITMS(600)
   $check = 1 // Выходим из цикла
ELSE
   WAIT(1)
END_IF
Title: Re: как создать цикл?
Post by: Hito on March 03, 2020, 09:28:00 PM
И еще... Который раз на форуме вижу подобные вещи...
Code: (clickermann) [Select]
waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет
То есть два клика и за ними цикл, который крутится до тех пор, пока не появится результат этих кликов? А если что-то где-то подзависло, лагануло и так дале и клик не прошел...? Скрипт зависнет в цикле ожидания результата?
Title: Re: как создать цикл?
Post by: 66kaban on March 17, 2020, 03:35:49 PM
в итоге получился вот такой скрипт:
  getScreen
if(PXL(17,167) = 255) // если пиксель "а" красный, то кликаем в него
Lclick(17,167)
waitms(300)
lclick(1588,75)      //   б
 waitms(600)
getScreen(1588,75,1588,75)   
 while(pxl(1588,75)!16777215) // запускаем цикл, клик "б" "в", до тех пор пока в точке б не появится белый цвет
getScreen(1588,75,1588,75)
lclick(1588,75)
 waitms(600) 
lclick(1270,1000) // в
  waitms(600)
  end_cyc

скрипт работает, но проблема в том, что он повторяет цикл еще 1 раз после того как в "б" уже белый цвет. почему идет повтор? в итоге пришлось вот так сделать:
  getScreen
if(PXL(17,167) = 255)
Lclick(17,167)
waitms(300)
elSe
waitms(220)
end_if
 waitms(600)
getScreen(1588,75,1588,75)   
 while(pxl(1588,75)!16777215) // бел пикс
getScreen(1588,75,1588,75)
DBLCLICK(1588,75)
 waitms(600) 
lclick(1270,1000)
  waitms(600)
  getScreen
if(PXL(1588,75) = 16777215)
waitms(300)
elSe
waitms(220)
end_if
  end_cyc   
Title: Re: как создать цикл?
Post by: Vint on March 17, 2020, 04:44:37 PM
скрипт работает, но проблема в том, что он повторяет цикл еще 1 раз после того как в "б" уже белый цвет. почему идет повтор?
Где end_if от первого IF ?