|
|
|
Скрипт на запись макроса, Запись макроса через скрипт на мышку |
|
|
Zenogiasu |
25.1.2024, 23:50
|
Neophyte
Сообщений: 45
Регистрация: 3.12.2022 Группа: Пользователи Наличность: 0
Пользователь №: 20.434
Возраст: 28
|
Привет. Написал простой скрипт чтоб записывал передвижение мыши а затем в точности воспроизводил. Но не уверен что все по уму сделано. Можете поправить? К тому-же столкнулся с проблемой того, что на разных компьютерах воспроизводится с разной скоростью. где-то за 40 сек исполняет, где-то за 38 к примеру. это скрипт записи макроса Код set #s 1 get mouse_pos #x #y kright_down #x #y :ss get mouse_pos #x #y init_arr %s (#s) #x #y // записываем в массив текущие корды мыши save_array %s C:\123.txt // сохраняем этот массив в текстовый файл set #s #s + 1 // чтоб следующие координаты прописывал на след строчку wait 10 goto ss // и так пока не остановлю.
Это скрипт воспроизведения макроса Код set $massiv ddd12 // какой массив воспроизводить
set linedelay 0 // воспроизведение плавного макроса set size(%s) set #s set $txt .txt load_array %s c:\$massiv$txt // загружаем нужный массив с координатами set #skolkostrok size(%s) // узнаем сколько там строк set #s #s + 1 // устанавливаем строку на 1 move_smooth %s [#s 1] %s [#s 2] // перемещаем на первоначальные нужные координаты 1 строки wait 100 + random (10) kright_down %s [#s 1] %s [#s 2] // и стартуем set #a #skolkostrok - 1 // повторять столько сколько строк в массиве repeat #a set #s #s + 1 move %s [#s 1] %s [#s 2] wait 16 + random (1) // а это время пришлось выверять вручную долгими тестами чтобы совпадало end_repeat kright_up %s [#s 1] %s [#s 2] end_script
Я так понял язык пилота в этом плане чучуть ущербный правильно? Потому-что меняешь тайминги там где ваит 16 на любые другие с разницей в несколько милисекунд, а время выполнения скрипта не меняется почему-то. разница будет только если на 7+ мс менять тайминг К ктому-же столкнулся с проблемой что на разных компах сходу те же скрипты с разной скоростью работают. Тот-же код на луа решшит данные проблемы с таймингами? Чтобы на всех компах и системах работало одинакого и не приходилось переживать. Да и к тому-же в скрипте записи там каждые 10мс файл текстовый пересоздается на диске с. Это не вызывает дополниительных нагрузок и микрозадержек в виду этого? Варианта записывать в массив чтобы потом сохранился одним разом в файл я не придумал, так как когда надо сотановить запись я жму кнопочку стоп скрипт.
|
|
|
|
DarkMaster |
27.1.2024, 16:47
|
Модератор UOPilot
Сообщений: 9.573
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28549
Пользователь №: 11.279
|
Цитата 1. можно ли считывать ИД курсора на языке пилота? встроенными средствами нет. возможно на луа либы какие-то есть. подозреваю, что решается простым биндингом. Цитата 2. по умолчанию элементы массива являются строковыми переменными? в пилоте на самом деле вообще все строковое. Но все, что #var обрабатывается, несколько иначе в плане парсера и считается условно числовым. Цитата 3. гет имидж, как вы выражаетесь, выгядет вкусной вещью, но перекапав форум, любой увидит то что по факту эта вещь, к сожалению не работает. решены ли проблемы на луа? а что с ним не так? прекрасно шуршит. как минимум в луа. Цитата 4. На какие массивы распостраняется делимитер? например тебе надо поставить пробел в делиметре. после ттого как ты это сделал, на какие массивы оно будет распостранено? на все что заданы в текущий момент в скрипте или как? и как обнулить делимитер? по сути на все при загрузке/сохранении. обнулить никак, но можно поставить исходное значение "\t". Цитата 5. можно ли как-то без использования функции Ярлыка и бат файла сделать так, чтобы при запуске основного exe пилота был автоматически сразу запущен нужный скрипт? вроде нет. а в чем проблема батника или ярлыка? Цитата 6. Можно ли привязать одну вкладку скрипта к приложению из другого скрипта? да. старый синтаксис помню плохо. будет что-то вроде: set workwindow workwindow.2 где 2 номер влкадки другого скрипта. переходите на луа - решите много проблем.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Zenogiasu |
28.1.2024, 3:05
|
Neophyte
Сообщений: 45
Регистрация: 3.12.2022 Группа: Пользователи Наличность: 0
Пользователь №: 20.434
Возраст: 28
|
Цитата(DarkMaster @ 27.1.2024, 16:47) встроенными средствами нет. возможно на луа либы какие-то есть. подозреваю, что решается простым биндингом. переходите на луа - решите много проблем.
спасибо за ответы. мистер цирус вот выдал на луа в свое время изменение курсора, работатет отлично. просто поинтересовался относительно старого синтаксиса. https://forum.uokit.com/index.php?showtopic=30151в гет имаге что не так? ну как бы то что у вас там постоянные проблемы с тем, что скринит квадраты малевича вместо того что нужно скринить... и решение там только одно было - определять необходимую оласть скрина абсолютными координатами экрана, а не координатами окна. да и вроде как принт скрин работает точно также криво. мне сейчас если надо сделать скрин приходится использовать дефолт, чтобы скринил тупо весь экран а не ную часть рабочего окна. ибо будет черный скрин...
|
|
|
|
Zenogiasu |
5.2.2024, 15:59
|
Neophyte
Сообщений: 45
Регистрация: 3.12.2022 Группа: Пользователи Наличность: 0
Пользователь №: 20.434
Возраст: 28
|
Цитата(DarkMaster @ 5.2.2024, 15:53) проблема наблюдалась у некоторых людей, если система ОЧЕНЬ долго не перезагружалась. Используйте данный код в шапке и забудьте о проблеме. Код ffi.cdef[[ void Sleep(int ms); ]] -- Подменяем пилотный wait _G.wait = ffi.C.Sleep да, уже почитал форум, вижу что наблюдалась на протяжении десятилетий, решения найдено небыло кроме подмены вайта. Спасибо за супер быстрый ответ. Перезагрузка в моем случае, конечно, не помогла, также дело не в виндусе, тк на другом компе та-же. И луа на помощь не придет тк код на пилотовском. Попробую еще скачать чистую версию пилота с сайта и туда вбухать старые скрипты. Кто знает, может постоянное скачивание архива с пилотом с облака на компы в течении времени как-то Шакализирует пилот?) Кстати на счет луа, вы придумали способ как обойти ф-цию Sleep через луа, я правильно понимаю, тоесть когда я пойду учить луа и писать на нем, лучше сразу писать через ваш обход этой ф-ции слип, нежели использовать обычный ваит, верно? Тк эта функция слип очень критично влияет на микротайминги, и писать макрос для каждого компа отдельно это как-то не круто. Однажды просто на новую винду поставил код который стабильно долго работал, а на новой он вместо 500мс ждал наверно 100. и интвентарь в игре просто не успевал открыться чтобы проверить ботом открыт ли он. И возникала критическая ошибка) пришлось увеличивать все тайминги банально дддля этой системы.
|
|
|
|
Aqualon |
5.2.2024, 20:06
|
Neophyte
Сообщений: 23
Регистрация: 21.3.2023 Группа: Пользователи Наличность: 0
Пользователь №: 20.503
Возраст: 22
|
Цитата(DarkMaster @ 5.2.2024, 16:53) проблема наблюдалась у некоторых людей, если система ОЧЕНЬ долго не перезагружалась. Используйте данный код в шапке и забудьте о проблеме. Код ffi.cdef[[ void Sleep(int ms); ]] -- Подменяем пилотный wait _G.wait = ffi.C.Sleep Забавный момент. Помню сталкивался с этой проблемой, как раз в ситуации описанной вами - долго не перезагружал комп. После перехода на луа почему то эта проблема пропала сама собой, даже без переопределения слипа через ffi.
|
|
|
|
nykep |
5.2.2024, 23:10
|
Apprentice
Сообщений: 246
Регистрация: 1.9.2012 Группа: Пользователи Наличность: 1319
Пользователь №: 15.246
Возраст: 25
|
Цитата(DarkMaster @ 5.2.2024, 15:53) Код ffi.cdef[[ void Sleep(int ms); ]] -- Подменяем пилотный wait _G.wait = ffi.C.Sleep а что нужно чтоб этот код работал? у меня выдает ошибку a runtime error attempt to index global 'ffi' (a nil value)
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|