Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Dominik on August 20, 2018, 08:47:44 PM
-
Всем доброго вечера.
Я только начал разбираться , то бишь,полный дилетант )
Если кто-то может,помогите написать лёгенький скрипт.
Суть скрипта :
В определенной области экрана появляется маленькая картинка(всего 50 вариантов этой картинки ,меня устроит только 6 из них ) . Когда появляется любой из 6 вариантов который меня устраивает , курсор должен нажать в точку "А" ,затем нажать в точку "Б" ,после этого нажать в точку "C" . Пауза 3 минуты и все по новой бесконечное количество раз .
Если появляется картинка ,которая меня не устраивает ,то запустить все заново спустя минуту бесконечное количество раз.
Заранее огромное спасибо откликнувшимся людям .
-
Сохрани этот скрипт в папку. Создай в этой папке папку Image. В неё помести скриншоты для поиска твоих картинок. Размер должен быть не более 50х50. Формат BMP 24bit
В функции IF_PICTURE_IN укажи область поиска твоих картинок.
Скрипт автоматически получает имена всех картинок из папки Image и в цикле проверяет их на совпадение с тем что на экране.
GETFILELIST($a_im, "Image\*.bmp") // Получаем имена картинок из паки Image
WHILE(1) // бесконечный цикл
GETSCREEN
FOR($i=0,$i<ARRSIZE($a_im))
IF_PICTURE_IN (0,0, 500,500, STRCONCAT("Image\",$a_im[$i]), -1, 100) // поиск в области 0,0, 500,500
LCLICK(100,100) // три клика
WAITMS(500)
LCLICK(100,100)
WAITMS(500)
LCLICK(100,100)
WAIT(180) // Пауза на 3 мин
$i=9999 // завершаем цикл
ELSe
WAITMS(50)
END_IF
END_CYC
IF($i!10000) // Одна минута паузы если не было совпадений
WAIT(60)
END_IF
END_CYC
-
Одна минута паузы, если не было совпадений, будет выполняться всегда. Даже если совпадения были.Потому как вы забываете что цикл FOR наращивает переменную в конце. А это значит что на выходе из цикла $i=10000.
-
Сохрани этот скрипт в папку. Создай в этой папке папку Image. В неё помести скриншоты для поиска твоих картинок. Размер должен быть не более 50х50. Формат BMP 24bit
В функции IF_PICTURE_IN укажи область поиска твоих картинок.
Скрипт автоматически получает имена всех картинок из папки Image и в цикле проверяет их на совпадение с тем что на экране.
GETFILELIST($a_im, "Image\*.bmp") // Получаем имена картинок из паки Image
WHILE(1) // бесконечный цикл
GETSCREEN
FOR($i=0,$i<ARRSIZE($a_im))
IF_PICTURE_IN (0,0, 500,500, $a_im[$i], -1, 100) // поиск в области 0,0, 500,500
LCLICK(100,100) // три клика
WAITMS(500)
LCLICK(100,100)
WAITMS(500)
LCLICK(100,100)
WAIT(180) // Пауза на 3 мин
$i=9999 // завершаем цикл
ELSe
WAITMS(50)
END_IF
END_CYC
IF($i!9999) // Одна минута паузы если не было совпадений
WAIT(60)
END_IF
END_CYC
Oraven ,добрый день ,большое спасибо за ответ .
У меня задача немного усложнилась ,добавились еще проверки ,так как я вообще слабо разбираюсь ,я написал простой но громоздкий код.
Как я и говорил ,задача заключается в следующем (опишу так подробно как смогу):
В определенной области экрана есть столбец маленьких картинок,всего в столбце пять картинок , в верхней позиции появляется новая картинка каждые 3 минуты и она сдвигает остальные картинки по позиции вниз , то бишь , та которая была пятой пропадает ,на ее место становится та , которая была на четвертой позиции и так далее .Всего отдельных картинок около 50 есть и они появляются рандомно,меня устраивает 6 из 50 .то бишь , чтобы любая из этих 6 была на первом месте .
Приведу пример визуально
Картинка 1
Картинка 2
Картинка 3
Картинка 4
Картинка 5
ПРОХОДИТ 3 МИНУТЫ
Картинка 6
Картинка 1
Картинка 2
Картинка 3
картинка 4
Проходит 3 минуты
Моя картинка
Картинка 6
Картинка 1
Картинка 2
Картинка 3
И так далее .все продолжает сдвигаться дальше .
Раньше ,надо было просто после появления моей картинки нажать мышкой в 3-х места поочередно .В место А ,место Б и место С .
Сейчас немного усложнилось ,когда я вник в суть.
Сейчас надо проверить ,чтобы моей картинки не было на позиции номер 2 .то бишь , у меня может появится 2 картинки подряд , в таком случае мне не надо нажимать в эти места .
То бишь надо сканировать первое место появление картинки на наличие моей , а второе место появление на отсутствие моей
Правильное условие такого
1 картинка - на этой позиции есть моя картинка ,любая из 6.
2 картинка - а тут находится любая картинка кроме любой моей из 6 .
3картинка
4картинка
5картинка
Такой сценарий не ведет к нажатию
Моя картинка 2
Моя картинка 1
1 картинка
2 картинка
3 картинка
Плюс ,добавилась проблема , даже если все условия выше соблюдены , и я нажимаю на кнопку , то на кнопку можно нажать повторно уже через 3 секунды ,а этого мне не надо . На появление одной моей картинки .надо всего одно нажатие. Можно поставить паузу подсчитанную по времени после нажатия , но проблема в том,что там может идти зависание на +- 10 секунд и со временем эта пауза пропустит круг и собьется.
В голову мне пришел вариант проверки ,то бишь , если все условия выше соблюдены , проходит наш цикл и новый не начинается , пока моя картинку, которая на позиции один не станет на позицию два .
Моя картинка1- (программа нашла мою картинку)
Картинка 1-(программа проверила что нету на второй позиции моей картинки и нажимает на кнопки)
Картинка 2
картинка 3
Картинка 4
После этого , она начинает проверять 2 позицию на наличие "моей картинки1" бесконечное число раз по кругу , пока картинка не переместится.
Картинка7
Моя картинка 1 ( программа увидела ,что картинка переместилась и она запускает весь комплекс сначала )
Картинка 1
Картинка 2
Картинка 3
При этом хочу заметить , если бы произошло смещение вот так ,то нажатия бы не должно было произойти
Моя картинка 2
Моя картина 1( программа увидела ,что моя картинка стала с первого на второе место и запустило все заного )(Но после анализа увидела , что две мои картинки идут подряд и нажатие не произошло)
Картинка 1
Картинка 2
Картинка 3
ниже приведу мой код , который построен с более легких пример этого форума и очень громоздкий. Все более менее работает ,но происходят сбои , и проблема с перемещением картинки с первой позиции на вторую после нажатия я не решил , а поставил ожидание в 170 секунд. Как написать все проще и чтобы работало как часы ) Справочник к программе почитал ,нашел "or" но не знаю , подходит ли он к картинкам.
PS Пожалуйста,когда будете писать код или исправлять , закоментите в коде места , которые помогут мне поглубже вникнуть в суть .
В коде при проверке картинок добавил случайные клики по экрану , чтобы видеть какие части кода исполняются и понимать , что все работает .
WAITMS(500)
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "1.bmp" )
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(557,393) /////////
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "2.bmp")
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(836, 800) /////
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "3.bmp")
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(557,393) ////////
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "4.bmp")
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(836, 800) //////////
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "5.bmp")
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(557,393) ///////////
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,353, 653,402, "6.bmp")
IF_PICTURE_IN (557,393, 653,433, "1.bmp" )
LCLICK(557,393)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "2.bmp" )
LCLICK(557,353)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "3.bmp" )
LCLICK(390,493)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "4.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "5.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (557,393, 653,433, "6.bmp" )
LCLICK(836, 800)
WAITMS(300)
ELSE
WAIT(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(836, 800)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1214, 796)
WAITMS(1000)
LCLICK(1329, 980)
WAITMS(170000)
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Else
LCLICK(645, 753)
WAITMS(10000) //////
END_IF
END_IF
END_IF
END_IF
END_IF
END_IF
Всем заранее спасибо за помощь !)
-
Если тебе пофиг - каким будет работающий код, то копируй просто то, что тебе дают. Если ты хочешь разобраться сам, то в том, что тебе дают, именно тебе сейчас разобраться будет не просто. Разберись сначала вот в этом:
GETSCREEN // Делает скрин экрана и помещает его в буфер для анализа
COLORMODE(6) // Применение цветокоррекции для скрина (упрощение цветов)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100) // Ищет картинку на скрине, который в буфере. "file" - название картинки. "bmp" - расширение файла. "0,0, $_xmax,$_ymax" - координаты поиска картинки.
// Здесь действия, которые нужно сделать, если картинка найдена
else
// Здесь действия, которые нужно сделать, если картинка не найдена
END_IF
-
Если тебе пофиг - каким будет работающий код, то копируй просто то, что тебе дают. Если ты хочешь разобраться сам, то в том, что тебе дают, именно тебе сейчас разобраться будет не просто. Разберись сначала вот в этом:
GETSCREEN // Делает скрин экрана и помещает его в буфер для анализа
COLORMODE(6) // Применение цветокоррекции для скрина (упрощение цветов)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100) // Ищет картинку на скрине, который в буфере. "file" - название картинки. "bmp" - расширение файла. "0,0, $_xmax,$_ymax" - координаты поиска картинки.
// Здесь действия, которые нужно сделать, если картинка найдена
else
// Здесь действия, которые нужно сделать, если картинка не найдена
END_IF
Мужик , при всем моем уважении . Тебе не кажется , если я написал весь код через if .... else ... end_if То я это уже давно понял ,и смысл такого совета от тебя?
Я прошу помощи в оптимизации , так как это можно сделать при помощи других команд и сократить число строк в раз 10 .Так же не знаю как сделать отрицание ,если это возможно , я пробовал отрицание сделать так же через IF , но там получалось 600 строк и даже более . Код работал , но в каких-то местах происходили сбои периодически . Ты вообще смотрел мой код , что посоветовал мне разобраться в If .....else .....end_if ?
-
То бишь надо сканировать первое место появление картинки на наличие моей , а второе место появление на отсутствие моей
Вот твой код, только оптимизированный:
SUB(check_pic, $x1, $y1, $x2, $y2) //подпрограмма поиска всех картинок. входные параметры координат поиска $x1, $y1, $x2, $y2
GETSCREEN
COLORMODE(6)
FOR($a=1,$a<7) //перебираем 6 картинок с названиями файлов типа 1.bmp - 6.bmp
IF_PICTURE_IN ($x1, $y1, $x2, $y2, STRCONCAT ($a, ".bmp")
$a = 999 // если нашли, выходим из цикла
END_аIF
END_CYC
IF($a = 1000) // тут пишем флаг присутствия картинки
$check_pic = 1 // если мы выскочили из цикла и $a = 1000, картинка найдена
print("картинка №",$a," найдена в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
ELSE
$check_pic = 0 // если перебрали все картинки и $a = 7, картинка не найдена
print("картинки нет в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
END_IF
END_SUB
// основной код
WAITMS(500)
check_pic(557,353, 653,402) //смотрим наличие картинки сверху
IF($check_pic = 1) //если она там есть
check_pic(557,393, 653,433) // смотрим наличие картинки ниже
IF($check_pic = 0) //если ее там нет, действуем
print("действуем")
WAIT(1000) //1000 секунд??? это ж 16 минут!!!
LCLICK(836, 800)
WAIT(1)
LCLICK(836, 800)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1329, 980)
WAIT(170)
else
//если она там есть
//какието действия и ожидание
WAIT(10)
END_IF
else
//если ее там нет
//какието действия и ожидание
WAIT(10)
END_IF
-
END_аIF
Опечатка в 8 строке.
-
То бишь надо сканировать первое место появление картинки на наличие моей , а второе место появление на отсутствие моей
Вот твой код, только оптимизированный:
SUB(check_pic, $x1, $y1, $x2, $y2) //подпрограмма поиска всех картинок. входные параметры координат поиска $x1, $y1, $x2, $y2
GETSCREEN
COLORMODE(6)
FOR($a=1,$a<7) //перебираем 6 картинок с названиями файлов типа 1.bmp - 6.bmp
IF_PICTURE_IN ($x1, $y1, $x2, $y2, STRCONCAT ($a, ".bmp")
$a = 999 // если нашли, выходим из цикла
END_аIF
END_CYC
IF($a = 1000) // тут пишем флаг присутствия картинки
$check_pic = 1 // если мы выскочили из цикла и $a = 1000, картинка найдена
print("картинка №",$a," найдена в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
ELSE
$check_pic = 0 // если перебрали все картинки и $a = 7, картинка не найдена
print("картинки нет в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
END_IF
END_SUB
// основной код
WAITMS(500)
check_pic(557,353, 653,402) //смотрим наличие картинки сверху
IF($check_pic = 1) //если она там есть
check_pic(557,393, 653,433) // смотрим наличие картинки ниже
IF($check_pic = 0) //если ее там нет, действуем
print("действуем")
WAIT(1000) //1000 секунд??? это ж 16 минут!!!
LCLICK(836, 800)
WAIT(1)
LCLICK(836, 800)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1329, 980)
WAIT(170)
else
//если она там есть
//какието действия и ожидание
WAIT(10)
END_IF
else
//если ее там нет
//какието действия и ожидание
WAIT(10)
END_IF
Большое спасибо. Так же спасибо за подробные разъяснения в коде!!! :)
-
То бишь надо сканировать первое место появление картинки на наличие моей , а второе место появление на отсутствие моей
Вот твой код, только оптимизированный:
SUB(check_pic, $x1, $y1, $x2, $y2) //подпрограмма поиска всех картинок. входные параметры координат поиска $x1, $y1, $x2, $y2
GETSCREEN
COLORMODE(6)
FOR($a=1,$a<7) //перебираем 6 картинок с названиями файлов типа 1.bmp - 6.bmp
IF_PICTURE_IN ($x1, $y1, $x2, $y2, STRCONCAT ($a, ".bmp")
$a = 999 // если нашли, выходим из цикла
END_аIF
END_CYC
IF($a = 1000) // тут пишем флаг присутствия картинки
$check_pic = 1 // если мы выскочили из цикла и $a = 1000, картинка найдена
print("картинка №",$a," найдена в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
ELSE
$check_pic = 0 // если перебрали все картинки и $a = 7, картинка не найдена
print("картинки нет в координатах ",$x1,",", $y1,",", $x2,",", $y2 )
END_IF
END_SUB
// основной код
WAITMS(500)
check_pic(557,353, 653,402) //смотрим наличие картинки сверху
IF($check_pic = 1) //если она там есть
check_pic(557,393, 653,433) // смотрим наличие картинки ниже
IF($check_pic = 0) //если ее там нет, действуем
print("действуем")
WAIT(1000) //1000 секунд??? это ж 16 минут!!!
LCLICK(836, 800)
WAIT(1)
LCLICK(836, 800)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1214, 796)
WAIT(1)
LCLICK(1329, 980)
WAIT(170)
else
//если она там есть
//какието действия и ожидание
WAIT(10)
END_IF
else
//если ее там нет
//какието действия и ожидание
WAIT(10)
END_IF
Шестая строка, в конце не хватает скобки.
IF_PICTURE_IN ($x1, $y1, $x2, $y2, STRCONCAT ($a, ".bmp"))
-
Просьба к автору темы.
Дайте теме вразумительное название. Вот как в таких темах ориентироваться?