Author Topic: Начинает зависать кликер  (Read 3210 times)

0 Members and 1 Guest are viewing this topic.

doushy

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Начинает зависать кликер
« on: April 10, 2018, 11:54:39 PM »
Такой вопрос...у меня Кликер, спустя время, начинает хуже работать...через пару часов, вообще 1 цикл выпорнят в 100 раз медленее...и если нажать стоп и заново запустить, то всё хорошо...Если ли здравое решение этой проблемы, типо обнуление данных или что то типо того...В скрипте много работы с пикселями...Когда скрипт 2500 циклов делает, то скорость цикла падает в 3 раза...когда 100000 циклов, скорость падает в 100-1000 раз, и получается цикл по 10 сек выполняется...и вариант как вторым кликером перезапускать первые - нету...а это не много туповато)))

Code: (clickermann) [Select]
IF($time_6 < $_time_t) //Окно (разрешение обязательно 1920x1080)
   wndpos( wndfind("CTA"), 1396, 0)
   wndsize( wndfind("CTA"), 487, 1040)
   LCLICK(1638,20)
   WAITMS(500)
   $time_6 = $_time_t + 3600
END_IF

DEFINE($var, 2)

GETSCREEN
IF_PIXEL_IN(1400,234, 1877,265, 48111)
   LCLICK($_return1, $_return2)
   WAITMS(500)
   
   GETSCREEN
   IF_PIXEL_IN(1562,491, 1710,573, 16760320)
      LCLICK($_return1, $_return2)
      WAIT(61)
      KEYPRESS(#ESC)
      WAIT(2)
      KEYPRESS(#F1)
      WAIT(1)
      KEYPRESS(#F1)
      WAIT(1)
     
      GETSCREEN
      IF_PIXEL_IN(1659,487, 1659,487, 13291479) //4 кри
         DEFINE($var_1, 4)
      END_IF
      IF_PIXEL_IN(1654,491, 1654,491, 12765393) //2 кри
         DEFINE($var_1, 2)
      END_IF
      IF_PIXEL_IN(1642,490, 1642,490, 15330286) //10 кри
         DEFINE($var_1, 10)
      END_IF
     
      LOGWRITE(" ", $var_1)
      UNDEFINE ($var_1)
      LCLICK(1644,582)
      WAITMS(1500)
      LCLICK(1644,582)
      WAITMS(500)
      LCLICK(1644,582)
      WAIT(1)
     
      GETSCREEN
      IF_PIXEL_IN(1820,57, 1840,64, 1195122) //Крестик
         LCLICK($_return1, $_return2)
         WAITMS(500)
      END_IF
      WAIT(1)
      GETSCREEN
      IF_PIXEL_IN(1555,653,1557,655, 6622) //Крестик красный на закрытик
         LCLICK(1558,655) // 6622
         WAITMS(500)
      END_IF
     
   END_IF
END_IF

IF($time_1 < $_time_t)
   GETSCREEN
   IF_PIXEL_IN(1795,448, 1795,448, 4953)
      WAITms(300)
      LCLICK($_return1, $_return2)
      WAIT(61)
     
      KEYPRESS(#ESC)
      WAIT(2)
      KEYPRESS(#F1)
      WAIT(1)
      KEYPRESS(#F1)
      WAIT(1)
     
      LCLICK(1644,582)
      WAITMS(1500)
      LCLICK(1644,582)
      WAITMS(500)
      LCLICK(1644,582)
      WAIT(1)
     
      GETSCREEN
      IF_PIXEL_IN(1820,57, 1840,64, 1195122) //Крестик
         LCLICK($_return1, $_return2)
         WAITMS(500)
      END_IF
      WAIT(1)
     
      GETSCREEN
      IF_PIXEL_IN(1555,653,1557,655, 6622) //Крестик красный на закрытик
         LCLICK(1558,655) // 6622
         WAITMS(500)
         
         $time_1 = $_time_t + 1200
      END_IF
   END_IF
END_IF

IF($time_2 < $_time_t)
   GETSCREEN
   IF_PIXEL_IN(1429,866,1431,868, 0) //АФК
      LCLICK($_return1, $_return2)
      WAITMS(500)
      GETSCREEN
      IF_PIXEL_IN(1590,577, 1688,623, 14470400)
         LCLICK($_return1, $_return2)
         $time_2 = $_time_t + 600
      END_IF
   END_IF
END_IF

If ($var = 2)
   IF($time_3 < $_time_t)
      GETSCREEN
IF_PIXEL_IN(1435,925,1437,927, 931432)    //завис
      else
         KEYPRESS(#home)
         WAIT(2)
         KEYPRESS(#F1)
         WAIT(1)
         LDOWN(1670,934)
         WAIT(1)
         LCLICK(1615,823)
         LCLICK(1615,823)
         WAITMS(1500)
         LCLICK(1446,765)
         Wait(15)
         
         GETSCREEN
         IF_PIXEL_IN(1587,545, 1694,608, 14470144, 14668032) //Синие окно
            LCLICK(1644,582)
            WAITMS(500)
         END_IF
         Wait(1)
         GETSCREEN
IF_PIXEL_IN(1820,57, 1840,64, 1195122) //Крестик
            LCLICK($_return1, $_return2)
            WAIT(1)
         END_IF
         
         GETSCREEN
         IF_PIXEL_IN(1587,545, 1694,608, 14338048) //Синие окно
            LCLICK(1644,582)
            WAITMS(500)
         END_IF
         
         LCLICK(1720,1000)
         WAITMS(500)
      END_IF
     
      $time_3 = $_time_t + 600
   END_IF
END_IF

GETSCREEN
IF_PIXEL_IN(1587,545, 1694,608, 14470144) //Синие окно
   LCLICK(1644,582)
   WAITMS(500)
   GETSCREEN
END_IF

IF_PIXEL_IN(1820,57, 1840,64, 1195122) //Крестик
   LCLICK($_return1, $_return2)
   WAIT(1)
   GETSCREEN
END_IF

IF_PIXEL_IN(1830,244, 1830,244, 1195122) //Крестик
   LCLICK($_return1, $_return2)
   WAIT(1)
END_IF

DEFINE($time, $_time_t + 600)
IF($time < $_time_t)
   LCLICK(42,718)  // 4777089
   $time = $_time_t + 600
END_IF

WAITMS(100)

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Начинает зависать кликер
« Reply #1 on: April 11, 2018, 04:32:36 PM »
ад какой то честно говоря

- зочем столько GETSCREEN
- зочем куча IF_PIXEL_IN в одну точку
- зочем внутри них DEFINE а потом UNDEFINE в другом месте
- еще время какое то считается и наращивается постоянно.

если где и есть проблема, то это скорее всего в логике самого скрипта.
за два года с момента последней публичной версии никаких утечек памяти или еще чего такого вроде не находили.


doushy

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Re: Начинает зависать кликер
« Reply #2 on: April 12, 2018, 11:21:55 PM »
- мне сказали что нужны к каждому пикселю GETSCREEN
- Ну нужно проверять проверять много чего, поэтому и много в одну точку
- Возможно старая наработка была, не удалил...Вообще тоже кое что отслеживал...
- Ну время, это чтобы каждые 10-20 минут что то делал...

Qwerry

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Re: Начинает зависать кликер
« Reply #3 on: April 15, 2018, 10:51:46 AM »
- мне сказали что нужны к каждому пикселю GETSCREEN
- Ну нужно проверять проверять много чего, поэтому и много в одну точку
В целом да, GETSCREEN нужен после каждого вероятного изменения экрана.
Если есть одна точка, у которой надо определить цвет (как в случае с определением кри), то проще и быстрее (для пк) было бы написать через вложенные  условия. Кроме того, при этом варианте можно удалить строчку ниже "UNDEFINE ($var_1)", которая потенциально приводит к ошибке (если отсутствуют все три пикселя) - нехорошо запрашивать (выводить в лог)  значение несуществующей переменной.
Code: (clickermann) [Select]
GETSCREEN
IF (PXL(1659,487)=13291479) //4 кри
$var_1=4 //если этот цвет - дальше не сверяет
ELSE  // если другой - проверяет дальше
       IF (PXL(1654,491)=12765393) //2 кри
       $var_1=2
       ELSE
          IF(PXL(1642,490)=15330286) //10 кри
          $var_1=10
          ELSE
           $var_1=0 // обнуляем, если ни один цвет не подходит.
          END_IF
      END_IF
END_IF

К слову, при анализе изображений для упрощения и игнорирования сглаживаний/искажений, обычно применяют цветокоррекцию COLORMODE(mode, x1, y1, x2, y2). 6 или 7 позволяют превратить все оттенки в несколько цветов, которые будет проcто анализировать. Кроме того, с учетом нескольких блоков подряд с комментарием "крестик", возможно вам вообще было бы проще использовать цветокоррекцию  и большую область поиска или же поиск картинки (if_piсture_in).

Вообще скрипт вызывает очень много вопросов, в том числе, зачем вот это вот?
Quote
DEFINE($time, $_time_t + 600)//   установили параметр $time > $_time_t
IF($time < $_time_t)  //  значит это не будет запускаться
   LCLICK(42,718)  // 4777089 //  и клика никогда не будет
   $time = $_time_t + 600 
END_IF

Но основные вопросы звучат так: "что вообще тут происходит?", "что он имеет в виду?", "что требуется сделать?", "зачем переписывать кучу раз одни и те же строки, если можно было создать подпрограммы?". Так что пытаться переписать не буду)
По вашему первому комментарию "скорость падает в 100-1000 раз, и получается цикл по 10 сек выполняется", тоже не все ясно: как вы определяли начало цикла? Вы поставили в начале программы счетчик циклов (INC ($cycle)), в значимых местах программы выводите лог (LOGWRITE($cycle, " поиск 1 ", $_time_t))?  В ряде случаев, на цикл уходит до 1,5-2 минут, так что скорость "пробега" будет разной.
Обычно увеличение времени исполнения связано с постепенно нарастающими переменными, недоучтенными секундами при выполнении основной части скрипта.

Лучшим советом, который могу дать сейчас - сделайте свой скрипт общительнее: в начале и в большинстве IF-ов пусть в логах сообщает, чем занят, что обнаружил.  Также стоило бы почитать в справке такие разделы, как 1. THREAD (потоки)  - через потоки цикличность выполнения разных сценариев (как вам надо) создавать проще,  2. SUB (подпрограммы)  - стоило бы сделать пару подпрограмм и запускать их в нужное время. Это даст возможность быстро подправить что-то, если решите изменить, даст скрипту лучшую читаемость, да и вообще значительно сократит его, 3. Посмотреть про colormode (возможно так самому будет проще, не придется столь старательно выискивать цвет/место пикселя, минимилизируете возможные ошибки),  4. Посмотреть в самом кликермане шаблоны ожидания цвета, картинки, ожидание+ таймаут - скорее всего, ожидания 15 или 61 секунду не всегда должны занимать именно столько времени.

Удачи, у вас всё получится.