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

Основной раздел => Общие вопросы => Topic started by: belousov on October 10, 2017, 10:09:35 AM

Title: Зацикливание в одной части и переход к другой части скрипта
Post by: belousov on October 10, 2017, 10:09:35 AM
Добрый день! Опять обращаюсь за помощью к знатокам.

Допустим часть скрипта выполняется минут 7-10, но иногда какое-нибудь изображение не появляется или появится совсем иное... и тогда скрипт зависает в ожидании искомого.

Пример.
Старт скрипта, в отрывке от А до B (различные действия), от B до C (поиск различных картинок, в общем выполняется за 7-10минут, здесь же и зависает, если не находит), от С до D (различные действия), Стоп.

Подскажите, как сделать, что бы часть скрипта B-C выполнялась необходимое ей время, если справится, то переходит к следующей части C-D, Но если превысит время и достигнет, например, 15 минут, с начала действия части В-С, то переходит к следующей части С-D скрипта?
Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: Oraven on October 10, 2017, 12:23:21 PM
Нужно использовать цикл с таймером

Code: (clickermann) [Select]
$time = $_time_t + 600 // таймер на 10 минут
WHILE($time > $_time_t) // Цикл выполняется не более 10 минут
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
      $time = 0 // обнуление таймера, выход из цикла
      LCLICK($_return1, $_return2)
      WAITMS(100)
   ELSE
      WAITMS(500)
   END_IF
END_CYC
Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: belousov on October 10, 2017, 01:28:38 PM
это понятно) но в этот цикл с таймером вряд ли удастся запихнуть с десяток циклов с таймером и без таймера)
Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: Vint on October 10, 2017, 06:19:08 PM
Это почему же? Хоть Войну и Мир можно запихнуть.
Code: (clickermann) [Select]
$time = $_time_t + 600
WHILE($time > $_time_t)
    // здесь разные действия
    // если после кокого-то признака нужно прервать цикл и выйти
    // обнуляем таймер
    $time = 0
    // ...
    // и на очередной итерации выпадаем из цикла
END_CYC

Если тебе после одного из действий нужно срочно прервать цикл и остальное не выполнять, то здесь много способов.
От заворачивания каждой серии в IF, до прыгания в конец цикла по GOTO. Или управляемый поток.
Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: kaizen on October 11, 2017, 12:52:56 AM
так как тема про циклы... спрошу прямо здесь
почему скрипт работает именно так? проскакивает "print4"
Code: [Select]
   
$b=3
print(0)
$time = $_time_t + 5
 WHILE($time > $_time_t)
   print(1)
   waitms(500)
   WHILE ($a<$b)  //WHILE( ($a<3) & ($time > $_time_t))
      print(2)
      $b=3
      $a=$a+1
      waitms(500)
    else
     print(3)
     $b=1
     $a=$a-1
     waitms(500) 
    END_CYC
   print(4)
   waitms(500) 
  END_CYC
print(5)
   
halt

в логах
0:48:55 0
0:48:55 1
0:48:55 2
0:48:56 4
0:48:56 2
0:48:57 4
0:48:57 2
0:48:58 4
0:48:58 3
0:48:59 3
0:48:59 3
0:49:00 2
0:49:00 4
0:49:01 2
0:49:01 4
0:49:02 2
0:49:02 4
0:49:03 3
0:49:03 3
0:49:04 3
0:49:04 2

Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: Vint on October 11, 2017, 08:12:41 AM
почему скрипт работает именно так? проскакивает "print4"
Потому что в кликере у циклов нет блоков ELSE. Всё тело цикла либо выполняется, либо нет.
"Иначе" есть только в уcловиях IF.
Title: Re: Зацикливание в одной части и переход к другой части скрипта
Post by: kaizen on October 11, 2017, 08:06:07 PM
вот я дебил... спасибки за разъяснение