Author Topic: Виртуальная привязка области  (Read 7675 times)

0 Members and 5 Guests are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Виртуальная привязка области
« Reply #15 on: September 07, 2018, 01:36:41 PM »
На какой версии ты сидишь? В мазилле давно уже есть встроенная плавная прокрутка. Сам использую 47 версию.
На последней. Всё дело в том, что дома я этим ничем не занимаюсь. А на работе только XP и под неё версия 52.9.0 максимум  :D.
Вот о ней и речь.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Виртуальная привязка области
« Reply #16 on: September 07, 2018, 02:13:58 PM »
У меня все плавно прокручивается

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #17 on: September 07, 2018, 04:32:46 PM »
включена эта опция похоже по умолчанию. да винде рывки по хлеще но шаг примерно такой же. поэтому и не оброщал внимание

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Виртуальная привязка области
« Reply #18 on: September 07, 2018, 04:34:02 PM »
Да, сорри. Это есть и включено. Выключил и вернулся на несколько лет назад. Оказывается уже было гладко.

На самом деле ставил SmoothWhell прочитав статью. Боролся не с той гладкостью который малый шаг перемещения и которая включается той галочкой в настройках, а гладкостью всей видимой страницы при прокручивании.
SmoothWhell делает прокрутку ещё глаже и если работает синхронизация vsync то нет и артефактов рассинхронизации частей страницы (строба).


KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #19 on: September 14, 2018, 04:42:56 PM »
Для начало вот правильно, может быть ошибка
+ Сказали бы вы мне какова Х**** ты пытаеся привязаться (Брать координаты итд) к самой игре тоесть флашплаеру. До меня дошло пока пытал тот код "работает то нет ..."

Если 10стр включена то 11-12стр выкл (убрать в комментарий)
Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   LOGWRITE ("2")      //-
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "0_Firefox.bmp", -1, 100)  // ищем картинку приложения, только не FlashPlayerP [32-bit mode] Процесс
      $check = 1
      LOGWRITE ("игра обнаружена")
      $hwnd = HGET($_return1,$_return2)  // определение номера окна
      //HSET($hwnd,1)   //+      привязка 1, 0 отвезать
      // WNDSETINFO($hwnd, 0, 0, 1037, 730) //установка окна  вписать нужные координаты и размер, минимальный размер окна
      WNDSIZE ($hwnd, 1037, 851)    //+ Задает размер окна
      //WNDPOS ($hwnd, 655, 0)   //+ Помещает окно на экране в указанные координаты   Правый угол комп + на половина полоса прокрутки
      WNDPOS ($hwnd, 0, 0)   //+ Помещает окно на экране в указанные координаты
      WNDGETINFO($hwnd, $var1, $var2, $var3, $var4) //+ определение существующих размеров и координат их можно и вписать в установку, тогда не придётся переписывать существующий скрипт
      LOGWRITE ("hwnd ",$hwnd," стали координаты ",$var1,",", $var2," размер ", $var3,",", $var4)    //+
      WNDBUMP ($hwnd)  //+Помещает окно на передний план
      WAITMS(1000) // время на обновление
      GETSCREEN
      LOGWRITE ("3")
      //      IF(PXL($X, $Y) = 1653112)   // Доделать проверка что вся область которая нужна видна //+ будете проверять лучше заместо ($X, $Y) пишите ( $var1+"координаторы Х", $var2+"координаторы Y") без ковычек
      LOGWRITE ("игра установлена ")
      WAITMS(100)
   ELSE
      LOGWRITE ("измените браузер или его панели")
      //      END_IF
   END_IF
END_CYC
//END_IF   // вроде должно быть выше  END_CYC

Вопросы (пака не дошло как сделать)
1) Как записать 12ст)  WNDPOS ($hwnd, 655, 0)  виде переменной чтобы вынести в начало. Цель, вк\выкл, и запись координат

2) нужен таймер аварийного завершения. предупреждаю есть прыжки и под программы.
Цель, переменная вначале, установка времени пусть будет 5мин. выполнения любого задания не больше 5мин, при превышения времени остановить скрипт, и неплохо бы было;
вконец добавить лог о общем выполнения.
когда аварийное завершение выдало сообщение и проиграл звук (думаю пойму как).

3) Объясните мне как выполнять искать итд при помощи контрольной суммы пикселей и цветов, с разными условиями, и хотя 1 пример как выносить переменную

КОНЕЦ  Для меня переменные и условия пока почти как темный лес

Может кому то пригодиться
Мая мука + настройка вчера муучился было 200+ строк, почти чистыми, осталось это
Ладно поехали


Постарался описать как можно подробней
Легко переделать на поиск картинок
Цель: надо было по купать с самого дорогого. высота одинаковая, расстояние между предметами и кнопками покупки одинаковые
Искомый пиксель находится на высоте "Y 540" самый дальний их тут 3 покупки "X 710".
Скрипт покупает самое дорогое расточение  X710 покупает 1е и отнимает 199 и покупает на X511 уже 2й предмет, 1й на  Х 312
Клик дублируется (копируется) только по высоте Х 650

Code: (clickermann) [Select]
// m_move   не з наеш что это удали просто  обе строчки
m_move($var1+700-$U321+RND(-40,40),$var2+650+RND(-11,11))
LCLICK($_xmouse,$_ymouse)   // если только это строчка будет кликнет где нашел
//  и заспеши это
LCLICK($var1+700-$U321+RND(-40,40),$var2+650+RND(-11,11))   // клик в у казаном месте с ран домом


// куда угодно пишем выше выполнения а в самое начало чтобы удобно было изменить , цифры  это цвет пикселя
// Или так пишите в Выполнении  IF_PIXEL_IN($var1+700-$U321,$var2+530, $var1+720-$U321,$var2+550,138309,9962336,15786964)
$BUUB = 15786964   // Усиление брони
$BUUA = 138309      // Усиление атаки
$BUZM = 9962336    // Защита от магии
$BUPE = 8257         // -Повышение энергии
$BUL = 7536382       // -Лечение
$BUPEV = 9286    //+- Повышение энергии всем
$BUV = 660242   //- Воскрешение

// Выполнение
$U321 = 0           // обнуление
FOR ($Kup,$U321 < 400)                // FOR (просто Счетчик, подсчет меньше заданного)
   print ("Делаю"," Счет ",$U321)  // а удали, просто для наблюдения начал выполнение и  сколько подсчет
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN($var1+700-$U321,$var2+530, $var1+720-$U321,$var2+550,$BUUA,$BUZM,$BUUB) // "$var1+700-$U321" координаты поиска  $var...+  не знаете значит вам пока не нужен удалить; 700 длина; $U321 отнемает то что нащитал; $BUUA,$BUZM,$BUUB  цвет пикселя
         $check = 1
         print ("КУПИЛ ",$U321) // а удали, просто для наблюдения что купил и сколько подсчитал
         WAITMS(RND(300,1000))    // просто пауза 0,3-1сек
         m_move($var1+700-$U321+RND(-40,40),$var2+650+RND(-11,11))   // описание в самом верху
         LCLICK($_xmouse,$_ymouse)                                   
         $U321 =  $U321 + 199  // пересчитывает подсчет чтобы $U321 была больше на 199
         WAITMS(100)
      ELSE
         
         
         IF_PIXEL_IN($var1+700-$U321,$var2+530, $var1+720-$U321,$var2+550,$BUPE,$BUL,$BUV,$BUPEV)
            $check = 1
            $U321 =  $U321 + 199
            print ("не нужно ",$U321)    // а удали, просто для наблюдения что не купил и сколько подсчитал
            WAITMS(100)
         ELSE
            LOGWRITE ("Не нашел")   // а удали, просто  если хочешь что что то не находит
            WAIT(2)
         END_IF
      END_IF
   END_CYC
   WAITMS(rnd(300,1000))
   
   
   GETSCREEN  // 6 строк для проверки выскочило окно о не хватки денег, ен нужно удали
   IF_PICTURE_IN ($var1+500,$var2+520, $var1+530,$var2+550, "Башня_\N_Ch_OK.bmp", -1, 100)
      WAITMS(rnd(1000,1500))
      m_move($_return1+3+RND(-30,30),$_return2+4+RND(-11,11))
      LCLICK($_xmouse,$_ymouse)
   END_IF
   
   
   print ("счет ",$U321)       // а удали, просто для наблюдения сколько подсчет
END_CYC


LOGWRITE ("Закончил ",$Kup)   // это можно в конец скрипта чтобы видел сколько раз купил и пропустил, одна общая цифра

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Виртуальная привязка области
« Reply #20 on: September 15, 2018, 07:41:33 AM »
1 вначале скрипта пишешь переменные в которых указываешь координаты. В функции указываешь эти переменные.
2 нужно использовать поток который параллельно основному скрипту будет следить за таймером.
3 Для начала получаешь число контрольной суммы
Code: (clickermann) [Select]
GETSCREEN
$hash = PXLCRC(10,10, 1000,1000) // Получаем контрольную сумму пикселов в области 10,10, 1000,1000
LOGWRITE ($hash)
HALT

Теперь в условии можно сравнивать контрольную сумму области с полученным ранее числом
Code: (clickermann) [Select]
GETSCREEN
IF(PXLCRC(10,10, 1000,1000) = 3171075084)
  // Если верно
ELSE
  // Если не верно
END_IF

$time = $_time_t + 300
$time - просто переменная с любым именем в которую мы сохраним текущее время в секундах + 300 сек
$_time_t - системная переменная возвращающая текущее время Unix

Code: (clickermann) [Select]
$wx = 100 // Координата положения окна
$wy = 100

//=============================================

$time = $_time_t + 300 // Устанавливаем таймер на 5 минут
$timeF = $_time_t // Засекаем время с момента запуска
SETTHREAD (t1, 1) // Запускаем поток t1

THREAD(t1, 0)
   IF($time < $_time_t) // Тут в потоке проверяем каждую секнуду не вышло ли время
      BEEP(900,2000) // Если вышло сигналим
      LOGWRITE ("Прошло с момента запуска: ", $_time_t-$timeF, " сек") // Выводим в лог время выполнения скрипта
      HALT // И останавливаем выполнение
   END_IF
   WAITMS(1000)
END_THREAD

go: // Бесконечный цикл

$check = 0
WHILE($check = 0)
   GETSCREEN
   LOGWRITE ("2")
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "0_Firefox.bmp", -1, 100)  // ищем картинку приложения, только не FlashPlayerP [32-bit mode] Процесс
      $check = 1
      $time = $_time_t + 300 // продлеваем таймер
      LOGWRITE ("игра обнаружена")
      $hwnd = HGET($_return1,$_return2)  // определение номера окна
      //HSET($hwnd,1)   //+      привязка 1, 0 отвезать
      // WNDSETINFO($hwnd, 0, 0, 1037, 730) //установка окна  вписать нужные координаты и размер, минимальный размер окна
      WNDSIZE ($hwnd, 1037, 851)    //+ Задает размер окна
      //WNDPOS ($hwnd, 655, 0)   //+ Помещает окно на экране в указанные координаты   Правый угол комп + на половина полоса прокрутки
      WNDPOS ($hwnd, $wx, $wy)   //+ Помещает окно на экране в указанные координаты
      WNDGETINFO($hwnd, $var1, $var2, $var3, $var4) //+ определение существующих размеров и координат их можно и вписать в установку, тогда не придётся переписывать существующий скрипт
      LOGWRITE ("hwnd ",$hwnd," стали координаты ",$var1,",", $var2," размер ", $var3,",", $var4)    //+
      WNDBUMP ($hwnd)  //+Помещает окно на передний план
      WAITMS(1000) // время на обновление
      GETSCREEN
      LOGWRITE ("3")
      //      IF(PXL($X, $Y) = 1653112)   // Доделать проверка что вся область которая нужна видна //+ будете проверять лучше заместо ($X, $Y) пишите ( $var1+"координаторы Х", $var2+"координаторы Y") без ковычек
      LOGWRITE ("игра установлена ")
      WAITMS(100)
   ELSE
      LOGWRITE ("измените браузер или его панели")
      WAITMS(500)
      //      END_IF
   END_IF
END_CYC


GOTO(go) // Бесконечный цикл
« Last Edit: September 15, 2018, 07:50:04 AM by Oraven »

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #21 on: September 15, 2018, 03:34:58 PM »
СПС
1) Я как понял, если раз вызвал "THREAD ... END_THREAD" он прочитал дает проход дальше, но выполняется условие все время не зависимо что выполняется.

2) Это я уже пытал
Code: (clickermann) [Select]
$wx = 100 // Координата положения окна
$wy = 100
//=============================================
WNDPOS ($hwnd, $wx, $wy)
Если $W... ,не указывать, убрать в комментарий, пытался химикать немного. не прокатывает. Будет 0,0 или то что задал.
цель; выключить (как словно этой строчки нету) или задать координаты которые мне надо

3) ну контрольные суммы как делать знаю спс, при моей попытки я не ставил равно, вопрос не тот, условие только может быть только это. без поиска картинки все равно не обойдеся в некоторых местах
IF(PXLCRC(100,100, 100,100) = 3171075084)
И искать будет 10х10 в зоне 100х100, если будет не отвечайте проверю сегодня
Хотя где то искали по нескольким пикселям с подряд не помню что и где но, это большое увеличение кода

Eсли только это условие то как написать покороче
1я   PXLCRC(10,10, 30,30) = $01
2я   PXLCRC(50,10, 80,30) = $02
3я   PXLCRC(100,10, 130,30) = $03
искал все 3 при находке любой выдавал какую нашел и где

Думаю все объяснил что мне надо.
Пака писал эту либуду вроде дошло как сделать одно выполнение.
« Last Edit: September 15, 2018, 03:43:17 PM by KingDrakonov »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Виртуальная привязка области
« Reply #22 on: September 15, 2018, 04:15:33 PM »
Заключи функцию в условие.

Code: (clickermann) [Select]
$wx = -1 // WNDPOS работать не будет
$wy = 100
//=============================================
IF(($wx > -1)&($wy > -1)) // функция выполняется если оба параметра 0 или больше
   WNDPOS ($hwnd, $wx, $wy)
END_IF

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #23 on: September 27, 2018, 08:10:13 PM »
Заключи функцию в условие.
Это я не увидел в притык спс


Помогите еще с одним, или я что то не понял как это сделать

На карте от1 до 15(пака макс видел) сражений расположение неизвестно, хотя раз напал появляется значок
Цель;  найти картинку у которой  нет 2й картинки и кликнуть (выше она примерно на 30пх), если не находит  пусть поищет еще раз 5 + задержка сек 10, если все же не нашел спустя 5 раз пусть выполнит последние действие.

Как понимаю это уже делается с  помощью массива

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #24 on: September 29, 2018, 05:13:53 PM »
еще 1 вопрос пустое значение чему ровняется 0 или меньше всего
если судить по математике, то пусто значит 0

и ответьте на прошлый вопросик и желательно поиск с лева на право
Code: [Select]
На карте от1 до 15(пака макс видел) сражений расположение неизвестно, хотя раз напал появляется значок
Цель;  найти картинку у которой  нет 2й картинки и кликнуть (выше она примерно на 30пх)
это ладно вроде знаю как в строить
Code: [Select]
если не находит  пусть поищет еще раз 5 + задержка сек 10, если все же не нашел спустя 5 раз пусть выполнит последние действие.

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #25 on: October 01, 2018, 11:30:41 AM »
Спасибо за ответы. Воскресенье сам разобрался, как только на азы разобрал несколько примеров

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #26 on: October 06, 2018, 12:12:14 AM »
Ребят помогите с очень легкой задачей только не молчите

сначала рабочий код, чтобы было понятно что я хочу
Code: (clickermann) [Select]
$Reid = 0
$Turnir = 0
WHILE($Turnir = 0)
   
   
   $time = $_time_t + 300
   $check = 0
   WHILE($check = 0)                         // =========== Поиск
      G_SCR
      C_MOD                            // Рейд
      IF_PICTURE_IN ($var1+623,$var2+476,$var1+648,$var2+501, "A_Hroniki\J_m6.bmp", -1, 100)
         $check = 1
         $Reid = 1
         m_lclick($_return1-1+RND(-25,25), $_return2+6+RND(-10,10))
      ELSE // Рейд нету
         IF_PICTURE_IN ($var1+383,$var2+479,$var1+412,$var2+508, "A_Hroniki\G_T_T_y_m6.bmp", 0, 100) // Ы
            $check = 1
            m_move($_return1, $_return2)                // удалить
           
            // =======================
                       
            print("Начал поиск")                        // не нужно
            // =========== поиск наподения
            SCANPICTURE($ARR_SCAN,$var1,$var2,$var3,$var4, "A_Hroniki\G_T_T_v_m6.bmp", -1, 100)    // $ARR_SCAN  массив
            print("Нашол ",ARRSIZE($ARR_SCAN))                        // не нужно
           
            $ARR_NUM = 0
            WHILE($ARR_NUM < ARRSIZE($ARR_SCAN))
               $X = $ARR_SCAN [$ARR_NUM]
               INC($ARR_NUM,1)                                //Увеличивает значение переменной
               $Y = $ARR_SCAN [$ARR_NUM]
               INC($ARR_NUM,1)
               print($ARR_NUM/2,") Нашол X,Y ",$X-$var1,",",$Y-$var2)      // не нужно
               //m_move($X, $Y)   // Клик
               //WAITMS(100)
               print("Ищю тут ",$X-60-$var1,",",$Y-5-$var2," - ",$X-45-$var1,",",$Y+10-$var2)      // не нужно
               IF_PICTURE_IN ($X+41,$Y-104,$X+56,$Y-89, "A_Hroniki\G_T_T_vv_m6.bmp", -1, 100)       //Бой был
                  print("+++ 1   X=", $_return1-$var1, ", Y=", $_return2-$var2)                   // не нужно
                 
                  IF($ARR_NUM = ARRSIZE($ARR_SCAN))
                     print()
                     print("Конец")
                     HALT
                  END_IF
                 
               ELSE
                  print("----")
                  m_lclick($X+62+RND(-25,25), $Y-70+RND(-25,25))                // н
                  $T_Vboi = 1
                  $ARR_NUM = ARRSIZE($ARR_SCAN)    // Равно чтоб не искал
               END_IF
               print("Искал",$ARR_NUM/2)
            END_CYC
            UNDEFINE($ARR_SCAN)   // =========== поиск нападения
         END_IF
      ELSE
         WAITMS(1000)
      END_IF
   END_CYC     // =========== Поиск
   WAIT(1)
     
   WHILE($T_Vboi = 1)
      // код боя
   END_CYC
   
   WHILE($Reid = 1)
      // код рейда
   END_CYC
END_CYC
Логи нужны только для проверки почти все
Стоп будет изменен на переменную продолжения


Есть одно гигантское но и 2е
1) Если бой был, и очков не заработал то заначек не появляется. цель 1 раз напал и забыл про него
2) нужно суда добавить рандом на нападения


Мысль была такая
1) Выполнить поиск войн не начатых занести в массив. (это понял как сделать вроде)
2) Выбирать их рандомно (это доже вроде понял как сделать)
3) Кликнул и удалил элемент из массива  (хз как)
4) повтор пункта 2-3.  Когда небудет элементов в массиве выполнил еще другое действие (у меня пака стоит стоп на том месте)


Хотя была еще одна мысль
(Коротко) занес в массив. перемешал. вынул последний элемент кликнул и удалил

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Виртуальная привязка области
« Reply #27 on: October 06, 2018, 02:40:20 PM »
Что такое?
Code: (clickermann) [Select]
G_SCR
C_MOD

Почему нигде нет GETSCREEN ?

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #28 on: October 06, 2018, 04:34:06 PM »
снимок и корекция я упростил да и легче читается код

#define  G_SCR:GETSCREEN($var1,$var2,$var3,$var4)       // снимок экрана
#define  C_MOD:COLORMODE(6,$var1,$var2,$var3,$var4)     // цветокоррекция; 8-2 7-8 6-64 5-512 4-4,096 3-32,768 2-262,144 1-2,097,152 0-16,777,216
« Last Edit: October 06, 2018, 04:36:52 PM by KingDrakonov »

KingDrakonov

  • Освоившийся
  • **
  • Posts: 39
    • View Profile
Re: Виртуальная привязка области
« Reply #29 on: October 06, 2018, 08:59:16 PM »
Пака куски кода прятать не буду, надо все объединить (сбор ресурсов,прохождения разные, итд) это все пока отдельно лежит плюс пока 1 не понравилось или что то  не заработало как надо редактировать легко и искать место где
под объединением подразумеваю удаление почти одинаковых частей

Ну тут реально легкая задача у меня аш мозгов не хватает и кипят