Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> UO Pilot и игра с определением положения курсора
MAXXIMUM
сообщение 19.9.2017, 20:41
Сообщение #1


**

Neophyte
Сообщений: 21
Регистрация: 4.2.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 11.453
Возраст: 27



Доброго времени суток!

Столкнулся со следующей проблемой. Необходимо реализовать нажатие мыши по определенным координатам игры, которая определяет положение курсора.
Написал следующий скрипт для проверки:
Код

wait 5s
// Начало диалога с агентом
set MouseClickDelay 100
set #back 0
set #startX 100
set #startY 100
set #endX 1920
set #endY 1080
set $path D:\
set %cash[1] картинка
set #a findimage (#startX #startY #endX #endY ($path%cash[1].bmp) %crds workwindow)
set #dd %crds[1 1] + 40
set #db %crds[1 2] + 25
move %crds[1 1] %crds[1 2] workwindow
right %crds[1 1] %crds[1 2] workwindow  // кликнули
wait 1s
move #dd #db workwindow
left #dd #db workwindow // кликнули
end_script


Все работает идеально до тех пор, пока я не перекрою точку клика.
Если подробнее: при нажатии правой кнопкой выскакивает менюшка при наведении на которую кнопки подсвечиваются. Так вот пока они не подсвечены, клика по этой кнопке произойти не может. Как это реализовать?
Есть 2 условия. Окно обязательно должно быть перекрыто и одновременно должно работать 8 скриптов с разными окнами.

В дополнении ко всему. В перекрытой зоне очень криво работает команда Move. Если зона перекрыта, то только в 5% случаев курсор туда перетаскивается
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 19.9.2017, 21:33
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Так вот пока они не подсвечены, клика по этой кнопке произойти не может. Как это реализовать?

Проверяйте цвет/ищите изображение.
Цитата
В перекрытой зоне очень криво работает команда Move. Если зона перекрыта, то только в 5% случаев курсор туда перетаскивается

Move он один для всей системы. Винда так устроена - у вас один курсор и больше не получить (существуют проги, но там кривая эмуляция, которая лишь создает видимость). Move зачастую вообще не нужен. Его часто можно вообще не прописывать либо вместо него использовать kleft_up(для неперекрытых окон) либо просто left_up(для любых окон). Так же спасает настройка "перемещать курсор в точку клика" - курсор дернется с минимальной задержкой. Однако при таком подходе остается теоретический шанс, что скрипты в одну долю секунды дернут мышь и передерутся. Чтобы избежать подобных проблем необходимо проверять успешность каждого клика (это вообще отличие любого качественного скрипта от слабой затычки), либо вы можете создать отдельный скрипт который будет управлять очередью кликов и кликать исключительно он, остальные же скрипты только будут посылать запросы на клик. Подобный скрипт даже когда-то писал и выкладывал, кажется veiron'у надо было. Тема на 3-4 странички вроде. Быстро не нашел.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MAXXIMUM
сообщение 19.9.2017, 22:50
Сообщение #3


**

Neophyte
Сообщений: 21
Регистрация: 4.2.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 11.453
Возраст: 27



Цитата(DarkMaster @ 19.9.2017, 21:33) *

Проверяйте цвет/ищите изображение.

Не в этом дело. Пока курсор мыши не навести на кнопку, она неактивна.

Цитата

Move он один для всей системы. Винда так устроена - у вас один курсор и больше не получить (существуют проги, но там кривая эмуляция, которая лишь создает видимость). Move зачастую вообще не нужен. Его часто можно вообще не прописывать либо вместо него использовать kleft_up(для неперекрытых окон) либо просто left_up(для любых окон). Так же спасает настройка "перемещать курсор в точку клика" - курсор дернется с минимальной задержкой. Однако при таком подходе остается теоретический шанс, что скрипты в одну долю секунды дернут мышь и передерутся. Чтобы избежать подобных проблем необходимо проверять успешность каждого клика (это вообще отличие любого качественного скрипта от слабой затычки), либо вы можете создать отдельный скрипт который будет управлять очередью кликов и кликать исключительно он, остальные же скрипты только будут посылать запросы на клик. Подобный скрипт даже когда-то писал и выкладывал, кажется veiron'у надо было. Тема на 3-4 странички вроде. Быстро не нашел.


Команда left_up не изменила ситуации. Основная задача заставить приложение думать, что курсор находится именно на нем, а не на другом приложении


По поводу очереди кликов как раз мне говорили, но она не исправит ситуацию. Клики очень часто будут идти.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 20.9.2017, 2:33
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



А что за игра?
Код
set #a findimage ()
if #a > 0   // отсутствие проверки что картинка нашлась - первый шаг к получению ошибки
    set #dd %crds[1 1] + 40  // т. к. нельзя обращаться к несуществующему элементу массива
end_if

Цитата
скрипт который будет управлять очередью кликов

Не первый раз ты его теряешь (IMG:style_emoticons/default/smile.gif) https://forum.uokit.com/index.php?s=&sh...st&p=209321
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 20.9.2017, 9:06
Сообщение #5


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
По поводу очереди кликов как раз мне говорили, но она не исправит ситуацию. Клики очень часто будут идти.

Ну так а разницы? Накладые расходы времени выполнения скрипта при организованной очереди возрастают на величины не имеющие хоть сколько-то существенного значения. При этом учитывая специфику вашей задачи с перемещением указателя на нужный объект, будете вы одной вкладкой дергать мышь или десятью - разницы никакой, т.к. курсор один и в двух местах не окажется. По сути вопрос лишь в том будут ли у вас скрипты мешать друг другу или нет.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 20.9.2017, 11:03
Сообщение #6


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Кое где встречалось такое с лазерной мышкой. Когда сдвигаешь реальную мышь, то лазер мыши загорается.
Если двигать мышь пилотом то лазер не загорается. В некоторых приложениях стоит именно такая проверка.
Выход был такой: ставил реальную мышь сверху мальнького кулера (вентилятора) вентилятор крутился под мышью и лазер всегда горел. Где то тут про это подробнее писал.
Возможно есть еще 1 выход (но это не точно) подключить обычную шариковую мышь
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MAXXIMUM
сообщение 20.9.2017, 16:26
Сообщение #7


**

Neophyte
Сообщений: 21
Регистрация: 4.2.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 11.453
Возраст: 27



Цитата(cirus @ 20.9.2017, 2:33) *

А что за игра?
Код
set #a findimage ()
if #a > 0   // отсутствие проверки что картинка нашлась - первый шаг к получению ошибки
    set #dd %crds[1 1] + 40  // т. к. нельзя обращаться к несуществующему элементу массива
end_if


Не первый раз ты его теряешь (IMG:style_emoticons/default/smile.gif) https://forum.uokit.com/index.php?s=&sh...st&p=209321



EVE Online


Смысла особо проверять нет. Если картинки нет, то выполнение всего скрипта смысла не имеет. Означает, что скрипт сбился на перемещении, а вот как вычислять эти сбои и возвращать персонажа в нужную точку я пока еще не придумал...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MAXXIMUM
сообщение 20.9.2017, 16:59
Сообщение #8


**

Neophyte
Сообщений: 21
Регистрация: 4.2.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 11.453
Возраст: 27



Цитата(dron4938 @ 20.9.2017, 11:03) *

Кое где встречалось такое с лазерной мышкой. Когда сдвигаешь реальную мышь, то лазер мыши загорается.
Если двигать мышь пилотом то лазер не загорается. В некоторых приложениях стоит именно такая проверка.
Выход был такой: ставил реальную мышь сверху мальнького кулера (вентилятора) вентилятор крутился под мышью и лазер всегда горел. Где то тут про это подробнее писал.
Возможно есть еще 1 выход (но это не точно) подключить обычную шариковую мышь



Думаю это не поможет. Приложение берет информацию о том, что находится ли реальный курсор в точке нажатия на кнопку. По этой причине и была добавлена команда Move в сам скрипт. Визуально это выглядит как будто в игре есть скрытый курсор свой (иногда промигивает при работе скрипта) который проверяет находится ли в том же месте реальный. Аля TeamViwer когда один курсор управляет другим.



Вариантов решения задачи немного:
1. Заставить приложение думать, что оно не перекрыто, даже если оно перекрыто другим приложением.
2. На клики которые критичны к перекрытию окон ввести команду вывода окна на первый план.
3. Сделать виртуальный монитор, который физически никуда отображаться не будет, но программно на него можно будет завести курсор (вариант не перекрытого окна за пределами области экрана не работает, пока в эту область нельзя будет перенести реальный курсор)



Третий вариант я смог частично реализовать. Смог подключить второй монитор (программно он есть, в реальности нет), но с разрешением 2500х1500 (в этих пределах). Мне же надо разместить 8 клиентов разрешением 1024х730 (клиент игры не позволяет его сделать меньшим размером). В итоге мне надо либо 2 монитора разрешением больше 2048х1460 либо один монитор разрешением больше 3072х2190 (лучший вариант DCI 4K)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 22:19
Designed by Nickostyle