Author Topic: помогите с WHILE  (Read 2280 times)

0 Members and 1 Guest are viewing this topic.

kuka

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
помогите с WHILE
« on: May 25, 2018, 02:44:10 PM »
Здравствуйте.
Написал бота к Tap Titan 2, работает нормально. И вот это место с вложенными WHILE
Code: (clickermann) [Select]
WHILE($varnn < 100)
   LOGWRITE ("Цикл1")
   WAIT(RND(1,3))
   
   
   SETTHREAD (heroy, 0)
 // вот с этого места 
   $check = 0
   WHILE($check = 0)   // проверка значка босса в общем окне
      GETSCREEN(58,32, 100,83)
      COLORMODE(6, 58,32, 100,83)
      IF_PICTURE_IN (58,32, 100,83, "klankvest2.bmp", -1, 60)
         $check = 1
         LCLICK(78, 52)
         WAIT(3)
         LCLICK(99, 757)
         WAIT(7)
         LCLICK(413, 78)
         WAIT(1)
         LCLICK(413, 78)
         WAIT(1)
         LCLICK($_return1+10, $_return2+10)
         WAITMS(100)
         LCLICK($_return1+10, $_return2+10)
         WAIT(5)
         
         $check = 0
         WHILE($check = 0)    // проверка на значок боя с боссом в окне чата
            GETSCREEN(34,751, 83,802)
            COLORMODE(6, 34,751, 83,802)
            IF_PICTURE_IN (34,751, 83,802, "klanbossvchat2.bmp", -1, 70)
               $check = 1
               LCLICK($_return1+56, $_return2-20)
               WAIT(5)
               
               $check = 0
               WHILE($check = 0)   // проверка наличия кнопки с надписью "в бой"
                  GETSCREEN(259,751, 353,783)
                  COLORMODE(6, 259,751, 353,783)
                  IF_PICTURE_IN (259,751, 353,783, "klankvestvboy.bmp", -1, 70)
                     $check = 1
                     LCLICK($_return1, $_return2)
                     WAITMS(50)
                     LCLICK($_return1, $_return2)
                     WAIT(1)
                     LCLICK($_return1, $_return2)
                     WAIT(5)
                     for($var, $var < 680) // рандомные клики
                        LCLICK(RND(35,208),RND(419,491))
                        waitms(RND(30,35))
                     end_cyc
                     WAIT(10)
                     LCLICK(92, 714)
                     WAIT(4)
                     LCLICK(92, 714)
                     WAIT(5)
                     
                     $check = 0
                     WHILE($check = 0) // проверка на кнопку бой за 5 алмазов
                        GETSCREEN(250,709, 357,785)
                        COLORMODE(6, 250,709, 357,785)
                        IF_PICTURE_IN (250,709, 357,785, "01.bmp", -1, 90)
                           $check = 1
                           LCLICK($_return1, $_return2+50)
                           WAITMS(500)
                           LCLICK(333, 471)
                           WAIT(3)
                           for($var22, $var22 < 680) // рандомные клики
                              LCLICK(RND(35,208),RND(419,491))
                              waitms(RND(30,35))
                           end_cyc
                           WAIT(10)
                           LCLICK(92, 714)
                           WAIT(1)
                           LCLICK(92, 714)
                           WAIT(2)
                        ELSE        // если кнопки на 5 алмазов нет - выход по метке
                           WAIT(2)
                           LOGWRITE ("1111")
                           GOTO(skip)
                           
                        END_IF
                     END_CYC
                     
                     
                  ELSE       // если кнопки в бой нет - выход по метке
                     WAIT(2)
                     LOGWRITE ("1")
                     GOTO(skip)
                     
                  END_IF
                 
               END_CYC
            ELSE              // если значка боя с боссом в окне чата нет - выход по метке
               WAIT(2)
               LOGWRITE ("11")
               GOTO(skip)
               
            END_IF
         END_CYC
         WAITMS(600)
      ELSE             // если значка босса в общем окне нет - выход по метке
         WAITMS(2)
         LOGWRITE ("111")
         GOTO(skip)
         
         
      END_IF
     
   END_CYC
   
   skip:
//......................
//здесь тело скрипта
//......................
END_CYC
работает. Но только 1 раз после запуска. На втором проходе уже проверки нет. Подозреваю что дело в переменных и в GOTO. Но когда убираю переходы к метке - происходит зацикливание.
Помогите пожалуйста
« Last Edit: May 25, 2018, 02:46:29 PM by kuka »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: помогите с WHILE
« Reply #1 on: May 25, 2018, 03:49:57 PM »
Зачем ты туда циклов понапихал если по условию никаких циклов нет? Если картинка найдена, разрешаем выход из цикла и тут же переходим к новому вложенному циклу с таким же именем переменной снова указав значение 0. Если же картинка не найдена просто выпрыгиваем из циклов в конец, чего нельзя делать так как это порождает ошибку.
А еще у циклов for нужно не разные имена переменных писать, а указать начальное значение переменной.

Исправленный скрипт
Code: (clickermann) [Select]
WHILE($varnn < 100)
   LOGWRITE ("Цикл1")
   WAIT(RND(1,3))
   
   SETTHREAD (heroy, 0)
   // вот с этого места
   // проверка значка босса в общем окне
   GETSCREEN(58,32, 100,83)
   COLORMODE(6, 58,32, 100,83)
   IF_PICTURE_IN (58,32, 100,83, "klankvest2.bmp", -1, 60)
      LCLICK(78, 52)
      WAIT(3)
      LCLICK(99, 757)
      WAIT(7)
      LCLICK(413, 78)
      WAIT(1)
      LCLICK(413, 78)
      WAIT(1)
      LCLICK($_return1+10, $_return2+10)
      WAITMS(100)
      LCLICK($_return1+10, $_return2+10)
      WAIT(5)
      // проверка на значок боя с боссом в окне чата
      GETSCREEN(34,751, 83,802)
      COLORMODE(6, 34,751, 83,802)
      IF_PICTURE_IN (34,751, 83,802, "klanbossvchat2.bmp", -1, 70)
         LCLICK($_return1+56, $_return2-20)
         WAIT(5)
         // проверка наличия кнопки с надписью "в бой"
         GETSCREEN(259,751, 353,783)
         COLORMODE(6, 259,751, 353,783)
         IF_PICTURE_IN (259,751, 353,783, "klankvestvboy.bmp", -1, 70)
            LCLICK($_return1, $_return2)
            WAITMS(50)
            LCLICK($_return1, $_return2)
            WAIT(1)
            LCLICK($_return1, $_return2)
            WAIT(5)
            for($var=0, $var < 680) // рандомные клики
               LCLICK(RND(35,208),RND(419,491))
               waitms(RND(30,35))
            end_cyc
            WAIT(10)
            LCLICK(92,714)
            WAIT(4)
            LCLICK(92,714)
            WAIT(5)
           
            // проверка на кнопку бой за 5 алмазов
            GETSCREEN(250,709, 357,785)
            COLORMODE(6, 250,709, 357,785)
            IF_PICTURE_IN (250,709, 357,785, "01.bmp", -1, 90)
               LCLICK($_return1, $_return2+50)
               WAITMS(500)
               LCLICK(333, 471)
               WAIT(3)
               for($var=0, $var < 680) // рандомные клики
                  LCLICK(RND(35,208),RND(419,491))
                  waitms(RND(30,35))
               end_cyc
               WAIT(10)
               LCLICK(92, 714)
               WAIT(1)
               LCLICK(92, 714)
               WAIT(2)
            ELSE        // если кнопки на 5 алмазов нет - выход по метке
               WAIT(2)
               LOGWRITE ("1111")
            END_IF
         ELSE       // если кнопки в бой нет - выход по метке
            WAIT(2)
            LOGWRITE ("1")
         END_IF
      ELSE              // если значка боя с боссом в окне чата нет - выход по метке
         WAIT(2)
         LOGWRITE ("11")
      END_IF
   ELSE             // если значка босса в общем окне нет - выход по метке
      WAITMS(2)
      LOGWRITE ("111")
   END_IF
   
   //......................
   //здесь тело скрипта
   //......................
END_CYC
« Last Edit: May 25, 2018, 03:54:07 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите с WHILE
« Reply #2 on: May 25, 2018, 03:57:49 PM »
Там в конце каждого условия пауза в 2 сек (не считая одной опечатки в MC), уж написать её в одном месте тогда.

Code: (clickermann) [Select]
WHILE($varnn < 100)
    LOGWRITE ("Цикл1")
    WAIT(RND(1,3))
   
    SETTHREAD (heroy, 0)
    GETSCREEN(58,32, 100,83)
    COLORMODE(6, 58,32, 100,83)
    IF_PICTURE_IN (58,32, 100,83, "klankvest2.bmp", -1, 60)
        LCLICK(78, 52)
        WAIT(3)
        LCLICK(99, 757)
        WAIT(7)
        LCLICK(413, 78)
        WAIT(1)
        LCLICK(413, 78)
        WAIT(1)
        LCLICK($_return1+10, $_return2+10)
        WAITMS(100)
        LCLICK($_return1+10, $_return2+10)
        WAIT(5)
        // проверка на значок боя с боссом в окне чата
        GETSCREEN(34,751, 83,802)
        COLORMODE(6, 34,751, 83,802)
        IF_PICTURE_IN (34,751, 83,802, "klanbossvchat2.bmp", -1, 70)
            LCLICK($_return1+56, $_return2-20)
            WAIT(5)
            // проверка наличия кнопки с надписью "в бой"
            GETSCREEN(259,751, 353,783)
            COLORMODE(6, 259,751, 353,783)
            IF_PICTURE_IN (259,751, 353,783, "klankvestvboy.bmp", -1, 70)
                LCLICK($_return1, $_return2)
                WAITMS(50)
                LCLICK($_return1, $_return2)
                WAIT(1)
                LCLICK($_return1, $_return2)
                WAIT(5)
                for($var=0, $var < 680) // рандомные клики
                    LCLICK(RND(35,208),RND(419,491))
                    waitms(RND(30,35))
                end_cyc
                WAIT(10)
                LCLICK(92,714)
                WAIT(4)
                LCLICK(92,714)
                WAIT(5)
               
                // проверка на кнопку бой за 5 алмазов
                GETSCREEN(250,709, 357,785)
                COLORMODE(6, 250,709, 357,785)
                IF_PICTURE_IN (250,709, 357,785, "01.bmp", -1, 90)
                    LCLICK($_return1, $_return2+50)
                    WAITMS(500)
                    LCLICK(333, 471)
                    WAIT(3)
                    for($var=0, $var < 680) // рандомные клики
                        LCLICK(RND(35,208),RND(419,491))
                        waitms(RND(30,35))
                    end_cyc
                    WAIT(10)
                    LCLICK(92, 714)
                    WAIT(1)
                    LCLICK(92, 714)
                ELSE        // если кнопки на 5 алмазов нет
                    LOGWRITE ("1111")
                END_IF
            ELSE       // если кнопки в бой нет
                LOGWRITE ("1")
            END_IF
        ELSE              // если значка боя с боссом в окне чата нет
            LOGWRITE ("11")
        END_IF
    ELSE             // если значка босса в общем окне нет
        LOGWRITE ("111")
    END_IF
    WAIT(2)
   
    //......................
    //здесь тело скрипта
    //......................
END_CYC


kuka

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: помогите с WHILE
« Reply #3 on: May 25, 2018, 05:36:21 PM »
Спасибо огромное!
Изучал язык по ходу написания бота и помню эту часть делал по шаблону "графика - ожидание картинки". А потом уже забыл про название шаблона и искал что не так с циклами) Глупо конечно.