Author Topic: Помогите пожалуйста разобраться  (Read 4866 times)

0 Members and 1 Guest are viewing this topic.

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Помогите пожалуйста разобраться
« on: March 29, 2015, 06:46:57 PM »
Помогите пожалуйста написать следующее : в определённой области экрана всё-время в разных местах появляется определённый уникльный цвет, нужно определить координаты этого цвета (это я знаю как сделать) и далее проверять в определённой области от этих координат наличие другого цвета по которому если он попадает в эту область кликать мышкой. Спасибо за внимание.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #1 on: March 29, 2015, 08:35:02 PM »
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(200,200, 500,500, 255)
   IF_PIXEL_IN($_return1-50,$_return2-50, $_return1+50,$_return2+50, 15723239) // поиск в радиусе 50 пикселов от найденной координаты
      LCLICK($_return1,$_return2)
      WAITMS(100)
   END_IF
END_IF

WAITMS(50)

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #2 on: March 30, 2015, 09:36:51 PM »
большое спасибо Oraven, буду пробовать

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #3 on: March 31, 2015, 11:03:45 AM »
А если так:

Есть например такой алгоритм действий:

getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if

Можно ли сделать так чтобы при обнаружении определённого цвета в зоне видимости нажатие на мышку по этому цвету происходило один раз и после этого нажималась кнопка D и S. Чтобы эти кнопки нажимались только если произошло нажатие мышки. И можно ли проверяемые цвета как-то в одно условие засунуть, чтобы не было куча if, я пробовал через запятую не получилось. Правда нужно чтобы не на один какой-то цвет из нескольких сработало нажитие мыши, а на все что найдутся в радиусе видимости. Спасибо 

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #4 on: March 31, 2015, 01:38:41 PM »
А если так:
Есть например такой алгоритм действий:
[spoiler]getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if[/spoiler]

Можно ли сделать так чтобы [spoiler] при обнаружении определённого цвета в зоне видимости нажатие на мышку по этому цвету происходило один раз и после этого нажималась кнопка D и S. Чтобы эти кнопки нажимались только если произошло нажатие мышки. И можно ли проверяемые цвета как-то в одно условие засунуть, чтобы не было куча if, я пробовал через запятую не получилось. Правда нужно чтобы не на один какой-то цвет из нескольких сработало нажитие мыши, а на все что найдутся в радиусе видимости. Спасибо [/spoiler]

В одном условии обработать все пиксели в зоне не получится. Если правильно понял задачу, то например можно сделать так:

Code: (clickermann) [Select]
getscreen

sub (clk_and_key, $__X, $__y) // процедура делает клик, затем нажатие D и нажатие S
lclick($__X, $__y)
waitms(30) // пауза после клика (подобрать нужное значение)
keypress(#D)
waitms(30) // пауза после нажатия кнопки (подобрать нужное значение)
keypress(#S)
waitms(30) // пауза после нажатия кнопки (подобрать нужное значение)
end_sub

$exit = 0 // признак завершения работы

while ($exit ! 1)
if_pixel_in(247, 94, 961, 475, 5967631) // если найден контрольный пиксель, то ищем все пиксели нужных цветов, щелкаем их и нажимаем кнопки
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 7891634) // если есть пиксель1
clk_and_key($_return1, $_return2)
end_if
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 6839199) // если есть пиксель2
clk_and_key($_return1, $_return2)
end_if
if_pixel_in($_return1-120, $_return2-120, $_return1+120, $_return2+120, 6311826) // если есть пиксель3
clk_and_key($_return1, $_return2)
end_if
end_if

waitms(50) // разгрузка процессора/пауза между проходами
end_cyc

halt

Или же создать массив с цветами и прогонять его в цикле.

Если в задаче есть пиксели с одинаковыми цветами, то можно сделать тюнинг: для массива цветов в цикле вызывать scanpxl и тут же обрабатывать массив полученных координат.

P.S. В коде есть ошибка, нужно сохранить $_return1, $return2. Смотри ниже у Oraven.
« Last Edit: April 01, 2015, 10:31:33 PM by ezfalcon »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #5 on: March 31, 2015, 03:30:09 PM »
Вот, все просто ;D

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(247,94, 961,475, 5967631)
   $sx = $_return1
   $sy = $_return2
   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634)
      IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6839199)
         IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6311826)
            IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634,6839199,6311826)
               LCLICK($_return1, $_return2) // клик
               WAITMS(100)
               KEYPRESS(#D) // нажимаем D
               WAITMS(500)
               KEYPRESS(#S) // нажимаем S
               WAITMS(500)
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
WAITMS(50)

поправил  ::)
« Last Edit: March 31, 2015, 05:23:53 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #6 on: March 31, 2015, 03:56:45 PM »
Все три последние поста неправильно. Или так задумано?

IF_PIXEL_IN идут подряд... почему опять и опять используете $_return1, $_return2 ?
Почему после IF_PIXEL_IN(247,94, 961,475, 5967631) не переназначено другим переменным?

А то у нас пляшущие человечки выходят. Всё дальше и дальше от начала, и в случайном направлении.


kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #7 on: March 31, 2015, 09:43:53 PM »
Никуда не кликает) Вообще ничего не происходит.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #8 on: April 01, 2015, 07:19:32 AM »
Никуда не кликает) Вообще ничего не происходит.

Ну значит в радиусе 120 пикселов от цвета 5967631 нет всех трех цветов. Как хотел так и написали...

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #9 on: April 01, 2015, 09:33:57 AM »
                 Так кликает :

getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if


              А так не кликает :

GETSCREEN

IF_PIXEL_IN(247,94, 961,475, 5967631)

   $sx = $_return1

   $sy = $_return2

   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634)

      IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6839199)

         IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6311826)

            IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634,6839199,6311826)

               LCLICK($_return1, $_return2) // клик

               WAITMS(100)

               KEYPRESS(#D) // нажимаем D

               WAITMS(500)

               KEYPRESS(#S) // нажимаем S

               WAITMS(500)

            END_IF

         END_IF

      END_IF

   END_IF

END_IF

WAITMS(50)

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #10 on: April 01, 2015, 03:06:03 PM »
в первом случае я только фрагмент выложил, там больше цветов. Так и нужно чтобы он при наличии хотя бы одного цвета кликал, а не когда в радиусе есть все перечисленные цвета

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #11 on: April 01, 2015, 04:16:49 PM »
Правда нужно чтобы не на один какой-то цвет из нескольких сработало нажитие мыши, а на все что найдутся в радиусе видимости. Спасибо 
Так и нужно чтобы он при наличии хотя бы одного цвета кликал, а не когда в радиусе есть все перечисленные цвета

Ты хоть определись.

Так кликнет на первый попавшийся
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(247,94, 961,475, 5967631)
   $sx = $_return1
   $sy = $_return2
   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634,6839199,6311826)
      LCLICK($_return1, $_return2) // клик
      WAITMS(100)
      KEYPRESS(#D) // нажимаем D
      WAITMS(500)
      KEYPRESS(#S) // нажимаем S
      WAITMS(500)
   END_IF
END_IF
WAITMS(50)

Так попытается найти 3 цвета и если найден 1-3 то в конце нажмет D S
Code: (clickermann) [Select]
$check = 0
GETSCREEN
IF_PIXEL_IN(247,94, 961,475, 5967631)
   $sx = $_return1
   $sy = $_return2
   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 7891634)
      LCLICK($_return1, $_return2) // клик
      $check = 1
      WAITMS(100)
   END_IF
   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6839199)
      LCLICK($_return1, $_return2) // клик
      $check = 1
      WAITMS(100)
   END_IF
   IF_PIXEL_IN($sx-120,$sy-120,$sx+120,$sy+120, 6311826)
      LCLICK($_return1, $_return2) // клик
      $check = 1
      WAITMS(100)
   END_IF
   IF($check = 1)
      KEYPRESS(#D) // нажимаем D
      WAITMS(500)
      KEYPRESS(#S) // нажимаем S
      WAITMS(500)
   END_IF
END_IF
WAITMS(50)
« Last Edit: April 01, 2015, 09:24:03 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #12 on: April 01, 2015, 04:20:59 PM »
А чего в одну не вписал?


ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #13 on: April 01, 2015, 07:44:13 PM »
Исходя из описания, примерно следующее:
Если найден контрольный пиксель, то искать пиксели заданных цветов и на каждом кликать и нажимать кнопки. Выше писал пример решения. Только там нужно сохранить полученные в первом условии координаты и засунуть во вложенные условия вместо $_return1, $_return2.

Более четко опиши задачу, скрин прикрепи или ссылку на игру дай.

                 Так кликает :

getscreen
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,7891634)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6839199)
lclick($_return1,$_return2)
end_if
end_if
if_pixel_in(247,94,961,475,5967631)
  if_pixel_in($_return1-120,$_return2-120,$_return1+120,$_return2+120,6311826)
lclick($_return1,$_return2)
end_if
end_if


Тебе Oraven написал вариант.

Условие if_pixel_in(247,94,961,475,5967631) - нужно один раз тебе. Вложенные условия засовуй в него все вместе последовательно, ведь тебе нужно для каждого пикселя отдельно кликнуть. После lclick($_return1,$_return2) добавь, как тебе подсказали не раз :):
Code: (clickermann) [Select]
      KEYPRESS(#D) // нажимаем D
      WAITMS(500)
      KEYPRESS(#S) // нажимаем S
      WAITMS(500)
« Last Edit: April 01, 2015, 10:28:58 PM by ezfalcon »

kriozer22

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Помогите пожалуйста разобраться
« Reply #14 on: April 02, 2015, 11:18:33 AM »
Извиняюсь если запутал, сейчас вложил скрин. Хочу сделать полуавтоматического бота, ходить буду сам, а всё остальное хочу чтобы кликермэн делал. На картинке виден мой персонаж и монстры 2-х видов. Персонаж появляется на карте в рандомном порядке и у оружия есть определённый радиус действия. Нужно чтобы по монстрам попавшим в радиус действия происходил 1 раз клик мышью и затем клавиша D (перезарядка) и S (конец хода),  затем я передвигаю персонажа и если монстры попали в радиус стрельбы всё заново.