Author Topic: lclick без привязки к координатам клика мыши  (Read 7958 times)

0 Members and 2 Guests are viewing this topic.

STARый

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Доброго времени суток, Уважаемые гуру!
Неделю курил форум и все статьи которые здесь нашел. Помогло очень составить несколько скриптов. Все работает. Сейчас решил сделать усовершенствование.Есть алгоритм, но как его выполнить - не могу придумать. Алгоритм простой, но язык еще не полностью изучил, что касается переменных (тяжело у меня с этим). Итак, вот что необходимо:
При левом клике мыши по любому участку  заданной области, допустим (0,200,1920,1040), необходимо чтобы с задержкой WAITMS(500) происходил рандомный клик в области с координатами LCLICK(RND(100,350),RND(20,150)), та дальше действия будут происходить, все стандартно, поиск картинки, сравнение, клик по ней и т.д. у меня уже все в SUB забито... а вот как именно сие действие обозначить, которое я выше указал - для меня загадка. Знаю что просто очень, но с командами запутался... Помогите пожалуйста!
Заранее благодарен, ветеран русского интернета, Старый ;-)
« Last Edit: December 15, 2015, 05:12:40 PM by STARый »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
При клике физичесой мышью? Тогда так:

Code: (clickermann) [Select]
IF(ISKEYDOWN(1)=1)
   IF(($_xmouse > 0) & ($_xmouse < 1920) & ($_ymouse > 200) & ($_ymouse < 1040))
      WAITMS(500)
      LCLICK(RND(100,350),RND(20,150))
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(50)
      END_CYC
   END_IF
END_IF

Но нужно учитывать что этот клик ловится только при прохождении скриптом строки IF(ISKEYDOWN(1)=1)
Что там с логикой, ждать не ждать это из вопроса не ясно.


STARый

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Спасибо! Попробую. Суть: при передвижениее по карте "вручную" (это пока, дальше автоматизирую потихоньку :) ) путем кликанья ЛК по соседней клетке, куда необходимо двигаться, в клетке имеются ресурсы, которые открываются при нажатии на кнопку, которая находится сверху окна (по указанным мною координатам). Поскольку это нужно делать очень быстро, в виду наличия конкурентов на той же карте, то часто не успеваешь просто кликать сначала по клетке (для передвижения на эту клетку за указанными ресурсами) и тут-же нажимать кнопку для раскрытия меню предложения действий. Так вот, с менюшкой1 то без проблем, там выбор картинок идет, оформил через IF_PICTURE_IN, а вот как нажать программно меню при ФИЗИЧЕСКОМ нажатии ЛКМ совершенно в другом месте - тут я не знал. сейчас попробую. (Надеюсь я все понятно обьяснил?). Оперативно тут помогают  :). Надеюсь тут пропишусь))

STARый

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Не работает... Скопировал один в один в редактор. Запустил... к мышке даже притронуться не успел - начинаются клики по кнопке (строка 4). Т.е. скрипт не обрабатывает нажатие на ЛКМ, не дожидается клика физического...
« Last Edit: December 15, 2015, 10:36:04 PM by STARый »

STARый

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

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Code: (clickermann) [Select]
// После запуска скрипт будет находиться в состоянии ожидания нажатия заданной клавиши,
// в данном случае это клавиша №1 - левая клавиша мыши (ЛКМ)

IF(ISKEYDOWN(1)=1) // условие будет выполнено если нажать на ЛКМ
   
   WHILE(ISKEYDOWN(1)=1) // пока ЛКМ зажата, то будем находиться в этом цикле
      WAITMS(50)         // частота проверки, отпущена ЛКМ или нет (50 мс)
   END_CYC               // чтобы выйти из цикла, надо отпустить ЛКМ
   
   // здесь можно поставить задержку перед кликом, с учетом того,
   // что на выход из цикла может потребоватся до 50 мс (задержка внутри самого цикла)
   LCLICK(350,350) // теперь ЛКМ отпущена - клик в координаты (350,350)
   
END_IF

WAITMS(50) // частота проверки, нажата ЛКМ или нет (50 мс)

STARый

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Спасибо Огромное! Сейчас буду пробовать!)
ЗЫ. Все заработало! )) Остальное сам все что нужно!
Спасибо за отзывчивость!
« Last Edit: December 16, 2015, 12:34:51 AM by STARый »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Не работает... Скопировал один в один в редактор. Запустил... к мышке даже притронуться не успел - начинаются клики по кнопке (строка 4). Т.е. скрипт не обрабатывает нажатие на ЛКМ, не дожидается клика физического...

Всё работает. Скопировано значит неправильно.

P.S. Во втором скрипте отличий нет. Кроме выкинутой части задания.
« Last Edit: December 16, 2015, 09:02:54 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
  IF(($_xmouse > 0), это ты немного погарячился с условием.
Понятно, что окно может распологаться левее монитора и туда можно кликнуть, но ведь курсор туда не загнать, так что в даном случае эта часть условия лишняя.

Я исходил из вопроса в котором есть слово допустим
"допустим (0,200,1920,1040)"
Логично предположить, что координаты могут быть другие.

+ Если два монитора и основной правый, координаты левого наверно могут быть отрицательные. И курсор там может быть, почему бы и нет.
« Last Edit: December 16, 2015, 01:10:20 PM by Vint »


STARый

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Уважаемые ГУРУ! Опять я)
Монитора два. Координаты давал упрощенные. Вот сейчас вбиты те, что на самом деле.
Другие скрипты работают. С этим проблем нет. Ставлю на ночь- и щелкает только впуть как говорится.
А вот этот добить никак не могу.
Он просто по кругу идет, не останавливаясь постоянно жмет. а нужно одно нажатие. прикладываю скрипт и картинку алгоритма (если его так назвать можно).
code=clickermann
IF(ISKEYDOWN(1)=1)
      IF(($_xmouse > 2366) & ($_xmouse < 3390) & ($_ymouse > 110) & ($_ymouse < 945))
          WAITMS(500)
          LCLICK(RND(100,350),RND(20,150))
             WHILE(ISKEYDOWN(1)=1)
             WAITMS(100)
             END_CYC
                  WAITMS(100)
      END_IF
   END_IF

   GETSCREEN(1920,0,3839,1079)
   IF_PICTURE_IN (1920,0, $_xmax,$_ymax, "img\resurs.bmp", -1, 100)
      
       LCLICK($_return1+(RND(120,180)), $_return2+(RND(1,5))
      WAITMS(100)
   END_IF
--
ЗЫ.Не получается воткнуть картинку.
Придется опять косноязычно на словах...
После нахождения картинки он как видите по ней кликает. Так вот что нужно: если картинку не находит - то должен вернуться на "исходную" - т.е. ожидать очередного клика мышью. Если находит - то кликает один раз(и он кликает!!!) и тоже возвращаться на исходную, т.е. ожидать очередного клика ЛКМ... надеюсь обьяснил). Вы уж старого ламера простите)))
« Last Edit: December 16, 2015, 11:49:14 PM by STARый »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Так:
Code: (clickermann) [Select]
IF(ISKEYDOWN(1)=1)
   IF(($_xmouse > 2366) & ($_xmouse < 3390) & ($_ymouse > 110) & ($_ymouse < 945))
      LCLICK(RND(100,350),RND(20,150))
      WAITMS(500)
     
      GETSCREEN(1920,0,3839,1079)
      IF_PICTURE_IN (1920,0, $_xmax,$_ymax, "img\resurs.bmp")
         LCLICK($_return1+(RND(120,180)), $_return2+(RND(1,5))
         WAITMS(100)
      END_IF
     
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(50)
      END_CYC
   END_IF
END_IF
WAITMS(50)

Или так:
Code: (clickermann) [Select]
WHILE(ISKEYDOWN(1)=0)
   WAITMS(50)
END_CYC

IF(($_xmouse > 2366) & ($_xmouse < 3390) & ($_ymouse > 110) & ($_ymouse < 945))
   LCLICK(RND(100,350),RND(20,150))
   WAITMS(500)
   
   GETSCREEN(1920,0,3839,1079)
   IF_PICTURE_IN (1920,0, $_xmax,$_ymax, "img\resurs.bmp")
      LCLICK($_return1+(RND(120,180)), $_return2+(RND(1,5))
      WAITMS(100)
   END_IF
END_IF

WHILE(ISKEYDOWN(1)=1)
   WAITMS(50)
END_CYC