Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Sniper on September 23, 2019, 01:05:13 PM
-
Добрый день.
Подскажите как можно упростить скрипт, при запуске он зависает.
Раньше работал быстрее, теперь если добавлять поиск картинок например как (прямо, слева, справа и радиус) он начинает зависать. Этот момент будет еще добавляться по поиску картинок, т.к. они меняют и могут быть около 9 типов и того их 36.
$NO=0 - это цикл действия нажал и ждёт, что появится
$rub=0 - это цикл действия когда он нашёл и выполняет действия с ожиданием в 5 мин
$flang=0 - это нажатия клавиш
Можно ли как то упростить например поиск по картинке прямо с 0 по 9 и слева с 10 по 19 и при этом выполнять выполнения циклов ?
while(1)
$NO=0
$rub=0
$flang=0
$click_ok=0
getscreen
If_picture_in(534,131,1743,902,"ничего.bmp",-1,100)
Waitms(100)
print("нажал на ничего")
$No=1
else
If_picture_in(534,131,1743,902,"радиус.bmp",-1,100)
Waitms(100)
print("нажал на радиус")
$NO=1
else
If_picture_in(534,131,1743,902,"справа.bmp",-1,100)
print("нажал справа")
Wait(1)
//справа+ указать кооры
$rub=1
$flang=1
else
If_picture_in(534,131,1743,902,"справа1.bmp",-1,100)
print("нажал справа")
Wait(1)
//справа+ указать кооры
$rub=1
$flang=1
else
If_picture_in(534,131,1743,902,"слева.bmp",-1,100)
print("нажал слева")
Wait(1)
//слева+ указать кооры
$rub=1
$flang=2
else
If_picture_in(534,131,1743,902,"прямо.bmp",-1,100)
LCLICK($_return1, $_return2)
print("нашел перед собой")
Wait(1)
//прямо+ указать кооры
$rub=1
$flang=3
else
If_picture_in(534,131,1743,902,"прямо1.bmp",-1,100)
LCLICK($_return1, $_return2)
print("нашел перед собой1")
Wait(1)
//прямо+ указать кооры
$rub=1
$flang=3
else
If_picture_in(534,131,1743,902,"прямо3.bmp",-1,100)
LCLICK($_return1, $_return2)
print("нашел перед собой3")
Wait(1)
//прямо+ указать кооры
$rub=1
$flang=3
else
$no=1
$click_ok=1
end_if
end_if
end_if
end_if
end_if
end_if
end_if
end_if
........
if($no=1)
getscreen
If_picture_in(918,597,965,647,"поиск.bmp",-1,100)
LCLICK($_return1,$_return2)
print("нажал поиск")
wait(33)//33 сек после клика на поиск
end_if
end_if
waitms(100)
end_cyc
-
Добрый день.
Подскажите как можно упростить скрипт, при запуске он зависает.
Раньше работал быстрее, теперь если добавлять поиск картинок например как (прямо, слева, справа и радиус) он начинает зависать. Этот момент будет еще добавляться по поиску картинок, т.к. они меняют и могут быть около 9 типов и того их 36.
Он не зависает а выполняет поиск картинки, и пока этот поиск не завершится кликер не отвечает ни на какие команды.
Максимально уменьши картинки поиска.
Можно ли как то упростить например поиск по картинке прямо с 0 по 9 и слева с 10 по 19 и при этом выполнять выполнения циклов ?
"с 0 по 9 и слева с 10 по 19" чего??
-
Картинки и так взяты по минимуму 20х20 в bmp, а иначе по другому не находит, что нужно.
С 1 по 19 это нумерация картинок, которые мы можем встретить при поиске.
К примеру у нас есть то что нашёл перед собой 1 из 9 разных картинок, он проверяет эти картинки от 1 до 9, если находит 1 из них, то начинает выполнять действия и рубить к примеру дерево, применяет цикл $rub=1, если не находит 1 из 9 , то начинает поиск заново, применяет цикл $No=1.
И получается например у нас есть, то что находит слева 1 из от 10 по 19 картинку, поворачивается налево и применяет цикл $rub=1, если не находит 10 из 19 , то начинает поиск заново, применяет цикл $No=1.
Можно ли избежать большое написания скрипта, вместо
If_picture_in
............
Else
............
End_if
Как то сократить большое количество написания строк?
-
Можно создать цикл поиска картинок.
GETSCREEN
FOR($i=1,$i<=9)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Прямо_", $i, ".bmp"), -1, 100) // Прямо_1.bmp - Прямо_9.bmp
$rub=1
$i=9999
END_IF
END_CYC
IF($i!9999) // если не найдено
$No=1
END_IF
-
Скажите, а можно подпапки создать и указать, что бы картинку он брал из подпапки? а не из корня программы, откуда запускается программа?
-
Можно конечно.
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Подпапка\Прямо_", $i, ".bmp"), -1, 100)
-
Попробовал такой вариант
while(1)
$NO=0
$rub=0
$flang=0
$click_ok=0
getscreen
FOR($i=1,$i<=9)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Слева_", $i, ".bmp"), -1, 100) // Прямо_1.bmp - Прямо_9.bmp
$rub=1
$flag=2
$i=9999
END_IF
END_CYC
IF($i!9999) // если не найдено
$No=1
END_IF
If_picture_in(534,131,1743,902,"ничего.bmp",-1,100)
Waitms(100)
print("нажал на ничего")
$No=1
else
If_picture_in(534,131,1743,902,"радиус.bmp",-1,100)
Waitms(100)
print("нажал на радиус")
$NO=1
else
..........................
Не не срабатывает, он просто прокрутил и влез в другой цикл, который закрывает картинку, если нет их этого списка.
Добавил добавить в старое
If_picture_in
............
Else
............
End_if
с указанием на добавление новой картинки, сработал.
-
могу выложить весь скрипт, может вам так проще будет, что можно придумать и как выйти из ситуации
-
Великолепный пример работы с картинками показал Космич: http://crapware.aidf.org/forum/index.php?topic=5087.msg33305#msg33305
Космич, спасибо! :)
В задаче всего 4 направления рубки - фланги (если я правильно понимаю задачу).
Если использовать эти направления в именах картинок, то код сильно упрощается и укорачивается.
Первые две цифры в имени картинки - это и есть фланг, или код клавиши, которая выбирает фланг.
Третья цифра и последующие - порядковый номер картинки (или еще что-то нужное).
Левый: 371.bmp, 372.bmp, 373.bmp, 374.bmp, 375.bmp, ...
Верхний: 381.bmp, 382.bmp, 383.bmp, ...
...
Картинок всего 36 (по 9 штук на фланг), это не много, поэтому можно записать их в строку, а затем загрузить её в массив. Если картинок очень много, то такой массив можно сгенерировать самим скриптом.
Для расшифровки имен картинок можно использовать свитч.
Можно ввести переменные "$NO", "$rub" "$flang", "$click_ok" если они понадобятся по ходу скрипта. Но наверно можно обойтись и без некоторых из них.
STRSEPARATE("371:372:373:374:375:376:377:378:379:391:392:393:394:395:396:397:398:399:381:382:383:384:385:386:387:388:389:401:402:403:404:405:406:407:408:409", ":", $arr)
WHILE(1)
GETSCREEN
FOR($n = 0, $n < ARRSIZE($arr))
IF_PICTURE_IN(534,131,1743,902, STRCONCAT($arr[$n], ".bmp"))
$flang = STRCUT($arr[$n], 1, 2)
SWITCH($flang)
CASE(37)
LOGWRITE ("LEFT")
CASE(38)
LOGWRITE ("UP")
CASE(39)
LOGWRITE ("RIGHT")
CASE(40)
LOGWRITE ("DOWN")
END_SWITCH
// здесь цикл "rub"
ELSE
WAITMS(50)
END_IF
END_CYC
// здесь цикл "NO"
END_CYC
Можно еще выкинуть свитч и переменную "$flang", если по ходу сценария они будут не нужны. Расширение ".bmp" можно сразу дописать к именам файлов, тогда многократно склеивать их не придется.
Останется такой код:
STRSEPARATE("371.bmp:372.bmp:373.bmp:374.bmp:375.bmp:376.bmp:377.bmp:378.bmp:379.bmp:391.bmp:392.bmp:393.bmp:394.bmp:395.bmp:396.bmp:397.bmp:398.bmp:399.bmp:381.bmp:382.bmp:383.bmp:384.bmp:385.bmp:386.bmp:387.bmp:388.bmp:389.bmp:401.bmp:402.bmp:403.bmp:404.bmp:405.bmp:406.bmp:407.bmp:408.bmp:409.bmp", ":", $arr)
WHILE(1)
GETSCREEN
FOR($n = 0, $n < ARRSIZE($arr))
IF_PICTURE_IN(534,131,1743,902, $arr[$n])
KEYPRESS(STRCUT($arr[$n], 1, 2)) // выбираем "flang"
// здесь цикл "rub"
ELSE
WAITMS(50)
END_IF
END_CYC
// здесь цикл "NO"
END_CYC
По циклам "rub" и "NO" информации недостаточно.