Автор Тема: Совершение действия при обнаружении пикселя на определённом отрезке времени  (Прочитано 1805 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Здравствуйте, уважаемые формумчане.
Разработал для себя довольно простой скрипт

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

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

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

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3903
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
А точно работает? Потому как -1545 больше чем -1546. И значит GETSCREEN не работает. Но кнопка жмётся, да, т.к. пиксел всегда чёрный.
И чтоб не путаться, почему не задано так
Код: Clickermann
  1. GETSCREEN(-1545,73, -1545,73)


отображается/отсутствует нужно именно оба состояния ловить? Там два цвета или нужный и все остальные?
« Последнее редактирование: Сентябрь 21, 2021, 05:31:21 pm от Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3903
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Код: Clickermann
  1. THREAD(trap_changes, 1)
  2.    DEFINE($color, 255)  // нужный цвет
  3.    DEFINE($time, $_ms + 60000)   // время статики
  4.  
  5.    GETSCREEN(100,100, 100,100)
  6.    DEFINE($old, PXL(100, 100))
  7.    $current = PXL(100, 100)
  8.    IF(($current != $old) & (($current == $color) | ($old == $color)))
  9.        $time = $_ms + 60000
  10.    ELSE
  11.        IF($time < $_ms)
  12.            //совершает определённое действие
  13.        END_IF        
  14.    END_IF
  15.    WAITMS(20)
  16. END_THREAD


Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Спасибо большое, буду пробовать. На счёт первого скрипта вроде бы всё работает, но я изменю параметры снимка экрана, чтобы они совпадали.

Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
На основе Вашего скрипта вот что у меня получилось.

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 сек, нужно чтобы скрипт произвёл действие и запустил мигание лампочки по-новой и так по кругу".

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3903
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
После действия должна быть пауза и после нужно перезарядить таймер
Код: Clickermann
  1. $time = $_ms + 6000
это я забыл сделать.

Остальное непонятно, описание расходится с первоначальным. Т.е. если цвет есть, то не важно сколько он есть?


Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Решил попробовать немного другой способ, который приведет к нужному мне результату.
Условия такие:
Скрипт сканирует область
GETSCREEN(1218,240, 1303,324)
Если в данной области находит пиксель с нужным мне цветом
IF_PIXEL_IN(1218,240, 1303,324, 11385599)
То ничего не делает, но если данного пикселя в указанной области не находит то совершает действие (например, производит нажатие клавиши).
Если после нажатия клавиши пиксель всё также отсутствует производит снова нажатие и так пока не найдёт.

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

П.С. Все скрипты, что я писал с целью решить данную задачу приводили к тому, что не зависимо от  того находил ли скрипт цвет пикселя или нет в указанной мною области экрана, он производил нажатие клавиши с той задержкой, что я указал. 

Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Выражусь на "игровом" языке.
На миникарте отображаются мобы, которые произвольно передвигаются, все имеют общий пиксель с одним цветом.
Если мобы на карте - отлично, скрипту ничего делать не надо.
Если их нет на карте, то скрипт делает действие (портация) в область, где они есть.
Если портация снова привела в область, где нет мобов, снова совершает портацию, и так пока их не обнаружит.
Так, думаю, будет более понятно.

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

kiril

  • Освоившийся
  • **
  • Сообщений: 97
    • Просмотр профиля
Re: Совершение действия
« Ответ #8 : Сентябрь 25, 2021, 02:52:56 pm »
Код: Clickermann
  1. #name "v1.0 портер"
  2. DEFINE($color,11385599)  // нужный цвет
  3.  
  4. $check = 0
  5. WHILE($check = 0)
  6.   GETSCREEN(1218,240,1303,324)
  7.   IF_PIXEL_IN(1218,240,1303,324,$color)
  8.      WAITMS(100)
  9.   ELSE
  10.      LOGWRITE ("телепортация")
  11.      KEYPRESS(69) //  нажатие клавиши
  12.      WAITMS(5000)
  13.   END_IF
  14. END_CYC
  15.  

Emergen83942

  • Зашел в гости
  • *
  • Сообщений: 9
    • Просмотр профиля
Спасибо большое. Завтра буду пробовать  ;)