Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: doushy on April 10, 2018, 11:54:39 PM
-
Такой вопрос...у меня Кликер, спустя время, начинает хуже работать...через пару часов, вообще 1 цикл выпорнят в 100 раз медленее...и если нажать стоп и заново запустить, то всё хорошо...Если ли здравое решение этой проблемы, типо обнуление данных или что то типо того...В скрипте много работы с пикселями...Когда скрипт 2500 циклов делает, то скорость цикла падает в 3 раза...когда 100000 циклов, скорость падает в 100-1000 раз, и получается цикл по 10 сек выполняется...и вариант как вторым кликером перезапускать первые - нету...а это не много туповато)))
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)
-
ад какой то честно говоря
- зочем столько GETSCREEN
- зочем куча IF_PIXEL_IN в одну точку
- зочем внутри них DEFINE а потом UNDEFINE в другом месте
- еще время какое то считается и наращивается постоянно.
если где и есть проблема, то это скорее всего в логике самого скрипта.
за два года с момента последней публичной версии никаких утечек памяти или еще чего такого вроде не находили.
-
- мне сказали что нужны к каждому пикселю GETSCREEN
- Ну нужно проверять проверять много чего, поэтому и много в одну точку
- Возможно старая наработка была, не удалил...Вообще тоже кое что отслеживал...
- Ну время, это чтобы каждые 10-20 минут что то делал...
-
- мне сказали что нужны к каждому пикселю GETSCREEN
- Ну нужно проверять проверять много чего, поэтому и много в одну точку
В целом да, GETSCREEN нужен после каждого вероятного изменения экрана.
Если есть одна точка, у которой надо определить цвет (как в случае с определением кри), то проще и быстрее (для пк) было бы написать через вложенные условия. Кроме того, при этом варианте можно удалить строчку ниже "UNDEFINE ($var_1)", которая потенциально приводит к ошибке (если отсутствуют все три пикселя) - нехорошо запрашивать (выводить в лог) значение несуществующей переменной.
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).
Вообще скрипт вызывает очень много вопросов, в том числе, зачем вот это вот?
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 секунду не всегда должны занимать именно столько времени.
Удачи, у вас всё получится.