Author Topic: Нужна помощь в написании скриптовки  (Read 3438 times)

0 Members and 1 Guest are viewing this topic.

alwhite

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Есть некоторые моменты хотелось бы понять.
к примеру мне надо отработка партии задач.
Как лучше реализовать в одном скрипте или с подгрузкой из файлов..

Задача

Сканирование площади
если находится изображение то клик
снова сканирование новой области
если находится изображение то клик

если нет  - то клик на другое изображение

после переход на новую страницу сканирование, нахождение изображений (или отработка команд по координатам)
цикл 20 раз
после сканирование клик по картинке для перехода в следующий

так же скрипт со временем каждые полтора час клик на область (по картинке) затем последовательность нахождения других изображений и проклик. (возможно по координатам)

начал

Code: (clickermann) [Select]
$check = 0  // взял с форума для чего он ? может заменить на чтото другое ?
WHILE($check = 0)
GETSCREEN   // сканирование области
IF_PICTURE_IN (2739,1011, 2789,1065, "vokzal.bmp", -1, 80) // если нашлось изображение изображения
    LCLICK($_return1+15, $_return2+15) //клик на найденое изображение с отступом в 15
   WAITMS(100) // ожидание

// необходим переход к этому действию
   GETSCREEN  //сканирование новой открытой области
         IF_PICTURE_IN (2921, 3829,1070, "bablo.bmp", -1, 80) //если нашлось изображения
            LCLICK($_return1+15, $_return2+15)
WAITMS(100)
// если не нашлось то перейти к поиску дргого изображения тут же
   ELSE // правильно ли это ?
    IF_PICTURE_IN (2921, 3829,1070, "opit.bmp", -1, 80) //если нашлось изображения
            LCLICK($_return1+15, $_return2+15)
   
     ELSE
$check = 1
WAITMS(50)
  // body
END_IF

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #1 on: April 20, 2015, 08:14:10 AM »
Из твоего алгоритма мало что понятно, нарисуй нормальную блок схему, например с помощью этого онлайн сервиса https://www.gliffy.com/ Выбери там Start Drawing.

Твой исправленный скрипт. Цикл WHILE завершится только если "если нет  - то клик на другое изображение"

Code: (clickermann) [Select]
$check = 0  // взял с форума для чего он ? может заменить на чтото другое ?
WHILE($check = 0)
   GETSCREEN   // сканирование области
   IF_PICTURE_IN (2739,1011, 2789,1065, "vokzal.bmp", -1, 80) // если нашлось изображение изображения
      LCLICK($_return1+15, $_return2+15) //клик на найденое изображение с отступом в 15
      WAITMS(100) // ожидание
     
      // необходим переход к этому действию
      GETSCREEN  //сканирование новой открытой области
      IF_PICTURE_IN (2921, 3829,1070, "bablo.bmp", -1, 80) //если нашлось изображения
         LCLICK($_return1+15, $_return2+15)
         WAITMS(100)
         // если не нашлось то перейти к поиску дргого изображения тут же
      ELSE
         IF_PICTURE_IN (2921,1011, 3829,1070, "opit.bmp", -1, 80) //если нашлось изображения
            LCLICK($_return1+15, $_return2+15)
            WAITMS(100)
            $check = 1
         END_IF
      END_IF
   END_IF
   WAITMS(50)
END_CYC

alwhite

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #2 on: April 20, 2015, 09:49:14 AM »
Так.... нарисую попозже, как сделать так, что бы он скаинровал область каждый раз
Прошу посмотреть не прокликивает на вором нахождении картинки

Code: (clickermann) [Select]
GETSCREEN
IF($time < $_time_t)
   // тайм 5400 сек

IF_PICTURE_IN (1950,240, 3836,1069, "plan.bmp", -1, 86)
  LCLICK($_return1+5, $_return2+5)
  WAITMS(1000)
  LCLICK(3189,384)    //ïëàíèðîâùèê
  waitms(3000)
    FOR ($var, $var < 12)
    GETSCREEN (2412,290, 3341,841)
   
$var=plan_st
$check = 0
if($check = 0)
IF_PICTURE_IN (2897,679, 2950,729, "plan_dor.bmp", -1, 85)  //нахождение клик
  waitms(1000)
LCLICK($_return1+5, $_return2+5) // сработало
  waitms(1000)
  IF_PICTURE_IN (2706,469, 2766,500, "plan_nxt.bmp", -1, 85) // находит
  waitms(1000)
  LCLICK($_return1+5, $_return2+5) // !!!!! НЕ КЛИКАЕТ почему ?
  waitms(1000)
 
  // $check = 1
// if($check = 1)
  // IF_PICTURE_IN (2731,472, 2759,499, "plan_nxt.bmp", -1, 80) // ñëåä ïîå
  // waitms(1000)
  // LCLICK($_return1+2, $_return2+2)
// end_if

else
$check = 2
GOTO($var=plan_nxt)
end_if
 
 
 
  $var=plan_nxt
$check = 0
if($check = 0)
IF_PICTURE_IN (2897,679, 2950,729, "plan_nxt.bmp", -1, 80) // ñëåä ïîå
  LCLICK($_return1+2, $_return2+2)
  waitms(1000)
else
$check = 1
GOTO($var=plan_st)
end_if


  end_cyc
 
WAITMS(100)
   $time = $_time_t + 5400
END_IF

$var=a
$check = 0
if($check = 0)
GETSCREEN
IF_PICTURE_IN (1950,240, 3836,1069, "vokzal.bmp", -1, 86)
  LCLICK($_return1+5, $_return2+5)
   WAITMS(100)
ELSE
$check = 1
GOTO($var=b)
END_IF

$var=b
$check = 0
if($check = 0)
GETSCREEN
IF_PICTURE_IN (2691,1009, 3070,1064, "lab.bmp", -1, 99)
  LCLICK($_return1+5, $_return2+5)
   WAITMS(100)
ELSE
$check = 1
GOTO($var=b)
END_IF

END_IF

halt // for single run
« Last Edit: April 20, 2015, 10:47:23 AM by alwhite »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #3 on: April 20, 2015, 12:27:32 PM »
Блоки с началом, но без конца...

Не хватает трёх  END_IF для IF из строк  15, 16, 41 (должны быть до end_cyc  из строки 51)

И нет END_IF для  строк 2 и 59


alwhite

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #4 on: April 24, 2015, 09:10:57 AM »
в цикл не уходит в чем гемор?

идея вроде такая http://prntscr.com/6xi2rw

Code: (clickermann) [Select]
    FOR ($var, $var < 12)
    GETSCREEN (494,268, 1420,820)
   
$var=plan_st
$check = 0
if($check = 0)
GETSCREEN (989,658, 1031,701)
IF_PICTURE_IN (989,658, 1031,701, "plan_dor.bmp", -1, 82)  //íîâûé ïóòü
  waitms(1000)
LCLICK($_return1+5, $_return2+5)
  waitms(1000)
  else
  $check = 1
  waitms(1000)
GOTO($var=plan_nxt)
end_if

$var=plan_nxt
$check = 0
if($check = 0)
GETSCREEN (807,443, 845,481)
  IF_PICTURE_IN (807,443, 845,481, "plan_nxt.bmp", -1, 85) // ñëåä ïîå
  waitms(1000)
  LCLICK($_return1+10, $_return2+10)
  waitms(1000)
  else
  $check = 1
  waitms(1000)
GOTO($var=plan_kypit)
end_if

  end_cyc

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #5 on: April 24, 2015, 09:43:04 AM »
Вот что это такое?
Code: (clickermann) [Select]
GOTO($var=plan_nxt)
$var=plan_nxt

правильно писать так
Code: (clickermann) [Select]
GOTO(plan_nxt)
plan_nxt:

Вот как то так
Code: (clickermann) [Select]
$count = 0
WHILE($count < 12) // цикл отработает 12 раз
   GETSCREEN (989,658, 1031,701)
   IF_PICTURE_IN (989,658, 1031,701, "plan_dor.bmp", -1, 82)  //Картинка 1
      INC($count,1) // увеличиваем счетчик только при успешном нахождении
      LCLICK($_return1+5, $_return2+5)
      waitms(1000)
     
      GETSCREEN (807,443, 845,481)
      IF_PICTURE_IN (807,443, 845,481, "plan_nxt.bmp", -1, 85) // след пое
         LCLICK($_return1+10, $_return2+10) // если все нормально
         waitms(1000)
      else
         // если новое окно всплыло
         GETSCREEN (807,443, 845,481)
         IF_PICTURE_IN (807,443, 845,481, "Картинка 3.bmp", -1, 85) // скан области на наличие новой картинки
            LCLICK($_return1+10, $_return2+10)
            waitms(1000)
            // и цикл заново
         end_if
      end_if
     
   else
      WAITMS(50)
   end_if
end_cyc

HALT // стоп

alwhite

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #6 on: April 24, 2015, 12:19:17 PM »
Спасибо огромное. что именно в данный момент у меня получается.

Сканирование области по таймеру - нахождение нужной картинки - новое окно - сканирование - поиск картинки клик - сканирование области дальше цикл.
Цикл - поиск  в области изображение если есть клик - если нет переходит к поиску другой картинки - сканирование если есть клик - если вылезло новое окно - сканирование поиск другой кнопки клик - и на повтор цикла.

Code: (clickermann) [Select]
// делаем скан
GETSCREEN
 
// таймер выставелен снизу полтора часа $time = $_time_t + 5400
IF($time < $_time_t)
 
// поиск изображения
IF_PICTURE_IN (772,975, 1153,1026, "plan.bmp", -1, 86)
  LCLICK($_return1+5, $_return2+5)
  WAITMS(1000)
 
Getscreen // для обновления буфера изображения
  IF_PICTURE_IN (494,268, 1420,820, "plan_plus.bmp", -1, 86)
  LCLICK($_return1+5, $_return2+5)    //ïëàíèðîâùèê
  waitms(1000)
   
//уход в цикл
$count = 0
WHILE($count < 12) // öèêë 12 ðàç
    GETSCREEN (494,268, 1420,820)
   
plan_st //поиск одного изображения
GETSCREEN (989,658, 1031,701)
IF_PICTURE_IN (989,658, 1031,701, "plan_dor.bmp", -1, 82)  //если нашел клик
  waitms(1000)
LCLICK($_return1+5, $_return2+5)
  waitms(1000)
  else //если не нашел в этой области то переход к поиску другого изображения
  waitms(1000)
GOTO(plan_nxt)
end_if

plan_nxt // поиск другой кнопки если предыдущая сработала либо была отклонена
GETSCREEN (807,443, 845,481)
  IF_PICTURE_IN (807,443, 845,481, "plan_nxt.bmp", -1, 85) // клик по нахождению
  waitms(1000)
  LCLICK($_return1+10, $_return2+10)
  waitms(1000)
  else // переход если кнопка не будет найдена
  waitms(1000)
GOTO(plan_kypit)
end_if

plan_kypit // скан области если всплывет новое окно и поиск кнопки для отработки
GETSCREEN (725,403, 1194,670)
  IF_PICTURE_IN (866,617, 1020,652, "kypit.bmp", -1, 85) // êóïèòü âàãîí
  waitms(1000)
  LCLICK($_return1+10, $_return2+10)
  waitms(1000)
  else
  waitms(1000)
LCLICK($_return1+210, $_return2+10)
end_if
INC($count,1) // к циклу +1 после прохождения всех отработок
  end_cyc
 
WAITMS(100)
$time = $_time_t + 5400 // время через которое  должен начаться этот модуль. Проблема в том что начинает отрабатывать с нуля
END_IF
« Last Edit: April 24, 2015, 01:39:07 PM by alwhite »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Нужна помощь в написании скриптовки
« Reply #7 on: April 24, 2015, 03:47:16 PM »
Зачем ты пишешь эти бессмысленные в твоем коде ГОТО? Да еще и упорно неправильно plan_nxt: двоеточие в конце где? В твоем коде недостает 2х END_IF
Вот пример бессмысленного кода, мы указываем кликеру перейти на следующую строку, но и без гото он сделал бы тоже самое.
Code: (clickermann) [Select]
GOTO(plan_nxt)
plan_nxt:

Code: (clickermann) [Select]
else //если не нашел в этой области то переход к поиску другого изображения
waitms(1000)
GOTO(plan_nxt) //прыгаем от сюда
end_if

plan_nxt: // сюда, но и без этого кликер сам туда направится

Исправленный код
Code: (clickermann) [Select]
// таймер выставелен снизу полтора часа $time = $_time_t + 5400
IF($time < $_time_t)
   
   // делаем снимок
   GETSCREEN
   IF_PICTURE_IN (772,975, 1153,1026, "plan.bmp", -1, 86)
      LCLICK($_return1+5, $_return2+5)
      WAITMS(1000)
     
      Getscreen // для обновления буфера изображения
      IF_PICTURE_IN (494,268, 1420,820, "plan_plus.bmp", -1, 86)
         LCLICK($_return1+5, $_return2+5)    //планировщик
         waitms(1000)
         
         //уход в цикл
         $count = 0
         WHILE($count < 12) // цикл 12 раз
            //поиск одного изображения
            GETSCREEN (989,658, 1031,701)
            IF_PICTURE_IN (989,658, 1031,701, "plan_dor.bmp", -1, 82)  //если нашел клик
               waitms(1000)
               LCLICK($_return1+5, $_return2+5)
               waitms(1000)
            else //если не нашел в этой области то переход к поиску другого изображения
               waitms(1000)
            end_if
           
            // поиск другой кнопки если предыдущая сработала либо была отклонена
            GETSCREEN (807,443, 845,481)
            IF_PICTURE_IN (807,443, 845,481, "plan_nxt.bmp", -1, 85) // клик по нахождению
               waitms(1000)
               LCLICK($_return1+10, $_return2+10)
               waitms(1000)
            else // переход если кнопка не будет найдена
               waitms(1000)
            end_if
           
            // скан области если всплывет новое окно и поиск кнопки для отработки
            GETSCREEN (725,403, 1194,670)
            IF_PICTURE_IN (866,617, 1020,652, "kypit.bmp", -1, 85) // купить вагон
               waitms(1000)
               LCLICK($_return1+10, $_return2+10)
               waitms(1000)
            else
               waitms(1000)
               LCLICK($_return1+210, $_return2+10)
            end_if
            INC($count,1) // к циклу +1 после прохождения всех отработок
         end_cyc
      END_IF
   END_IF
   WAITMS(100)
   $time = $_time_t + 5400 // время через которое  должен начаться этот модуль. Проблема в том что начинает отрабатывать с нуля
END_IF
WAITMS(500)