Author Topic: Подскажите, что не так  (Read 17974 times)

0 Members and 1 Guest are viewing this topic.

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #15 on: September 16, 2013, 01:39:38 PM »
Обьясни пожалуйста почему у меня в GOSUB(vozd) не корректно работает INC($check,1), тоисть, первый раз переменная равна 0, как и должно, второй и последующие переменная равна 1, почему не нарастает?
Code: (clickermann) [Select]
WAIT(1)
LCLICK(56,471)  // переключатель слотов 2
WAIT(1)
LCLICK(34,261) // Гиг
WAIT(1)
LCLICK(1021,290)   // выделение моба
WAIT(1)
LCLICK(15,470)  // переключатель слотов 1
WAITMS(500)
LCLICK(420,267)  // активация флеш окна

WAITMS(500)
 
start:
 
// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF
 
WAITMS(300)
 
 
// проверка ХП
GOSUB(XP)

// Цикл для использования воздаяния
GOSUB(vozd)

       
// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC
 
WAIT(2)
 
// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF
 
 
// проверка ХП
GOSUB(XP)
 
// удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC
 
WAIT(2)
 
// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

 
// проверка ХП
GOSUB(XP)
 
// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC
 
WAIT(2)
 
// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF
 
 
// проверка ХП
GOSUB(XP)
 
// удар вверх
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC
 
WAIT(2)
 
// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF
 
 
// проверка ХП
GOSUB(XP)
 
// юзаем вамп
KEYPRESS(#1)
 
//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC
 
GOTO(start) // последний удар ВЖК и возврат в начало цикла.
 

 
 
SUB(XP)
   // проверка ХП
   IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
      $check_2 = 0
      $check_3 = 0
      $check_4 = 0
      $check_5 = 0
      $check_6 = 0
   END_IF
 
   GETSCREEN
   IF_PIXEL_IN(203,140, 208,146, 896)
   Else
      IF($check_2 = 0) // нажатие 2 если еще не нажималась
         $check_2 = 1
         KEYPRESS(#2)
         WAITMS(300)
      Else
         IF($check_3 = 0) // нажатие 3 если еще не нажималась
            $check_3 = 1
            KEYPRESS(#3)
            WAITMS(300)
         Else
            IF($check_4 = 0) // нажатие 4 если еще не нажималась
               $check_4 = 1
               KEYPRESS(#4)
               WAITMS(300)
            Else
               IF($check_5 = 0) // нажатие 5 если еще не нажималась
                  $check_5 = 1
                  KEYPRESS(#5)
                  WAITMS(300)
               Else
                  IF($check_6 = 0) // нажатие 6 если еще не нажималась
                     $check_6 = 1
                     KEYPRESS(#6)
                     WAITMS(300)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB

// Если бой закончен
finish:
LCLICK(881,135)
WAIT(3)
LCLICK(275,205)

// Цикл для использования воздаяния
SUB(vozd)

WAIT(2)

WHILE($check < 100)
   IF(($check = 0) | ($check = 2) | ($check = 4) // если верно, выполняется
        LOGWRITE("Переменная: ", $check)
        LOGWRITE("юзает воздаяние ")
LCLICK(56,471)  // переключатель слотов 2
  WAITMS(750)     
     LCLICK(33,219)  // воздаяние
      WAITMS(750)
     LCLICK(15,470)  // переключатель слотов 1
      WAITMS(750)
     LCLICK(420,267)  // активация флеш окна
      WAITMS(500)     
INC($check,1)
  Else   
       LOGWRITE("Переменная: ", $check)
       LOGWRITE("не юзает")
  INC($check,1)
   END_IF
END_SUB   

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #16 on: September 16, 2013, 01:58:27 PM »
Как ты сам правильно заметил, после строки 226 нет END_CYC
И если у тебя INC($check,1) происходит в любом случае, вынеси его за IF? зачем писать 2 раза. А ещё правильней вместо WHILE использовать цикл FOR
« Last Edit: September 16, 2013, 02:00:51 PM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #17 on: September 16, 2013, 01:59:40 PM »
Ошибка 1
Состовные условия должны иметь внутренние и внешние скобки
IF ( ($check = 0) | ($check = 2) | ($check = 4) )

Ошибка 2
Цикл WHILE должен завершаться END_CYC

Code: (clickermann) [Select]
WAIT(1)
LCLICK(56,471)  // переключатель слотов 2
WAIT(1)
LCLICK(34,261) // Гиг
WAIT(1)
LCLICK(1021,290)   // выделение моба
WAIT(1)
LCLICK(15,470)  // переключатель слотов 1
WAITMS(500)
LCLICK(420,267)  // активация флеш окна

WAITMS(500)

start:

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAITMS(300)


// проверка ХП
GOSUB(XP)

// Цикл для использования воздаяния
GOSUB(vozd)


// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(2)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF


// проверка ХП
GOSUB(XP)

// удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(2)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF


// проверка ХП
GOSUB(XP)

// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(2)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF


// проверка ХП
GOSUB(XP)

// удар вверх
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(2)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF


// проверка ХП
GOSUB(XP)

// юзаем вамп
KEYPRESS(#1)

//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

GOTO(start) // последний удар ВЖК и возврат в начало цикла.




SUB(XP)
   // проверка ХП
   IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
      $check_2 = 0
      $check_3 = 0
      $check_4 = 0
      $check_5 = 0
      $check_6 = 0
   END_IF
   
   GETSCREEN
   IF_PIXEL_IN(203,140, 208,146, 896)
   Else
      IF($check_2 = 0) // нажатие 2 если еще не нажималась
         $check_2 = 1
         KEYPRESS(#2)
         WAITMS(300)
      Else
         IF($check_3 = 0) // нажатие 3 если еще не нажималась
            $check_3 = 1
            KEYPRESS(#3)
            WAITMS(300)
         Else
            IF($check_4 = 0) // нажатие 4 если еще не нажималась
               $check_4 = 1
               KEYPRESS(#4)
               WAITMS(300)
            Else
               IF($check_5 = 0) // нажатие 5 если еще не нажималась
                  $check_5 = 1
                  KEYPRESS(#5)
                  WAITMS(300)
               Else
                  IF($check_6 = 0) // нажатие 6 если еще не нажималась
                     $check_6 = 1
                     KEYPRESS(#6)
                     WAITMS(300)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB

// Если бой закончен
finish:
LCLICK(881,135)
WAIT(3)
LCLICK(275,205)

// Цикл для использования воздаяния
SUB(vozd)
   
   WAIT(2)
   
   WHILE($check < 100)
      IF(($check = 0) | ($check = 2) | ($check = 4)) // если верно, выполняется
         LOGWRITE("Переменная: ", $check)
         LOGWRITE("юзает воздаяние ")
         LCLICK(56,471)  // переключатель слотов 2
         WAITMS(750)
         LCLICK(33,219)  // воздаяние
         WAITMS(750)
         LCLICK(15,470)  // переключатель слотов 1
         WAITMS(750)
         LCLICK(420,267)  // активация флеш окна
         WAITMS(500)
         INC($check,1)
      Else
         LOGWRITE("Переменная: ", $check)
         LOGWRITE("не юзает")
         INC($check,1)
      END_IF
   END_CYC
END_SUB

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #18 on: September 20, 2013, 03:55:26 PM »
Ребят, а можно сделать что бы 2 цикла программы выполнялись одновременно? То есть, мне нужно что бы на протяжении всей той программы которую я выложил, выполнялся цикл с поиском цвета пикселя, если цвет появится такой как нужно, программа должна прерваться на любом этапе выполнения и перейти к новым задачам. А то сейчас после каждого цикла писать это действие нереально, программа будет медленно тогда работать( на поиски надо минимум 2 сек, а это много уже для меня.

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #19 on: September 22, 2013, 01:56:56 AM »
Ну скажите хоть из WHILE можно выпрыгивать в LOAD или это тоже приведет к ошибке так же как и с GOTO ?

mjkl

  • Освоившийся
  • **
  • Posts: 38
    • View Profile
Re: Подскажите, что не так
« Reply #20 on: September 22, 2013, 03:30:26 AM »
Ребят, а можно сделать что бы 2 цикла программы выполнялись одновременно? То есть, мне нужно что бы на протяжении всей той программы которую я выложил, выполнялся цикл с поиском цвета пикселя, если цвет появится такой как нужно, программа должна прерваться на любом этапе выполнения и перейти к новым задачам. А то сейчас после каждого цикла писать это действие нереально, программа будет медленно тогда работать( на поиски надо минимум 2 сек, а это много уже для меня.

убавь площадь поиска до минимума + цветокорреция

Ну скажите хоть из WHILE можно выпрыгивать в LOAD или это тоже приведет к ошибке так же как и с GOTO ?

можно, загружает сценарий и вьіполняет его

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #21 on: September 22, 2013, 07:34:31 PM »
У меня выходит бред какой-то, нужно сделать так:
Code: (clickermann) [Select]
SUB(vpered)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // Что бы искало не более 45 сек, если в течении 45 сек не было найдено выполнить команду GOTO(x).
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
  END_CYC
END_SUB

Через шаблон с WHILE не подходит, потому что мне нужно, если не найдет в течении 45 секунд, то приступит к последнему циклу в это программе, а не как с GOSUB выполнил и вернется заново туда же. Если без WHILE не обойтись, то пускай будет с ним, выскочу с помощью LOAD

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #22 on: September 22, 2013, 08:16:45 PM »
У меня выходит бред какой-то, нужно сделать так:
Code: (clickermann) [Select]
SUB(vpered)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // Что бы искало не более 45 сек, если в течении 45 сек не было найдено выполнить команду GOTO(x).
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
  END_CYC
END_SUB

Через шаблон с WHILE не подходит, потому что мне нужно, если не найдет в течении 45 секунд, то приступит к последнему циклу в это программе, а не как с GOSUB выполнил и вернется заново туда же. Если без WHILE не обойтись, то пускай будет с ним, выскочу с помощью LOAD

Если "делать правильно" то можно так:
Code: (clickermann) [Select]
SUB(vpered)
   
   $check = 0
   $time_wait = $_time_t+45 // 45 сек
   WHILE(($check = 0) & ($time_wait > $_time_t))
      GETSCREEN
      IF_PIXEL_IN (428,355, 439, 373, 2104698) // Что бы искало не более 45 сек, если в течении 45 сек не было найдено выполнить команду GOTO(x).
         $check = 1
         KEYPRESS(#w)
      Else
         WAITMS(50)
      END_IF
   END_CYC
END_SUB

И там где вызываешь саб после вызова пишешь проверку и идёшь куда нужно (в пределах разумного)

Code: (clickermann) [Select]
GOSUB(vpered)
IF($check = 0)
   GOTO(x)
END_IF

Если после твоего GOTO скоро будет завершение скрипта и скрипт не планируется эксплуатировать часами, можно забить и перейти сразу. Но это неправильно! Хоть ошибки не будет.
Code: (clickermann) [Select]
SUB(vpered)
   
   $check = 0
   $time_wait = $_time_t+45 // 45 сек
   WHILE(($check = 0) & ($time_wait > $_time_t))
      GETSCREEN
      IF_PIXEL_IN (428,355, 439, 373, 2104698) //  Что бы искало не более 45 сек, если в течении 45 сек не было найдено выполнить команду GOTO(x).
         $check = 1
         KEYPRESS(#w)
      Else
         WAITMS(50)
      END_IF
   END_CYC
   IF($check = 0)
      GOTO(x)
   END_IF
END_SUB
« Last Edit: September 22, 2013, 08:39:38 PM by Vint »


dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #23 on: September 22, 2013, 08:30:03 PM »
Спасибо, сейчас попробую правильный и не правильный вариант)

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #24 on: October 30, 2013, 03:15:46 AM »
Здравствуйте ребят, уже многому научился в этом кликере, сделал хороший скрипт, но случайно при сохранении другого, сохранил и заменил свой налаженный. Вот сам скрипт:
Code: (clickermann) [Select]
// Начало тела программы
IF($raduga = 0)
   $time_raduga = $_time_t + 120
   $raduga = 1
END_IF
GOSUB(napad)
body: // тело
LCLICK(422,268)
$usilok = 0 //  для усилков
$var = 0 // для завершонки
$check_2 = 0
$check_3 = 0
$check_4 = 0
$check_5 = 0
$check_6 = 0


$banka = RND(4,8) // ожидание после юза банки
$time_end = 0 // на случай форс мажора

$check = 0  // присваиваем 0 чтобы цикл заработал
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (473,414, 487,424, 145)   // поиск круга удара
      goSUB(XP)
      // для использования усилков
      GETSCREEN
      IF_PIXEL_IN(584,234,587,236,122) // проверка хп монстра
         INC($usilok,1)
         INC($uz_usilok,1)
         IF(($usilok > 0) & ($usilok < 6))
            KEYPRESS(#1)
         else
            IF(($usilok > 5) & ($usilok < 11))
               KEYPRESS(#2)
            END_IF
         END_IF
      END_IF
     
     
      if($key = 0)         // условие для удара вперед
         KEYPRESS(#w)
         $key = 1
      else
         if($key = 1)      // условие для удара вниз
            KEYPRESS(#e)
            $key = 0
         END_IF
      END_IF
      WAIT(1) // ожидание после нажатия клавиши удара
   Else
      WAITMS(50)
      GETSCREEN
      IF_PICTURE_IN (450,400,530,433,"exit.bmp")    // поиск окна "победы"
         $check = 1     // при этом цикл боя не будет продолжаться
         DBLCLICK(487,420)  //  нажатие на выход с боя
         WAIT(1)
         WHILE($var = 0)
            GETSCREEN
            IF_PIXEL_IN(85,256,87,258,11194089)
               $var = 1
               LCLICK(290,205) //  Нажатие на вкладку завершонных боев
               WAITMS(700)
            else
               WAITMS(50)
               LCLICK(882,131)   // нажатие на "Боя" в верхней панели
               WAITMS(2000)
            END_IF
         END_CYC
      END_IF
   END_IF
END_CYC
// то что происходит когда выходит с боя
IF($time_raduga < $_time_t)
   // Цикл для отчета
END_IF

LOAD("bot_raduga.cms")



//"ПОДПРОГРАММЫ"//

// проверка ХП
SUB(XP)
   
   GETSCREEN
   IF_PIXEL_IN(286,234,290,236, 54)
     
      IF($check_2 = 0) // юз первой банки
         $check_2 = 1
         IF($_time_t > $time_xp)     // проверка тайма банки
            KEYPRESS(#3)
            INC($uz_banok,1)   // для отчета по количеству использованых банок
            $time_xp = $_time_t + 21   // присваиваем тайм на использование банки
            WAIT($banka)   // ожидание после юза банки
         END_IF
      Else
         IF($check_3 = 0) // юз второй банки
            $check_3 = 1
            IF($_time_t > $time_xp)
               KEYPRESS(#4)
               INC($uz_banok,1)
               $time_xp = $_time_t + 21
               WAIT($banka)
            END_IF
         Else
            IF($check_4 = 0) // юз третей банки
               $check_4 = 1
               IF($_time_t > $time_xp)
                  KEYPRESS(#5)
                  INC($uz_banok,1)
                  $time_xp = $_time_t + 21
                  WAIT($banka)
               END_IF
            Else
               IF($check_5 = 0) // юз 4й банки
                  $check_5 = 1
                  IF($_time_t > $time_xp)
                     KEYPRESS(#6)
                     INC($uz_banok,1)
                     $time_xp = $_time_t + 21
                     WAIT($banka)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB

// Поиск завершонки и нападение по ней
SUB(napad)
   $if = 0
   $list = 1
   $ckic = RND(200,300) // промежуток между кликами на завершонку
   napad:
   
   GETSCREEN
   IF_PIXEL_IN(473,414, 487,424, 145)
      GOTO(body)
   END_IF
   
   WAIT(1)
   
   GETSCREEN
   IF_PICTURE_IN (124,186,290,554, "ник.bmp")
     
      $x_min = $_return1
      $y_min = $_return2 - 30
      $x_max = $_return1 + 350
      $y_max = $_return2 + 100
     
      GETSCREEN
      IF_PICTURE_IN ($x_min,$y_min,$x_max,$y_max, "мечь.bmp")
         
         
         
         $time_end = $_time_t + 30 // если в течении 30 сек не нападает, значит збой программы и завершение.
         
         WHILE(($if = 0) & ($time_end > $_time_t))
            BEEP(1000,200)
            move($_return1+6, $_return2+3)
            WAITMS($ckic)
            LCLICK($_return1+6, $_return2+3)
            GETSCREEN
            IF_PIXEL_IN(473,414, 487,424, 145)   // поиск круга боя
               $if = 1 // если найдет круг боя, начало боя.
            END_IF
         END_CYC
         IF($if = 1)
            GOTO(body) // переход к началу боя
         END_IF
      END_IF
     
   else
      LCLICK(86,337)
      WAITMS(100)
      WHEELDOWN (3)
      WAITMS(500)
   END_IF
   
   
   GETSCREEN
   IF_PIXEL_IN(473,414, 487,424, 145)
      GOTO(body)
   END_IF
   
   GETSCREEN
   IF_PICTURE_IN (124,186,290,554, "ник.bmp")
     
      $x_min = $_return1
      $y_min = $_return2 - 30
      $x_max = $_return1 + 350
      $y_max = $_return2 + 100
     
      GETSCREEN
      IF_PICTURE_IN ($x_min,$y_min,$x_max,$y_max, "мечь.bmp")
         
         
         $time_end = $_time_t + 30 // если в течении 30 сек не нападает, значит збой программы и завершение.
         WHILE(($if = 0) & ($time_end > $_time_t))
            move($_return1+6, $_return2+3)
            WAITMS($ckic)
            LCLICK($_return1+6, $_return2+3)
            GETSCREEN
            IF_PIXEL_IN(473,414, 487,424, 145)   // поиск круга боя
               $if = 1 // если найдет круг боя, начало боя.
            END_IF
         END_CYC
         IF($if = 1)
            GOTO(body) // переход к началу боя
         END_IF
      END_IF
     
   else
      LCLICK(86,337)
      WAITMS(100)
      WHEELDOWN (3)
      WAITMS(500)
   END_IF
   
   GETSCREEN
   IF_PICTURE_IN (124,186,290,554, "ник.bmp")
     
      $x_min = $_return1
      $y_min = $_return2 - 30
      $x_max = $_return1 + 350
      $y_max = $_return2 + 100
     
      GETSCREEN
      IF_PICTURE_IN ($x_min,$y_min,$x_max,$y_max, "мечь.bmp")
         
         
         $time_end = $_time_t + 30 // если в течении 30 сек не нападает, значит збой программы и завершение.
         WHILE(($if = 0) & ($time_end > $_time_t))
            move($_return1+6, $_return2+3)
            WAITMS($ckic)
            LCLICK($_return1+6, $_return2+3)
            GETSCREEN
            IF_PIXEL_IN(473,414, 487,424, 145)   // поиск круга боя
               $if = 1 // если найдет круг боя, начало боя.
            END_IF
         END_CYC
         IF($if = 1)
            GOTO(body) // переход к началу боя
         END_IF
      END_IF
     
   else
      LCLICK(86,337)
      WAITMS(100)
      WHEELUP(6)
      WAITMS(500)
   END_IF
   
   WAITMS(500)
   IF($list = 1)
      $list = 2
      LCLICK(176,275)
      WAITMS(600)
      goto(napad)
   Else
      IF($list = 2)
         $list = 3
         LCLICK(196,275)
         WAITMS(600)
         goto(napad)
      Else
         IF($list = 3)
            $list = 4
            LCLICK(216,276)
            WAITMS(600)
            goto(napad)
         Else
            IF($list = 4)
               $list = 5
               LCLICK(236,275)
               WAITMS(600)
               goto(napad)
            Else
               IF($list = 5)
                  $list = 1
                  LCLICK(256,275)
                  WAITMS(600)
                  goto(napad)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB

Вот смотрите в начале есть цикл WHILE в котором есть GOSUB(XP), вот когда уровень хп первый раз опускается до того как пиксель изменит цвет, выполняется использование банки жизни и дальше все идет бой, НО вот когда уровень хп снова опускается  до уровня когда нужно использовать банку, оно почему-то ничего не использует, а попросту игнорирует и дальше выполняются удары. Раньше работало отлично, но саб этот был не внутри цикла WHILE, думаю это не может быть проблемой. Посмотрите, может где-то ошибку сделал, а то сам вроде никаких ошибок не вижу.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #25 on: October 30, 2013, 11:52:29 AM »
А тайм на использование банки $time_xp действительно один для всех?
Просто после использования первой у тебя на 21 секунду блокируются все по времени.
При этом по номерам он их пробегает и тратит чеки  :)
$check с 3 по 5. После чего он уже ничего не использует даже по истечении 21 сек.

Я не знаю какая логика программы, но тут либо чекам присваиваться 1 должно внутри Ифа по времени.
Либо если одно время на всех IF с проверкой времени должен идти снаружи, а не внутри.
И да, после использования четвёртой не нужно их опять все включать?


dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #26 on: October 30, 2013, 01:22:16 PM »
Quote
А тайм на использование банки $time_xp действительно один для всех?
Да, тайм 1 на всех. Когда 1 раз использует банку, то в течении 20 сек нельзя использовать еще.

Quote
$check с 3 по 5. После чего он уже ничего не использует даже по истечении 21 сек
Вот после того как проходит 21 секунда и уровень хп опускается до нужного, цвет пикселя меняет цвет на нужный для программы, оно все равно не выполняет, не понимаю почему, вить условия все подходят

 Вот сейчас попробую вынести проверку времени в самое начало, сразу же после поиска цвета, надеюсь все получится.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #27 on: October 30, 2013, 01:32:57 PM »
Да, тайм 1 на всех. Когда 1 раз использует банку, то в течении 20 сек нельзя использовать еще.
Тогда нужно вынести проверку времени на верхний уровень.
Quote
Вот после того как проходит 21 секунда и уровень хп опускается до нужного, цвет пикселя меняет цвет на нужный для программы, оно все равно не выполняет, не понимаю почему, вить условия все подходят

 Вот сейчас попробую вынести проверку времени в самое начало, сразу же после поиска цвета, надеюсь все получится.
потому, что $check_3, $check_4, $check_5 у тебя уже 1 и не дают выполняться условию.

« Last Edit: October 31, 2013, 07:46:35 AM by Vint »


dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #28 on: October 30, 2013, 02:24:29 PM »
Спасибо Vint, разобрался, работает))

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #29 on: November 01, 2013, 04:02:28 PM »
Вот уже примерно недельку ломаю голову на этим:
Нужно организовать поиск изображения которое может быть повернуто на все 180 градусов, подробнее дальше.
Есть картинка, http://pixs.ru/showimage/Bezimyanni_9183221_9576777.png, на ней 2 камня. Вот эти камешки и есть то изображение которое нужно искать, но камешек этот может появится на экране не так как я его сохранил принт-скрином, а с поворотом на 0-180 градусов. Есть какие-то мысли по этому поводу? Пока у меня лишь 1 вариант, сохранить камешек и в фотошопе сделать все версии этого камешка, то есть 180 картинок, ну думаю долго перебирать будет, да и сделать такую кучу картинок муторное дело.