Author Topic: Совершение действия при обнаружении пикселя на определённом отрезке времени  (Read 2627 times)

0 Members and 1 Guest are viewing this topic.

Emergen83942

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

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

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

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

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А точно работает? Потому как -1545 больше чем -1546. И значит GETSCREEN не работает. Но кнопка жмётся, да, т.к. пиксел всегда чёрный.
И чтоб не путаться, почему не задано так
Code: (clickermann) [Select]
GETSCREEN(-1545,73, -1545,73)

отображается/отсутствует нужно именно оба состояния ловить? Там два цвета или нужный и все остальные?
« Last Edit: September 21, 2021, 05:31:21 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
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


Emergen83942

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

Emergen83942

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
На основе Вашего скрипта вот что у меня получилось.

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

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
После действия должна быть пауза и после нужно перезарядить таймер
Code: (clickermann) [Select]
$time = $_ms + 6000это я забыл сделать.

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


Emergen83942

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

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

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

Emergen83942

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

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

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Совершение действия
« Reply #8 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

Emergen83942

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Спасибо большое. Завтра буду пробовать  ;)