Author Topic: Помогите нубу  (Read 2371 times)

0 Members and 1 Guest are viewing this topic.

Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Помогите нубу
« on: September 04, 2017, 01:46:55 AM »
Помогите со скриптом. Нужно следующее, на скрине 2 шкалы нужно определить по зеленому пикселю в начале, что шкала появилась, а потом по очереди нажимать на клавиши "V" "N" удерживая каждую до появления желтого участка шкалы. Типа нажал "V" шкала заполнилась до желтого участка, отпустить "V"  нажать "N" до появления желтого участка и так пока шкала не пропадет (пропадет тот же зеленый пиксель, по которому, определили, появление шкалы)

Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #1 on: September 05, 2017, 05:43:41 AM »
До сих пор никто не отписался, неужели эта задача не выполнима? Хоть подскажите в каком направлении копать?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите нубу
« Reply #2 on: September 05, 2017, 08:03:02 AM »
Все просто.
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(5)
IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0)) // Если зеленый есть а желтого нет
   IF(ISKEYDOWN(#V)=0) // Если V не зажата
      KEYDOWN(#V) // Зажимаем V
   END_IF
ELSE
   IF(ISKEYDOWN(#V)=1) // Если V зажата
      KEYUP(#V) // Отпускаем
   END_IF
END_IF

IF((PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,649, 885,660, 4186111) = 0)) // Тоже самое для второй шкалы
   IF(ISKEYDOWN(#N)=0)
      KEYDOWN(#N)
   END_IF
ELSE
   IF(ISKEYDOWN(#N)=1)
      KEYUP(#N)
   END_IF
END_IF

WAITMS(50)

Цвет я взял в COLORMODE(5).
Функция PXLCOUNT считает пикселы заданного цвета.
Область анализа (700,627, 706,639) это маленький участок в начале зеленой и желтой (881,627, 885,639) полоски.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите нубу
« Reply #3 on: September 05, 2017, 08:15:07 AM »
Что здесь подсказывать? Основные фнкции PXL и IF_PIXEL_IN ?

Нет смысла писать универсальный код. Тебе проще на месте проставить координаты прямо с места шкалы. Шкала то в одном месте?
Опять же мы не видим как меняются цвета на шкале в динамике. Там же не однородным цветом залито. И Начала шкал не совпадают по цвету, значит можно предположить что цвет меняется по всей длине по мере заполнения. А вот как меняется нам не ведомо. Может "растягивается", а может добавляются цвета.

В любом из этих случаев нужно ещё применить COLORMODE.

Вариант ещё проще: Проверяешь в указанных местах пиксел на цвет фона. Если НЕ фон - то шкала в данном месте заполнилась.


Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #4 on: September 05, 2017, 08:46:47 AM »
Для меня это как китайский алфавит :). Спасибо, буду проверять. А шкала все время в одном месте. И нужно просто определить, что она появилась и не дать шкале подняться дальше середины. И как она исчезнет завершить скрипт.

Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #5 on: September 05, 2017, 09:08:22 AM »
Не работает. Само ничего не делает, а при нажатии вручную, при включенном скрипте, не дает поднять шкалу, даже с зеленного участка.

Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #6 on: September 05, 2017, 09:50:53 AM »
Сори, координаты не совпадали и цвет тоже. Поправил заработало но, надо немного доработать. Нужно как то зациклить, до того, пока шкала не пропадет и как то подтолкнуть нижнюю шкалу. А то она в начале не шевелится и скрипт не подхватывает ее.

Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #7 on: September 06, 2017, 12:00:44 PM »
скрипт по умолчанию выполняется неограниченное число раз. как пропадает зелёный, то условие становится неверным и нажатия прекращаются, а скрипт работает и ожидает появления шкалы.
Каким образом нужно подталкивать шкалу? Доступ к наблюдению в работе есть только у вас и ни кто другой этого не решит.
Если скрипт крутить, то все работает но если его вставить в основной то он проходит его 1 раз. Нужно его завернуть в цикл, а "подтолкнуть" тут вить понятно что клавишами "V" и "N"
Для ясности что происходит.
1 Шкала пустая скрипт не работает, а если в ручную нажимать то скрипт цепляется за найденный пиксель и начинает работать, но что бы он нашел его нужно подтолкнуть предварительно клавишами.
2 В коде скрипт проходит 1 раз, нужно его как то зациклить до того момента пока в начале обоих шкал не будет зеленого пикселя.

Вроде нужно что то типа этого но:
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   COLORMODE(5)
   IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(700,649, 706,660, 6291359) > 0))
      $check = 1
      WAITMS(100)
   ELSE
      KEYDOWN(#V)
      KEYDOWN(#N)
      WAITMS(50)
   END_IF
END_CYC

$time = $_time_t + 10
WHILE($time > $_time_t)
   GETSCREEN
   COLORMODE(5)
   IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(700,649, 706,660, 6291359) > 0))
      IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0))
         IF(ISKEYDOWN(#V)=0)
            KEYDOWN(#V)
         END_IF
      ELSE
         IF(ISKEYDOWN(#V)=1)
            KEYUP(#V)
         END_IF
      END_IF
     
      IF((PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,649, 885,660, 4186111) = 0))
         IF(ISKEYDOWN(#N)=0)
            KEYDOWN(#N)
         END_IF
      ELSE
         IF(ISKEYDOWN(#N)=1)
            KEYUP(#N)
         END_IF
      END_IF
   ELSE
      $time = 0
      WAITMS(50)
   END_IF
END_CYC
Еще вопросик такие условие, можно использовать?
Code: (clickermann) [Select]
IF(PXLCOUNT(700,627, 706,639, 6291359 | 16777215) > 0) // Если один из двух пикселей есть в области то условие верно
IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) | (PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0)) // Типа 1 или 2 + 3 = верно
IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0))// Типа все 3 = верно

 

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите нубу
« Reply #8 on: September 06, 2017, 12:58:12 PM »
Еще вопросик такие условие, можно использовать?
Code: (clickermann) [Select]
IF(PXLCOUNT(700,627, 706,639, 6291359 | 16777215) > 0) // Если один из двух пикселей есть в области то условие верно
IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) | (PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0)) // Типа 1 или 2 + 3 = верно
IF((PXLCOUNT(700,627, 706,639, 6291359) > 0) & (PXLCOUNT(700,649, 706,660, 6291359) > 0) & (PXLCOUNT(881,627, 885,639, 4186111) = 0))// Типа все 3 = верно

Нельзя. Зачем там вообще PXLCOUNT? если нужно определить наличие одного из пикселов.
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(700,627, 706,639, 6291359, 16777215) // Если один из двух пикселей есть в области то условие верно
   
END_IF

2 и 3 пример только вложенными условиями.
Пример 3     // Типа все 3 = верно
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(700,627, 706,639, 6291359) // Первый
    IF_PIXEL_IN(700,649, 706,660, 6291359) // Второй
        IF_PIXEL_IN(881,627, 885,639, 4186111) // Третий
            // Здесь код для верно все 3
        END_IF
    END_IF
END_IF


Vavik

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите нубу
« Reply #9 on: September 06, 2017, 01:44:32 PM »
Зачем там вообще PXLCOUNT?
Это я спросил для интереса, хотел узнать можно так в кодах писать. А по теме, так и не получилось сделать что бы работало.