Сайт программы UOPilot На сайте вы всегда можете скачать последнюю версию программы, узнать что нового в последней версии.
Запуск UO Pilot
Командная строка Для загрузки с параметрами, указанными ниже, отредактируйте ярлык либо создайте bat файл. 1. Загрузка нужного скрипта: КодUoPilot.exe /s"{Path to script}"
Пример: "G:\Хранить вечно\uopilot\uopilot.exe" /s"scripts\TitanQuest mana click 2.1.txt" /s"G:\Хранить вечно\uopilot\Scripts\WOW арена 1,22.txt" При запуске будет загружено 2 скрипта во вкладки 0 и 1. Хочу заметить, что возможны как относительные, так и абсолютные адреса.
2. Выбор клиента: КодUoPilot.exe /c"{Path to client}"
Пример: "G:\Хранить вечно\uopilot\uopilot.exe" /c"c:\games\uo\client3.exe" Работает только для ультимы. Этот параметр заносит указанную строку в окошко в нижнем левом углу на вкладке разное. Используется для запуска и автологина, когда стоит ограничение на количество юзеров и народ подолгу стоит в очереди.
"G:\Хранить вечно\uopilot\uopilot.exe" /r0 /r0 запустит 0 скрипт. Вместо 0 просто подставьте номер закладки с нужным скриптом. "G:\Хранить вечно\uopilot\uopilot.exe" /r8 /r10 запустит 8 и 10 скрипты(если надо несколько сразу стартовать)
4. Выбор конфигурационного файла: КодUoPilot.exe /i"{Path to config}"
Может пригодится при запуске нескольких версий пилота, либо для запуска с определенными параметрами. Конфиг хранится по умолчанию в uopilot.ini рядом с uopilot.exe. Хочу обратить внимание на то, что загружаемые скрипты и порядок вкладок, тоже является параметром. Т.е. вы можете создать что-то вроде профиля: 1) Сделать резервную копию uopilot.ini (если вы хотите сохранить текущие настройки. 2) Запустите пилот. 3) Загрузите необходимые скрипты. 4) При необходимости измените настройки. 5) Сохраните настройки.(Настройки/Сохранить настройки) 6) Переименуйте uopilot.ini в любое другое название, например MyCFG.ini 7) Создайте ярлык, например "G:\Хранить вечно\uopilot\uopilot.exe" /i "MyCFG.ini". Теперь вы всегда сможете запустить пилот с сохраненными настройками. Например вы можете сделать профиль со скриптами только для Л2 и профиль со скриптами только для ВОВ и обычным кликом по ярлыку загрузить нужные вам скрипты и при желании их запустить ключем /r, рассмотренным выше.
Привязка При запуске скрипта очень важно сделать правильную привязку к окну с которым вы будете работать. Если этого не сделать, то многие команды не будут рабоать (например send, post), так же будет невозможно использовать относительные координаты(клики мышкой, проверка цвета). Каждый скрипт пилота необходимо привязывать к окну каждый раз перед запуском. Хочу еще раз отдельно обратить внимание, что привязав скрипт №1 к нужному окну, скрипт №2 не привяжется к тому же окну - они работают независимо. Способа привязки всего три: 1) Сделать окно пилота активным, навести мышку на нужное вам окно(мышкой не нажмиать!!!), нажать на клавиатуре Ctrl+A. 2) Вставить с скрипт следующие строки: set #handleWin findwindow (ТОЧНОЕ ИМЯ ОКНА) set workwindow #handleWin 3) 'set #var windowfromcursor' - помещает в переменную #var хендл окна, находящегося под курсором. Таким образом можно сделать простой аналог нажатия ctrl+a: set #handle windowfromcursor set workwindow #handle Так же с помощью этой функции можно собрать несколько хендлов для последующего переключения между окнами: move x1, y1 set #handle1 windowfromcursor move x2, y2 set #handle2 windowfromcursor move x3, y3 set #handle3 windowfromcursor Достаточно актуально для браузеров, т.к. после каждого обновления страницы привязка окна сбрасывается. Описание данной функции не удалось обнаружить нигде и работоспособность была установлена методом тыка. Возможно это не вся информация.
Внимание! При привязке к окну нужно учитывать, что каждое поле ввода пароля, поиска, каждая флешка в браузере и не только - это все отдельные окна. В том же uTorrent список закачки и список раздач это разные окна. Если вы хотите использовать второй способ для поиска окна вам пригодится InqSoft Window Scanner. 1) Запустите WinScanner.exe 2) В левом верхнем углу программы найдите значок прицела, наведенного на окно. 3) Перетащите прицел на нужное вам окно, 4) Нажмите кнопку "Дерево окон" чуть правее поля "Размеры окна". 5) У вас откроется дерево окон с помощью которого вы сможете легко найти целевое окно. 6) Для нахождения окна используйте 'GetWindow (<handle> <OWNER|CHILD|FIRST|NEXT>)'. возвращает хендл дочернего окна от указанного. второй параметр задает направление поиска Пример: Код set #var findwindow (123-456-789 ICQbot - Окно чата) set #var getwindow (#var CHILD) set #var getwindow (#var NEXT) set #var getwindow (#var CHILD) set #var getwindow (#var CHILD) set #var getwindow (#var CHILD) set workwindow #var Данный скрипт находит окно для отправки сообщений в RnQ (клиент для ICQ).
Сворачивание Для сворачивания пилота можно использовать следующий скрипт: Кодset #UOpilot findwindow (UoPilot v2.18.8 WK) showwindow #UOpilot minimize
При его использовании надо внимательно отнестись к указанию имени окна, т.к. оно зависит от версии пилота и настроек. Так же внимательно отнеситесь к количеству пробелов в имени окна. Этот скрипт так же можно автоматически запускать при старте ключем /r (подробнее смотрите выше в описании командной строки).
Если у вас в настройках выставлена галочка "сворачивать пилот в трей", то скрипт будет работать не совсем так же как при ручном сворачивании - будет оставаться окно на панели задач. Для того, чтобы полноценно свернуть пилот в трей используйте следующий скрипт: Код set #UOpilot findwindow (UoPilot v2.18.8 WK) showwindow #UOpilot minimize showwindow #UOpilot hide
Мышка
Здесь, пожалуй, больше всего возникают проблемы из-за различных тонкостей. Часто возникает ситуация, когда клик не срабатывает. Возможны следующие причины:
1) Выбран неверный способ эмуляции. Существует 3 способа: simple/k/p (например: left, kleft, pleft соответсвенно). Мозилла воспринимает только k эмуляцию. Другие приложения зачастую так же придирчивы к методу эмуляции. Попробуйте их по очереди и найдите тот, который работает в вашем случае. 2) Так же причиной могут стать особенности приложения. Попробуйте сначала переместить мышь на место клика командой move. Так же встречаются особо вредные приложения в которых необходимо поводить мышкой по нужной вам кнопке: делаем move на объект по которому будем производить клик, затем снова делаем move на тот же объект, но в соседнюю точку (просто сместите координату в которую перемещаете на 1 по оси x или y), после этого нажимайте на объект в координатах второго перемещения. Т.е. будет выглядеть примерно так: move 100, 200 move 101, 200 left 101, 200 3) Приложение не успевает за пилотом. Поставьте задержку в проблемной части скрипта между строк "wait 1000". Это достаточно большая задержка (1 секунда) и ее должно хватить, чтобы выявить проблему, если она именно в скорости обработки приложения. После выявления рекомендуется путем проб и ошибок найти оптимальное значение, чтобы скрипт не был очень медленным, но и не давал осечек. 4) Работа с мышкой возможна только в окне, которое на переднем плане. Т.е. мышка будет кликать только по тому, что вы видите сами. В свернутое окно нажатие не возможно, так же не возможно в окно, которое вы в момент нажатия не видите. Например, если вам необходимо нажать что-то в браузере, а у вас идет фильм на весь экран, то нажатие будет по фильму. Как вариант решения данной проблемы - вы можете установить виртуальную машину, например, VMware. В виртуальной машине вы установите операционную систему и там запустите пилота и ваше приложение (официальный клиент LineageII невозможно запустить из под машины). Таким образом сворачивать вы будете уже не приложение в которое вы посылаете нажатие, а виртуальную машину, что не скажется на работе. Однако хочу заметить, что внутри машины сохраняются выше описанные правила, т.е. целевое окно в машине должно быть развернуто и на переднем плане.
Несколько общих советов по мышке:
1) Работа с мышкой не столь стабильна, как с клавиатурой и вероятность сбоя выше. При возможности используйте клавиатуру. Например, если вы нажимаете скилл в игре и его можно нажать как мышкой так и клавиатурой - без раздумий выбирайте клавиатуру. 2) Если необходимо нажатие с зажатой клавишей: left 123 234 [abs] [~^rlm] ~ - с шифтом ^ - c контролом r - одновременно с правой l - с левой m - со средней если указано несколько модификаторов, то должны быть написаны слитно друг с другом работает для всех кроме тех, что с приставкой 'k' с альтом просто так не работает, придется его сначала зажимать сендэксом: sendex @{} Для отпускания альта нажмите любую клавишу(например, sendex q).
Клавиатура
1) Send/post отправляют нажатие непосредственно в приложение. Sendex отправляет нажатие точно так же, как если бы вы его сделали сами(в активное окно на момент нажатия). Старайтесь не использовать sendex по возможности. Это избавит от возможных ошибочных нажатий в другое окно. post писался для 32х битных систем xp sp2-3, виста и семерка без сервиспаков, а в 64-битных может не работать. 2) При нажатии с помощью sendex не символьных клавиш необходимо брать их в {}. Например, {F1}{Tab}{Enter}{Spacebar}{Backspace}, но: a,g,h,r и пр. не требуют заключения в {}. 3) Для LineageII желательно использовать post, т.к. send обычно не работает, однако можно и сенд попробовать(т.к. бывает обратная ситуация) 4) Иногда в приложениях бывает защита от эмуляции. В таких случаях sendex может работать в то время, как send и post не будут давать эффекта. 5) Для использования send/post обязательна фокусировка на окно: ctrl+a по необходимому окну при окне пилота на переднем плане. либо: Код set #whandle findwindow (UoPilot v2.17 WK) set workwindow #whandle
Это сделает рабочим окном пилота версии 2.17. В первой строке необходимо указать в скобках название окна - в примере это (UoPilot v2.17 WK). 6) Для того, чтобы зажать клавишу можно использовать send_down, который нажмет и будет удерживать клавишу. Для отпускания используйте send_up. Полезно будет, например, для перемещении персонажа. Не работает с Ctrl, Alt, Shift. 7) Для того чтобы зажать Ctrl, Alt или Shift используйте: sendex @{} Для отпускания нажмите любую клавишу(например, sendex q). Клавиши Ctrl, Alt, Shift кодируются символами ^, @ и ~ соответственно.
Поиск цвета (findcolor)
ВНИМАНИЕ! Findcolor был очень существенно доработан и его функционал значительно расширен. Многие данные не полны, раздел будет правиться. Для более подробной информации смотрите "историю развития программы" изменения в версии 2,20. 1) Findcolor умеет искать диапазоны цветов. 2) В Findcolor можно задавать цвет переменной или массивом. Т.е: set $a findcolor (154, 80 318, 260 1 1 #color %arr 2) set $a findcolor (154, 80 318, 260 1 1 $color %arr 2) set $a findcolor (154, 80 318, 260 1 1 %color [ 1 ] %arr 2) set $a findcolor (154, 80 318, 260 1 1 123456 %arr 2) 3) Если трудно определить цвет, по которому следует искать объект - воспользуйтесь программой UniqueColorsSearch. Она поможет подобрать лучший вариант для поиска в findcolor. Скачать ее можно тут. 4) Работает он достаточно медленно и при динамической картинке могут быть проблемы. При поиске рекомендуется использовать второй тип поиска (в примерах выше цифра 2 в конце строки), т.к. он существенно быстрее. Если возникают проблемы с корректностью поиска, то используйте стабильный способ ( 1 ). 5) Часто возникает необходимость ожидать появления цвета в определенной области: Внимание! В связи с багом настоятельно рекомендуется в примерах приведенных ниже использовать while size (%arr) = 0 , а не while $a = 0 . а) Самая простая ситуация - нам просто необходимо подождать появления. Для этого можно использовать следующий скрипт: set $a 0 while $a < 1 set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) end_while Параметры findcolor используйте ваши. Это только пример. Найденные совпадения будут в двухмерном массиве %arr. Первая размерность отвечает за номер найденой координаты, вторая за X/Y. Во второй размерности 1 соответствует X координате, а 2 Y координате. Т.е.: %arr [1 1] - Х координата первой найденной точки. %arr [1 2] - Y координата первой найденной точки. %arr [2 1] - Х координата второй найденной точки.
б) Так же часто возникает необходимость ожидать появления цвета, после чего сделать клик по первой найденной точке. Для этого чуть дополним скрипт выше: set $a 0 while $a < 1 set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) end_while left %arr [1 1], %arr [1 2] Аналогично можно использовать и другие команды мыши.
в) Бывают случаи, когда необходимо нажать чуть в сторону от появившейся точки. Берем все тот же скрипт: set $a 0 while $a < 1 set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) end_while set #x %arr [1 1] + #deltaX set #y %arr [1 2] + #deltaY left #x, #y #deltaX и #deltaY это разница координат между найденой точкой и точкой по которой необходим клик. Например, если вам надо кликнуть на 30 пикслелей левее и на 12 ниже, то это будет выглядеть так: set #x %arr [1 1] - 30 set #y %arr [1 2] + 12
г) Был замчен баг в некоторых приложениях. Клик происходил в другие координаты(обычно левее и выше). Наглядно можно увидеть это здесь. Чтобы избежать этой проблемы возьмем уже известную конструкцию по смещению и добавим в нее начальные координаты поиска findcolor: set $a 0 while $a < 1 set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) end_while set #x %arr [1 1] + #deltaX + 154 set #y %arr [1 2] + #deltaY + 80 left %arr [1 1], %arr [1 2]
д) Для ожидания появления любого из нескольких цветов придется делать на каждый цвет отдельный финдколор: set $a 0 set $b 0 set $c 0 while ( $a = 0 ) and ( $b = 0 ) and ( $c = 0 ) set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) set $b findcolor (154, 80 318, 260 1 1 51556 %arr 2) set $c findcolor (154, 80 318, 260 1 1 1565651 %arr 2) end_while Так же можно использовать другой вариант: set $a 0 for #i 1 2 0 set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) if $a > 0 break end_if set $a findcolor (154, 80 318, 260 1 1 51556 %arr 2) if $a > 0 break end_if set $a findcolor (154, 80 318, 260 1 1 1565651 %arr 2) if $a > 0 break end_if end_for Второй вариант более быстрый не смотря на громоздкость.
Команды отсутствующие в хелпе
'set $var GetLayout' - возвращает раскладку клавиатуры в переменную $var. Хочу обратить внимание на то что возвращаются только последние 4 числа из 8 определяющих раскладку, так же не смотря на то, что стандартный русский и английский имеют значения 00000419 и 00000409, они являются шестнадцатеричными и другие раскладки могут содержать буквы A-F, следовательно стоит использовать строковую переменную ($), а не числовую (#). В случае не стандарной раскладки настоятельно рекомендую выполнить: set $a GetLayout msg $a т.к. значение может быть неожиданным, например для языка a0000419 раскладка возвращается не 0419, а F0C0.
'set #var windowfromcursor' - помещает в переменную #var хендл окна, находящегося под курсором. Таким образом можно сделать простой аналог нажатия ctrl+a: set #handle windowfromcursor set workwindow #handle или сразу: set workwindow windowfromcursor
Так же с помощью этой функции можно собрать несколько хендлов для последующего переключения между окнами: move x1, y1 set #handle1 windowfromcursor move x2, y2 set #handle2 windowfromcursor move x3, y3 set #handle3 windowfromcursor Описание данной функции не удалось обнаружить нигде и работоспособность была установлена методом тыка. Возможно это не вся информация.
'set priority <1|2|3>' - данная команда описана, но не полностью. Устанавливает приоритет 1|2|3 - нормальный, высокий, максимальный. Так же может принимать значение 0 - пониженный приоритет. Особенно бывает полезно, если вы используете нулевые задержки между строк - пилот не повесит систему. 'current_script' добавил переменные, возвращающие номер закладки текущего 'current_script' и активного 'active_script' скрипта.
Обход защит
Если приложение говорит о взломе, либо закрывается при запущенном пилоте, то вероятно оно обнаруживает и пилот. 1) Измените название окна с пилотом. Это возможно сделать следующими способами: а) Настройки/Пустая строка ниже "Показывать все окна" - поставится галочка. При перезапуске название изменится. б) Внимательно отнеситесь к заголовку. В нем написана версия и соответственно нужно поправить при отличной от вашей. Кодset #UOpilot findwindow (UoPilot v2.18.5 WK) set #result setwindowtext (#UOpilot Траляля)
2) Переименуйте uopilot.exe во что нибудь другое. Ну скажем notepad.exe 3) Поэкспериментируйте с порядком запуска. Сначала пилот, потом приложение либо наоборот.
Не палимся в онлайн-играх или что делать, чтоб не поймали. Боремся с неработающими кликами
Во многих онлайн-играх существуют различные защиты, отслеживающие работающих "ботов" и потом банящие игроков за это (или просто мешающие работе скриптов через несколько секунд после старта). Для обхода защиты, которая блокирует клики через несколько секунд после старта скрипта, нужно использовать рандомные (случайные) места кликов и рандомные задержки между командами.
Переменные, работа с памятью - UltimaOnline
Для работы пилота с переменными ультмы(ХП, цели, объекты) необходимо выбрать версию вашего клиента UO в закладке "Еще", поле "Cl.v. Если ваша версия отсутствует либо значения определяются не правильно, то вы можете самостоятельно указать адреса в памяти, где хранятся эти значения, для этого выберете версию "custom". Всё, кроме CP и LMess ищется с помощью артмани, и просто вписываются адреса. Для поиска CP и LMess нужно выбрать версию клиента в окошке непосредственно под ними. СР ищется по имеющейся наличности. ее нужно ввести в самое первое окошко, и нажать маленькую кнопочку слева, запустив тем самым процесс поиска. В соседнем окошке будет бежать текущий адрес, пока не найдется верный. Для корректного поиска и в дальнейшем отображения, в клиенте при старте должна автоматически открываться панелька со статами. LMess ищется по первым 16\32 символам последнего сообщени, в зависимости от кодировки. крайне желательно, чтоб сообщение такое было одно в журнале, в остальном по аналогии с СР. Остановить процесс поиска к сожалению нельзя, придется снимать задачу. Так же может оказаться полезной следующая тема http://forum.ultimasoft.ru/index.php?showtopic=12398 . По поиску изменяющихся адресов в памяти читайте 10 раздел справки ArtMoney