Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: термех on January 27, 2019, 11:45:20 PM

Title: не срабатывает перетаскивание между двух окон
Post by: термех on January 27, 2019, 11:45:20 PM
Всем доброго!
Подскажите начинающему по перетаскиванию предметов.
   Имеем два окна: инвентарь игрока и хранилище. Надо перетянуть определенные предметы из одного окна в другое.
   Простые клики, нажатия клавиш работают без проблем, поиск предметов тоже проходит отлично, курсор последовательно указывает на найденные предметы, и на место, в которое эти предметы необходимо перетащить. Но вот само перетаскивание не происходит.
   Пробовал выставлять задержку от 50ms, до 1500ms. Пробовал передвигать курсор через "move" пошагово, от точки к точке. Пробовал без поиска предметов записать перетаскивание из окна в окно, и потом повторить, тоже не помогло.
   При привязке к окну, дополнительно открытые окна никак не выделяются, они имеют ту же привязку, что и основное окно( хотя это может для других и очевидно, но я проверил, на всякий случай)
Code: [Select]
// RECORDED SCRIPT 25.01.2019
// waitms correction
#ps2_mouse
#ps2_keyboard

  keyDown(70)
  keyUp(70)
waitms(1527)
  lDown(941,675)
  lUp(941,675)
waitms(801)

GETSCREEN(1262,366,1513,682)

scanpicture($var,1257,336,1533,722,"pic.bmp",-1,80)
  while(arrsize($var)>0)
   $y=arrpop($var)
   $x=arrpop($var)
waitms(130)   
ldown($x+30,$y+30)
waitms(50)
   lup(578,759)
end_cyc
   halt

  Единственное, что еще может направить: однажды нажал паузу в скрипте между кликом DOWN и UP, и предмет "зажало", но так, что отпустить я его уже не смог. Помогла только перезагрузка игры.
Title: Re: не срабатывает перетаскивание между двух окон
Post by: Oraven on January 28, 2019, 07:48:30 AM
Ну вот почему зона снимка не сходится с зоной поиска? Не знаешь что это лучше вообще не пиши.

Тебе нужна подпрограмма плавного перемещения мыши.
Множителем скорости можно настроить количество генерируемых точек по которым будет двигаться курсор. Допустимы числа с точкой, например 0.1 - очень мало 100 - очень много
Задержкой между перемещениями можно отрегулировать скорость с которой курсор будет двигаться по точкам.

Code: (clickermann) [Select]
#ps2_mouse
#ps2_keyboard

SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 10  // множитель скорости   
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y     
   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)   
   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)   
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR = 1
   END_IF   
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step     
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1) // задержка между перемещениями
   END_CYC   
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB

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

KEYPRESS(#F)
waitms(1527)

LCLICK(941,675)
waitms(801)

GETSCREEN
SCANPICTURE($ARR_SCAN, 1257,336,1533,722, "pic.bmp",-1,80)
FOR($i=0,$i<ARRSIZE($ARR_SCAN),2)
   LDOWN($ARR_SCAN[$i]+30, $ARR_SCAN[$i+1]+30)
   mouse_move(578,759)
   LUP(578,759)
   WAITMS(50)
END_CYC
UNDEFINE($ARR_SCAN)
HALT

Title: Re: не срабатывает перетаскивание между двух окон
Post by: термех on January 28, 2019, 09:28:14 AM
Большое спасибо за быстрый ответ. Вечером опробую, по результату отпишусь.
 По поводу соответствия размеров скриншота и зоны поиска - просто описка  при выкладывании скрипта, вариантов сделал несколько, где то одна ошибка, где то другая. Проверял именно передвижения курсора, а зоны поиска не проверил, ибо там все работает.
 Если этим Вас огорчил, приношу свои извинения, впредь буду внимательнее.
Title: Re: не срабатывает перетаскивание между двух окон
Post by: термех on January 28, 2019, 08:14:30 PM
 Не получилось. Значения менял, задержку до 10, множитель скорости до 1000. В разных вариантах. пробовал очень много раз, ни один раз не сработало.
 Если вручную перетаскиваешь предмет, сразу видно, что он тянется за курсором, в случае с кликером, никаких изменений, предмет никак не передвигается. Как будто левый клик не проходит.
Title: Re: не срабатывает перетаскивание между двух окон
Post by: Shada on January 28, 2019, 08:53:58 PM
http://crapware.aidf.org/forum/index.php?topic=3402.msg23218#msg23218
Title: Re: не срабатывает перетаскивание между двух окон
Post by: термех on January 28, 2019, 09:24:46 PM
Обязательно попробую, спасибо. Но в данном случае, при открывании окон, начинает работать курсор, а не поворот головы. Возможно проблема в прозрачности, или чем то подобном. Что-то подобное читал, сейчас не могу найти где.
Title: Re: не срабатывает перетаскивание между двух окон
Post by: термех on January 28, 2019, 11:31:33 PM
Нет, проблема явно не в движении мыши. Экспериментально установил, что предмет вообще не захватывается. Даже при передвижении в соседнюю клетку. Никакие задержки ситуацию не исправили. Mover так же не помог.
Title: Re: не срабатывает перетаскивание между двух окон
Post by: Oraven on January 29, 2019, 07:17:12 AM
Может дело в Ps2 режиме?
Title: Re: не срабатывает перетаскивание между двух окон
Post by: термех on January 29, 2019, 10:44:09 PM
Тут уже моя фантазия заканчивается. #ps2_mouse и #ps2_keyboard прописал, мышь и клавиатура ps2, не через переходник., где еще может быть проблема?
Title: Re: не срабатывает перетаскивание между двух окон
Post by: 4.У.В.@.К on January 30, 2019, 07:09:56 PM
Никогда такого небыло, и вот опять...  :-\
http://crapware.aidf.org/forum/index.php?topic=1300.msg6182#msg6182
А вдруг поможет?
Title: Re: не срабатывает перетаскивание между двух окон
Post by: sektant23tm on January 30, 2019, 10:35:54 PM
У меня была похожая проблема.2 внутриигровых она,все координаты известны,,но с перетаскиванием беда.Казалось бы берешь LDOWN ,делаешь MOVE и отпускаешь на нужных координатах через LUP.Все работает прекрасно,до тех пор пока не включаешьрежим привязки.В режиме привязки почему-то работать отказывается и все тут.После нескольких неудачных попыток я заметил,что если именно записать через сам кликер перетаскивание предметов,то оно будет работать даже в оконном режиме.Я понятия не имею с чем это связано,но каким-то непостижимым образом это заработало,хотя там все то же самое по сути в коде.Мне помогло : я выкинул весь лишний код,вставил переменные какие мне нужны вместо точечных значений и скрипт заработал как я хотел. + подключил плавное движение мыши

Code: [Select]
move($x_mod+20,$y_mod-28) //ставишь мышь на позицию "откуда надо тянуть"
waitms(42)
lDown($x_mod+20,$y_mod-28)
waitms(42)



MOVE_SLOW($x_gila,$y_gila) //Куда надо тянуть

waitms(42)
lUp($x_gila,$y_gila) //отпускаем

Прекрасно работает в режиме привязки.Тянет с одного окна на другое будь здоров.

А вот вам и подпрограмма для плавного движения мыши.Скорее всего работать будет и без нее,но с ней покрасивше

Code: [Select]

SUB(MOVE_SLOW, $MOVE_END_X, $MOVE_END_Y)   
   $MOVE_SPEED = 15 // множитель скорости в попугаях меньше-быстрее. Можно дробный
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
 
   $dist= DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
 
   $MOVE_SPEEDVAR= INT((SQRT($dist))/$MOVE_SPEED)   
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR=1
   END_IF
 
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step       
 
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X+$MOVE_X_step
      $MOVE_Y = $MOVE_Y+$MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
 
   MOVE($MOVE_END_X, $MOVE_END_Y)
END_SUB


Рекомендую выкинуть ее в отдельный файл и подключить где-то в самом начале.