Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Ellen on January 20, 2023, 03:15:20 PM
-
Есть игра https://prizes.gamee.com/game/karatekid2
Играем в рабочем чате в тг на рейтинг до понедельника))
Механика достаточно простая, персонаж может стоять или слева или справа от дерева. управляется или мышкой или кнопками влево-вправо. Задача направлять персонажа слева или справа от дерева в зависимости от веток, игра в общем доступе, можете открыть посмотреть, если кому интересно.
Пришла идея написать скрипт, с помощью которого автоматически будет анализировано с какой стороны есть ветка и в зависимости от результата приниматься решение нажатия клавиши влево или вправо так как появление абсолютно рандомное, кроме как делать скрин и анализировать по пикселю больше идей нет. В том и сложность, не могу точно сформулировать скрипт.
Идея такая:
Вначале думал делать скрин всей области и считывать сколько веток по разным сторонам, и в зависимости от этого далее нажимать клавиши, но иногда на дереве встречаются ледяные фигуры или х2 т.е. данную часть можно разбить только с 2 или 3 раз.
Решил упростить задачу, делать скрин только одной стороны (левой) и только самую ближнюю зону в которой будет только одна ветка: ветка есть - кнопка вправо, ветки нет - кнопка влево. Так даже если встретятся части которые разбиваются с 2 или 3 раз персонаж просто будет оставаться на одной из сторон и просто прожимать одну сторону до тех пор пока на зоне которая скриншотится не появится ветка.
(https://ibb.co/16J1HBy) (https://i.ibb.co/k16jYzb/image.png) (https://ibb.co/16J1HBy)
пример льда
(https://ibb.co/WvP454t) (https://i.ibb.co/r2cR0Rs/image.png) (https://ibb.co/WvP454t)
изменить размер картинки онлайн (https://ru.imgbb.com/)
Дело в том что у веток ещё и разная длина
И вот:
(https://i.ibb.co/n8YGx3C/image.jpg) (https://ibb.co/dJVT8bg)
(https://ibb.co/dJVT8bg)
Как грамотно написать скрипт, чтобы скриншотилась область выделенная красным, а поиск пикселя в области которая указана желтым. там на ветках с краю есть однотонная заливка по которой и можно определять где ветка.
В кликере я новичок, знаком только с стандартными функциями, поэтому, если есть кто на опыте, можете подсказать как составить скрипт?
И правильна ли вообще идея?
-
WAITMS(100)
GETSCREEN
IF_PIXEL_IN(654,577,747,615,5605331)
KEYPRESS(#RIGHT)
ELSE
KEYPRESS(#LEFT)
END_IF
Вот что удалось написать, но постоянно жмется кнопка влево, значит пиксель не найден?
-
WAITMS(100)
GETSCREEN
WAITMS(20)
IF_PIXEL_IN(653,572,762,631,2776231)
WAITMS(20)
LCLICK(956,467)
WAITMS(20)
ELSE
WAITMS(20)
LCLICK(559,498)
END_IF
Перескакивает на разные стороны, но почему то умирает слева на коротких ветках, как исправить?
-
уже писали что-то для вашей игры
https://vk.com/topic-14410794_23383620?offset=40420 (https://vk.com/topic-14410794_23383620?offset=40420)
-
Там в указанном месте бывает ещё один цвет если место х3. Но это всё равно не поможет от сбоев.
Указанный цвет искать плохо ещё по причине, что иногда из-за вылетающих брёвен, они перекрывают конец ветки
(https://i.ibb.co/2hSQBBk/Image-00000020.png) (https://imgbb.com/)
Сначала добавил цветов от сероватого наконечника и светлых полос, стало реже, но совсем не пропало.
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
KEYDOWN(#RIGHT)
WAITMS(100)
KEYUP(#RIGHT)
ELSE
KEYDOWN(#LEFT)
WAITMS(100)
KEYUP(#LEFT)
END_IF
WAITMS(500)
Вот в этом месте поиск
(https://i.ibb.co/R99Bf6n/2023-01-20-18-16-36.png) (https://imgbb.com/)
Задержка великовата, т.к. страница нереально подтормаживает и после удара не успевает ветка опуститься. Нужно пробовать у вас конкретно какую задержку ставить.
-
Там эти грёбанные, медленно летящие брёвна всё портят. Подлазят под руку.
И немного - белые числа.
P.S. добавил ещё один цвет. Сейчас хорошо работает, но не быстро. Ошибается очень-очень редко.
-
1. В команде поиска пикселя можно указать не один пиксель? Вот тут IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
2. Около каждой ветки есть треугольная тень, которая прикасается к дереву, поиск ставлю теперь на эту точку, вроде нормально, но иногда путается почему то… видимо реально нужно поиграться с задержками, потому что замечал, что если он увидел ветку слева прыгает направо и сразу возвращается обратно, хотя там ветка
3. Почему вы используете 2 команды на нажатии клавиши вместо одной? Есть какой то секрет?
-
1. В команде поиска пикселя можно указать не один пиксель? Вот тут IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
2. Около каждой ветки есть треугольная тень, которая прикасается к дереву, поиск ставлю теперь на эту точку, вроде нормально, но иногда путается почему то… видимо реально нужно поиграться с задержками, потому что замечал, что если он увидел ветку слева прыгает направо и сразу возвращается обратно, хотя там ветка
3. Почему вы используете 2 команды на нажатии клавиши вместо одной? Есть какой то секрет?
1. пиксель это точка на мониторе, имеющая определённые координаты.
в показанной вами строке через запятую можно перечислять номера цветов поиска. проверка осуществляется в
порядке записи цветов и прерывается при первом совпадении.
2. есть смысл попробовать уменьшить область проверки по горизонтали всего до нескольких пикселей и подрезать её снизу, там где с учётом времени на обработку скрипт всё равно не успеет вовремя среагировать.
два близких проверяемых цвета существенно замедляют проверку, быстрее будет использовать в работе скрипта цветокоррекцию.
3. в одну команду клика встроена внутренняя задержка между зажатием и отжатием клавиши 30 мс.
раздельные команды позволяют эту задержку настраивать под требования игры или скорость интернета.
-
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
KEYDOWN(#RIGHT)
WAITMS(100)
KEYUP(#RIGHT)
ELSE
KEYDOWN(#LEFT)
WAITMS(100)
KEYUP(#LEFT)
END_IF
WAITMS(500)
Я в своих скриптах использую вот такие паузы для кликов:
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(100)
KEYUP(#RIGHT)
$right_time = $_ms + 500
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(100)
KEYUP(#LEFT)
$left_time = $_ms + 500
END_IF
END_IF
WAITMS(50)
Может как-то поможет? Кликает с паузами, но во время этих пауз, экран держится под контролем.
-
// 1446725
WAITMS(100)
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(20)
Вот последний рабочий код, но спотыкается когда белые цифры вылетают после удара, думал покопаться в js игры и отключить загрузку цифр вообще... но после этого висит окно загрузки бесконечно, а в панели разработчика выходит ошибка о том, что не все данные были загружены для запуска игры Может тут есть эксперты по js? Как отключить цифры или есть возможность подать на сервер ответ, в котором будет прописано желаемое количество очков?
-
// 1446725
WAITMS(100)
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(20)
Вот последний рабочий код, но спотыкается когда белые цифры вылетают после удара, думал покопаться в js игры и отключить загрузку цифр вообще... но после этого висит окно загрузки бесконечно, а в панели разработчика выходит ошибка о том, что не все данные были загружены для запуска игры Может тут есть эксперты по js? Как отключить цифры или есть возможность подать на сервер ответ, в котором будет прописано желаемое количество очков?
Во первых - зачем тебе пауза в начале скрипта и в конце? У тебя в скрипте (в его конце) срабатывает пауза, после которой он выходит в свое начало и снова срабатывает пауза... Где логика...? Если тебе нужна пауза в 120 мс, то укажи в конце скрипта WAITMS(120), а в чем логика, чтобы разбить паузу на две части и выставить их друг за другом...?
Во вторых - покажи на скрине, в какой области ты ищешь эти пиксели.
-
Всегда ставлю паузу перед началом сценария, а в конце пауза прост осталась от скопированного отсюда кода
(https://i.ibb.co/FDzLgKs/1.png) (https://imgbb.com/)
(https://i.ibb.co/R6XGmNs/2.png) (https://imgbb.com/)
Первый - угол тени
Второй - край бревна, который касается дерева
Третий, четвертый, такие же края бревен, только других цветов
-
Всегда ставлю паузу перед началом сценария, а в конце пауза прост осталась от скопированного отсюда кода
(https://i.ibb.co/FDzLgKs/1.png) (https://imgbb.com/)
(https://i.ibb.co/R6XGmNs/2.png) (https://imgbb.com/)
Первый - угол тени
Второй - край бревна, который касается дерева
Третий, четвертый, такие же края бревен, только других цветов
В общем что могу сказать... Ты зря перешел на пиксельный разбор. Я сейчас около часа помыкался, проанализировал картинки и все такое... Если брать с бревен чисто пиксели цветные, то нет-нет, но такие же пиксели попадаются в углах выскакивающих цифр. Кликер принимает их за бревна и отсылает перса в другую сторону, а там действительно бревно... Сейчас попробую с бревен брать картинки буквально 3 на 3 пекселя, и искать бревна по этим картинкам.
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на которую реагировал кликер
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер
$path = "screens\Цех"
IF($start = 0)
$start = 1
if (FExists($path)=0)
FCREATE ($path)
end_if
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
FOR($a=0,$a<ARRSIZE($arr))
FDELETE (STRCONCAT($path,"\",$arr[$a]))
END_CYC
UNDEFINE ($arr)
END_IF
SUB(bordering, $x_bord1,$y_bord1, $x_bord2,$y_bord2, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord2+1,$y_bord1-1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord2+1, $x_bord2+1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord1-1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord2+1,$y_bord1-1, $x_bord2+1,$y_bord2+1, -1, $color)
END_SUB
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
$n = ARRSIZE($arr)
UNDEFINE ($arr)
SCREENSHOTFIX(771, 567, 786, 682, STRCONCAT($path,"\",$n,".bmp"), 0)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(50)
-
у вас в корне неверный подход к написанию скрипта.
Специально включил посмотреть в чём там такие непредвиденные сложности и сразу увидел, что с каждым уровнем персонаж увеличивается в размерах, соответственно на каждый уровень нужны индивидуальные автоматические настройки по высоте палок; на настройках с начальных уровней будет задевать большого перса, а на настройках с продвинутых будет зависать на начальных.
-
у вас в корне неверный подход к написанию скрипта.
Специально включил посмотреть в чём там такие непредвиденные сложности и сразу увидел, что с каждым уровнем персонаж увеличивается в размерах, соответственно на каждый уровень нужны индивидуальные автоматические настройки по высоте палок; на настройках с начальных уровней будет задевать большого перса, а на настройках с продвинутых будет зависать на начальных.
Бред полный... https://www.youtube.com/watch?v=DkmlMLyPFG0 (https://www.youtube.com/watch?v=DkmlMLyPFG0)
А хотя не... Сейчас вот обновил страницу и начал с начала. Действительно перс пониже и частенько падает от палок. Но он очень быстро вкачивается до дедка с черным поясом, а этот дедок уже по ходу не трансформируется...
Ну, вот я ровно за 15 минут с самого первого левла стал дедком с черным поясом. Оставлю скрипт до утра. Посмотрим - что он там набьет к утру... Пошел спать.
-
Там эти грёбанные, медленно летящие брёвна всё портят. Подлазят под руку.
И немного - белые числа.
P.S. добавил ещё один цвет. Сейчас хорошо работает, но не быстро. Ошибается очень-очень редко.
А че пропал-то? ;D Вкурил - для чего все это? ;D ;D ;D Я только с утра вкурил... ;D На сколько редко ошибается? Сколько поинтов максимально собирал? ))
-
Бред полный... https://www.youtube.com/watch?v=DkmlMLyPFG0 (https://www.youtube.com/watch?v=DkmlMLyPFG0)
Вот то скорость... это какой код в работе?
Я добился того, чтобы он не ошибался, ввел абсолютно все точки + добавил времени перед тем как сделать скрин, чтобы белые цифры успели проскочить, в итоге более-менее работает, но когда долго нет бонуса времени, то проигрывает только из за времени, задержка перед скрином у меня 170мс, если делать больше на хотя бы 5, но уже проигрывает из за цифр, но как добиться той скорости, которая в видео?
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер
$path = "screens\Цех"
IF($start = 0)
$start = 1
if (FExists($path)=0)
FCREATE ($path)
end_if
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
FOR($a=0,$a<ARRSIZE($arr))
FDELETE (STRCONCAT($path,"\",$arr[$a]))
END_CYC
UNDEFINE ($arr)
END_IF
SUB(bordering, $x_bord1,$y_bord1, $x_bord2,$y_bord2, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord2+1,$y_bord1-1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord2+1, $x_bord2+1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord1-1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord2+1,$y_bord1-1, $x_bord2+1,$y_bord2+1, -1, $color)
END_SUB
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
$n = ARRSIZE($arr)
UNDEFINE ($arr)
SCREENSHOTFIX(771, 567, 786, 682, STRCONCAT($path,"\",$n,".bmp"), 0)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(50)
При запуске этого кода возникает ошибка (https://i.ibb.co/rQdbMKx/Screenshot-1.png) (https://imgbb.com/)
Игнорируя её, скрипт запускается, но останавливается самопроизвольно со звуком ошибки, почему?
-
Ну, вот я ровно за 15 минут с самого первого левла стал дедком с черным поясом. Оставлю скрипт до утра. Посмотрим - что он там набьет к утру... Пошел спать.
И сколько результат?
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер
$path = "screens\Цех"
IF($start = 0)
$start = 1
if (FExists($path)=0)
FCREATE ($path)
end_if
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
FOR($a=0,$a<ARRSIZE($arr))
FDELETE (STRCONCAT($path,"\",$arr[$a]))
END_CYC
UNDEFINE ($arr)
END_IF
SUB(bordering, $x_bord1,$y_bord1, $x_bord2,$y_bord2, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord2+1,$y_bord1-1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord2+1, $x_bord2+1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord1-1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord2+1,$y_bord1-1, $x_bord2+1,$y_bord2+1, -1, $color)
END_SUB
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
$n = ARRSIZE($arr)
UNDEFINE ($arr)
SCREENSHOTFIX(771, 567, 786, 682, STRCONCAT($path,"\",$n,".bmp"), 0)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(50)
При запуске этого кода возникает ошибка (https://i.ibb.co/rQdbMKx/Screenshot-1.png) (https://imgbb.com/)
Игнорируя её, скрипт запускается, но останавливается самопроизвольно со звуком ошибки, почему?
Ты скрипт сохраняешь куда-нибудь прежде, чем его запустить? Или ты просто отсюда копируешь его, вставляешь в кликер и погнал...?
-
Бред полный... https://www.youtube.com/watch?v=DkmlMLyPFG0 (https://www.youtube.com/watch?v=DkmlMLyPFG0)
Вот то скорость... это какой код в работе?
Я добился того, чтобы он не ошибался, ввел абсолютно все точки + добавил времени перед тем как сделать скрин, чтобы белые цифры успели проскочить, в итоге более-менее работает, но когда долго нет бонуса времени, то проигрывает только из за времени, задержка перед скрином у меня 170мс, если делать больше на хотя бы 5, но уже проигрывает из за цифр, но как добиться той скорости, которая в видео?
SWITCH($position)
CASE("right")
$left_time = 0
IF($right_time < $_ms)
KEYPRESS(#RIGHT)
$right_time = $_ms + 100
END_IF
CASE("left")
$right_time = 0
IF($left_time < $_ms)
KEYPRESS(#LEFT)
$left_time = $_ms + 100
END_IF
END_SWITCH
И в конце скрипта пауза на 50 мс.
-
Ну, вот я ровно за 15 минут с самого первого левла стал дедком с черным поясом. Оставлю скрипт до утра. Посмотрим - что он там набьет к утру... Пошел спать.
И сколько результат?
Ну, он 3X вкачал и на этом остановился. По ходу это максимум.
-
Ну, вот я ровно за 15 минут с самого первого левла стал дедком с черным поясом. Оставлю скрипт до утра. Посмотрим - что он там набьет к утру... Пошел спать.
И сколько результат?
Ну, он 3X вкачал и на этом остановился. По ходу это максимум.
ну 3х то множитель очков, а сам рейтинг формируется из цифр, которые находятся вверху дерева
-
Бред полный... https://www.youtube.com/watch?v=DkmlMLyPFG0 (https://www.youtube.com/watch?v=DkmlMLyPFG0)
Вот то скорость... это какой код в работе?
Я добился того, чтобы он не ошибался, ввел абсолютно все точки + добавил времени перед тем как сделать скрин, чтобы белые цифры успели проскочить, в итоге более-менее работает, но когда долго нет бонуса времени, то проигрывает только из за времени, задержка перед скрином у меня 170мс, если делать больше на хотя бы 5, но уже проигрывает из за цифр, но как добиться той скорости, которая в видео?
SWITCH($position)
CASE("right")
$left_time = 0
IF($right_time < $_ms)
KEYPRESS(#RIGHT)
$right_time = $_ms + 100
END_IF
CASE("left")
$right_time = 0
IF($left_time < $_ms)
KEYPRESS(#LEFT)
$left_time = $_ms + 100
END_IF
END_SWITCH
И в конце скрипта пауза на 50 мс.
А где здесь поиск пикселя?
-
Ты скрипт сохраняешь куда-нибудь прежде, чем его запустить? Или ты просто отсюда копируешь его, вставляешь в кликер и погнал...?
Да, сохраняю в папку, где находятся другие наработки по этой игре. Копировал - сохранил - запустил
-
Бред полный... https://www.youtube.com/watch?v=DkmlMLyPFG0 (https://www.youtube.com/watch?v=DkmlMLyPFG0)
Вот то скорость... это какой код в работе?
Я добился того, чтобы он не ошибался, ввел абсолютно все точки + добавил времени перед тем как сделать скрин, чтобы белые цифры успели проскочить, в итоге более-менее работает, но когда долго нет бонуса времени, то проигрывает только из за времени, задержка перед скрином у меня 170мс, если делать больше на хотя бы 5, но уже проигрывает из за цифр, но как добиться той скорости, которая в видео?
SWITCH($position)
CASE("right")
$left_time = 0
IF($right_time < $_ms)
KEYPRESS(#RIGHT)
$right_time = $_ms + 100
END_IF
CASE("left")
$right_time = 0
IF($left_time < $_ms)
KEYPRESS(#LEFT)
$left_time = $_ms + 100
END_IF
END_SWITCH
И в конце скрипта пауза на 50 мс.
А где здесь поиск пикселя?
А ты не в состоянии поиск пикселей намутить что ль...? ))
-
Ты скрипт сохраняешь куда-нибудь прежде, чем его запустить? Или ты просто отсюда копируешь его, вставляешь в кликер и погнал...?
Да, сохраняю в папку, где находятся другие наработки по этой игре. Копировал - сохранил - запустил
Хз - откуда у тебя такая ошибка...
-
А ты не в состоянии поиск пикселей намутить что ль...? ))
Не полностью знаю команды CASE и SWITCH($position)
В какую часть подставлять поиск пикселя?
Что обрабатывают данные команды конкретно тут?
-
А ты не в состоянии поиск пикселей намутить что ль...? ))
Не полностью знаю команды CASE и SWITCH($position)
В какую часть подставлять поиск пикселя?
Что обрабатывают данные команды конкретно тут?
Ватсон, элементарно! С помощью пикселей определяешь - в какую сторону тебе нужно. И определив, присваиваешь перменной - $position, значение (либо "right", либо "left"), а далее условие SWITCH по этим значениям определает, как действовать.
-
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер
$path = "screens\Цех"
IF($start = 0)
$start = 1
if (FExists($path)=0)
FCREATE ($path)
end_if
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
FOR($a=0,$a<ARRSIZE($arr))
FDELETE (STRCONCAT($path,"\",$arr[$a]))
END_CYC
UNDEFINE ($arr)
END_IF
SUB(bordering, $x_bord1,$y_bord1, $x_bord2,$y_bord2, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord2+1,$y_bord1-1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord2+1, $x_bord2+1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord1-1,$y_bord1-1, $x_bord1-1,$y_bord2+1, -1, $color)
PXLREPLACE($x_bord2+1,$y_bord1-1, $x_bord2+1,$y_bord2+1, -1, $color)
END_SUB
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
GETFILELIST ($arr, STRCONCAT($path,"\*.bmp"))
$n = ARRSIZE($arr)
UNDEFINE ($arr)
SCREENSHOTFIX(771, 567, 786, 682, STRCONCAT($path,"\",$n,".bmp"), 0)
$left_time = 0
IF($right_time < $_ms)
KEYDOWN(#RIGHT)
WAITMS(40)
KEYUP(#RIGHT)
$right_time = $_ms + 100
END_IF
ELSE
$right_time = 0
IF($left_time < $_ms)
KEYDOWN(#LEFT)
WAITMS(40)
KEYUP(#LEFT)
$left_time = $_ms + 100
END_IF
END_IF
WAITMS(50)
При запуске этого кода возникает ошибка (https://i.ibb.co/rQdbMKx/Screenshot-1.png) (https://imgbb.com/)
Игнорируя её, скрипт запускается, но останавливается самопроизвольно со звуком ошибки, почему?
Ты вот эту переменную в скрипте оставляешь? ($path = "screens\Цех")
-
Ты вот эту переменную в скрипте оставляешь? ($path = "screens\Цех")
Нет, пробовал оставлять только screens или давал другое имя, все равно упирается в ошибку, тут скорее всего всё работает просто я слаб знаниями в области этих переменных... ???
-
Ты вот эту переменную в скрипте оставляешь? ($path = "screens\Цех")
Нет, пробовал оставлять только screens или давал другое имя, все равно упирается в ошибку, тут скорее всего всё работает просто я слаб знаниями в области этих переменных... ???
Ахах ;D Я тут (на этом форуме) лет 10 назад Винта с этими переменными так достал, что он мне в личку начал писать и интересоваться - я действительно никак понять не могу, или троллю форум своими вопросами ;D
Короче вот мой скрипт полный.
#include "subs\bordering.cms"
#include "subs\MouseClick.cms"
$path = "screens\Цех"
IF($start = 0)
$start = 1
if (FExists($path)=0)
FCREATE ($path)
end_if
GETFILELIST ($arr, "screens\Цех\*.bmp")
FOR($a=0,$a<ARRSIZE($arr))
FDELETE (STRCONCAT("screens\Цех\",$arr[$a]))
END_CYC
UNDEFINE ($arr)
END_IF
THREAD(hotkeys, 1)
IF(ISKEYDOWN(#DOWN)=1)
LOGWRITE ("Стоп...")
$script = 0
WHILE(ISKEYDOWN(#DOWN)=1)
WAITMS(50)
END_CYC
END_IF
IF(ISKEYDOWN(#LEFT)=1)
LOGWRITE ("Поехали!")
$position = "left"
$script = 1
WHILE(ISKEYDOWN(#LEFT)=1)
WAITMS(50)
END_CYC
END_IF
IF(ISKEYDOWN(#RIGHT)=1)
LOGWRITE ("Поехали!")
$position = "right"
$script = 1
WHILE(ISKEYDOWN(#RIGHT)=1)
WAITMS(50)
END_CYC
END_IF
WAITMS(50)
END_THREAD
IF($script > 0)
GETSCREEN (1061,800, 1505,1351)
bordering (1061+170,917, 1061+194,1032, 255) // Обводим поле 1
bordering (1061+243,917, 1061+267,1032, 255) // Обводим поле 2
bordering (1086,917, 1259-32,1032, 255) // Обводим поле 3
bordering (1300+32,917, 1479,1032, 255) // Обводим поле 4
$pos = "_"
IF_PICTURE_IN (1061+81,800+517, 1061+86,800+521, "screens\упс.bmp", -1, 100) // Здесь определяем фейл и конец игры
MouseClick("L", $_return1+50, $_return2+10) // И кликаем, чтобы начать игру заново
WAITMS(1000)
else
IF_PIXEL_IN(1061+170,917, 1061+194,1032, 1446725,5256016) // Здесь ищем пиксель в поле 1
bordering ($_return1,$_return2, $_return1,$_return2, 255) // Обводим его, для инфы на скрине
$pos = "right"
else
END_IF
IF_PIXEL_IN(1061+243,917, 1061+267,1032, 1446725,5256016) // Здесь ищем пиксель в поле 2
bordering ($_return1,$_return2, $_return1,$_return2, 255) // Тоже обводим
$pos = "left"
else
END_IF
END_IF
IF($pos = "_") // Если в поле 1 и 2 пиксели были не найдены, то ищем пиксели в поле 3 и 4. Причем не нужно в левый поиск пихать пиксели правых веток и наоборот.
IF_PIXEL_IN(1086,917, 1259-32,1032, 5605331,10072785,10784132)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
$pos = "right"
else
END_IF
IF_PIXEL_IN(1300+32,917, 1479,1032, 1916556,5589345)
bordering ($_return1,$_return2, $_return1,$_return2, 255)
$pos = "left"
else
END_IF
END_IF
GETFILELIST ($arr, "screens\Цех\*.bmp") // Здесь чисто считаем сколько уже сохранено скринов, чтобы
$n = ARRSIZE($arr) // скрины сохранять по порядку
UNDEFINE ($arr)
SCREENSHOTFIX(1061,800, 1505,1251, STRCONCAT("screens\Цех\",$n,".bmp"), 0)
IF($pos ! "_") // Если в каком-то из полей была определена ветка
$position = $pos // То присваиваем значение right или left
END_IF
// Ну, а если ветка не была найдена вообще, то пусть перс долбит с той стороны, с которой долбил на прошлом кругу скрипта
SWITCH($position)
CASE("right")
$left_time = 0
IF($right_time < $_ms)
KEYPRESS(#RIGHT)
$right_time = $_ms + 150
END_IF
CASE("left")
$right_time = 0
IF($left_time < $_ms)
KEYPRESS(#LEFT)
$left_time = $_ms + 150
END_IF
END_SWITCH
END_IF
WAITMS(50)
По поводу MouseClick("L", $_return1+50, $_return2+10) - http://crapware.aidf.org/forum/index.php?topic=5750.0 (http://crapware.aidf.org/forum/index.php?topic=5750.0) Ато тоже голову сломаешь над этим... ;D
(https://i.ibb.co/2PJ8Xwg/189.jpg)
В 1 и 2 зоне ищем ветки, на которых НЕ висят куски льда. Эти ветки мы ищем по цвету пикселей, взятых "из под мышки" этих веток.
В зонах 3 и 4 мы ищем ветки, на которых висят куски льда. Их мы ищем по пикселям, взятым со срезов веток.
(https://i.ibb.co/Zdbm8V8/163.jpg)
Все пиксели ищем без COLORMODE. Они так уникальнее...
Итог...
(https://i.ibb.co/xJ46Nm1/QIP-Shot-Screen-271.jpg)
-
Ты вот эту переменную в скрипте оставляешь? ($path = "screens\Цех")
Нет, пробовал оставлять только screens или давал другое имя, все равно упирается в ошибку, тут скорее всего всё работает просто я слаб знаниями в области этих переменных... ???
Изучи вот это: (правда примечание тут ошибочное)
(https://i.ibb.co/3YJDt53/QIP-Shot-Screen-0001.jpg)
И вот это:
(https://i.ibb.co/hMpKTvW/QIP-Shot-Screen-0002.jpg)
$path = "screens\Цех" // В переменную $path мы подставляем значение - "screens\Цех"
if (FExists($path)=0) // Тут у нас по сути получается - if (FExists("screens\Цех")=0). Это условие "звучит" так - "Если этих папок нет"
FCREATE ($path) // И если не существуют, то создаем их, чтобы потом в них скрины сохранять.
Жаль, что когда тут просят помощи, в итоге приходится тратить время, на ссылки в справку кликера, которую вы похоже даже не открываете. Я в свое время хоть и ставил на уши этот форум своими вопросами, эту справку читал и перечитывал раз 300 и потом уже доставал своими вопросами о том, что я никак не мог понять...
-
Изучи вот это: (правда примечание тут ошибочное)
(https://i.ibb.co/3YJDt53/QIP-Shot-Screen-0001.jpg)
if (FExists($path)=0) // Тут у нас по сути получается - if (FExists("screens\Цех")=0). Это условие "звучит" так - "Если этих папок нет"
Жаль, что когда тут просят помощи, в итоге приходится тратить время, на ссылки в справку кликера, которую вы похоже даже не открываете. Я в свое время хоть и ставил на уши этот форум своими вопросами, эту справку читал и перечитывал раз 300 и потом уже доставал своими вопросами о том, что я никак не мог понять...
Причина очень простая. Ты не указал версию кликера под которую писал скрипт. Нужно всегда указывать версии ПО, особенно если используешь не релизные версии.
FExists появилась только в 4.14 (и FCREATE там же), а версия 4.14 с бэты так и не вылезла. Человек наверняка использует версию 4.13.
-
А че пропал-то? ;D Вкурил - для чего все это? ;D ;D ;D Я только с утра вкурил... ;D На сколько редко ошибается? Сколько поинтов максимально собирал? ))
Я уже уходя с работы тему увидел. Набросал скрипт, потестил, сделал ещё 3 варианта и свалил домой. А дома у меня выходные :D поэтому такие конкурсы не для меня. Нафиг это олимпиадное программирование на время.
-
Изучи вот это: (правда примечание тут ошибочное)
(https://i.ibb.co/3YJDt53/QIP-Shot-Screen-0001.jpg)
if (FExists($path)=0) // Тут у нас по сути получается - if (FExists("screens\Цех")=0). Это условие "звучит" так - "Если этих папок нет"
Жаль, что когда тут просят помощи, в итоге приходится тратить время, на ссылки в справку кликера, которую вы похоже даже не открываете. Я в свое время хоть и ставил на уши этот форум своими вопросами, эту справку читал и перечитывал раз 300 и потом уже доставал своими вопросами о том, что я никак не мог понять...
Причина очень простая. Ты не указал версию кликера под которую писал скрипт. Нужно всегда указывать версии ПО, особенно если используешь не релизные версии.
FExists появилась только в 4.14 (и FCREATE там же), а версия 4.14 с бэты так и не вылезла. Человек наверняка использует версию 4.13.
Да просто кликер уже не развивается и я забыл про версии.
-
А че пропал-то? ;D Вкурил - для чего все это? ;D ;D ;D Я только с утра вкурил... ;D На сколько редко ошибается? Сколько поинтов максимально собирал? ))
Я уже уходя с работы тему увидел. Набросал скрипт, потестил, сделал ещё 3 варианта и свалил домой. А дома у меня выходные :D поэтому такие конкурсы не для меня. Нафиг это олимпиадное программирование на время.
Ну, там просто если залогиниться, то становится видно, что это всё ради реальных лаве ))))