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

Основной раздел => Общие вопросы => Topic started by: dmutruk on September 13, 2013, 04:11:59 PM

Title: Подскажите, что не так
Post by: dmutruk on September 13, 2013, 04:11:59 PM
          LCLICK(427,207) //активирует нужное окошко
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      WAITMS(500)
KEYPRESS(#w) // жмет клавишу после того как найдет
END_IF
   WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#r) // жмет клавишу после того как найдет
END_IF
WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
WAITMS(500)
KEYPRESS(#w) // жмет клавишу после того как найдет
END_IF
WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#q) // жмет клавишу после того как найдет
END_IF
WAIT(1)
KEYPRESS(#3) // жмет клавишу после того как найдет
WAITMS(500)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#r)  // жмет клавишу после того как найдет
END_IF

Собственно, я хочу что бы программа искала нужный пиксель до тех пор пока он не появится, кода появится, нажала на клавишу. После того как нажмет, снова искала по заданным параметрам, до тех пор пока пиксель нужного цвета не появится там. А сейчас у меня оно все мгновенно делает и не останавливается на поиске(((
Title: Re: Подскажите, что не так
Post by: Vint on September 13, 2013, 05:02:44 PM
Где команда GETSCREEN?
Что, где ждёт? У тебя везде написано одинаково.
Title: Re: Подскажите, что не так
Post by: dmutruk on September 13, 2013, 05:12:01 PM
GETSCREEN - один раз в начале прописывать или все время перед новым поиском? Искать нужно все время в одном месте и один и тот же цвет, но действия разные нужно выполнять
Title: Re: Подскажите, что не так
Post by: Oraven on September 13, 2013, 06:08:03 PM
Ну вот тебе ожидание

Code: (clickermann) [Select]
LCLICK(427,207) //активирует нужное окошко

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#w) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#r) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#w) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#q) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#3) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#r) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC
Title: Re: Подскажите, что не так
Post by: dmutruk on September 13, 2013, 07:22:36 PM
Oraven Огромное тебе спасибо, поигрался с задержкой и все заработало на ура (инет слабый и грузит долго действия). Мне не удобно просить, но есть еще несколько заданий которые надо выполнить, это было начало :'(
Code: (clickermann) [Select]
LCLICK(427,207)
WAIT(3)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.

//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 

KEYPRESS(#3)

 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC


Буду очень благодарен если поможете мне закончить создание этой трудной для меня программки.
Title: Re: Подскажите, что не так
Post by: Oraven on September 13, 2013, 08:45:38 PM
Как понял так и написал...
WAITMS(1) писать нет смысла, это почти то же самое как без задержки

Code: (clickermann) [Select]
start:

LCLICK(427,207)
WAIT(3)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
   GOTO(start) // переход к метке START
   WAITMS(500)
END_IF

//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

KEYPRESS(#3)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC
Title: Re: Подскажите, что не так
Post by: dmutruk on September 14, 2013, 01:31:47 AM
Спасибо, это работает отлично, так как мне и нужно.
Code: (clickermann) [Select]
//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
   GOTO(start) // переход к метке START
   WAITMS(500)
END_IF

А вот это:
Code: (clickermann) [Select]
//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

Получается как только к этому доходит очередь, оно нажимает клавишу А в любом случае. Обьясню подробней что именно мне нужно:


Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255) // К примеру, если находит цвет 255, то нужно что бы следующим действием было начало цикла "удар"(ниже написано, что я имел ввиду под "удар") и  KEYPRESS(#A) не выполнялось. А если не находит цвет 255, то выполнить  KEYPRESS(#A), а потом "удар"
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

//То что под этим комментарием назовем "удар"
$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
Title: Re: Подскажите, что не так
Post by: Oraven on September 14, 2013, 01:59:59 AM
Объясню и тебе смысл "Else"

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
// вот здесь код выполнится если пиксел найден
Else
// а здесь если пиксел не найден!!!
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

так что ты ищешь неверный цвет
Title: Re: Подскажите, что не так
Post by: dmutruk on September 14, 2013, 09:52:03 AM
Действительно, сменил цвет и заработало. А можно сделать так:
Code: (clickermann) [Select]
GETSCREEN
// создать лог файл в который будут вносится все нажатые клавиши во время роботы программы
IF_PIXEL_IN(203,140, 208,146, 896)
Else
KEYPRESS(#4) // перед тем как нажать 4, открыть лог, проверить не нажималась ли 4 раньше, если нет, то нажать 4. Если нажималось, то пропустить.
          Else
            KEYPRESS(#5) // перед тем как нажать 5, открыть лог, проверить не нажималась ли 5 раньше, если нет, то нажать 5. Если нажималось, то пропустить.
              Else,
                KEYPRESS(#6) // перед тем как нажать 6, открыть лог, проверить не нажималась ли 6 раньше, если нет, то нажать 6. Если нажималось, то пропустить.
   WAITMS(500)
END_IF

Тоисть за один цикл всей написанной программы можно только по 1 разу нажимать 4,5,6. А еще можно сделать что-то вот такое:
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(test.txt) // в файле test.txt написан цикл который нужно выполнить.
   WAITMS(500)
END_IF
На сколько, если так можно сделать, это замедлит роботу программы?
Title: Re: Подскажите, что не так
Post by: Oraven on September 14, 2013, 05:44:19 PM
В каждом условии допускается только одно Else!
Все это решается через серию условий и регулирующие их работу переменных.

Code: (clickermann) [Select]
IF(($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF

GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_4 = 0) // нажатие 4 если еще не нажималась
      $check_4 = 1
      KEYPRESS(#4)
      WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
         END_IF
      END_IF
   END_IF
END_IF
Title: Re: Подскажите, что не так
Post by: dmutruk on September 14, 2013, 06:05:46 PM
Все работает отлично. А можно сделать так:
 
Code: (clickermann) [Select]
start:
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w) // Что бы после того как нажатие этой кнопки, в этом цикле будет произведенно 10 раз, выполнить еще несколько кликов мишкой в заданные точки? И дальше продолжать без кликов еще 10 раз, и так 3 раза нужно.
       GOTO(start)
   Else
      WAITMS(50)
   END_IF
END_CYC
Это только пример, в программе там все немножко иначе, но смысл тот же.
Title: Re: Подскажите, что не так
Post by: Oraven on September 14, 2013, 06:38:44 PM
Зачем GOTO(start) это бессмысленно

Code: (clickermann) [Select]
$check = 1
WHILE($check < 31)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      KEYPRESS(#w)
      WAITMS(500)
     
      // несколько кликов мышкой в заданные точки
      IF(($check = 10) | ($check = 20) | ($check = 30))
         LCLICK(10,10)
         WAITMS(500)
         LCLICK(10,10)
         WAITMS(500)
         LCLICK(10,10)
         WAITMS(500)
      END_IF
      INC($check,1) //наращиваем переменную
   Else
      WAITMS(50)
   END_IF
END_CYC
Title: Re: Подскажите, что не так
Post by: dmutruk on September 14, 2013, 06:53:07 PM
Я же говорил что это пример, в общем вот моя программа:
Code: (clickermann) [Select]


// активируем окно флеш
LCLICK(427,207)
WAITMS(500)

start:

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

WAITMS(300)


// проверка ХП
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(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вперед
$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(5)

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

WAIT(1)

// проверка ХП
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(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вниз
$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(5)

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

WAIT(1)

// проверка ХП
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(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вперед
$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(5)

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

WAIT(1)

// проверка ХП
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(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вверх
$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(5)

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

WAIT(1)

// проверка ХП
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(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
 
// юзаем вамп
KEYPRESS(#1)

//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
      WAIT(1)     
      GOTO(start) // последний удар ВЖК и возврат в начало цикла.
   Else
      WAITMS(50)
   END_IF
END_CYC



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



Вроде все правильно или можно всего этого добиться меньшим количеством циклов?
Title: Re: Подскажите, что не так
Post by: Vint on September 14, 2013, 08:33:17 PM
Вроде все правильно или можно всего этого добиться меньшим количеством циклов?
Не читал ничего про подпрограммы? Почитай. Куча одинаковых блоков, от которых в глазах рябит.
Title: Re: Подскажите, что не так
Post by: Oraven on September 14, 2013, 08:33:17 PM
Повторяющийся код для компактности можно засунуть в СУБПРОГРАММУ. Следует помнить что из SUBa выпрыгивать по GOTO не рекомендовано.

Code: (clickermann) [Select]
// активируем окно флеш
LCLICK(427,207)
WAITMS(500)

start:

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

WAITMS(300)


// проверка ХП
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(5)

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

WAIT(1)

// проверка ХП
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(5)

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

WAIT(1)

// проверка ХП
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(5)

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

WAIT(1)

// проверка ХП
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(5)

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

WAIT(1)

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

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

//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
      WAIT(1)
      GOTO(start) // последний удар ВЖК и возврат в начало цикла.
   Else
      WAITMS(50)
   END_IF
END_CYC



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


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(500)
      Else
         IF($check_3 = 0) // нажатие 3 если еще не нажималась
            $check_3 = 1
            KEYPRESS(#3)
            WAITMS(500)
         Else
            IF($check_4 = 0) // нажатие 4 если еще не нажималась
               $check_4 = 1
               KEYPRESS(#4)
               WAITMS(500)
            Else
               IF($check_5 = 0) // нажатие 5 если еще не нажималась
                  $check_5 = 1
                  KEYPRESS(#5)
                  WAITMS(500)
               Else
                  IF($check_6 = 0) // нажатие 6 если еще не нажималась
                     $check_6 = 1
                     KEYPRESS(#6)
                     WAITMS(500)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB
Title: Re: Подскажите, что не так
Post by: dmutruk 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   
Title: Re: Подскажите, что не так
Post by: Vint on September 16, 2013, 01:58:27 PM
Как ты сам правильно заметил, после строки 226 нет END_CYC
И если у тебя INC($check,1) происходит в любом случае, вынеси его за IF? зачем писать 2 раза. А ещё правильней вместо WHILE использовать цикл FOR
Title: Re: Подскажите, что не так
Post by: Oraven 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
Title: Re: Подскажите, что не так
Post by: dmutruk on September 20, 2013, 03:55:26 PM
Ребят, а можно сделать что бы 2 цикла программы выполнялись одновременно? То есть, мне нужно что бы на протяжении всей той программы которую я выложил, выполнялся цикл с поиском цвета пикселя, если цвет появится такой как нужно, программа должна прерваться на любом этапе выполнения и перейти к новым задачам. А то сейчас после каждого цикла писать это действие нереально, программа будет медленно тогда работать( на поиски надо минимум 2 сек, а это много уже для меня.
Title: Re: Подскажите, что не так
Post by: dmutruk on September 22, 2013, 01:56:56 AM
Ну скажите хоть из WHILE можно выпрыгивать в LOAD или это тоже приведет к ошибке так же как и с GOTO ?
Title: Re: Подскажите, что не так
Post by: mjkl on September 22, 2013, 03:30:26 AM
Ребят, а можно сделать что бы 2 цикла программы выполнялись одновременно? То есть, мне нужно что бы на протяжении всей той программы которую я выложил, выполнялся цикл с поиском цвета пикселя, если цвет появится такой как нужно, программа должна прерваться на любом этапе выполнения и перейти к новым задачам. А то сейчас после каждого цикла писать это действие нереально, программа будет медленно тогда работать( на поиски надо минимум 2 сек, а это много уже для меня.

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

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

можно, загружает сценарий и вьіполняет его
Title: Re: Подскажите, что не так
Post by: dmutruk 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
Title: Re: Подскажите, что не так
Post by: Vint 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
Title: Re: Подскажите, что не так
Post by: dmutruk on September 22, 2013, 08:30:03 PM
Спасибо, сейчас попробую правильный и не правильный вариант)
Title: Re: Подскажите, что не так
Post by: dmutruk 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, думаю это не может быть проблемой. Посмотрите, может где-то ошибку сделал, а то сам вроде никаких ошибок не вижу.
Title: Re: Подскажите, что не так
Post by: Vint on October 30, 2013, 11:52:29 AM
А тайм на использование банки $time_xp действительно один для всех?
Просто после использования первой у тебя на 21 секунду блокируются все по времени.
При этом по номерам он их пробегает и тратит чеки  :)
$check с 3 по 5. После чего он уже ничего не использует даже по истечении 21 сек.

Я не знаю какая логика программы, но тут либо чекам присваиваться 1 должно внутри Ифа по времени.
Либо если одно время на всех IF с проверкой времени должен идти снаружи, а не внутри.
И да, после использования четвёртой не нужно их опять все включать?
Title: Re: Подскажите, что не так
Post by: dmutruk on October 30, 2013, 01:22:16 PM
Quote
А тайм на использование банки $time_xp действительно один для всех?
Да, тайм 1 на всех. Когда 1 раз использует банку, то в течении 20 сек нельзя использовать еще.

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

 Вот сейчас попробую вынести проверку времени в самое начало, сразу же после поиска цвета, надеюсь все получится.
Title: Re: Подскажите, что не так
Post by: Vint on October 30, 2013, 01:32:57 PM
Да, тайм 1 на всех. Когда 1 раз использует банку, то в течении 20 сек нельзя использовать еще.
Тогда нужно вынести проверку времени на верхний уровень.
Quote
Вот после того как проходит 21 секунда и уровень хп опускается до нужного, цвет пикселя меняет цвет на нужный для программы, оно все равно не выполняет, не понимаю почему, вить условия все подходят

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

Title: Re: Подскажите, что не так
Post by: dmutruk on October 30, 2013, 02:24:29 PM
Спасибо Vint, разобрался, работает))
Title: Re: Подскажите, что не так
Post by: dmutruk on November 01, 2013, 04:02:28 PM
Вот уже примерно недельку ломаю голову на этим:
Нужно организовать поиск изображения которое может быть повернуто на все 180 градусов, подробнее дальше.
Есть картинка, http://pixs.ru/showimage/Bezimyanni_9183221_9576777.png (http://pixs.ru/showimage/Bezimyanni_9183221_9576777.png), на ней 2 камня. Вот эти камешки и есть то изображение которое нужно искать, но камешек этот может появится на экране не так как я его сохранил принт-скрином, а с поворотом на 0-180 градусов. Есть какие-то мысли по этому поводу? Пока у меня лишь 1 вариант, сохранить камешек и в фотошопе сделать все версии этого камешка, то есть 180 картинок, ну думаю долго перебирать будет, да и сделать такую кучу картинок муторное дело.
Title: Re: Подскажите, что не так
Post by: Oraven on November 01, 2013, 04:52:37 PM
Ох и как же кликерманщики обходились раньше одной только функцией IF_PIXEL_IN???!!!

Тебе надо искать цвет пикселов из этого камня. Подобрать их поможет Unique Colors Search
http://crapware.aidf.org/forum/index.php?topic=42.msg572#msg572

Ну и цветокоррекция тоже приветствуется.
Title: Re: Подскажите, что не так
Post by: Hito on November 03, 2013, 03:54:46 PM
Охренеть вы тут развернули сценарий...) Очень поучительно было бы для многих, если бы в таких темах объяснялись команды, как в случае с "Else".
Объясню и тебе смысл "Else"

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
// вот здесь код выполнится если пиксел найден
Else
// а здесь если пиксел не найден!!!
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF
Я, например, хоть понял, что это за команда, благодаря этой теме...)
Title: Re: Подскажите, что не так
Post by: dmutruk on December 06, 2013, 08:52:15 AM
А можно ли как нибуть сделать ожидание появления картинки, как вот есть для появления пикселя?
Code: (clickermann) [Select]
GETSCREEN
WHILE(PXL (100, 100) ! 255)
   WAITMS (100)
   GETSCREEN
END_CYC
А то варианты типа:
Code: (clickermann) [Select]
WHILE($var = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      $var = 1
   else
      waitms(50)
   END_IF
   
END_CYC
надоели тем, что очень много переменных и путаешься если в комментариях не пишешь сразу для чего данная переменная
Title: Re: Подскажите, что не так
Post by: aden on December 06, 2013, 09:23:53 AM
А можно ли как нибуть сделать ожидание появления картинки, как вот есть для появления пикселя?
Code: (clickermann) [Select]
GETSCREEN
WHILE(PXL (100, 100) ! 255)
   WAITMS (100)
   GETSCREEN
END_CYC
А то варианты типа:
Code: (clickermann) [Select]
WHILE($var = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      $var = 1
   else
      waitms(50)
   END_IF
   
END_CYC
надоели тем, что очень много переменных и путаешься если в комментариях не пишешь сразу для чего данная переменная

Code: [Select]

nachalo:
GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      goto(dalshe)
   else
      waitms(50)
goto(nachalo)
   END_IF
dalshe:
мои любимые goto )))

ps. сори за отступы, редактировал на бегу)
Title: Re: Подскажите, что не так
Post by: Vint on December 06, 2013, 01:55:19 PM
А можно ли как нибуть сделать ожидание появления картинки, как вот есть для появления пикселя?
Code: (clickermann) [Select]
GETSCREEN
WHILE(PXL (100, 100) ! 255)
   WAITMS (100)
   GETSCREEN
END_CYC
А то варианты типа:
Code: (clickermann) [Select]
WHILE($var = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      $var = 1
   else
      waitms(50)
   END_IF
   
END_CYC
надоели тем, что очень много переменных и путаешься если в комментариях не пишешь сразу для чего данная переменная

Code: (clickermann) [Select]
nachalo:
GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      goto(dalshe)
   else
      waitms(50)
goto(nachalo)
   END_IF
dalshe:

мои любимые goto )))

ps. сори за отступы, редактировал на бегу)

И в чём сокральный смысл такой экономии?
Сэкономил переменную "$var"  но ввёл две метки "dalshe:" и  "nachalo:", поменял шило на мыло попутно нафиг разломав стройный и понятный порядок выполнения. При этом увеличив код на 1 строку. :-\
Понятно из вопроса, что человек жаждет использовать IF_PICTURE_IN прямо в условии цикла WHILE. К сожалению так нельзя. Да это и не важно, размер кода увеличивается незначительно. Я переменных вообще не жалею.

Нужно просто использовать не безсмысленные var, а что нибудь понятнее.
"Безликие" переменные типа $i далее $j можно иногда использовать для организации конечных циклов, т.е. не содержащих вложенных циклов/подпрограмм. Максимум одно вложение. Внешнее $i внутреннее $j
Если вложений больше, для внешних (можно для всех, кроме маленьких незначащих) использовать осмысленные переменные для циклов.
(ох и написал... кроме меня это хоть кто нибудь понял?  :) )

Со временем вырабатывается привычка делать, так то и так то. Путаться не будешь точно.

P. S. dmutruk используй для оформления кода не кнопку "Код", а выпадающий список "Код" - "Clickermann". Если конечно пишешь не с телефона (у меня с телефона пользоваться списком нельзя).
Title: Re: Подскажите, что не так
Post by: dmutruk on December 17, 2013, 03:03:42 AM
Здравствуйте, ребят, были проблемы с интернетом, не было возможности отписаться. Далее по делу:
Quote
Нужно просто использовать не безсмысленные var, а что нибудь понятнее.
"Безликие" переменные типа $i далее $j можно иногда использовать для организации конечных циклов, т.е. не содержащих вложенных циклов/подпрограмм. Максимум одно вложение. Внешнее $i внутреннее $j
Если вложений больше, для внешних (можно для всех, кроме маленьких незначащих) использовать осмысленные переменные для циклов.
(ох и написал... кроме меня это хоть кто нибудь понял?  :) )
Ну я так в общем и делаю, но бывает иногда в коде меняю частично алгоритм и выходит что переменная либо стает ненужной (так как выше бывает 1 переменная на несколько однотипных задач) и в ходе анализа могу запутаться, бывает редко, но все же хотелось избавиться от этого  использовав IF_PICTURE_IN прямо в условии цикла WHILE. Ну нельзя так нельзя, буду стараться быть внимательнее ;)


Quote
P. S. dmutruk используй для оформления кода не кнопку "Код", а выпадающий список "Код" - "Clickermann". Если конечно пишешь не с телефона (у меня с телефона пользоваться списком нельзя).

Дык я же так и делаю всегда, за исключением первого поста в этом топе (не знал что так можно тогда). Возможно ты имел в виду aden с его постом:
Quote
Code: [Select]

nachalo:
GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "somefile.bmp")
      print("Найден в координатах X=", $_return1, ", Y=", $_return2)
      LCLICK($_return1, $_return2)
      goto(dalshe)
   else
      waitms(50)
goto(nachalo)
   END_IF
dalshe:
Title: Re: Подскажите, что не так
Post by: Vint on December 17, 2013, 09:40:31 AM
Дык я же так и делаю всегда, за исключением первого поста в этом топе (не знал что так можно тогда). Возможно ты имел в виду aden с его постом:
Сори. Из-за вложенности ответов неправильно написал. Это относилось к aden.
Всего лишь рекомендация. Так всем удобней читать форум.
Title: Re: Подскажите, что не так
Post by: dmutruk on December 20, 2013, 03:41:08 AM
Задам вопрос не по теме, но после того как получил бан за использовании сторонних программ, возник вопрос, какими способами отслеживаются такие программы как наш кликкер? Все действия которые делались, были все с рандомными задержками которые сам  опытным путем определял дабы они были близки к моим) И еще, если отслеживание происходит через проверку моих процессов, то есть ли программы которые запретят доступ к моему компу от таких "вторжений") ::)