Author Topic: временный цикл  (Read 7860 times)

0 Members and 1 Guest are viewing this topic.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: временный цикл
« Reply #15 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

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #16 on: January 03, 2015, 02:23:00 PM »
Спасибо, буду пробовать.

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #17 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

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #18 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 пункт не обязательно делать.
« Last Edit: January 03, 2015, 03:02:06 PM by kirill »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: временный цикл
« Reply #19 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

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #20 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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: временный цикл
« Reply #21 on: January 03, 2015, 05:01:56 PM »
Условие проверяющее чек в 19 строке не имеет смысла. Чек там всегда равен 1.
И зачем здесь потоки? Можно обойтись обычными средствами. Максимум оставить два если нужно.


kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #22 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)

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #23 on: January 10, 2015, 01:20:53 AM »
а как без GETSCREEN, если картинка на экране постоянно меняется? само собой я знаю, что такое ELSE именно поэтому оно везде, а везде оно для того, что бы все действия шли последовательно, поменялось что то идёт дальше, нет значит смотрит не поменялось ли чаво ни будь
« Last Edit: January 10, 2015, 01:25:18 AM by kirill »

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #24 on: January 10, 2015, 01:29:40 AM »
У меня другой щас вопрос родился, как сделать проверку по расстоянию от центра экрана. Например есть объект на экране, и нужно сделать так что если он на расстоянии допустим 200 пикселей от центра то делает клик?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: временный цикл
« Reply #25 on: January 10, 2015, 09:39:59 AM »
само собой я знаю, что такое ELSE именно поэтому оно везде, а везде оно для того, что бы все действия шли последовательно, поменялось что то идёт дальше, нет значит смотрит не поменялось ли чаво ни будь
Сори, но видимо не знаешь. При чем здесь "последовательность" и как отсутствие ПУСТОГО блока ELSE на неё влияет?
Разберись с мыслями.


kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #26 on: January 10, 2015, 04:19:19 PM »
Вы правы с мыслями разобраться надо это самое сложное. Ну если знаете где лишние ELSE то уберите их покажите мне как надо.

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #27 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

kirill

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: временный цикл
« Reply #28 on: January 10, 2015, 08:18:54 PM »
Нет не то, тут по миникарте не получится. Есть лок который и поможет, вот он должен посмотреть где тот пиксель лока который был найден и сравнить его положение с положением центра экрана и определить не превышено ли расстояние.