1
Общие вопросы / Re: Как сохранить изображение в файл с рандомным именем?
« on: March 26, 2019, 03:15:03 PM »
Спасибо, в принципе так и думал, все работает как часики, буду дальше делать =)
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Создай папку "Image" рядом с сохраненным скриптом. В нее помести картинку для поиска.
LCLICK(49,371)
WAITMS(50)
WHEELDOWN
WAITMS(50)
MOVE(863,385)
WAITMS(1500)
GETSCREEN
IF_PICTURE_IN(946,309,983,460, "1.bmp")
WAITMS(100)
LCLICK($_return1+25, $_return2-15)
MOVE(863,385)
WAITMS(50)
WAITMS(500)
$s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_"
$str = ""
FOR($b=0,$b<10) // Генератор случайного имени. 10 символов
$str = STRCONCAT($str, STRCUT($s, RND(1,STRLEN($s)), 1))
END_CYC
GETSCREEN // делаем снимок и сохраняем новую картинку
SCREENSHOTFIX($_return1-35, $_return2-15, $_return1+100, $_return2+10, STRCONCAT("Image\", $str, ".bmp"), 0)
End_if
GETSCREEN
IF_PICTURE_IN(383,122,746,624, "2.bmp")
WAITMS(50)
LCLICK($_return1-25, $_return2+15)
WAITMS(50)
End_if
GETSCREEN
IF_PICTURE_IN(353,125,785,733, "3.bmp")
WAITMS(50)
LCLICK($_return1-25, $_return2+15)
WAITMS(50)
End_if
SUB(_SKIP, $num)
SWITCH($num)
CASE(01)
GOTO(skip01)
CASE(02)
GOTO(skip02)
CASE(03)
GOTO(skip03)
END_SWITCH
END_SUB
$a=0
while($a=0)
GETSCREEN
IF_PICTURE_IN (174,557,377,595, "2.bmp")
waitms(500)
$a=1
lclick(250,572)
else
_SKIP(01)
END_IF
END_CYC
skip01:
WHEELDOWN
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (464,238,493,337, "1.bmp")
WAITMS(500)
LCLICK($_return1-22, $_return2-22)
WAIT(3)
ELSE
WAITMS(50)
_SKIP(01)
END_IF
GETSCREEN
IF_PICTURE_IN (44,759,498,796, "3.bmp")
WAITMS(500)
LCLICK($_return1-2, $_return2-2)
WAIT(3)
ELSE
LCLICK(56,63)
WAITMS(50)
_SKIP(01)
END_IF
LCLICK(260,431)
WAITMS(500)
LDOWN(142,460)
WAITMS(500)
LUP(245,458)
WAITMS(500)
KEYDOWN(#CTRL)
WAITMS(500)
KEYDOWN(#c)
WAITMS(500)
KEYUP(#CTRL)
WAITMS(500)
KEYUP(#c)
WAITMS(500)
LCLICK(784,919)
WAITMS(500)
KEYDOWN(#CTRL)
WAITMS(500)
KEYDOWN(#v)
WAITMS(500)
KEYUP(#CTRL)
WAITMS(500)
KEYUP(#v)
WAITMS(500)
KEYPRESS(#ENTER)
WAITMS(500)
LCLICK(55,59)
WAITMS(2000)
WAITMS(500)
LCLICK(503,234)
WAITMS(500)
WHEELDOWN
WAITMS(500)
WHEELDOWN
WAITMS(500)
WAIT(3)
skip:01
WHEELDOWN
WAITMS(500)
WHEELDOWN
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (464,238,493,337, "1.bmp")
WAITMS(500)
LCLICK($_return1-22, $_return2-22)
WAIT(3)
Else
GOTO(01)
WAIT(1)
END_IF
GETSCREEN
IF_PICTURE_IN (401,156,365,249, "2.bmp")
WAITMS(500)
LCLICK($_return1-22, $_return2-22)
WAIT(3)
Else
GOTO(01)
WAIT(1)
END_IF
и таких повторений множество. То есть если первый блок с IF выполнен, должен работать следующий, нет возвращаться к началу, если второй выполнен, тоже идет следующий, если нет, то опять к началу, и так множество раз, все блоки разные с разными условиями...Ну в строке 4 можно использовать и if_pixel_in помойму в данном случае это не принципиально, или я ошибаюсь? Не работал из-за маленькой задержки, увеличил до секунды, стало работать как часикиCode: (clickermann) [Select]getscreen
if_pixel_in(18,109,29,135,14847254) // возможно не находит пиксел
HINTPOPUP("Пиксел 14847254 найден")
if(pxlcount(28,164,144,189, 0) > 0) //почему тут не используешь - if_pixel_in ?
lclick(88,176)
waitms(200)
end_if
$a=0
while($a=0)
lclick(900,179)//кликать будет пока не найдет строчку-13
waitms(500)
getscreen
if_pixel_in(565,206,779,221,3355443)//поиск пикселя если после килка выпало меню
HINTPOPUP("Пиксел 3355443 найден")
$a=1
lclick(796,214)
else
waitms(50)
end_if
end_cyc
else
HINTPOPUP("Пиксел 14847254 НЕ найден")
end_if
LDOWN(1286,198)
waitms(500)
LUP(994,201)
KEYDOWN(#ctrl)
KEYPRESS(#c)
waitms(500)
KEYUP(#ctrl)
KEYPRESS(#delete)
waitms(50)
KEYPRESS(#delete)
waitms(1000)
DBLCLICK(585,222)
waitms(500)
KEYDOWN(#ctrl)
KEYPRESS(#v)
waitms(500)
KEYUP(#ctrl)
waitms(500)
lclick(316,172)
wait(2)
Сначала ошибки:А можно сделать как-нибудь так?Code: (clickermann) [Select]$a=0 //
while($a=0) //
getscreen
if_pixel_in(841,216,945,234,10066329) //ЕСЛИ ПИКСЕЛ НЕ НАЙДЕН ТО ВСЕ ЧТО НИЖЕ НЕ СРАБОТАЕТ ПОКА ОН НЕ ПОЯВИТСЯ.
$a=1 //Можно использовать цикл с таймером, если пиксель может и не появиться.
waitms(500)
lclick(864,163) //клик по кнопке
$b=0 //если кнопка не сработала задаем значение
while($b=0)
getscreen
if(pxlcount(744,205,793,220,3355443) < 1) //ЗАЧЕМ ИСКАТЬ ВСЕ ПИКСЕЛИ ЕСЛИ ДОСТАТОЧНО ОДНОГО
lclick(903+rnd(1,3),175+rnd(1,3)) //ЭТО ТА_ЖЕ КНОПКА? КАКАЯ? ИЗ СТРОКИ № 7?
end_if
$b=1 //
GOTO(skip) //ВЫПРЫГИВАТЬ ИЗ ЦИКЛА ЗАПРЕЩЕНО-БУДУТ ПРОБЛЕМЫ!!!
else // ЭТО ДОЛЖНО БЫТЬ ВНУТРИ УСЛОВИЯ МЕЖДУ if И end_if.
waitms(500)
end_cyc
end_if
end_cyc
skip:
$a=0 //задал значение
while($a=0)
lclick(900,179)//клик по кнопке
waitms(500)
//пока значение =0 цикл работает
getscreen
if_pixel_in(565,206,779,221,3355443)//поиск пикселя если после килка выпало меню с нужным пикселем
$a=1 //если найдено изменил значение выполнение сценария продолжится.
lclick(796,214)
else
waitms(50)
end_if
end_cyc
Только почему-то так вообще не заходит в цикл, вот целиком getscreen
if_pixel_in(18,109,29,135,14847254)
if(pxlcount(28,164,144,189, 0) > 0)
lclick(88,176)
waitms(200)
end_if
$a=0 //задал значение
while($a=0)
lclick(900,179)//клик по кнопке
waitms(500)
//пока значение =0 цикл работает
getscreen
if_pixel_in(565,206,779,221,3355443)//поиск пикселя если после килка выпало меню
$a=1 //если найдено изменил значение выполнение сценария продолжится.
lclick(796,214)
else
waitms(50)
end_if
end_cyc
end_if
LDOWN(1286,198)
waitms(500)
LUP(994,201)
KEYDOWN(#ctrl)
KEYDOWN(#c)
waitms(500)
KEYUP(#ctrl)
KEYUP(#c)
KEYPRESS(#delete)
waitms(50)
KEYPRESS(#delete)
waitms(1000)
DBLCLICK(585,222)
waitms(500)
KEYDOWN(#ctrl)
KEYDOWN(#v)
waitms(500)
KEYUP(#ctrl)
KEYUP(#v)
waitms(500)
lclick(316,172)
end_if
wait(2)
От автора:Честно говоря ни разу этим вопросом не интересовался по причине ну уж очень маленькой ЦА. Портировать ради 10-20 человек, когда основная аудитория измеряется тысячами - ну не знаю. К тому же в кликере очень много завязок именно на WinAPI, который, мне думается, в линуке отсутствует как класс.
И учитывая что раз никто до сих пор не сделал этого, хотя аналогов под винду пруд пруди а первые подобные проги начали появляться лет 15 назад, то все не так просто.
Выкручивайтесь. Wine там всякий, что там у вас есть на такие случаи.
Если какой порт и будет, то скорее всего под Андроид
$a=0 //задал значение
while($a=0) //пока значение =0 цикл работает
getscreen
if_pixel_in(841,216,945,234,10066329)
$a=1 //если найдено изменил значение выполнение сценария продолжится.
waitms(500)
lclick(864,163) //клик по кнопке
$b=0 //если кнопка не сработала задаем значение
while($b=0)
getscreen
if(pxlcount(744,205,793,220,3355443) < 1) //если в областе меньше 1 пикселя делаем клик по той же кнопке
lclick(903+rnd(1,3),175+rnd(1,3))
end_if
$b=1 //как только появляется нужный пиксель в областе выходим из цикла
GOTO(skip)
else
waitms(500)
end_cyc
end_if
end_cyc
skip:
не посмотришь так можно? если да, то где ошибся?