Автокликер Clickermann :: Форум

Основной раздел => Использование => Topic started by: Emergen83942 on September 21, 2021, 03:56:04 PM

Title: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 21, 2021, 03:56:04 PM
Здравствуйте, уважаемые формумчане.
Разработал для себя довольно простой скрипт

GETSCREEN(-1545,73, -1546,74)
   IF(PXL(-1545,73) ! 5309) 
      KEYPRESS(69)
      WAIT(5)
   END_IF
   WAITMS(10)

Т.е. когда отсутствует указанный пиксель в отмеченных координатах, то скрипт нажимает соответствующую кнопку и так по кругу. Тут всё работает, проблем нет, но мне нужен ещё второй параллельный скрипт, знаю что запускается командой THREAD.

Скрипт обнаруживает нужный пискель (либо его отсутствие), если данный пискель НЕПРЕРЫВНО отображается (либо непрерывно отсутствует) определённое количество времени, например, 1 минуту, то совершает определённое действие.

Заранее спасибо. 

Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Vint on September 21, 2021, 05:22:32 PM
А точно работает? Потому как -1545 больше чем -1546. И значит GETSCREEN не работает. Но кнопка жмётся, да, т.к. пиксел всегда чёрный.
И чтоб не путаться, почему не задано так
Code: (clickermann) [Select]
GETSCREEN(-1545,73, -1545,73)

отображается/отсутствует нужно именно оба состояния ловить? Там два цвета или нужный и все остальные?
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Vint on September 21, 2021, 05:46:31 PM
Code: (clickermann) [Select]
THREAD(trap_changes, 1)
    DEFINE($color, 255)  // нужный цвет
    DEFINE($time, $_ms + 60000)   // время статики
   
    GETSCREEN(100,100, 100,100)
    DEFINE($old, PXL(100, 100))
    $current = PXL(100, 100)
    IF(($current != $old) & (($current == $color) | ($old == $color)))
        $time = $_ms + 60000
    ELSE
        IF($time < $_ms)
            //совершает определённое действие
        END_IF       
    END_IF
    WAITMS(20)
END_THREAD
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 21, 2021, 05:54:36 PM
Спасибо большое, буду пробовать. На счёт первого скрипта вроде бы всё работает, но я изменю параметры снимка экрана, чтобы они совпадали.
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 21, 2021, 06:33:30 PM
На основе Вашего скрипта вот что у меня получилось.

DEFINE($color, 1060930)  // нужный цвет
    DEFINE($time, $_ms + 6000)   // время статики взял 6 сек
 
    GETSCREEN(-154,687, -154,687)
    DEFINE($old, PXL(-154,687))
    $current = PXL(-154,687)
    IF(($current != $old) & (($current == $color) | ($old == $color)))
        $time = $_ms + 6000
    ELSE
        IF($time < $_ms)
   KEYPRESS(69) //совершает определённое действие
        END_IF       
    END_IF
    WAITMS(200)

У меня получается следующее: спустя 6 сек скрипт постоянно начинает совершать действие, т.е. KEYPRESS(69).
Если я где-то ошибся, то подскажите.
А так постараюсь максимально упростить, что мне надо на следующим примере.
"На экране мигает (включается и выключается) лампочка с периодичностью 1-5 сек, у лампы только 2 состояния: включена, цвет 1, выключена, цвет 2.
 Если лампа перестаёт мигать, т.е. становится цветом 2, на протяжении, например, 10 сек, нужно чтобы скрипт произвёл действие и запустил мигание лампочки по-новой и так по кругу".
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Vint on September 21, 2021, 09:05:09 PM
После действия должна быть пауза и после нужно перезарядить таймер
Code: (clickermann) [Select]
$time = $_ms + 6000это я забыл сделать.

Остальное непонятно, описание расходится с первоначальным. Т.е. если цвет есть, то не важно сколько он есть?
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 25, 2021, 11:19:34 AM
Решил попробовать немного другой способ, который приведет к нужному мне результату.
Условия такие:
Скрипт сканирует область
GETSCREEN(1218,240, 1303,324)
Если в данной области находит пиксель с нужным мне цветом
IF_PIXEL_IN(1218,240, 1303,324, 11385599)
То ничего не делает, но если данного пикселя в указанной области не находит то совершает действие (например, производит нажатие клавиши).
Если после нажатия клавиши пиксель всё также отсутствует производит снова нажатие и так пока не найдёт.

Заранее спасибо.

П.С. Все скрипты, что я писал с целью решить данную задачу приводили к тому, что не зависимо от  того находил ли скрипт цвет пикселя или нет в указанной мною области экрана, он производил нажатие клавиши с той задержкой, что я указал. 
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 25, 2021, 11:29:36 AM
Выражусь на "игровом" языке.
На миникарте отображаются мобы, которые произвольно передвигаются, все имеют общий пиксель с одним цветом.
Если мобы на карте - отлично, скрипту ничего делать не надо.
Если их нет на карте, то скрипт делает действие (портация) в область, где они есть.
Если портация снова привела в область, где нет мобов, снова совершает портацию, и так пока их не обнаружит.
Так, думаю, будет более понятно.

Заранее спасибо.
Title: Re: Совершение действия
Post by: kiril on September 25, 2021, 02:52:56 PM
Code: (clickermann) [Select]
#name "v1.0 портер"
DEFINE($color,11385599)  // нужный цвет

$check = 0
WHILE($check = 0)
   GETSCREEN(1218,240,1303,324)
   IF_PIXEL_IN(1218,240,1303,324,$color)
      WAITMS(100)
   ELSE
      LOGWRITE ("телепортация")
      KEYPRESS(69) //  нажатие клавиши
      WAITMS(5000)
   END_IF
END_CYC
Title: Re: Совершение действия при обнаружении пикселя на определённом отрезке времени
Post by: Emergen83942 on September 25, 2021, 10:03:31 PM
Спасибо большое. Завтра буду пробовать  ;)