Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Gamezoo7 on July 02, 2019, 11:46:20 PM
-
Всем привет , не могу никак собрать скрипт на определения чисел, из-за изменений на новые версии возникла путаница опытных юзеров прошу помочь, нужно определить числа после чего если она соответствует нужному мне промежутку выполнить готовый порядок действий
-
Тут я приложил аналогичную версию но для распознавания цвета
-
Какого шрифта? Каких чисел? Какие "новые версии"?
Зачем лепить 200 строк записи если нужны только 4 строки кликов?!
GETSCREEN
IF_PIXEL_IN(1161,205, 1327,232, 127744)
LCLICK(1756,222)
WAITMS(500)
LCLICK(1775,976)
WAITMS(500)
LCLICK(780,647)
WAITMS(500)
LCLICK(973,605)
WAITMS(500)
ELSE
LCLICK(1806,112)
WAITMS(500)
END_IF
И сразу все проще и куда понятнее...
-
проблема в том что игра на прямую не распознает когда клик чисто по пикселю без продолжительного наведения на него потому я добавил немного воды , скажем так съимитировал нормальное поведение мыши
-
Вот пример , цена клинков составляет 17000, если в продаже появятся клинки за 10000 он должен мне будет их купить если нет обновить страничку, вот как-то так , раньше предметы которые скоро должны были появится в продаже помечались плашкой "на удержании" и когда она сменялась на "в продаже" тот код имитировал (частично) пользователя и покупал ее, сейчас предметы на удержании скрыли и я пытаюсь написать код на распознавание чисел(цены) но когда я заглянул в ту тему, мне было сложнава-то понять как вклинивались изменения + прошло уже минимум 3 года с той темы , потому мало-ли что изменилось.(уточнюсь меня волнует цена за штуку.) при этом я паралельно думаю можно ли сделать спектр уен допустим от 10к до 12к насколько сильно это нагрузит саму систему и тд.)
-
Какого шрифта? Каких чисел? Какие "новые версии"?
Зачем лепить 200 строк записи если нужны только 4 строки кликов?!
GETSCREEN
IF_PIXEL_IN(1161,205, 1327,232, 127744)
LCLICK(1756,222)
WAITMS(500)
LCLICK(1775,976)
WAITMS(500)
LCLICK(780,647)
WAITMS(500)
LCLICK(973,605)
WAITMS(500)
ELSE
LCLICK(1806,112)
WAITMS(500)
END_IF
И сразу все проще и куда понятнее...
я проверил данный скрипт не работает по указаным выше причинам
-
Добавим подпрограмму плавного перемещения курсора в указанную точку.
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_SPEED = 3 // множитель движения (чем больше тем медленнее)
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(3) // задержка движения (чем больше тем медленнее)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB
GETSCREEN
IF_PIXEL_IN(1161,205, 1327,232, 127744)
mouse_move(1756,222)
LCLICK(1756,222)
WAITMS(500)
mouse_move(1775,976)
LCLICK(1775,976)
WAITMS(500)
mouse_move(780,647)
LCLICK(780,647)
WAITMS(500)
mouse_move(973,605)
LCLICK(973,605)
WAITMS(500)
ELSE
mouse_move(1806,112)
LCLICK(1806,112)
WAITMS(500)
END_IF
-
Добавим подпрограмму плавного перемещения курсора в указанную точку.
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_SPEED = 3 // множитель движения (чем больше тем медленнее)
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
IF($MOVE_SPEEDVAR < 1)
$MOVE_SPEEDVAR = 1
END_IF
$MOVE_step=($dist-1)/$MOVE_SPEEDVAR
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
WAITMS(3) // задержка движения (чем больше тем медленнее)
END_CYC
MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB
GETSCREEN
IF_PIXEL_IN(1161,205, 1327,232, 127744)
mouse_move(1756,222)
LCLICK(1756,222)
WAITMS(500)
mouse_move(1775,976)
LCLICK(1775,976)
WAITMS(500)
mouse_move(780,647)
LCLICK(780,647)
WAITMS(500)
mouse_move(973,605)
LCLICK(973,605)
WAITMS(500)
ELSE
mouse_move(1806,112)
LCLICK(1806,112)
WAITMS(500)
END_IF
иронично не работает, почему не ясно но нажатия переодическе не срабатывают, я поигрался со скоростями , но даже 80% нажатия у меня добиться не получилось, при этом даже лучшие результаты не имели и половины нужной скорости
-
Что-то Кирил писал когда-то, что некоторые игры не принимают клики, если их тыкать в одну точку. Нужно что-то типа подергивания курсора в месте клика, и проверка - прошел клик или нет. Нужно у него уточнить. Я такого не встречал.
-
Что-то Кирил писал когда-то, что некоторые игры не принимают клики, если их тыкать в одну точку. Нужно что-то типа подергивания курсора в месте клика, и проверка - прошел клик или нет. Нужно у него уточнить. Я такого не встречал.
говорю с этой вещью я справился мне нужна помощь в распознавании чисел
-
Что-то Кирил писал когда-то, что некоторые игры не принимают клики, если их тыкать в одну точку. Нужно что-то типа подергивания курсора в месте клика, и проверка - прошел клик или нет. Нужно у него уточнить. Я такого не встречал.
говорю с этой вещью я справился мне нужна помощь в распознавании чисел
Вот написал на основе твоей картинки (конечно лучше бы было если б она была в PNG формате)
SUB(recognize, $x1,$y1, $x2,$y2)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
STRSEPARATE($Letters_arr[$Let_num], "_", $a_l)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, STRREPLACE($a_l[ARRSIZE($a_l)-1],".bmp",""))
UNDEFINE($a_l)
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] > 100) // обпределение пробела
$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)
UNDEFINE($ARR_SCAN)
END_SUB
GETSCREEN
COLORMODE(6)
SCANPICTURE($ARR_SCAN2, 0,0, $_xmax,$_ymax, "Впродаже.bmp", -1, 80) // поиск "В продаже", уточнить область поиска
COLORMODE(8)
FOR($i=0,$i<ARRSIZE($ARR_SCAN2),2)
recognize($ARR_SCAN2[$i]+320, $ARR_SCAN2[$i+1]-7, $ARR_SCAN2[$i]+402, $ARR_SCAN2[$i+1]+16) // область распознавания
LOGWRITE("№: ", $i, " ", $str)
IF($str <= 10000) // действие если значение меньше или равно 10000
LCLICK($ARR_SCAN2[$i], $ARR_SCAN2[$i+1]) // клик "В продаже"
WAITMS(500)
LCLICK(10,10) // Клик "Купить", уточнить координату
WAITMS(500)
$i=9999 // выход из цикла
HALT // Стоп (если таребуется)
END_IF
END_CYC
UNDEFINE($ARR_SCAN2)
IF($i ! 9999) // если не найдено подходящей цены
LCLICK(10,10) // Клик "Обновить", уточнить координату
END_IF
WAITMS(2000)
Прилагаю архив. В нем пример который гарантированно по твоей картинке распознает цену в каждой строке.
В логе можно увидеть результат.
В папке "Letters" находятся картинки чисел.
Картинки получены в режиме цветокоррекции COLORMODE( 8 )
Формат имени картинки должен быть таким: "2_90.bmp"
2 - символ который изображен на картинке
90 - процент совпадения при поиске картинки.
Разделителем параметров считается символ "_"
Можно поместить несколько картинок вариантов одного и того же числа, задав каждой свой процент совпадения.
"2_1_90.bmp"
"2_2_100.bmp"
"2_3_80.bmp"
Для параметров важен первый символ и последнее число, то что по середине не важно.
В скрипте два цикла, первый ищет все слова "В продаже", второй относительно этого слова проверяет цену.
Не знаю как там у тебя выделяется товар, написал просто клик по слову "В продаже".
Если цена подходящая выделяетс товар и кликает по кнопке "Купить", и останавливает выполнение.
Если не найдено подходящей цены, жмет обновить и опять по кругу.
-
Что-то Кирил писал когда-то, что некоторые игры не принимают клики, если их тыкать в одну точку. Нужно что-то типа подергивания курсора в месте клика, и проверка - прошел клик или нет. Нужно у него уточнить. Я такого не встречал.
говорю с этой вещью я справился мне нужна помощь в распознавании чисел
Вот написал на основе твоей картинки (конечно лучше бы было если б она была в PNG формате)
SUB(recognize, $x1,$y1, $x2,$y2)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
STRSEPARATE($Letters_arr[$Let_num], "_", $a_l)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, STRREPLACE($a_l[ARRSIZE($a_l)-1],".bmp",""))
UNDEFINE($a_l)
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] > 100) // обпределение пробела
$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)
UNDEFINE($ARR_SCAN)
END_SUB
GETSCREEN
COLORMODE(6)
SCANPICTURE($ARR_SCAN2, 0,0, $_xmax,$_ymax, "Впродаже.bmp", -1, 80) // поиск "В продаже", уточнить область поиска
COLORMODE(8)
FOR($i=0,$i<ARRSIZE($ARR_SCAN2),2)
recognize($ARR_SCAN2[$i]+320, $ARR_SCAN2[$i+1]-7, $ARR_SCAN2[$i]+402, $ARR_SCAN2[$i+1]+16) // область распознавания
LOGWRITE("№: ", $i, " ", $str)
IF($str <= 10000) // действие если значение меньше или равно 10000
LCLICK($ARR_SCAN2[$i], $ARR_SCAN2[$i+1]) // клик "В продаже"
WAITMS(500)
LCLICK(10,10) // Клик "Купить", уточнить координату
WAITMS(500)
$i=9999 // выход из цикла
HALT // Стоп (если таребуется)
END_IF
END_CYC
UNDEFINE($ARR_SCAN2)
IF($i ! 9999) // если не найдено подходящей цены
LCLICK(10,10) // Клик "Обновить", уточнить координату
END_IF
WAITMS(2000)
Прилагаю архив. В нем пример который гарантированно по твоей картинке распознает цену в каждой строке.
В логе можно увидеть результат.
В папке "Letters" находятся картинки чисел.
Картинки получены в режиме цветокоррекции COLORMODE( 8 )
Формат имени картинки должен быть таким: "2_90.bmp"
2 - символ который изображен на картинке
90 - процент совпадения при поиске картинки.
Разделителем параметров считается символ "_"
Можно поместить несколько картинок вариантов одного и того же числа, задав каждой свой процент совпадения.
"2_1_90.bmp"
"2_2_100.bmp"
"2_3_80.bmp"
Для параметров важен первый символ и последнее число, то что по середине не важно.
В скрипте два цикла, первый ищет все слова "В продаже", второй относительно этого слова проверяет цену.
Не знаю как там у тебя выделяется товар, написал просто клик по слову "В продаже".
Если цена подходящая выделяетс товар и кликает по кнопке "Купить", и останавливает выполнение.
Если не найдено подходящей цены, жмет обновить и опять по кругу.
Скрипт конечно красивый но не рабочий слово в продаже он не находит, про клики я уже писал , скорость крипта тоже оставляет желать лучшего, но это всё мелочи главное что по мне лучше изменить это поиск нужного числа , а не кнопки в продаже , в ближайшие время я его сам коректну и загружу
-
SUB(recognize, $x1,$y1, $x2,$y2)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
STRSEPARATE($Letters_arr[$Let_num], "_", $a_l)
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), -1, STRREPLACE($a_l[ARRSIZE($a_l)-1],".bmp",""))
UNDEFINE($a_l)
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] > 100) // обпределение пробела
$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)
UNDEFINE($ARR_SCAN)
END_SUB
GETSCREEN
COLORMODE(6)
SCANPICTURE($ARR_SCAN2, 1161, 205, 1327, 232, "Впродаже.bmp", -1, 80) // поиск "В продаже", уточнить область поиска
COLORMODE(8)
FOR($i=0,$i<ARRSIZE($ARR_SCAN2),2)
recognize($ARR_SCAN2[$i]+320, $ARR_SCAN2[$i+1]-7, $ARR_SCAN2[$i]+402, $ARR_SCAN2[$i+1]+16) // область распознавания
LOGWRITE("№: ", $i, " ", $str)
IF($str <= 10000) // действие если значение меньше или равно 10000
waitms(40 + $S_CORR)
move(1756,222)
waitms(60 + $S_CORR)
lDown(1756,222)
waitms(53 + $S_CORR)
lUp(1756,222)
waitms(14 + $S_CORR)
// deleted
waitms(9 + $S_CORR)
keyUp(118) // клик "В продаже"
waitms(7 + $S_CORR)
move(1775,976)
waitms(100 + $S_CORR)
lDown(1775,976)
waitms(85 + $S_CORR)
lUp(1775,976)
waitms(83 + $S_CORR)
// deleted
waitms(9 + $S_CORR)
keyUp(118) // Клик "Купить", уточнить координату
WAITMS(500)
$i=9999 // выход из цикла
HALT // Стоп (если таребуется)
END_IF
END_CYC
UNDEFINE($ARR_SCAN2)
IF($i ! 9999) // если не найдено подходящей цены
waitms(100 + $S_CORR)
move(1806,112)
waitms(100 + $S_CORR)
lDown(1806,112)
waitms(100 + $S_CORR)
lUp(1804,113)
waitms(100 + $S_CORR)
// deleted
waitms(100 + $S_CORR)
keyUp(118) // Клик "Обновить", уточнить координату
END_IF
WAITMS(2000)
вот немного доделанная версия, я потестил заменив условие обнаружения на цвет надписи но все равно ничего не присходит
-
В общем провел я пару эксперементов, но даже чужие программы на определение чисел не находят вообще числа на картинках, что делать не знаю , опытные кодеры помогите
-
Понял