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

Основной раздел => Общие вопросы => Topic started by: kirill on January 01, 2015, 08:57:58 PM

Title: временный цикл
Post by: kirill on January 01, 2015, 08:57:58 PM
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(37,667, 272,788, 255)
      LCLICK($_return1, $_return2)
      $check = 1
      WAITMS(100)
   ELSE
   END_IF
   END_CYC

Как наложить временные рамки на этот цикл, что бы если он так и не найдёт красный пиксель, то вышел из цикла и пошел дальше по сценарию?  Заранее БЛАГОДАРЕН!   
Title: Re: временный цикл
Post by: Vint on January 01, 2015, 09:18:41 PM
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN(37,667, 272,788, 255)
      LCLICK($_return1, $_return2)
      $check = 1
      WAITMS(100)
   ELSE
   END_IF
   END_CYC

Как наложить временные рамки на этот цикл, что бы если он так и не найдёт красный пиксель, то вышел из цикла и пошел дальше по сценарию?  Заранее БЛАГОДАРЕН!   

Code: (clickermann) [Select]
$time = $_time_t + 10  // 10 секунд
WHILE($time > $_time_t)
   GETSCREEN
   IF_PIXEL_IN(37,667, 272,788, 255)
      LCLICK($_return1, $_return2)
      $time = 0
   END_IF
   WAITMS(100)
END_CYC
Title: Re: временный цикл
Post by: kirill on January 01, 2015, 09:23:43 PM
Спасибо!
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 03:09:35 AM
Помогите теперь в этом коде разобрать что тут не так? Ниже в коде есть комментарии где и возникли сложности. Ещё не могу понять по чему делает клик по координатам из IF_PIXEL_IN(1275,161, 1275,161, 10150560).О коде: первый поток должен работать беспрестанно, пока основной поток не сообщит об отсутствие пикселя на экране и не отключит его, после чего выполнит действия после цикла и снова запустит 1-ый поток.

Code: (clickermann) [Select]
// первый поток
thread(t1)
   $rnd_x = RND(37,272)
   $rnd_y = RND(667,788)
   LCLICK($rnd_x,$rnd_y)
   WAITMS(100)
   MOVE(565,518)
   WAITMS(100)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
      END_IF
      WAITMS(100)
   END_CYC
   WAITMS(100)
   $time = $_time_t + 5  // 5 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 10010271)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYPRESS(#ctrl)
         WAITMS(4500)
         GETSCREEN
         IF_PIXEL_IN(0,86, 1437,855, 5265980)
            $time = 0
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(300)
            KEYPRESS(#ctrl)
            WAITMS(15000)
         ELSE
         END_IF
      END_IF
      WAITMS(100)
   END_CYC
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 10010271)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYPRESS(#ctrl)
         WAITMS(4500)
      ELSE
         GETSCREEN
         IF_PIXEL_IN(0,86, 1437,855, 5265980)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(300)
            KEYPRESS(#ctrl)
            WAITMS(15000)
         ELSE
            $check = 1
         END_IF
      END_IF
   END_CYC
end_thread

//-----------------------------------------
// Основной поток
$var = 0
WHILE($var = 0)
   IF_PIXEL_IN(1275,161, 1275,161, 10150560) // тут должен постоянно смотреть на месте пиксель или нет, если нету то идёт дальше
   ELSE
      $var = 1
   END_IF
   WAITMS(100)
END_CYC
WAITMS(100)
thread(t1, 0) // тут если не нашел пиксель должен остановить 1-ый поток
   WAITMS(100)
   LCLICK(152,668)
   WAITMS(100)
   KEYPRESS(#c)
   WAITMS(100)
   KEYPRESS(#tab)
   WAITMS(1000)
   LCLICK(551,711)
   WAIT(300)
   LCLICK(817,448)  // 3814400
   WAITMS(1000)
   LCLICK(803,528)  // 3878950
   WAITMS(1000)
   LCLICK(741,530)  // 12631482
   WAITMS(1000)
   LCLICK(662,533)  // 4997689
   WAITMS(1000)
   LCLICK(568,533)  // 5590083
   WAITMS(1000)
   LCLICK(489,528)  // 3878950
   WAITMS(1000)
   LCLICK(456,370)  // 13541704
   WAITMS(1000)
   KEYPRESS(#c)
   WAITMS(100)
   LCLICK(663,715)
   WAITMS(100)
   KEYPRESS(#tab)
   WAITMS(1000)
   LCLICK(411,113)  // 16316403
   WAITMS(1000)
   LCLICK(267,458)  // 52479
   WAITMS(1000)
   LCLICK(181,540)  // 14606046
   WAITMS(1000)
   LCLICK(16,358)  // 12096074
   WAITMS(10000)
Title: Re: временный цикл
Post by: Oraven on January 02, 2015, 08:06:43 AM
Code: (clickermann) [Select]
thread(t1,0) // поток изначально не работает
///
end_thread

thread(t1,1) // поток изначально работает
///
end_thread

SETTHREAD (t1, 0) // команда останавливает поток (пауза) к сожалению команд перезапуска пока нет
SETTHREAD (t1, 1) // команда возобновляет поток

Вот исправленный оптимизированный код
Code: (clickermann) [Select]
// первый поток
thread(t1)
   $rnd_x = RND(37,272)
   $rnd_y = RND(667,788)
   LCLICK($rnd_x,$rnd_y)
   WAITMS(100)
   MOVE(565,518)
   WAITMS(100)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
   END_CYC
   WAITMS(100)
   $time = $_time_t + 5  // 5 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 10010271)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYPRESS(#ctrl)
         WAITMS(4500)
         GETSCREEN
         IF_PIXEL_IN(0,86, 1437,855, 5265980)
            $time = 0
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(300)
            KEYPRESS(#ctrl)
            WAIT(15)
         END_IF
      END_IF
      WAITMS(100)
   END_CYC
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 10010271)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYPRESS(#ctrl)
         WAITMS(4500)
      ELSE
         IF_PIXEL_IN(0,86, 1437,855, 5265980)
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(300)
            KEYPRESS(#ctrl)
            WAIT(15)
         ELSE
            $check = 1
         END_IF
      END_IF
   END_CYC
end_thread

//-----------------------------------------
// Основной поток
$var = 0
WHILE($var = 0)
   GETSCREEN
   IF_PIXEL_IN(1275,161, 1275,161, 10150560) // тут должен постоянно смотреть на месте пиксель или нет, если нету то идёт дальше
      WAITMS(100)
   ELSE
      $var = 1
   END_IF
END_CYC
WAITMS(100)

SETTHREAD (t1, 0) // тут если не нашел пиксель должен остановить 1-ый поток

WAITMS(100)
LCLICK(152,668)
WAITMS(100)
KEYPRESS(#c)
WAITMS(100)
KEYPRESS(#tab)
WAITMS(1000)
LCLICK(551,711)
WAIT(300)
LCLICK(817,448)  // 3814400
WAITMS(1000)
LCLICK(803,528)  // 3878950
WAITMS(1000)
LCLICK(741,530)  // 12631482
WAITMS(1000)
LCLICK(662,533)  // 4997689
WAITMS(1000)
LCLICK(568,533)  // 5590083
WAITMS(1000)
LCLICK(489,528)  // 3878950
WAITMS(1000)
LCLICK(456,370)  // 13541704
WAITMS(1000)
KEYPRESS(#c)
WAITMS(100)
LCLICK(663,715)
WAITMS(100)
KEYPRESS(#tab)
WAITMS(1000)
LCLICK(411,113)  // 16316403
WAITMS(1000)
LCLICK(267,458)  // 52479
WAITMS(1000)
LCLICK(181,540)  // 14606046
WAITMS(1000)
LCLICK(16,358)  // 12096074
WAITMS(10000)
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 08:40:37 AM
Не могу проверить т.к. тот клик по координатам из IF_PIXEL_IN(1287,168, 1287,168, 9363348) все портит ( это шкала здоровья и при тыки на неё она становиться цифровой) как исправить?
Title: Re: временный цикл
Post by: Oraven on January 02, 2015, 11:03:55 AM
Где ты там клик увидел?
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 11:36:07 AM
В этом то и проблема, в коде его нету, а на дели он тыкает куды не надо.
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 11:38:04 AM
У меня предположение что он в эти переменные $_return1, $_return2 засовывает координаты тех пикселей и где то идёт клик по ним. Может их  обнулить доп. кодом?
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 12:04:59 PM
Клик идёт предположительно при выполнение этой части кода.
Code: (clickermann) [Select]
$time = $_time_t + 5  // 5 ñåêóíä
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 10010271)
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYPRESS(#ctrl)
         WAITMS(4500)
         GETSCREEN
         IF_PIXEL_IN(0,86, 1437,855, 5265980)
            $time = 0
            LCLICK($_return1, $_return2)
            WAITMS(100)
            LCLICK($_return1, $_return2)
            WAITMS(300)
            KEYPRESS(#ctrl)
            WAIT(15)
         END_IF
      END_IF
Title: Re: временный цикл
Post by: Oraven on January 02, 2015, 12:55:07 PM
Системные переменные обнулить нельзя. Вместо этого лучше использовать более подходящую для анализа пиксела по точным координатам функцию PXL. В этом случае $_return1, $_return2 не затрагиваются.

Code: (clickermann) [Select]
// Основной поток
$var = 0
WHILE($var = 0)
   GETSCREEN
   IF(PXL(1275,161) = 10150560) // тут должен постоянно смотреть на месте пиксель или нет, если нету то идёт дальше
      WAITMS(100)
   ELSE
      $var = 1
   END_IF
END_CYC
WAITMS(100)
Title: Re: временный цикл
Post by: kirill on January 02, 2015, 01:16:31 PM
Системные переменные обнулить нельзя. Вместо этого лучше использовать более подходящую для анализа пиксела по точным координатам функцию PXL. В этом случае $_return1, $_return2 не затрагиваются.

Code: (clickermann) [Select]
// Основной поток
$var = 0
WHILE($var = 0)
   GETSCREEN
   IF(PXL(1275,161) = 10150560) // тут должен постоянно смотреть на месте пиксель или нет, если нету то идёт дальше
      WAITMS(100)
   ELSE
      $var = 1
   END_IF
END_CYC
WAITMS(100)
Спасибо большое теперь все хорошо работает, буду пробовать дополнять))
Title: Re: временный цикл
Post by: Vint on January 02, 2015, 05:39:52 PM
Если используются потоки с использованием $_return1, $_return2 то тянуть резину нельзя.
Как только нашли изображение сразу переприсваиваем переменные своим
$X = $_return1
$Y = $_return2
Потом уже все ожидания-клики. А так конечно, то 100 мс ждём, то 300. Естественно другой поток их может перезатереть.

Но это проблема, её нужно решать. Всё равно наступят моменты когда выполнение анализа совпадёт.
Или $_return1, $_return2 должны быть локальными в каждом потоке (что лучше). Или при использовании функций поиска в потоке эти переменные должны иметь другие имена
$_return1_ИМЯПОТОКА, $_return2_ИМЯПОТОКА.
Title: Re: временный цикл
Post by: Oraven on January 02, 2015, 06:06:38 PM
Нет пусть уж обычные переменные будут локальными, нужно только придумать глобальные для обмена данными между потоками.
Title: Re: временный цикл
Post by: kirill on January 03, 2015, 03:48:56 AM
Помогите исправить ошибки и оптимизировать код
Code: (clickermann) [Select]
//-----------------------------------------
// первый поток

thread(t1)
SetThread(t5,0)
WAITMS(100)
SetThread(t1,1)
WAITMS(100)
KEYUP(#ctrl)
$rnd_x = RND(37,272)
$rnd_y = RND(667,788)
LCLICK($rnd_x,$rnd_y)
WAITMS(100)
MOVE(565,518)
WAITMS(100)
SetThread(t2,1)
WAITMS(100)
end_thread

//-----------------------------------------
// второй поток

thread(t2,0)
SetThread(t1,0)
$time = $_time_t + 10  // 10 секунд
WHILE($time > $_time_t)
GETSCREEN
IF_PIXEL_IN(37,667, 272,788, 255)
$time = 0
   LCLICK($_return1, $_return2)
   MOVE(565,518)
   WAITMS(100)
ELSE
   SetThread(t1,1)
   WAITMS(100)
ELSE
END_IF
WAITMS(100)
END_CYC
WAITMS(100)
SetThread(t3,1)
WAITMS(100)
end_thread

//-----------------------------------------
// третий поток

thread(t3,0)
SetThread(t2,0)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(0,86, 1437,855, 5337430)
$check = 1
LCLICK($_return1, $_return2)
WAITMS(100)
LCLICK($_return1, $_return2)
ELSE
SetThread(t5,1)   // тут должен если пиксель найден вкл. пятый поток
WAITMS(100
ELSE
END_IF
WAITMS(100)
END_CYC
SetThread(t4,1)         // тут если пиксель не найден должен проигнорировать вкл. пятого потока и вкл. четвёртый
WAITMS(100)
end_thread

//-----------------------------------------
// четвёртый поток

thread(t4,0)
SetThread(t3,0)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(0,86, 1437,855, 5265980)
$check = 1
LCLICK($_return1, $_return2)
WAITMS(100)
LCLICK($_return1, $_return2)
ELSE
SetThread(t5,1)   // тут тоже что и в четвертом потоке
WAITMS(100
ELSE
END_IF
WAITMS(100)
END_CYC
SetThread(t1,1)
WAITMS(100)
end_thread

//-----------------------------------------
// пятый поток

thread(t5,0)
SetThread(t3,0)
WAITMS(100)
SetThread(t4,0)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PIXEL_IN(0,86, 1437,855, 1911161, 728280, 2237817)
KEYDOWN(#ctrl)
ELSE
KEYUP(#ctrl)
WAITMS(100)
SetThread(t1,1)
WAITMS(100)
ELSE
$check = 1
END_IF
WAITMS(100)
END_CYC
end_thread
Title: Re: временный цикл
Post by: Oraven on January 03, 2015, 07:53:38 AM
В условиях может быть только одна альтернатива ELSE. Везде исправил но в последнем thread(t5,0) разберись с условиями.

Code: (clickermann) [Select]
//-----------------------------------------
// первый поток

thread(t1)
   SetThread(t5,0)
   WAITMS(100)
   SetThread(t1,1)
   WAITMS(100)
   KEYUP(#ctrl)
   $rnd_x = RND(37,272)
   $rnd_y = RND(667,788)
   LCLICK($rnd_x,$rnd_y)
   WAITMS(100)
   MOVE(565,518)
   WAITMS(100)
   SetThread(t2,1)
   WAITMS(100)
end_thread

//-----------------------------------------
// второй поток

thread(t2,0)
   SetThread(t1,0)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
         SetThread(t1,1)
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   WAITMS(100)
   SetThread(t3,1)
   WAITMS(100)
end_thread

//-----------------------------------------
// третий поток

thread(t3,0)
   SetThread(t2,0)
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 5337430)
         $check = 1
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
      ELSE
         SetThread(t5,1)   // тут должен если пиксель найден вкл. пятый поток
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   SetThread(t4,1)         // тут если пиксель не найден должен проигнорировать вкл. пятого потока и вкл. четвёртый
   WAITMS(100)
end_thread

//-----------------------------------------
// четвёртый поток

thread(t4,0)
   SetThread(t3,0)
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 5265980)
         $check = 1
         LCLICK($_return1, $_return2)
         WAITMS(100)
         LCLICK($_return1, $_return2)
      ELSE
         SetThread(t5,1)   // тут тоже что и в четвертом потоке
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   SetThread(t1,1)
   WAITMS(100)
end_thread

//-----------------------------------------
// пятый поток

thread(t5,0)
   SetThread(t3,0)
   WAITMS(100)
   SetThread(t4,0)
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 1911161, 728280, 2237817)
         KEYDOWN(#ctrl)
      ELSE
         KEYUP(#ctrl)
         WAITMS(100)
         SetThread(t1,1)
         WAITMS(100)
//      ELSE  ??????????????????????
         $check = 1
      END_IF
      WAITMS(100)
   END_CYC
end_thread
Title: Re: временный цикл
Post by: kirill on January 03, 2015, 02:23:00 PM
Спасибо, буду пробовать.
Title: Re: временный цикл
Post by: kirill on January 03, 2015, 02:37:03 PM
тут он должен искать 10 секунд, если найдёт, то запускать третий поток, а если нет то снова 1 поток. Как сделать? А сейчас получается, что он и при нахождение и не нахождение вкл первый поток. 
Code: (clickermann) [Select]
//-----------------------------------------
// второй поток
 
thread(t2,0)
   SetThread(t1,0)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
         SetThread(t1,1)
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   WAITMS(100)
   SetThread(t3,1)
   WAITMS(100)
end_thread
Title: Re: временный цикл
Post by: kirill on January 03, 2015, 02:57:40 PM
Вся суть кода:
1-ый поток. Должен сделать рандомный клик и запустить 2-й поток
2-ой поток. Должен отключить первый, найти пиксель в течении 10 секунд и запустить 3-й поток или снова запустить 1 поток.
3-й поток. Должен отключить второй, после найти жертву в течении 5 сек (только сейчас на ум пришло, а то ведь не найдёт и дальше себе попрёт), как найдёт вкл пятый поток (который должен пока видит жертву в локе зажимать CTRL, а как перестанет видеть отпустить CTRL и снова запустить 1 поток)
4-ый поток. Такой же как и 3-ий, только для другого моба.
В 5-ом потоке ещё хотелось бы сделать проверку нет ли ещё одного моба как в 3-ем и 4-ом потоке, т.е. пропуская 1 и 2 потоки + к этому такая проверка должно проводиться 1 раз.
P.s 5 пункт не обязательно делать.
Title: Re: временный цикл
Post by: Oraven on January 03, 2015, 03:20:16 PM
Code: (clickermann) [Select]
//-----------------------------------------
// второй поток

thread(t2,0)
   SetThread(t1,0)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   IF($time = 0) // если за 10 сек найдено
      WAITMS(100)
      SetThread(t3,1)
   ELSE
      SetThread(t1,1) // или не найдено
      SetThread(t2,0)
   END_IF
   WAITMS(100)
end_thread
Title: Re: временный цикл
Post by: kirill on January 03, 2015, 03:50:24 PM
Code: (clickermann) [Select]
//-----------------------------------------
// второй поток

thread(t2,0)
   SetThread(t1,0)
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,667, 272,788, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   IF($time = 0) // если за 10 сек найдено
      WAITMS(100)
      SetThread(t3,1)
   ELSE
      SetThread(t1,1) // или не найдено
      SetThread(t2,0)
   END_IF
   WAITMS(100)
end_thread
Всё подправил на основе вашего 2 потока, но в пятом ошибка не могу понять где. Помогите исправить
Code: (clickermann) [Select]
//-----------------------------------------
// ïÿòûé ïîòîê

thread(t5,0)
   SetThread(t3,0)
   WAITMS(100)
   SetThread(t4,0)
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 1911161, 728280, 2237817)
         $check = 1
         WAITMS(100)
      ELSE
         WAITMS(100)
      END_IF
      WAITMS(100)
   END_CYC
   IF($check = 1)
      WAITMS(100
      KEYDOWN(#ctrl)
      WAITMS(100)
   ELSE
   WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(100)
      SetThread(t1,1)
      SetThread(t5,0)
   END_IF
   WAITMS(100)
end_thread
Title: Re: временный цикл
Post by: Vint on January 03, 2015, 05:01:56 PM
Условие проверяющее чек в 19 строке не имеет смысла. Чек там всегда равен 1.
И зачем здесь потоки? Можно обойтись обычными средствами. Максимум оставить два если нужно.
Title: Re: временный цикл
Post by: kirill on January 08, 2015, 03:36:39 AM
Вот сделал по вашему совету, вроде все норм, но иногда тупит. Можете глянуть и оптимизировать при возможности?!
Code: (clickermann) [Select]
thread(t2)
$va = 0
WHILE($va = 0)
   GETSCREEN
   IF(PXL(45,639) = 12575208) 
   WAITMS(100)
   ELSE
      $va = 1
   END_IF
END_CYC
LCLICK(216,108)
WAITMS(2000)




end_thread
thread(t1)
   SETTHREAD (t2, 1)
   SETTHREAD (t3, 1)
   $rnd_x = RND(36,286)
   $rnd_y = RND(682,808)
   LCLICK($rnd_x,$rnd_y)
   WAITMS(100)
   MOVE(565,518)
   WAITMS(100)
   
   $time = $_time_t + 10  // 10 секунд
   WHILE($time > $_time_t)
      GETSCREEN
      IF_PIXEL_IN(37,682, 288,835, 255)
         $time = 0
         LCLICK($_return1, $_return2)
         MOVE(565,518)
         WAITMS(1000)
         LCLICK($_return1, $_return2)
         MOVE(565,518)
      ELSE
      END_IF
      WAITMS(100)
   END_CYC
   WAITMS(100)
   
   
   
   $ch = 0
   WHILE($ch = 0)
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 8628618)
         KEYUP(#Ctrl)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYUP(#Ctrl)
         $time = $_time_t + 10  // 10 секунд
         WHILE($time > $_time_t)
            WAITMS(300)
            GETSCREEN
            IF_PIXEL_IN(0,86, 1437,855,728280,529105,2304698)
               WAITMS(100)
               KEYDOWN(#Ctrl)
               WAITMS(300)
            ELSE
               $time = 0
            END_IF
         END_CYC
         WAITMS(100)
         KEYUP(#Ctrl)
         WAITMS(100)
      ELSE
         $ch = 1
      END_IF
   END_CYC
   
   
   $cha = 0
   WHILE($cha = 0)
     
      GETSCREEN
      IF_PIXEL_IN(0,86, 1437,855, 5938406)
         KEYUP(#Ctrl)
         LCLICK($_return1, $_return2)
         WAITMS(300)
         KEYUP(#Ctrl)
         $time = $_time_t + 19  // 10 секунд
         WHILE($time > $_time_t)
            WAITMS(300)
            GETSCREEN
            IF_PIXEL_IN(0,86, 1437,855,728280,529105,2304698)
               WAITMS(500)
               KEYDOWN(#Ctrl)
               WAITMS(300)
            ELSE
               $time = 0
            END_IF
            WAITMS(100)
         END_CYC
         WAITMS(100)
         KEYUP(#Ctrl)
         WAITMS(100)
      ELSE
         $cha = 1
      END_IF
   END_CYC
   
end_thread

$var = 0
WHILE($var = 0)
   GETSCREEN
   IF(PXL(1272,162) = 9363348)
   ELSE
      $var = 1
   END_IF
END_CYC
SETTHREAD (t1, 0)
WAITMS(100)
LCLICK(160,701)  // 16759296
WAITMS(500)
LCLICK(162,702)  // 0
WAITMS(100)
KEYPRESS(#c)
WAITMS(100)
KEYPRESS(#3)
WAITMS(100)


$time = $_time_t + 10  // 10 секунд
WHILE($time > $_time_t)
   GETSCREEN
   IF(PXL(648,671) = 1066273)
      $time = 0
      WAITMS(100)
      LCLICK(648,671)  //
      WAITMS(100)
   ELSE
   END_IF
   WAITMS(100)
END_CYC
WAITMS(100)

$time = $_time_t + 10  // 10 секунд
WHILE($time > $_time_t)
   GETSCREEN
   IF(PXL(666,477) = 6143)
      $time = 0
      WAITMS(100)
      LCLICK(620,526)  // 6316901
      WAITMS(100)
   ELSE
   END_IF
   WAITMS(100)
END_CYC
WAITMS(100)

$time = $_time_t + 10  // 10 секунд
WHILE($time > $_time_t)
   GETSCREEN
   IF(PXL(700,296) = 188)
      $time = 0
      WAITMS(100)
      LCLICK(636,671)
      WAITMS(100)
   ELSE
   END_IF
   WAITMS(100)
END_CYC

WAIT(110)
WAITMS(100)
KEYPRESS(#c)
WAITMS(100)
KEYPRESS(#4)
WAITMS(10000)
SETTHREAD (t1, 1)
Title: Re: временный цикл
Post by: kirill on January 10, 2015, 01:20:53 AM
а как без GETSCREEN, если картинка на экране постоянно меняется? само собой я знаю, что такое ELSE именно поэтому оно везде, а везде оно для того, что бы все действия шли последовательно, поменялось что то идёт дальше, нет значит смотрит не поменялось ли чаво ни будь
Title: Re: временный цикл
Post by: kirill on January 10, 2015, 01:29:40 AM
У меня другой щас вопрос родился, как сделать проверку по расстоянию от центра экрана. Например есть объект на экране, и нужно сделать так что если он на расстоянии допустим 200 пикселей от центра то делает клик?
Title: Re: временный цикл
Post by: Vint on January 10, 2015, 09:39:59 AM
само собой я знаю, что такое ELSE именно поэтому оно везде, а везде оно для того, что бы все действия шли последовательно, поменялось что то идёт дальше, нет значит смотрит не поменялось ли чаво ни будь
Сори, но видимо не знаешь. При чем здесь "последовательность" и как отсутствие ПУСТОГО блока ELSE на неё влияет?
Разберись с мыслями.
Title: Re: временный цикл
Post by: kirill on January 10, 2015, 04:19:19 PM
Вы правы с мыслями разобраться надо это самое сложное. Ну если знаете где лишние ELSE то уберите их покажите мне как надо.
Title: Re: временный цикл
Post by: kirill on January 10, 2015, 04:25:24 PM
И ещё как мне добавить отслеживание дистанции к этой части кода. В нем идёт постоянный поиска лока на мобе, пока он его виде, он его бьёт, но моб может убегать и тут то и нужно, что бы был клик в ту сторону где он видит лок, если моб убежит дальше 200 ну или больше пикселей.
 $time = $_time_t + 10  // 10 секунд
         WHILE($time > $_time_t)
            WAITMS(300)
            GETSCREEN
            IF_PIXEL_IN(0,86, 1437,855,728280,529105,2304698)
               WAITMS(100)
               KEYDOWN(#Ctrl)
               WAITMS(300)
            ELSE
               $time = 0
            END_IF
         END_CYC
Title: Re: временный цикл
Post by: kirill on January 10, 2015, 08:18:54 PM
Нет не то, тут по миникарте не получится. Есть лок который и поможет, вот он должен посмотреть где тот пиксель лока который был найден и сравнить его положение с положением центра экрана и определить не превышено ли расстояние.