Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: invahak on August 24, 2021, 08:39:53 PM
-
Всем добрый! Помогите умоляю, я начинающий кликермен, все прочитал, но то что мне нужно не нашел, везде пишут мол IF_PICTURE_IN нашел картинку и кликай, ELSE кликай в другое место, а мне нужно сканировать скрин, найти не пиксель а картинку которая всегда двигается так что применяю COLORMODE(6) и совпадения на 40 ставлю пока, так вот нужно найти картинку и если нашлась, то зажимаем ЛКМ и ищем эту картинку в еще 4 разных местах, если она где-то обнаружилась то не отпуская ЛКМ идет туда где нашли вторую и там отпускаем, там самым 2 картинки склеются, и все это в цикл, картинок таких разных 5 шт. всех по приоритетам выставлю, мне главное понять как сделать так чтоб кликер нашел одну, зажал ЛКМ и перетащил её туда где найдет вторую, а дальше поиск заново. а дальше дело за малым. Помогите плиз)
10: // ТИПА цикл, сюды возвращюсь если везде лажа
GETSCREEN (1423, 567, 1755, 766) // делаем скрин поле боя
IF_PICTURE_IN (1422, 567, 1484, 632, "4.bmp", -1, 40) //ищем в координатах фотку
LDOWN($_return1, $_return2) //если нашли то зажимаем ЛКМ
WAITMS(100)
GOTO(1) // и тут самое сложно, нужно найти в другом месте еще такую же картинка
// гото 1 прыгаем на другой IF где ищем картинку
END_IF
//=============================================
1:
IF_PICTURE_IN (1484, 567, 5554, 632, "4.bmp", -1, 40) //если нашли то
LUP($_return1, $_return2) // то перетаскиваем сюда ЛКМ и отпускаем её, тем самым 2 картинка это 2 башни которые склеиваются. Если тут не нашлb такую картику, ищем в другом месте и т.д
WAITMS(100)
GOTO(10)
ELSE
IF_PICTURE_IN (1557, 567, 1622, 632, "4.bmp", -1, 40)
LUP($_return1, $_return2)
WAITMS(100)
GOTO(10)
ELSE
IF_PICTURE_IN (1622, 567, 1690, 632, "4.bmp", -1, 40)
LUP($_return1, $_return2)
WAITMS(100)
GOTO(10)
ELSE
IF_PICTURE_IN (1690, 567, 1757, 632, "4.bmp", -1, 40)
LUP($_return1, $_return2)
WAITMS(100)
GOTO(10)
ELSE
WAITMS(50)
END_IF
END_IF
END_IF
END_IF
GOTO(10)
-
и все это в цикл, картинок таких разных 5 шт
Начал хорошо объяснять, но получилось как в мэме "нарисовать сову".
Вот ты перетащил на вторую картинку... кстати, почему на вторую, если сказано чёрным по белому: "если нашлась", т.е. найтись могла любая из четырёх.
Так вот, перетащили на вторую другую и
и все это в цикл
а что это? Если картинки склеились, то первая и возможно вторая пропали/переместились. Что дальше в цикле то? Первая осталась на месте и искать оставшиеся 3? Первая пропала и нужно искать новую первую и оставшиеся 3?
В любом случае, не написал когда останавливать цикл? Ждать когда склеятся первая со всеми 4-я, если они не пропадают, то нужно же ждать именно каждую в своей области. Или ждать когда склеятся 5 любых картинок.
Есть ли код до и после этого кода? Если нет, все GOTO - безсмысленны. Если есть, выкинуть GOTO и поменять на нормальные конструкции.
-
Действительно мой косяк, мне почему-то всегда не ловко просить помочь и стараюсь просить помочь ток о самом главном)
Есть ли код до и после этого кода? Если нет, все GOTO - безсмысленны. Если есть, выкинуть GOTO и поменять на нормальные конструкции.
Да это весь код, ну это начало, просто хочу понять как это сделать, а дальше распишу на 5 страниц, надеюсь)
Тогда расскажу прям как есть все все все!)
Есть поле битвы разбитое на клетки 5 на 3
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
У меня есть 5 разных башнь которые я выкидываю на поле появляются они в рандомном месте и сами они тоже рандомные, мне нужно склеивать одинаковые чтобы там появилась более мощная башня, но появится тоже рандомная, короче надо тыкать все время кнопку чтоб на поле появилась башня и склеивать одинаковые, есть башни которые нужно склеить в первую очередь, а есть которые трогать нужно только если уже нет других вариантов, все поле например закрыла одна и та же башня!
Вот и хочу написать цикл, ищем башню номер 1 например на всех этих клетках по отдельности, думаю так проще искать будет, если нашлась башня №1 на клетке ну 7 допустим, ищем такую же дальше, нашли? Склеиваем, тыкаем кнопку чтоб кинуть на поле башню и повторяем все заново, если башня №1 нигде нет, ищем №2, нашли? ищем такую же и так далее, мне нужно понять как сделать механизм, если нашел одну, зажал ЛКМ и ищешь другую, нашел? идешь туда и отжимаешь ЛКМ если нет, отжал просто, тыкнул кнопку создание башни и еще раз ищешь, ну и с метками этими туплю, по любому нужно будет как то с метками делать.
-
мне нужно понять как сделать механизм, если нашел одну, зажал ЛКМ и ищешь другую, нашел? идешь туда и отжимаешь ЛКМ если нет, отжал просто
А не проще, если другой нет, не нажимать совсем, т.к. "отжал просто" это всё равно где-то и непонятно к чему это приведёт.
А так я понял что, нужно искать на поле 5 на 3 на каждой итерации копии одной из нескольких видов картинок.
Ищем картинку №1, если есть копии склеиваем. (Здесь не знаю что, может выставляем). Идём на новую итерацию опять искать копии картинки №1. Правильно?
Если копий текущей картинки нет, ищем следующую по списку - №2 и т.д.
Если всё так, проще искать сразу все копии одной картинки через SCANPICTURE. Если Нашлось больше одной - склеиваем первую найденную со второй найденной. Или можно все сразу склеить?
И поиск с 40% совпадением это неправильно. При таком проценте, ты будешь находить кучу копий почти в одном месте. В любом поиске, если процент опустился до 60 - жди беды. Это почти нерабочий вариант. 70 (даже 75) - 100 Чем больше, тем лучше.
Нужно попробовать поиск одной башни с разным % снижая его. Посмотреть на скольких находится. Можно сделать скрин. Ещё лучше если копий этой башни будет несколько в разных местах поля. Скрин, само собой, не сжатый.
-
$tower = 1
WHILE($tower <= 7) // перебираем все башни от 1 до 7 башня_1.bmp - башня_7.bmp
UNDEFINE($scan)
GETSCREEN(1423, 567, 1755, 766)
SCANPICTURE($scan, 1423, 567, 1755, 766, STRCONCAT("башня_", $tower, ".bmp"), -1, 90)
$scan_size = ARRSIZE($scan)
LOGWRITE("Найдена башня №", $tower, ", количество: ", $scan_size / 2)
IF($scan_size > 2)
LDOWN($scan[0], $scan[1])
WAITMS(100)
LUP($scan[2], $scan[3])
WAITMS(100)
// здесь "тыкаем кнопку чтоб кинуть на поле башню"
ELSE // найдено меньше двух штук
INC($tower) // переключаем на следующий номер башни
END_IF
END_CYC
HALT
// если находятся дубли одной картинки в одном поле - нужно знать размеры поля для исключения
// если можно сразу склеить все цепочкой 1-2 2-3 и т.д. напиши, тогда так склеим в одном поиске.
-
Или можно все сразу склеить?
Все одновременно склеить нельзя, сперва одну пару, потом другую.
А не проще, если другой нет, не нажимать совсем, т.к. "отжал просто" это всё равно где-то и непонятно к чему это приведёт.
У меня в голове просто чуть сложнее) если можно упростить, то я ток за!
И поиск с 40% совпадением это неправильно. При таком проценте, ты будешь находить кучу копий почти в одном месте. В любом поиске, если процент опустился до 60 - жди беды. Это почти нерабочий вариант. 70 (даже 75) - 100 Чем больше, тем лучше.
Нужно попробовать поиск одной башни с разным % снижая его. Посмотреть на скольких находится. Можно сделать скрин.
все это запомнил, принял, но это второстепенная задача, мне бы кусочек кода, от чего я буду отталкиваться,
Скрин, само собой, не сжатый.
Там башни стреляют, они вечно в анимации какой-то смотрят в разные стороны, поэтому по моему сугубо не опытному мнению, нужен COLORMODE и 100% там никак не найдет)
(https://d.radikal.ru/d32/2108/f9/74c13cbe1d39.jpg) (https://radikal.ru)
-
$tower = 1
WHILE($tower <= 7) // перебираем все башни от 1 до 7 башня_1.bmp - башня_7.bmp
UNDEFINE($scan)
GETSCREEN(1423, 567, 1755, 766)
SCANPICTURE($scan, 1423, 567, 1755, 766, STRCONCAT("башня_", $tower, ".bmp"), -1, 90)
$scan_size = ARRSIZE($scan)
LOGWRITE("Найдена башня №", $tower, ", количество: ", $scan_size / 2)
IF($scan_size > 2)
LDOWN($scan[0], $scan[1])
WAITMS(100)
LUP($scan[2], $scan[3])
WAITMS(100)
// здесь "тыкаем кнопку чтоб кинуть на поле башню"
ELSE // найдено меньше двух штук
INC($tower) // переключаем на следующий номер башни
END_IF
END_CYC
HALT
// если находятся дубли одной картинки в одном поле - нужно знать размеры поля для исключения
// если можно сразу склеить все цепочкой 1-2 2-3 и т.д. напиши, тогда так склеим в одном поиске.
ставлю 70% уже, ничего не происходит, даже не кликает на кнопку чтоб на поле кидать башни.
-
ставлю 70% уже, ничего не происходит, даже не кликает на кнопку чтоб на поле кидать башни.
Используй COLORMODE. Может нужно заготовку переделать по другому. Непонятно что там с прозрачностью.
Сперва добейся :o: ;D ;D ;D ;D, эммм, сперва добейся стабильного поиска картинок, с анимациями это не так просто, иногда совсем непросто.
-
Кликер находит например башню №2 и просто тыкает на неё все время, мне кажется он просто её же и обнаруживает второй раз и пошел цикл на саму себя кликать, я предлагаю разбить поиск по клеткам, искать в каждой отдельно как я делал в своем коде, как это пихнуть в ваш код?
-
Кликер находит например башню №2 и просто тыкает на неё все время, мне кажется он просто её же и обнаруживает второй раз и пошел цикл на саму себя кликать, я предлагаю разбить поиск по клеткам, искать в каждой отдельно как я делал в своем коде, как это пихнуть в ваш код?
Никак, это будет другой код. Можно и по клеткам, а можно просто найденные отфильтровать в пределах клетки. Конечно если там количество не зашкаливает.
Сколько в логе пишет найдено?
-
И непонятно почему нужно проверять 5 полей, если их там 15?
-
И непонятно почему нужно проверять 5 полей, если их там 15?
В начале 5 сказал чтоб не заморачиваться, где 5 там и 50) теперь я понял что нужно в тончайших подробностях все объяснить )
-
Вот по ячейкам.
Сначала ищет нужную башню вообще на поле. Если есть высчитываем в каком поле нашли.
Со следующего поля ищем такую же башню. Если нашли - склеиваем, не нашли - переходим к следующей башне.
Можно было тупо по всем 15 пробегаться, но может так чуть быстрее, меньше вызовов поиска.
Надеюсь нигде не ошибся в расчётах, код не тестировал. Если что, кричи.
#name "invahak"
// Author: Vint
// Version: 0.3 (25.08.2021)
// Скрипт для Clickermann v4.13.014
// Максимальный номер башни. Например для башня_1.bmp - башня_7.bmp
$max_tower = 7
// начальные координаты нулевого поля
$sx = 1423
$sy = 567
$ex = $sx + (66 * 5)
$ey = $sy + (66 * 3)
//0 1 2 3 4
//5 6 7 8 9
//10 11 12 13 14
$tower = 1
WHILE($tower <= $max_tower)
$tower_count = 0
GETSCREEN($sx, $sy, $ex, $ey)
IF_PICTURE_IN($sx, $sy, $ex, $ey, STRCONCAT("башня_", $tower, ".bmp"), -1, 40))
$tower1_x = $_return1
$tower1_y = $_return2
$row = INT($tower1_y / 66)
$col = INT($tower1_x / 66)
$field_num = ($row * 5) + $col
LOGWRITE("Найдена башня №", $tower, ", в поле № ", $field_num, " ", $col, "/", $row)
FOR($f = $field_num + 1, $f < 15)
$r = INT($f / 5)
$c = $f - ($r * 5)
$lx = $sx + (66 * $c)
$ly = $sy + (66 * $r)
IF_PICTURE_IN($lx, $ly, $lx+66, $ly+66, STRCONCAT("башня_", $tower, ".bmp"), -1, 40))
LDOWN($tower1_x, $tower1_y)
WAITMS(100)
LUP($_return1, $_return2)
WAITMS(100)
$f = 100
// здесь "тыкаем кнопку чтоб кинуть на поле башню"
END_IF
END_CYC
IF($f < 100)
INC($tower) // переключаем на следующий номер башни
END_IF
ELSE // найдено меньше двух штук
INC($tower) // переключаем на следующий номер башни
END_IF
END_CYC
HALT
-
Вот вариант с прямым перебором 15 полей пока не найдёт больше 1 экземпляра
#name "invahak"
// Author: Vint
// Version: 0.4 (25.08.2021)
// Скрипт для Clickermann v4.13.014
// Максимальный номер башни. Например для башня_1.bmp - башня_7.bmp
$max_tower = 7
// начальные координаты нулевого поля
$sx = 1423
$sy = 567
$ex = $sx + (66 * 5)
$ey = $sy + (66 * 3)
//0 1 2 3 4
//5 6 7 8 9
//10 11 12 13 14
$tower = 1
WHILE($tower <= $max_tower)
$tower_count = 0
GETSCREEN($sx, $sy, $ex, $ey)
FOR($f = 0, $f < 15)
$r = INT($f / 5)
$c = $f - ($r * 5)
$lx = $sx + (66 * $c)
$ly = $sy + (66 * $r)
IF_PICTURE_IN($lx, $ly, $lx+66, $ly+66, STRCONCAT("башня_", $tower, ".bmp"), -1, 40))
INC($tower_count)
LOGWRITE("Найдена башня №", $tower, " ", $tower_count, " экземпляр")
IF($tower_count = 1)
$tower1_x = $_return1
$tower1_y = $_return2
ELSE
LDOWN($tower1_x, $tower1_y)
WAITMS(100)
LUP($_return1, $_return2)
WAITMS(100)
$f = 100
// здесь "тыкаем кнопку чтоб кинуть на поле башню"
END_IF
END_IF
END_CYC
IF($tower_count < 2)
INC($tower) // переключаем на следующий номер башни
END_IF
END_CYC
HALT
-
Второй код работает на 20%) есть нюансы которые нужно доработать, но тут хотя бы я сам) клик мышки сдвинуть правее и ниже, а то кликает прям на край и не склеивает иногда, и пытается склеить нужные башни но они разного уровня, но тут уже никак, на 20% он все за одну воспринимает) А так рабочий код, огромное спасибо!