Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: HuanMatus on May 04, 2019, 02:58:52 PM
-
В общем, нужен кликер, суть которого сводится к следующему:
1. Распознавание числа в небольшой области (числа с точкой).
2. Если число < N, то *это я уже сделаю сам*.
Устал работать с поиском по картинке, это долго, трудно и негибко. Подскажите, с чего начать?
-
http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221 (http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221)
-
http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221 (http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221)
Решил использовать это:
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
HALT
Я понимаю, что он максимально простой, но у меня даже с ним проблемы. Куда залить символы и куда выводится результат? Заранее прошу прощения за профанские вопросы.
-
http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221 (http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221)
Разобрался. Проблема теперь с тем, что скрипт не определяет цифры после точки.
Например, «3.2» он отображает как «3.», аналогично и с другими. Что делать?
-
http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221 (http://crapware.aidf.org/forum/index.php?topic=88.msg16221#msg16221)
Разобрался. Проблема теперь с тем, что скрипт не определяет цифры после точки.
Например, «3.2» он отображает как «3.», аналогично и с другими. Что делать?
Разобрался с этим. Ок, как теперь работать с $str?
«IF $str < 28» как-то не хочет работать. С этим я уже не разберусь, помогите пожалуйста.
-
Код:
GETSCREEN
WAITMS(28)
IF_PICTURE_IN (272,623, 373,660, "search.bmp", -1, 100)
MOVE(390,641)
LCLICK(345,640)
WAITMS(13)
MOVE(427,634)
WAITMS(12)
END_IF
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(621,340, 667,360, -1, 50) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
IF $str < 2.8
MOVE(617,331)
WAITMS(59)
MOVE(624,329)
WAITMS(48)
LCLICK(625,328)
WAITMS(551)
MOVE(583,404)
WAITMS(64)
MOVE(626,404)
WAITMS(72)
LCLICK(626,404)
WAITMS(421)
END_IF
WAITMS(75)
IF($time < $_time_t)
$time = $_time_t + 60
KEYPRESS(#U)
WAITMS(150)
KEYPRESS(#U)
WAITMS(150)
END_IF
1. Скрипт делает снимок экрана, ищет кнопку и нажимает её.
2. Определение числа в области.
3. Если число меньше N, то всякие махинации мышью.
4. Каждые 60 секунд окно открывается-закрывается.
В таком виде код выбивает ошибку "количество открывающих операторов не совпадает с количеством закрывающих". Буду признателен за помощь в исправлении.
-
Разобрался с этим. Ок, как теперь работать с $str?
«IF $str < 28» как-то не хочет работать. С этим я уже не разберусь, помогите пожалуйста.
Синтаксис описан в справке. Не говоря уже что в скрипте выше есть примеры условий.
IF($str < 28)
LOGWRITE ("Меньше 28")
END_IF
-
Разобрался с этим. Ок, как теперь работать с $str?
«IF $str < 28» как-то не хочет работать. С этим я уже не разберусь, помогите пожалуйста.
Синтаксис описан в справке. Не говоря уже что в скрипте выше есть примеры условий.
IF($str < 28)
LOGWRITE ("Меньше 28")
END_IF
MOVE(617,331)
WAITMS(59)
MOVE(624,329)
WAITMS(48)
LCLICK(625,328)
WAITMS(551)
MOVE(583,404)
WAITMS(64)
MOVE(626,404)
WAITMS(72)
LCLICK(626,404)
WAITMS(421)
Эти действия не выполняются после условия, даже если $str действительно меньше 28. Как правильно задать условие?
-
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
//=============================================
GETSCREEN
IF_PICTURE_IN (272,623, 373,660, "search.bmp", -1, 100)
MOVE(390,641)
LCLICK(345,640)
WAITMS(13)
MOVE(427,634)
WAITMS(12)
END_IF
GETSCREEN
recognize(621,340, 667,360, -1, 50) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
IF ($str < 2.8)
MOVE(617,331)
WAITMS(59)
MOVE(624,329)
WAITMS(48)
LCLICK(625,328)
WAITMS(551)
MOVE(583,404)
WAITMS(64)
MOVE(626,404)
WAITMS(72)
LCLICK(626,404)
WAITMS(421)
END_IF
WAITMS(75)
IF($time < $_time_t)
$time = $_time_t + 60
KEYPRESS(#U)
WAITMS(150)
KEYPRESS(#U)
WAITMS(150)
END_IF