Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Полезные Советы

Автор: DarkMaster 31.10.2010, 18:08

Нравится UOPilot? Не дай умереть проекту, помоги его развитию!

Изображение WebMoney
Рубли: R849464451336 РЕКВИЗИТЫ НЕ АКТУАЛЬНЫ
Гривны: U145931779718 РЕКВИЗИТЫ НЕ АКТУАЛЬНЫ
Доллары: Z353114408274 РЕКВИЗИТЫ НЕ АКТУАЛЬНЫ

Изображение Яndex-деньги
410011422550405 РЕКВИЗИТЫ НЕ АКТУАЛЬНЫ

Раздел собрал в себе достаточно много действительно необходимой информации, но все так же нуждается в ваших замечаниях, добавлениях и пожеланиях.

http://uopilot.uokit.com/index_rus.html. На сайте вы всегда можете скачать последнюю версию программы, узнать что нового в последней версии и выразить WKnight (разработчику пилота) свою благодарность smile.gif

Помните, что лучшая благодарность не устная, а звенящая или булькающая! ))
Если вам действительно нравится UOPilot, и вы хотите его дальнейшего развития, то не сочтите за труд- зайдите на http://uopilot.uokit.com/index_rus.html пилота и поддержите автора в его замечательной работе!
Поверьте, он потратил на разработку для вас в сотни и тысячи раз больше времени, чем вы потратите для него!
wink.gif

http://uopilot.uokit.com/dl.php

ЗАПУСКАТЬ С ПРАВАМИ АДМИНИСТРАТОРА

Хелпов в пилоте два:
?/Помощь по языку скриптов (основы языка)
?/История развития (самые последние обновления)

http://uopilot.tati.pro - описание различных команд UOPilot и примеры их использования. Можно вносить полезные дополнения/изменения в UOWiki, представившись системе: uouser, uopassword1
http://goo.gl/8LC1p - азы программирования на пилоте. Если вы новичек в программировании на 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"
Работает только для ультимы.
Этот параметр заносит указанную строку в окошко в нижнем левом углу на вкладке разное.
Используется для запуска и автологина, когда стоит ограничение на количество юзеров и народ подолгу стоит в очереди.

3. Автоматический запуск скрипта:
Код
UoPilot.exe /r0 /r12

"G:\Хранить вечно\uopilot\uopilot.exe" /r0
/r0 запустит 0 скрипт. Вместо 0 просто подставьте номер закладки с нужным скриптом.
"G:\Хранить вечно\uopilot\uopilot.exe" /r8 /r10
запустит 8 и 10 скрипты(если надо несколько сразу стартовать)
Если надо запустить пилот из bat-файла сразу с запуском скрипта, то в bat-файле можно написать, например, так:
start "UOPilot" "D:\Install\UOPilot\uopilot.exe" /s"D:\Install\UOPilot\HeroesWM\ThiefGuild14.txt" /r0 /m
(стартовать пилот из указанного места с открытием указанного скрипта (/s) в 0-й вкладке, сразу запустить скрипт с 0-й вкладки (/r0), пилот запускать свёрнутым (/m))

4. Выбор конфигурационного файла:
Код
UoPilot.exe /i"{Path to config}"

пример: "G:\Хранить вечно\uopilot\uopilot.exe" /i "MyCFG.ini".

Может пригодится при запуске нескольких версий пилота, либо для запуска с определенными параметрами. Конфиг хранится по умолчанию в 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, рассмотренным выше.
-

5. Запуск свернутым:
Код
UoPilot.exe /m

пример: "G:\Хранить вечно\uopilot\uopilot.exe" /m".
Позволяет запускать пилот в свернутом режиме. Если поставить в настройках опцию "сворачивать в трей", то пилот будет свернут в трей.

Запуск скрипта(автоматизация привязки, сворачивание)
Привязка
При запуске скрипта очень важно сделать правильную привязку к окну с которым вы будете работать. Если этого не сделать, то многие команды не будут рабоать (например 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 кодируются символами ^, @ и ~ соответственно.
8) Если вам нужно в скрипте проверить, что нажата какая-либо комбинация кнопок, то можно воспользоваться программой https://forum.uokit.com/index.php?showtopic=24297. Эта программа умеет выполнять большое количество операций пока что недоступных пилоту (включая работу с вещественными числами), обмениваясь с пилотом информацией через буфер обмена.
Поиск цвета (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. https://forum.uokit.com/index.php?showtopic=20545
4) Работает он достаточно медленно и при динамической картинке могут быть проблемы. При поиске рекомендуется использовать второй тип поиска (в примерах выше цифра 2 в конце строки), т.к. он существенно быстрее. Если возникают проблемы с корректностью поиска, то используйте стабильный способ ( 1 ).
5) Часто возникает необходимость ожидать появления цвета в определенной области:
а) Самая простая ситуация - нам просто необходимо подождать появления. Для этого можно использовать следующий скрипт:
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

г) Был замчен баг в некоторых приложениях. Клик происходил в другие координаты(обычно левее и выше). Наглядно можно увидеть это https://forum.uokit.com/index.php?act=Attach&type=post&id=884. Чтобы избежать этой проблемы возьмем уже известную конструкцию по смещению и добавим в нее начальные координаты поиска 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) Поэкспериментируйте с порядком запуска. Сначала пилот, потом приложение либо наоборот.
Не палимся в онлайн-играх или что делать, чтоб не поймали. Боремся с неработающими кликами
Во многих онлайн-играх существуют различные защиты, отслеживающие работающих "ботов" и потом банящие игроков за это (или просто мешающие работе скриптов через несколько секунд после старта). Для обхода защиты, которая блокирует клики через несколько секунд после старта скрипта, нужно использовать рандомные (случайные) места кликов и рандомные задержки между командами.
Этому вопросу посвящена отдельная тема https://forum.uokit.com/index.php?showtopic=21749
UltimaOnline(переменные, работа с памятью)
Для работы пилота с переменными ультмы(ХП, цели, объекты) необходимо выбрать версию вашего клиента UO в закладке "Еще", поле "Cl.v. Если ваша версия отсутствует либо значения определяются не правильно, то вы можете самостоятельно указать адреса в памяти, где хранятся эти значения, для этого выберете версию "custom".
Всё, кроме CP и LMess ищется с помощью артмани, и просто вписываются адреса.
Для поиска CP и LMess нужно выбрать версию клиента в окошке непосредственно под ними.
СР ищется по имеющейся наличности. ее нужно ввести в самое первое окошко, и нажать маленькую кнопочку слева, запустив тем самым процесс поиска. В соседнем окошке будет бежать текущий адрес, пока не найдется верный. Для корректного поиска и в дальнейшем отображения, в клиенте при старте должна автоматически открываться панелька со статами.
LMess ищется по первым 16\32 символам последнего сообщени, в зависимости от кодировки. крайне желательно, чтоб сообщение такое было одно в журнале, в остальном по аналогии с СР.
Остановить процесс поиска к сожалению нельзя, придется снимать задачу.
Так же может оказаться полезной следующая тема https://forum.uokit.com/index.php?showtopic=12398 .
По поиску изменяющихся адресов в памяти читайте 10 раздел справки ArtMoney
Исправленные баги
Этот раздел может пригодиться. если в силу каких-то причин вы используете не последнюю версию пилота.

Если закрыть окно логов нажатием на крестик, то открыть его уже не получиться - вылезет ошибка. Чтобы ее избежать используйте set logging close - это без вреда закроет окно лога, можно запустить из любого скрипта(в том числе из только что созданной закладки). Если все же закрыли окно нажатием на крестик, то поможет только перезапуск пилота.
Если зайти в настройки, то чуть ниже "показывать все окна" будет пустая строка, можно поставить галочку нажав на нее. Эта строка отвечает за название окна - вместо "UoPilot" будет "УоПилот". Помогает для скрытия пилота от античитерских программ.


При работе нескольких скриптов, которые друг друга останавливают и запускают снова - вылетает ошибка. Пока ждем фикса - можно решить следующими способами:
1) Можно создать процедуру которая будет запускать/останавливать скрипт.
Код
proc startscript #startNumber
start_script #startNumber
end_proc
Когда будет необходимо запустить какой-либо скрипт используем вызов этой процедуры:
Код
set #startNumber n // Где n номер вкладки, которую необходимо запустить
call startscript #startNumber
Аналогично для остановки скрипта:
Код
proc stopscript #stopNumber
stop_script #stopNumber
end_proc
Когда будет необходимо остановить какой-либо скрипт используем вызов этой процедуры:
Код
set #stopNumber n // Где n номер вкладки, которую необходимо остановить
call stopscript #stopNumber
2) Есть другое решение проблемы, но его рекомендую НЕ использовать. Оно менее корректно.
Код
start_script 1
stop_script 1
start_script 1
3) Ну и очевидный совет. Зачастую можно обойтись без нескольких скриптов, сделав один большой без каких либо потерь по производительности и функциональности. Задумайтесь, не Ваш ли это случай?


Лог открывается левее окна пилота. Если пилот был придвинут к левому краю экрана, то лог может оказаться за пределами экрана. Но это не страшно, т.к. в самой команде открытия лога можно задать координаты:
set logging open 0 0
Если вы уже открыли окно логов и вам его нужно перетащить, то сначала закройте его:
set logging close
set logging open 0 0


История развития тоже открывается справа или слева от окна пилота(куда поместится - там и откроется). Если растянуть окно пилота во всю ширину экрана, то открывшаяся история развития будет за пределами экрана. Для того чтобы ее увидеть просто уменьшите размер окна пилота по горизонтали и дважды нажмите "?/Исторя развития".


Kleft не смотря на галочку "Настройки/Возвращать курсор после кликов мышью" не вернет ее на место. Два решения:
1)
move x, y
kleft x,y
Как это взаимосвязано остается только догадываться, но это работает. К тому же при такой реализации будет более корректное нажатие, что позволит в некоторых приложениях избежать проблем с несрабатыванием клика. Компенсация бага "фичей" не лучшее решение, т.к. это может перестать работать со следующими версиями.
2)
get mouse_pos x1, y1
kleft x2, y2
move x1, y1
Этот вариант несколько медленнее, но более корректный и шанс что со следующими версиями пилота перестанет работать ничтожен.


В версиях 2.18 и выше отвалился поиск в истории развития. Для того чтобы было удобно пользоваться справкой можно просто скопировать весь текст в блокнот. Так же можно скачать текстовый файл с историей развития https://forum.uokit.com/index.php?act=Attach&type=post&id=894 .

В версии 2.18.8 появились проблемы с изменением переменных других скриптов. Поясняю:
set #a.5 123 - работать не будет.
Но вы можете продолжать использовать считывание переменной из другого скрипта:
msg #a.5 - ошибок не вызовет.
Так же для обхода данного бага в некоторых ситуациях вы можете использовать следующую конструкцию:
Код
Скрипт №1
set #b #a.2
set #b 123
Скрипт №2
set #a #b.1 // Расположение данной строки индивидуально для каждого скрипта.
// Место и условия выполнения данной операции вы должны определить сами.


В пилоте поддерживается вложенный вызов процедур. Но если процедуры располагаются в теле скрипта - это вызовет ошибку. Для корректной работы необходимо вынести данные процедуры в файл процедур(скрипт/открыть файл процедур), он всегда является 99 вкладкой.
Код
call func1 // Вызов из основного скрипта
end_script

proc func1 // Содержание файла процедур.
    call func2
end_proc
proc func2
    msg func2
end_proc


На Win7 и возможно висте, если при выполнении кода:
while 14, 1 2967129 and 14, 79 2241858 and 205, 24 5856608 and 203, 59 8288627 and 377, 16 9676461 and 378, 78 5266012
wait 1
end_while
навести мышкой на панельку включения выключения скриптов и их нумерацию, то цикл прервется.
Старые версии пилота
Прикрепленный файл  uopilot_2_17.rar ( 496,5 килобайт ) Кол-во скачиваний: 22348

Прикрепленный файл  uopilot_2.18.2.rar ( 510,93 килобайт ) Кол-во скачиваний: 27811

Прикрепленный файл  uopilot_2.18.3.rar ( 510,82 килобайт ) Кол-во скачиваний: 17671

Прикрепленный файл  uopilot_2.18.4.rar ( 510,88 килобайт ) Кол-во скачиваний: 25472

Прикрепленный файл  uopilot_2.18.5.rar ( 511,72 килобайт ) Кол-во скачиваний: 23449

Прикрепленный файл  uopilot_2.18.6.rar ( 512,02 килобайт ) Кол-во скачиваний: 22151

Прикрепленный файл  uopilot_2.18.7.rar ( 512,65 килобайт ) Кол-во скачиваний: 18913

Прикрепленный файл  uopilot_2.18.8.rar ( 512,73 килобайт ) Кол-во скачиваний: 28554

Прикрепленный файл  uopilot_2.19.zip ( 590,66 килобайт ) Кол-во скачиваний: 26818

Прикрепленный файл  uopilot_2.20.zip ( 528,38 килобайт ) Кол-во скачиваний: 19219

Прикрепленный файл  uopilot_2.21.zip ( 534,24 килобайт ) Кол-во скачиваний: 21783

Прикрепленный файл  uopilot_2.21.1.zip ( 534,78 килобайт ) Кол-во скачиваний: 25863

Прикрепленный файл  uopilot_2.21.2.zip ( 534,95 килобайт ) Кол-во скачиваний: 22932

Прикрепленный файл  uopilot_2.22.zip ( 584,92 килобайт ) Кол-во скачиваний: 19593

Прикрепленный файл  uopilot_2.23.zip ( 597,42 килобайт ) Кол-во скачиваний: 17980

Прикрепленный файл  uopilot_2.24.1.zip ( 599,44 килобайт ) Кол-во скачиваний: 20750

Прикрепленный файл  uopilot_2.27.zip ( 600,22 килобайт ) Кол-во скачиваний: 20792

Прикрепленный файл  uopilot_2.27.1.zip ( 601,2 килобайт ) Кол-во скачиваний: 21735

Прикрепленный файл  uopilot_2.27.2.zip ( 602,5 килобайт ) Кол-во скачиваний: 18936

Прикрепленный файл  uopilot_2.28.zip ( 606,37 килобайт ) Кол-во скачиваний: 20138

Прикрепленный файл  uopilot_2.29.zip ( 683,66 килобайт ) Кол-во скачиваний: 18774

Прикрепленный файл  uopilot_2.30.zip ( 695,66 килобайт ) Кол-во скачиваний: 21046

Прикрепленный файл  uopilot_2.31.zip ( 696,5 килобайт ) Кол-во скачиваний: 21449

Прикрепленный файл  uopilot_2.32.zip ( 717,66 килобайт ) Кол-во скачиваний: 17436

Прикрепленный файл  uopilot_2.33.zip ( 761,16 килобайт ) Кол-во скачиваний: 19017

Прикрепленный файл  uopilot_2.34.zip ( 692,13 килобайт ) Кол-во скачиваний: 18354

Прикрепленный файл  uopilot_2.35.zip ( 696,36 килобайт ) Кол-во скачиваний: 18042

Прикрепленный файл  uopilot_2.36.zip ( 724,84 килобайт ) Кол-во скачиваний: 17380

Прикрепленный файл  uopilot_2.36.1.zip ( 937,71 килобайт ) Кол-во скачиваний: 18745

Прикрепленный файл  uopilot_2.36.2.zip ( 727,6 килобайт ) Кол-во скачиваний: 17091

Прикрепленный файл  uopilot_2.37.zip ( 729,36 килобайт ) Кол-во скачиваний: 20226

Прикрепленный файл  uopilot_2.38.zip ( 1,2 мегабайт ) Кол-во скачиваний: 19231




Ниже приведены небольшие программки и скрипты, которые либо расширяют функционал пилота, либо могут облегчить процесс написания скриптов.

GML расширение функционала

https://forum.uokit.com/index.php?showtopic=24297&hl=Misc
Misc Uopilot ловит из буфера спец ключ misc и то что после него исполняет, функции и синтаксис должны быть на GML (это JS подобный язык в движке Game Maker).
Все скрипты примеры выполняется при запущенной программе.

Окошко с возможностью отображения 4х строк на своей поверхности:
Код
set linedelay 20
set clipboard misc window_set_showborder(0) //Границы вокруг окна (0-1).
set clipboard misc window_set_rectangle(600,0,400,20) //Позиция и растягивание размера окна (x, y, w, h).
set clipboard misc window_set_stayontop(1) //Поверх всего (0-1).
set clipboard misc t1x=4; t1y=2; t1t='Хп:' //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set clipboard misc t2x=100; t2y=2; t2t='Мп:' //Обьект текст2
set clipboard misc t3x=200; t3y=2; t3t='Стам:' //Обьект текст3
set clipboard misc t4x=300; t4y=2; t4t='Голд:' //Обьект текст4
set #hp 0
:re2
set clipboard misc t1t='Хп: ' + '#hp' //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script

Вариант 2:
Код
set linedelay 2
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc window_set_showborder(0)) //Границы вокруг окна (0-1).
set #result setwindowtext (#handleWin, misc window_set_rectangle(600,0,400,20)) //Позиция и растягивание размера окна (x, y, w, h).
set #result setwindowtext (#handleWin, misc window_set_stayontop(1)) //Поверх всего (0-1).
set #result setwindowtext (#handleWin, misc t1x=4; t1y=2; t1t='Хп:') //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set #result setwindowtext (#handleWin, misc t2x=100; t2y=2; t2t='Мп:') //Обьект текст2
set #result setwindowtext (#handleWin, misc t3x=200; t3y=2; t3t='Стам:') //Обьект текст3
set #result setwindowtext (#handleWin, misc t4x=300; t4y=2; t4t='Голд:') //Обьект текст4
set #hp 0
:re2
set #result setwindowtext (#handleWin, misc t1t='Хп: ' + '#hp') //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script


Выключается нажатием искейпа если активно его окно, либо из скрипта:
Код
set clipboard misc game_end()


Изменение размера окна миска:
Код
set clipboard misc room_set_width(0,400) //Ширина (0, w).
wait 20
set clipboard misc room_set_height(0,20) //Высота (0, h).
wait 20
set clipboard misc room_restart()//Перезапуск окна, после этого все настройки сбиваются, поэтому делается в первую очередь.
wait 20
end_script


Выполнение:
Выполнение кода в миске происходит 1 раз при таком обращении:
Код
set clipboard misc room_set_height(0,20)
или в альтернативном:
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)')

(Функция room_set_height(0,20) заносится в строковую переменную и выполняется, после чего переменная очищается(это может быть и не функция а большой кусок кода))
Для многократного выполнения есть спец переменные в которых код не очищается и выполняется 1 раз каждый шаг, шаг можно изменить, и пока он по умолчанию 5мс (200 раз в секунду=фпс 200)
Обычные функции требующие постоянного выполнения должны быть в событии Step:
e_stp0, e_stp1, e_stp2... e_stp10
Функции рисования должны быть в событии Draw:(за исключением функций рисования вне окна, они могут быть в step)
e_drw0, e_drw1, e_drw2... e_drw10
Также есть таймерные события отличающиеся от step только тем что выполняются раз в 10, 100, 1000 шагов:(для повышения производительности)
e_slow10
e_slow100
e_slow1000
Таким образом можно засунуть свой код в строковую переменную(например e_slow10), обработчик будет постоянно его выполнять до тех пор пока не завершена программа или не будет очищена переменная:
Код
set clipboard misc e_slow10='room_set_height(0,20)'
set clipboard misc e_slow10=''


Выполнение:(способ 2)
Отличие лишь в том что при таком обращении код помещается не в буфер а в заголовок окна миска, где он успешно отлавливается и выполняется, затем заголовок возвращается в исходное состояние:(misc_uopilot).
Код
set linedelay 0
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)') //Установка кода в качестве заголовка, через несколько мс вернется обратно
//Обратная связь
set $x 100
set #result setwindowtext (#handleWin, misc clipboard_set_text(string(random($x)))// Ответ будет в буфере
set #result setwindowtext (#handleWin, misc room_caption=string(random($x))//Ответ будет в заголовке
wait 2
set $x2 GetWindowtext (#handleWin) //Получаем ответ из заголовка, можно не успеть забрать или опоздать, до изменения заголовка обратно
wait 20
get clipboard $x //Получаем ответ из буфера, намного надежнее
msg $x $x2
end_script


Графика на экране:
Есть функции рисования которых нет в документации (потому что они из дллки), полезны тем что в отличие от стандартных позволяют рисовать вне окна то есть в любом месте экрана: (линии, текст, прямоугольники)
Код
set linedelay 20
set clipboard misc set_pen(1,c_red) //Установка ширины линии и цвета(ширина, цвет).
set clipboard misc set_brush(c_lime) //Установка цвета прямоугольника(цвет).
set clipboard misc e_slow100='draw_rect_screen(1100,0,1150,20)' //Функция рисования прямоугольников на экране(лево, право, верх, низ).
set clipboard misc e_drw0='draw_rect_screen(1155,0,1175,20)'
set clipboard misc e_slow10='draw_line_screen(10,10,300,10)' //Функция рисования линий на экране(x1, y1, x2, y2).
set clipboard misc e_stp0='draw_text_screen(1000,1,"Misc Uopilot",c_aqua)'//Функция рисования текста на экране(x, y, текст, цвет).
//еще есть рисование текстуры но по крайней мере у меня оно начинает глючить через несколько минут
//set clipboard misc pic = load_bitmap("1test.bmp") //Загрузка текстуры.
//set clipboard misc e_stp1='draw_bitmap_screen(pic,400,0)'//Функция рисования текстуры на экране(x, y, текст, цвет).
end_script


Пример обратной связи:
Код
set $x 100
set clipboard misc clipboard_set_text(string(random($x)))
wait 20
get clipboard $x
set clipboard ""
msg $x
end_script


Скачать Misc Uopilot и документацию:
Misc_uopilot.7z:
http://zalil.ru/33626056
Game_Maker8_Документация_ru_en.7z:
http://zalil.ru/33622973
Определение диапазона цветов
При поиске диапазона цветов часто бывает затруднительно определить границы искомых цветов. В данной ветке есть скрипт для сбора возможных оттенков и два удобных решения, которые покажут необходимые значения диапазона цветов.
https://forum.uokit.com/index.php?showtopic=22116
UniqueColorsSearch
Unique Colors Search - программа анализа набора изображений с расширенной статистикой цветов. Полезна для нахождения уникальных цветов объекта(например мобов), для поиска наиболее распространненых цветов, подбора нескольких оптимальных цветов.
Позволяет сгенерировать условие поиска картинки в пилоте.
https://sites.google.com/site/leaxplace/file-cabinet
https://forum.uokit.com/index.php?showtopic=20545
Screen Scanner
Screen Scanner (cscan.exe)- аналог findcolor (в UOPilot), но обладает гораздо большими возможностями.

Плюсы и минусы по сравнению с findcolor:
Минусы:
- внешняя утилита, а значит не встроена в сам пилот и обмен данными со скриптом происходит не совсем естественным образом (через файл или буфер обмена);
- приходится искусственно задерживать ход выполнения скрипта пока не будут получены данные от программы- см. пример скрипта в конце 1-го сообщения в теме программы (в findcolor скрипт сам "притормаживает" в строке поиска).

Плюсы:
- любые параметры - границы области поиска, шаг поиска. цвета поиска и т.д. можно задавать в виде переменных;
- можно искать прямоугольные изображения из указанных графических файлов;
- можно производить поиск как до первой подходящей точки (ускорение работы), так и до любого указанного количества (параметр -plimit);
- можно указывать один или несколько цветов для поиска через запятую;
- можно указывать цветовые диапазоны для поиска;
- можно указывать отдельные значения и диапазоны цветовых RGB-каналов для поиска;
- можно комбинировать все вышеперечисленные методы поиска через запятую;
- возвращаются координаты найденных точек без всяких дополнительных смещений (как есть);
- можно вместо координат и цветов точек просто получить количество подходящих пикселов (параметр -pcount);
- можно искать координаты области, ограничивающей все пиксели всех указанных цветов (параметр -crop);
- можно изменять шаг поиска по осям X и Y(как и в findcolor), что реально ускоряет поиск (параметры -dx, -dy);
- можно изменять порядок проверки пикселей по осям X и Y (указывая -dx или -dy меньше нуля);
- можно опускать ненужные параметры - программа примет значения по умолчанию;
https://forum.uokit.com/index.php?showtopic=21449
uowin
С помощью этой программы вы сможете получить об окне подробную информацию, в том числе размеры окна, координаты, состояния: минимизировано, максимизировано, восстановлено, активно, выключено.
Пример использования в пилоте:
Код
exec d:\uowin.exe 5534723 c:\my folder\arr.txt // в arr.txt  будут записаны параметры окна
load_array %arr c:\my folder\arr.txt // Загружаем информацию в пилот.
Более подробный хелп идет вместе с программой.
https://sites.google.com/site/leaxplace/file-cabinet
https://forum.uokit.com/index.php?showtopic=21386
Dec2RGBHex

Эта утилита позволит быстро определить диапазон цветов, который необходимо задать для проверок. Для обработки вам необходимо будет создать файлик, в котором будут содержаться возможные цвета. Сделать его можно следующим скриптом:
Код
wait 5s // Делаем паузу, чтобы развернуть нужное приложение и навести мышь на нужную точку.
set timer
set #n 1
get mouse_pos #x #y
while timer < 20000 // Собираем все цвета в выбранной точке на протяжении 20 секунд.
    get  color #colorForArr #x, #y
    set %colorArr [#n] #colorForArr // Напрямую массив испльзовать нельзя.
    set #n #n + 1
end_while
save_array %colorArr d:\color.txt
alarm // Подаем звуковой сигнал об окончании работы скрипта.
stop_script
https://sites.google.com/site/leaxplace/file-cabinet
InqSoft Window Scanner
Эта программа позволяет не только просматривать большое количество параметров окон, таких, как размеры, видимость, текст и имя класса окна, но и изменять многие из них. Кроме того, программа способна строить дерево окон, просматривать главное меню окон, управлять потоками и процессами, включать отключенные пункты меню и многое другое.
Кроме того, InqSoft Window Scanner включает в себя инструменты для решения некоторых специфических задач, таких. как: захват содержимого окон с экрана, захват цвета нужного пикселя, принудительное извлечение данных из окон, редактирование памяти процесса и многое другое.
Так же это программа может пригодиться для привязки пилота к нужному окну. Более подробно это описано в разделе "Запуск скрипта", пункт "привязка".
http://s0m.narod.ru/iws.html Прикрепленный файл  InqSoft_Window_Scanner_1.7.zip ( 1,22 мегабайт ) Кол-во скачиваний: 25459

Скрипт поиска дочернего окна (генерирует готовый код)
http://forum.uokit.com/index.php?showtopic=26742
Код
set linedelay 0
// Версия скрипта 1.3.
// Данный скрипт предназначен для автоматической
// генерации кода поиска дочернего окна.
// Автор DarkMaster.
// Вопросы и предложения оставляйте на фореме
// в спецальной теме по данному скрипту.
// http://forum.uokit.com/index.php?showtopic=26742
set #handlePilot findwindow ()
log #handlePilot
log close
log clear
log open

set #logSizeX 300
set #logSizeY 200

set #handleLog 0
while #handleLog = 0
      set #handleLog findwindow (Log Window)
end_while
set #x (screenwidth  - #logSizeX) / 2
set #y screenheight / 4
set windowpos #x #y #logSizeX #logSizeY #handleLog
log mode compact

set workwindow 0
showwindow #handlePilot
log Укажите родительское окно (Ctrl+A)
while workwindow = 0
      wait 100
      showwindow #handlePilot
end_while
set #startHandle workwindow

log Теперь укажите дочернее окно (Ctrl+A)
while workwindow = #startHandle
      wait 100
      showwindow #handlePilot
end_while
set #targetHandle workwindow
log clear

// Получаем имя родительского окна.
set $ownerTitle getwindowtext (#startHandle)
if  $ownerTitle != "" // Генерируем только если у родительского окна есть имя.
    set $findwindow "findwindow"
    log set #ownerHandle $findwindow ($ownerTitle)
end_if

// Ищем от дочернего к родительскому, чтобы знать все child'ы
set %middleOwnerHandle #targetHandle
set #i 1
set #n 1
while #startHandle <> %middleOwnerHandle [ #i ]
      set #i #i + 1
      set #arrToIntTmp %middleOwnerHandle [ #n ]
      set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner)
      set #n #n + 1  
end_while

set #sizeMiddleOwnerHandle size (%middleOwnerHandle)

// Перебираем от родительского к дочернему.
set $beginString "set #tmp getwindo"
set $middleString "w (#tmp"
set $w "w"
set #var getwindow (#startHandle child)
log set #tmp getwindo$w (#ownerHandle child)
set #i #sizeMiddleOwnerHandle - 1
set $direction ""
while #var <> #targetHandle  
      if  $direction <> ""
          log $beginString$middleString $direction)
      end_if
      // Выход за пределы массива
      if  #i > #sizeMiddleOwnerHandle
          log Ошибка!
          log Пути от родительского окна
          log к дочернему не существует.
          log Возможные причины данной ошибки:
          log 1) Вы спутали местами дочернее и родительское окно.
          log 2) Вы промазали и нажали Ctrl+A по другому окну.
          log 3) Дочернее окно не принадлежит родительскому.
      end_if
      // Текущее окно совпало с одним из чайлдов,
      // найденных в начале скрипта  
      if  %middleOwnerHandle [ #i ] = #var
          set #var getwindow (#var child)        
          set $direction child
          set #i #i - 1
      else
          set #var getwindow (#var next)
          set $direction next
      end_if
end_while
log set #childHandle getwindo$middleString $direction)

set #x (screenwidth  - #logSizeX) / 2
set #y screenheight / 4
set #logSizeX 450
set #logSizeY screenheight / 8 * 5

set windowpos #x #y #logSizeX #logSizeY #handleLog

set $tmp "http:/"
set $tmp2 "/forum.uokit.com/index.php?showtopic=26742"
log
log  Автор скрипта DarkMaster.
log  Ветка на форуме: $tmp$tmp2


stop_script
FastStone Capture
FastStone Capture - отличная программа для определения цвета отдельных пикселей на экране (есть встроенная экранная лупа). Помимо этого позволяет производить на экране измерения расстояний, снятие скриншотов, запись видео в файл и много другое! Программа shareware, но в инете можно найти и портабельные версии.
http://ifolder.ru/27985690
Dec -> Hex

Данный скрипт переводит из число из десятичного в шестнадцатеричное. Использование:
1) Поместить скрипт в конец вашего скрипта.
2) поместить переменную в #decCount число для перевода. Например: set #decCount 123456789.
3) вызвать подпрограмму. gosub DecToHex.
4) преобразованное число будет содержаться в переменной $hexCount
Код
set #decCount 123456789
gosub DecToHex

:DecToHex
while #decCount > 16
    set #ostatock #decCount - ( #decCount / 16 * 16)
    set #decCount #decCount / 16
    gosub format
    set logging  #decCount #ostatock || $hexCount
end_while
set #ostatock #decCount - ( #decCount / 16 * 16)
gosub format

return

:format  // Формирование внешнего вида числа.
    if #ostatock < 10
        set $hexCount #ostatock$hexCount
        return
    end_if
    if #ostatock = 10
        set $hexCount A$hexCount
        return
    end_if
    if #ostatock = 11
        set $hexCount B$hexCount
        return
    end_if
    if #ostatock = 12
        set $hexCount C$hexCount
        return
    end_if
    if #ostatock = 13
        set $hexCount D$hexCount
        return
    end_if
    if #ostatock = 14
        set $hexCount E$hexCount
        return
    end_if
    if #ostatock = 15
        set $hexCount F$hexCount
        return
    end_if
    msg Ошибка вычислений.
return
Детектор движений мышки

Данный скрипт будет отслеживать перемещения мышки. Если активность не наблюдалась заданное время, то сработает ваш код. Может быть полезно для автоматического запуска при простое или для контроля работы других ваших скпиптов, например, если вылетел скрипт, значит не водит мышкой - можно перезапустить или подать тревогу.
Код
get mouse_pos #xLast #yLast
set #timerAFK timer + 3000

:start
get mouse_pos #x #y
if ( #x = #xLast ) and ( #y = #yLast )
    if #timerAFK < timer
    set logging #timerAFK > timer
        СЮДА ПИШЕМ ЧТО СДЕЛАТЬ ПРИ ПРОСТОЕ(запуск/остановка скрипта, изменение переменной и т.д.)
    end_if
else
    set #timerAFK timer + 3000 // ВРЕМЯ ПРОСТОЯ в миллисекундах (1000 = 1 секунда)
end_if
set #xLast #x
set #yLast #y
goto start
Создание bat файла

Создать bat достаточно просто - вам всего лишь потребуется написать массив и сохранить его. %bat [#n], где #n номер строки в батнике. Для запуска используйте команду exec. Пример:
Код
set %bat [1] chcp 1251 // Адаптируем кодировку под пилот.
set %bat [2] echo Сейчас будет небольшая демонстрация бат файла.
set %bat [3] pause
set %bat [4] chcp 866 // Многие функции требуют дос кодировку.
set %bat [5] tasklist
set %bat [6] chcp 1251 / Адаптируем кодировку под пилот.
set %bat [7] echo Это список запущенных процессов на вашем компьютере. Завершаем работу батника.
set %bat [8] pause
save_array %bat "d:\Test.bat" // Не забываем кавычки.
exec "d:\Test.bat" //  Не забываем кавычки.
stop_script

Уничтожение массива
Способ уничтожить массив.
Код
set size (%arr)

Управление UOPilot через QiP

С помощью этого скрипта можно давать команды пилоту через QiP 2005.
1) Пишете в чат с удаленного компа "еще" (без кавычек).
2) Пишете какую команду выполнить.
Код
//Укажите полный адрес в кавычках к файлу истории квипа.
set $historyPatch "d:\qip\123456789.txt"

load_array %arr $historyPatch
set #n size (%arr) - 1
msg %arr [#n] // Это и будет ваше последнее сообщение
set $lastPost %arr [#n]
:start
if $lastPost = старт1 // ПРИМЕР 1
msg start1
end_if
if $lastPost = стоп1 // ПРИМЕР 2
msg stop1
end_if

:waiting
load_array %arr $historyPatch
set #n size (%arr) - 1
set $lastPost %arr [#n]
if_not $lastPost = еще
wait 200
goto waiting
end_if
while $lastPost = еще
load_array %arr $historyPatch
set #n size (%arr) - 1
set $lastPost %arr [#n]
wait 200
end_while
goto start
https://forum.uokit.com/index.php?showtopic=22116

Если UOPilot не работает/не кликает/не печатает/не находит цвет, то прочтите https://forum.uokit.com/index.php?s=&showtopic=20548&view=findpost&p=164528 пост.

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


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: GhostHunter 8.11.2010, 19:28

Мастер, огромное спасибо за проделанную работу.

Автор: DarkMaster 15.1.2011, 13:47

Нашел способ уничтожить массив.
set $a findcolor ( 1, 1 2, 2 1 1 167772150 %arr 1)
Цвета 167772150 существовать не может, т.к. максимум 16777215, а у нас еще нолик лишний. Вот такая вот извращенная фича, но бывает полезной.

С версии 2.20 работает такой вариант:

Код
set size ( %arr ) // очистить массив

Автор: alex-sm89 23.1.2011, 20:26

Здравствуйте! Меня интересует вопрос, как изменить название окна Uopilot"а ? Куда нужно вставить код

Код
set #UOpilot findwindow (UoPilot v2.18.5 WK)
set #result setwindowtext (#UOpilot Траляля)
?
Есть ли еще способы "маскировки" данного кликера не представленные в 1-м сообщении ?
Моя версия кликера - v.2.18.8 WK

Автор: DarkMaster 23.1.2011, 21:15

Скрипт это. В любую вкладку скрипта и запустить.

Sandboxie можешь попробовать маскировать, но без тонкой настройки песочницы ты вряд ли сможешь чего-то добиться.

Автор: alex-sm89 23.1.2011, 21:36

Код
set #UOpilot findwindow (UoPilot v2.18.8 WK)
set #result setwindowtext (#UoPilot 123)

Вставляю этот код в мой скрипт, но ничего не изменяется.
Стандартное название окна "UoPilot v2.18.8 WK".
После кода "изменения названия окна" у меня стоит код

Код
wait 1s
move 11160, 663  abs
double_kleft 1160, 663  abs
while_not 122, 49 658713
end_while
wait 1s


Что неправильно ?

Автор: DarkMaster 23.1.2011, 22:57

Цитата
б) Внимательно отнеситесь к заголовку.

Автор: Zeleax 24.1.2011, 0:29

Цитата(DarkMaster @ 23.1.2011, 22:54) *

Скопировал из обхода защит, вставил - переименовало. Проверяйте, в т.ч. пробелы.

Совершенно верно! Только там была версия 2.18.5
Нужно всего-лишь последнюю циферку исправить =)

Вот так правильно (с числом пробелов в названии заморочка) :
Код
set #UoPilot findwindow (UoPilot  v2.18.8   WK)
set #result setwindowtext (#UoPilot 123)

Автор: kano 2.2.2011, 14:15

Мой скрипт:

Код
send 1
set $a 0
while $a = 0
   set $a findcolor (93, 142 300, 384  1 1 255 %arr 2)
end_while
set #x %arr [1 1] + 100 + 93
set #y %arr [1 2] + 148 + 142
kright %arr [1 1], %arr [1 2]


В принципе все понятно, НО кликает не в том месте где находит цвет. Нужно правее на 100 и ниже на 148.

Автор: kano 5.2.2011, 9:26

Цитата(Zeleax @ 2.2.2011, 18:44) *

В последней команде нужно написать
kright #x, #y

Спасибо за совет, помог. В faq бы дописали, а то начало есть а концовки нет.

Автор: DarkMaster 5.2.2011, 10:25

Цитата
Я в хелпе проги читал про какие-то массивы, но ничего не понял. Пожалуйста, обьясните для чего они нужны и как ими пользоваться.

https://forum.uokit.com/index.php?s=&showtopic=16290&view=findpost&p=123670

Автор: Zeleax 1.3.2011, 0:25

Продолбался немало времени пока понял, что процедуры, которые вызываются с помощью call абсолютно закрыты для основного скрипта. Параметры в них передать можно, а вот из них получить назад в скрипт не получается ничего! Причем даже если в такой процедуре использовать имя глобальной переменной скрипта - эта переменная останется неизменной при выходе из процедуры! Даже параметры процедуры передаются только в неё, но не возвращаются назад.
Вот такие загадочные эти процедуры, прям чёрные дыры какие-то ))

Неплохо бы это отразить в каком-нибудь разделе

Автор: Zeleax 1.3.2011, 7:50

правильно, будет ошибка выполнения

Код
// скрипт 1 - запущен и работает во время запуска скрипта 0
set #d 9
:to4ka
goto to4ka // зациклили скрипт

Код
// скрипт 0
set #a 1
set $b вася
msg Перед вызовом test: a= #a, b= $b // "a =1, b= вася"
call test $b // вызываем процедуру test с 1 параметром. Внутри меняем #a, $b, #d.1
msg После вызова test: a= #a, b= $b // "a =1, b= вася" - не изменилось!
msg d.1 = #d.1 // "d.1 = 9" - не изменилось!
end_script

//proc test $c // здесь нельзя писать комментарии- ошибка!
proc test $c
//  set #a.0 5 // ошибка выполнения: неизвестная переменная! процедура прерывается, управление возвращается в точку вызова
  msg #a // "#a" - пустая переменная! (ошибки нет)
  msg в начале test c= $c // "c= вася"
  msg d.1 = #d.1 // "d.1 = 9"
  set #d.1 10 // ошибка! но скрипт работает дальше
  set #a 7
  set $b коля
  set $c гена
  msg внутри test: a = #a // "a =7"
  msg внутри test: b = $b // "b = коля"
  msg внутри test: c = $c // "c = гена"
end_proc

Автор: Zeleax 6.3.2011, 9:35

Часто на форуме появляются темы и посты типа:

Цитата

Тема: Помогите мне/ламеру/нубу/пажалуста (большими буквами и много восклицательных знаков)
Пост: Помогите мне кто-нибудь (бесплатно) написать скрипт к моей любимой игре. Я вам буду по гроб жизни обязан!!!!!!!!!!!!

Такие просители, как правило, всё еще верят в Дедов Морозов, Добрых Волшебников и Сказочную Халяву.

Так вот. Существуют следующие наиболее реальные варианты развития дальнейших событий:

1) Читаем тему Полезные советы (эту самую), Справку к пилоту, смотрим примеры по командам на UOWiki.
Начать можно http://uopilot.tati.pro/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BF%D0%B8%D0%BB%D0%BE%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3.
Делаем сами. Спрашиваем что непонятно (конкретно, а не "я ничиво не панимаю тут ничиво савсем вапще"). Вам обязательно помогут smile.gif
Плюсы: новые знания, развитие интеллекта, участие в работе форума
Минусы: нужно стараться самому
2) Предлагаете оплату (кстати, за мороженое стараться вряд ли кто будет)
Плюсы: самому стараться не нужно
Минусы: материальные расходы
3) Ищете добрых людей, которые обычно помогают возле церкви (а программы пишут, когда маются - для кого бы другого убить часок (день) своего личного времени - все равно делать нех)
Плюсы: полная халява
Минусы: долго искать нужно, и не факт что найдёте )

Автор: ПрогерМ 10.3.2011, 14:42

Все что есть в меню 2.18

Время
year Текущее время (Год)
month Текущее время (Месяц)
day Текущее время (День)
haur Текущее время (Час)
min Текущее время (Минуты)
sec Текущее время (Секунды)
timer Считает количество миллисекунд от начала выполнения скрипта. Может использоваться практически в любых операторах и сочетаниях.
set timer устанавливает значение timer в 0

Переменные чара и последние объекты
Используется в онлайн РПГ - играх

target Вид курсора (0 - рука; 1 - прицел)

delimiter Используется для разделения элементов массива

linedelay Задержка между строк в скрипте

EasyUO Глобальные текстовые переменные

random Генератор псевдослучайных чисел

prompt Запрос на ввод значения, возвращает в переменную введенное значение. Выбор подтверждается закрытием окна

size Возвращает длину указанного параметра

findcolor Поиск точек определенного цвета в заданной области

WindowFromCursor Указание окна под курсором мыши

get color Заносит в переменную цвет указанной точки
get mouse_pos Заносит в переменную текущие координаты мыши
get number Выделение первого числа из строки
get word Выделение слова из строки по его порядковому номеру

move Перемещает курсор в указанные координаты

drag Перенести из точки с координатами в точку с координатами указанное количество предметов

simple
left Щелкнуть левой клавишей мыши
right Щелкнуть правой клавишей мыши
middle Щелкнуть средней клавишей мыши
double_left Двойной щелчок левой клавишей мыши
double_right Аналогично правой клавишей
double_middle Аналогично средней клавишей
left_down Прижимает левую клавишу мыши
left_up Отпускает левую клавишу мыши
right_down Аналогично правую клавишу
right_up Аналогично правую клавишу
middle_down Аналогично среднюю клавишу
middle_up Аналогично среднюю клавишу

repeat Повтор действий указанное количество раз
continue Перескочить на след. шаг. Может использоваться в циклах repeat, for, while
end_repeat Конец цикла repeat
for Цикл с инкрементом переменной
end_for Конец цикла for
while Цикл с проверкой условия
while_not Цикл с отрицательной проверкой условия
while lastmsg Цикл с проверкой последнего сообщения от сервера
break Прерывает цикл
end_while Конец цикла while

if Проверкка условия
if_not Проверка отрицательного условия
if lastmsg Проверка последнего сообщения от сервера
else Иначе, в противном случае заданного условия
end_if Конец условия

proc Начало процедуры
end_proc Конец процедуры
gosub Переход на указанную метку
return Возврат к последнему вызванному gosub

macro_load Загрузить макрос
macro_play Воспроизвести макрос

load_array Загрузить массив
save_array Сохранить массив

start_script Запуск параллельного скрипта
stop_script Остановка указанного скрипта
pause_script Приостановка выполнения указанного скрипта
resume_script Продолжает выполнение указанного скрипта
set priority Изменение приоритета скрипта

exec Запускает приложение с указанным именем
terminate Закрывает все приложения с указанным именем

GetWindowtext Возвращает заголовок указанного окна
SetWindowtext Изменяет заголовок указанного окна
GetWindow Возвращает хендл дочернего окна от указанного
WorkWindow Рабочее окно скрипта
WindowPos Перемещения выбранного окна и изменения его размеров
ShowWindow Показывает окно в соответствии с указанными параметрами
FindWindow Возвращает хендл окна, необходимый предыдущей команде

readmem Читает с указанного адреса переменную указанного типа
writemem Пишет по указанному адресу значение переменной указанного типа

set clipboard Помещает в буфер обмена указанный текст
get clipboard Получает текст из буфера обмена в строковую переменную, либо в массив

send Нажимают клавишу, на которой этот симол нарисован

sendex Посылает практически все комбинации клавиш (клавиши Ctrl, Alt, Shift кодируются символами ^, @ и ~ соответственно)

set Переменная

set logging Управление логами

wait Задержка

waitfortarget Приостанавливает выполнение скрипта, пока курсор в ультиме не примет форму таргета, или пока не истечет интервал времени

injection Посылает команды в injection версии 309.05+ минуя клиент. Если инжект не опознан, то скрипт будет приостановлен, выполнение будет продолжено со следующей строки

goto Переход на указанную метку, метка должна начинаться с двоеточия

say Набрать текст и нажать Enter

msg Выскакивающее сообщение поверх прикрепленного окна

alarm Воспроизведение звукового файла (в формате wav), при ошибке проигрывается стандартный звук

flash Мигнуть в таскбаре

PrintScreen Сохранения копии экрана в файл

end_script Остановка текущего скрипта

Автор: DarkMaster 13.3.2011, 12:12

Вычистил весь флуд.

ДАННАЯ ТЕМА ТОЛЬКО ДЛЯ ОБСУЖДЕНИЯ FAQ ИЗ ПЕРВОГО ПОСТА

Автор: ПрогерМ 13.3.2011, 20:11

21.02.2009

Версия 2.14

Прикрепленный файл  uopilot.rar ( 489,74 килобайт ) Кол-во скачиваний: 12

Автор: Zeleax 14.3.2011, 8:18

Предлагаю сюда добавить совет (https://forum.uokit.com/index.php?s=&showtopic=21183&view=findpost&p=149636) по поиску цвета в случае если цвет появляется только при наведении мышки на объект и его обычно тяжело "поймать". Например, полоска жизни моба

Автор: Zeleax 3.4.2011, 4:11

FastStone Capture - отличная программа для определения цвета отдельных пикселей на экране (есть встроенная экранная лупа). Помимо этого позволяет производить на экране измерения расстояний, снятие скриншотов, запись видео в файл и много другое! Из раздела must have (иметь обязательно). Ссылка есть в первом посте данной темы.

Автор: _LESTAT_ 9.4.2011, 10:51

Привет, не знаю пригодиться ли кому.
Если вы определяете хадл нужных окон, через "дерево окон"(этот способ в отличии от
set #handle windowfromcursor
set workwindow #handle

не дергает мышку, при постоянной перепроверке хадла и не использует абсолютные координаты), тоесть:

примерно так
//Поиск нужных окон
:Res0
set #w 0
set logging Ищем хадл Cтандартным методом. (#w )
:Res1
set #var findwindow (Игра)
set #var getwindow (#var CHILD)
set #var getwindow (#var CHILD)
if #w > 1 and #w < 4
set #var getwindow (#var NEXT)
end_if
set #var getwindow (#var CHILD)
if #w = 1 or #w = 3
set #var getwindow (#var NEXT)
end_if
set #var getwindow (#var CHILD)
set #var getwindow (#var CHILD)
set #m #var //записываем в переменную хадл основного окна
set #var getwindow (#var CHILD)
set #var getwindow (#var CHILD)
set #var getwindow (#var CHILD)
set #b #var //записываем в переменую хадл окна сражения
set workwindow #m
:HadlOk
if_not 50, 20 4956365 //Ищем этот постоянный пиксель, который всегда есть в этих координатах в нужном нам окне, если ненайден значит и нужное окно не найдено, перепроверяем с дополнительными ступенями, лично у меня нужное окно бывает расположено в 4 местах в дереве и часто меняется между этими местами при обновлении страницы, поэтому я проверяю поочереди все места пока ненайду этот пиксель, если он найден то скрипт вполняться дальше.
set #w #w + 1
if #w > 0 and #w < 4
set logging Ищем хадл, с дополнительными ступенями. (#w )
goto Res1
end_if
if #w > 3
goto Res0
end_if
End_if
//далее действия скрипта в найденом окне


и вдруг вам нужно кликнуть на место находящееся за пределами вашего рабочего окна, вы нехотите использовать abs и у вас нет в переменной хадла нужного вам окна(лично у меня это кнопка браузера "обновить", но у вас это может быть любое место за пределами окна)
то вы можете с помощью команды move задать мыши координаты относительно вашего рабочего окна, с отрицательными значениями (либо с положительными но превышающими размеры окна), ну а уж далее окно под курсором сделать рабочим и кликнуть в нем куда надо.
Например:
Цитата

set workwindow #m // в переменной #m у нас уже записан хадл текущего рабочего окна (необязательное)
move 70, -35 //двигаем мышь выше на 35 пикселей, чем наше текущее окно
set #handle windowfromcursor //записываем в #handle хадл окна под курсором
set workwindow #handle //делаем его рабочим окном
left 75, 20 //кликаем куда надо
set workwindow #m //возвращаемся в наше старое рабочее окно, хадл которого записан в #m(необязательно)

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

Вы спросите почему я не воспользовался абсолютными координатами ? В моем случае это не преемлемо, потому как игра моя работает на втором мониторе (1280х1024), тоесть абсолютная Х координата нужного места у меня более 2000, при этом также я использую скрипт на виртуальной машине, само собой с одним монитором, но тем же разрешением, что и на втором мониторе, где абсолютная координата тойже точки всего 300. Если бы я воспользавался abs , то мне каждый раз пришлось бы поправлять абсолютную координату, тоже бы случилось если бы я поменял бы местами основной и дополнительный монитор. Тоесть это напряжно и неудобно. А в при описаном мною способе, относительные координаты нужного окна, определяются через относительные координаты текущего активного окна, скрипт будет работать без правки, а в теории скрипт будет работать на любом мониторе с таким же разрешеним и цветовой гаммой как у меня.

p.s. Сначала я пытался кликнуть напрямую с отрицательной координатой (left 70, -35 или kleft 70, -35) но это не сработало как ни жаль, а так же двигать мышь на нужное место и кликать без изменения рабочего окна,но и этот способ не сработал, мышь то сдвигалась, но клик не проходил, жаль что впилоте нет нужной команды для простого клика без указания координат, тоесть была бы команда просто left, и тогда бы клик проходил там, где сейчас мышь по верхнему окну, это бы облегчило нужную нам задачу в разы и сократило количество строк и шанс возникновения ошибки, надеюсь в будущих версиях пилота если они будут, добавят такую команду, или же добавят на прямую возможность кликать на отрицательных координах, на окне под курсором.

Автор: DarkMaster 9.4.2011, 13:22

макс длинна строковой переменной 255 символа

Автор: Sanny 16.4.2011, 1:23

В какой-то из тем был вопрос типа "а можно ли скрипт Пилота сделать EXE-шником"...
Нет, естественно нельзя, но можно сделать бат-файл который будет запускать нужный вам скрипт и мало-ли что еще вы там пропишите, а потом с помощью Bat-to-exe конвертера который можна загрузить тут БЕCПЛАТНО! http://www.battoexeconverter.com/

В общем прикольная прога, думаю можно добавить к полезным программам... cool.gif

battoexeconverter является аналогом Quick Batch File Compiler
Quick Batch File Compiler компилит батники в ехе. запускаются без окна консоли, снятия фокуса с окна и т.д.
С точным фунционалом www.battoexeconverter.com не знаком, т.к. наткнулся на описание пары багов в нем(скорее отсутствие поддержки некоторых фич батников). Указывалось на то, что в Quick Batch File Compiler их нет.

Автор: _LESTAT_ 17.4.2011, 19:50

Вот и лопнуло мое терпение, надоело мучаться с тем, что сложно определить работает ли определенный скрипт или не запущен или на паузе, и после очередной смерти моего героя в игре из-за вылетевшего скрипта, точней вылета скрипт который проверяет работает ли боевой скрипт... smile.gif написал скрипт который проверяет статус первых 10 скриптов в пилоте, по цвету циферки.
Что делает скрипт:
1)Создает одномерный массив %ar[Номер скрипта] Статус, со статусом первых 10 скриптов.
Выдает:
1 Если скрипт не запущен
2 Если скрипт работает
3 Если скрипт на паузе
Заметьте Начинает проверять считать с нулевого скрипта и отправляет ответ в первую ячейку массива.
Пример проверяем что третий скрипт запущен.

Цитата

set #te %ar[4]
if #te = 2
//Действия если скрипт работает
end_if

2)Так же скрипт автоматически находит и закрывает всплывающие информационные окна Пилота, такие окна обычно выскакивают при вылете скриптов.
3)Если не хотите прописывать реакции на разные статусы скриптов , прямо в этом скрипте, массив со статусами скриптов сохраняется в файл, потом при желании его можно загрузить в других скриптах и дальше проводить действия уже в них.
Перед использованием проверьте следующие настройки пилота
1)Для того чтобы он работал, окно пилота(а именно кнопки скриптов) должно быть видимо. Хотя я сделал чтобы скрипт сам возвращался из свернутого режима, хотя лучше все же включить опцию "Располагать поверх всех окон" и отметить галочкой основное окно пилота.
2)В настройках должен быть отключен показ относительных или абсолютных координат курсора, потому что название окна пилота было постоянным, я не смог сделать поиск окна по части названия окна, из-за этого такую полезную функцию как показ относительных координат курсора пришлось отключить, если кто поможет решить эту проблему, буду благодарен.
3)В настройках пилота должна быть включены опции "Отображать кнопки запуска и остановки скриптов" и "Отображать запущенные скрипты"
Сам скрипт

:HldSeach
set #wind findwindow (UoPilot v2.18.8 WK)
//set windowpos 0 0 242 144 #wind //расположение и размеры окна
set #var getwindow (#wind CHILD)
set #var getwindow (#var NEXT)
set #var getwindow (#var CHILD)
set #var getwindow (#var CHILD)
set #var getwindow (#var NEXT)
set #var getwindow (#var NEXT)
set #var getwindow (#var NEXT)
set #var getwindow (#var NEXT)
set workwindow #var
:NewCikl
if_not 7, 16 54825 //Поиск и Проверка виднмости окна пилота
showwindow #wind
goto HldSeach
else //Если окно найдено, проверяем цвета циферок скриптов
//=== 0 ===
if 8, 7 255
set %ar[1] 3
end_if
if 8, 7 54825
set %ar[1] 2
end_if
if 8, 7 0
set %ar[1] 1
end_if
//=== 1 ===
if 30, 7 255
set %ar[2] 3
end_if
if 30, 7 54825
set %ar[2] 2
end_if
if 30, 7 0
set %ar[2] 1
end_if
//=== 2 ===
if 51, 5 255
set %ar[3] 3
end_if
if 51, 5 54825
set %ar[3] 2
end_if
if 51, 5 0
set %ar[3] 1
end_if
//=== 3 ===
if 69, 5 255
set %ar[4] 3
end_if
if 69, 5 54825
set %ar[4] 2
end_if
if 69, 5 0
set %ar[4] 1
end_if
//=== 4 ===
if 88, 5 255
set %ar[5] 3
end_if
if 88, 5 54825
set %ar[5] 2
end_if
if 88, 5 0
set %ar[5] 1
end_if
//=== 5 ===
if 104, 5 255
set %ar[6] 3
end_if
if 104, 5 54825
set %ar[6] 2
end_if
if 104, 5 0
set %ar[6] 1
end_if
//=== 6 ===
if 123, 5 255
set %ar[7] 3
end_if
if 123, 5 54825
set %ar[7] 2
end_if
if 123, 5 0
set %ar[7] 1
end_if
//=== 7 ===
if 142, 10 255
set %ar[8] 3
end_if
if 142, 10 54825
set %ar[8] 2
end_if
if 142, 10 0
set %ar[8] 1
end_if
//=== 8 ===
if 164, 7 255
set %ar[9] 3
end_if
if 164, 7 54825
set %ar[9] 2
end_if
if 164, 7 0
set %ar[9] 1
end_if
//=== 9 ===
if 183, 7 255
set %ar[10] 3
end_if
if 183, 7 54825
set %ar[10] 2
end_if
if 183, 7 0
set %ar[10] 1
end_if
save_array %ar C:\Путь_куда_сохранять\tempScriptStatus.txt //сохраняем статс скриптов в файл
end_if
set #em findwindow (UoPilot Message ) //Поиск информационных окон, об ошибках в скриптах
if #em > 0
showwindow #em
sendex {Enter} //@{F4} //Посылаем Enter в такие окна
end_if
set #em 0
goto NewCikl


p.s. это крупное упущение автора пилота - невозможность получать статус скриптов, другими скриптами, одной командой, надеюсь в будущих версиях пилота если они будут, введут такую команду и надобность в таких вот скриптах отпадет, а скрипты в пилоте будут работать стабильнее.

Автор: DarkMaster 17.4.2011, 20:05

Цитата
крупное упущение автора пилота - невозможность получать статус скриптов, другими скриптами

мне кажется потратив немного времени можно вытянуть статус скриптов с помощью артмани, потом readmem и все. когда-то подобным образом вытягивал из пилота PID процесса к которому привязан скрипт.

все что требуется это пункт 10 из справки артмани. и терпение по отсеиванию.

Автор: -AL- 22.4.2011, 11:39

у меня информация по поводу вызовов и остановов скриптов друг из друга (v 2.18.8), наиболее устойчивая схема:

- скрипт 1 работает
- скрипт 1 вызывает скрипт 2
- скрипт 1 встает на паузу
- скрипт 2 работает
- скрипт 2 вызывает скрипт 3
- скрипт 2 встает на паузу
- скрипт 3 работает
- скрипт 3 снимет с паузы скрипт 2
- скрипт 2 останавливает скрипт 3
- скрипт 2 снимет с паузы скрипт 1
- скрипт 1 останавливает скрипт 2
- скрипт 1 работает

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

зы: если инфа не актуальна - просьба удалить пост

Автор: DarkMaster 25.5.2011, 4:48

ищу версии отсутствующие в данной теме, особенно 2,14 и 2,14b12.

Автор: Zeleax 11.6.2011, 7:42

Предлагаю в описании findcolor заменить условие проверки $a =0, на использование size (%arr), как более надежное:

Код
set #sz 0
while #sz = 0
   set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2)
   set #sz size (%arr)
end_while

Автор: Zeleax 25.6.2011, 7:17

Цитата(Warcile @ 25.6.2011, 5:01) *

Здраствуйте,
Ктонибудь может подсказать почему когда я пытаюсь записать макрос он выдает: "Journalhook cannot be created". У меня windows 7


Цитата(Ca6LeZy6 @ 24.5.2011, 18:07) *

Галка от Админа конечно хорошо, но все равно пилот может немного подтупливать, самый лучший вариант: Заходим в "панель управления" -> "Учетные записи пользователей" и там ищем настройку контролера учетными данными. и бегунок спускаем в самый низ, после чего ПЕРЕЗАГРУЖАЕМ компьютер.
И все будет работать, и без галок от Админа.

Предлагаю добавить в Полезные советы

Автор: WKnight 17.7.2011, 8:24

Цитата
5) Часто возникает необходимость ожидать появления цвета в определенной области:
Внимание! В связи с багом настоятельно рекомендуется в примерах приведенных ниже использовать while size (%arr) = 0 , а не while $a = 0 .
в след.версии:
при ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). отрицательные значения в принципе сигнализируют об ошибке


кстати пилот прекрасно умеет сохранять скриншоты в ВМР smile.gif

Автор: Zeleax 17.7.2011, 9:13

Цитата(WKnight @ 17.7.2011, 8:24) *

в след.версии:
при ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). отрицательные значения в принципе сигнализируют об ошибке
кстати пилот прекрасно умеет сохранять скриншоты в ВМР smile.gif

А как бы поподробнее узнать об основном и альтернативном определении цвета?
"в след.версии" - это уже в 2.19 или еще нет?
а что должно возвращаться при неальтернативном определении цвета, если цвет не найден?

Автор: WKnight 19.7.2011, 12:36

Цитата(_LESTAT_ @ 9.4.2011, 10:51) *
жаль что впилоте нет нужной команды для простого клика без указания координат, тоесть была бы команда просто left, и тогда бы клик проходил там, где сейчас мышь по верхнему окну, это бы облегчило нужную нам задачу в разы и сократило количество строк и шанс возникновения ошибки, надеюсь в будущих версиях пилота если они будут, добавят такую команду, или же добавят на прямую возможность кликать на отрицательных координах, на окне под курсором.
есть ли смысл из-за конструкции из двух строк вводить кучу левых команд?

get mouse_pos #x #y abs
kleft #x #y abs

Автор: WKnight 19.7.2011, 12:49

Цитата
А как бы поподробнее узнать об основном и альтернативном определении цвета?
основной - getpixel, альиернативный - скриншот. в остальном ничем не отличаются.
Цитата
в след.версии" - это уже в 2.19 или еще нет?

нет, это следующая. выпущу, когда удастся проверить в дебагере то что написано на коленке.
Цитата
а что должно возвращаться при неальтернативном определении цвета, если цвет не найден?
это не "не найден", а именно ошибка. в неальтернативном такого быть не может в принципе.
-1 ошибка преобразования параметров, общая
-2 ошибка синтаксиса, конкретно в скобках, общая
-3 ошибка снятия скриншота, только альтернатив

Автор: DarkMaster 19.7.2011, 15:19

Цитата
в след.версии:
при ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). отрицательные значения в принципе сигнализируют об ошибке

А если будет использован обычный способ определения цвета, но не найдено ни одно совпадение? 0?

Автор: WKnight 19.7.2011, 17:19

Если именно "не найдено", то ноль, независимо от способа. оно в принципе и так 0 возвращало, но к нему приписывались три минуса - часть отладочной информации об ошибке, в результате чего число переставало быть числом... ошибка -3 нестабильная, при повторении одних и тех же действий может появиться а может и нет. при ее появлении ряд шагов проделываю заново, но если несколько раз подряд выскочит, то может попасть в результат. в текущей версии количество повторени увеличино почти вдвое, плюс еще кое какая модернизация кода, чтоб минимизировать ее просачивание в результат.
результат '0---' иногда возвращался только в альтернативном способе. в обычном нет такого кода, он там ненужен. сейчас и в альтернативном нет smile.gif

Автор: ДЖОНИ 3.9.2011, 19:44

Возможно ли сделать чтоб программа висела сверху над всеми приложениями даже над развёрнутыми в полно экранный режим?

В часности столкнулся с проблемой определения координаты и цвета в определённой точке при развёрнутом окне(

Автор: DarkMaster 6.9.2011, 4:51

Временно прилепляю сюда. В подфорумах прав нет...


Прикрепленные файлы
Прикрепленный файл  TitleChat.zip ( 1,06 килобайт ) Кол-во скачиваний: 2207

Автор: DarkMaster 10.9.2011, 5:35

текст


Прикрепленные файлы
Прикрепленный файл  L2.zip ( 1,42 килобайт ) Кол-во скачиваний: 2077

Автор: DarkMaster 10.9.2011, 16:47

пцукпц


Прикрепленные файлы
Прикрепленный файл  Shot00064_2.rar ( 342,25 килобайт ) Кол-во скачиваний: 1981

Автор: DarkMaster 22.9.2011, 22:44

это не оффициальные версии. на ваш страх и риск.


Прикрепленные файлы
Прикрепленный файл  UOPilot_frost_2.18.rar ( 562,7 килобайт ) Кол-во скачиваний: 2555
Прикрепленный файл  UOPilot204_frost.rar ( 518,76 килобайт ) Кол-во скачиваний: 2479

Автор: Zeleax 17.10.2011, 12:15

Код
//привязка к рабочему окну, первоначальная настройка переменных
...

:start // начало цикла
...
goto start // переход на начало цикла

Автор: -AL- 25.10.2011, 18:35

доброго времени суток, спасибо за раздел и советы,

подскажите ,
насколько надежна работа версии 2.21 по сравнению с 2.18 (система win7, IE, Flash) ?,
особенно при паузах / продолжениях большого числа скриптов,

( 2.18 работает, но часто виснет , причем похоже с памятью какие-то проблемы, начиная с определенного момента валится почти сразу,
после перезагрузки компа , если повезет , может отработать несколько часов подряд и опять умереть ,
наиболее часто ошибки возникают на операторах wait и операциях с мышью )

и поменялся ли синтаксис скриптов ? ... очень много чего написано для версии 2.18,
а разбираться заново что там и как очень не хотелось бы ))

Автор: Zeleax 25.10.2011, 19:30

Вообще-то уже 2.22 на оф.сайте пилота есть.

Совместимость со старыми скриптами осталась. Много новых плюшек добавилось. Если не понравится- можно снести и старую версию поставить - чего думать-то? ))

Автор: -AL- 25.10.2011, 19:47

Цитата(Zeleax @ 25.10.2011, 19:30) *

Вообще-то уже 2.22 на оф.сайте пилота есть.

Совместимость со старыми скриптами осталась. Много новых плюшек добавилось. Если не понравится- можно снести и старую версию поставить - чего думать-то? ))


да многолетний опыт работы с софтом, обычно старый надежнее, пока новый не отладят ))
читал тему про 2.22 , как там с пойманными багами ? пристрелены ?

Автор: Zeleax 25.10.2011, 20:11

Цитата(-AL- @ 25.10.2011, 19:47) *

да многолетний опыт работы с софтом, обычно старый надежнее, пока новый не отладят ))
читал тему про 2.22 , как там с пойманными багами ? пристрелены ?

Баги, как тараканы, одних убиваешь- другие плодятся ))
В новом очень много вкусных плюшек

Автор: DarkMaster 14.11.2011, 15:29

Временная заготовка.

Findimage
Findimage предназначен для поиска изображений на экране. В целом он очень схож с findcolor как по синтаксису, так и способам работы с ним. Так же он имеет и некоторые тонкости работы:
1) Цвет левого верхнего пикселя считается фоном и сравнении всегда считается не совпавшим. Если этот цвет еще где-либо присутствует в искомом изображении, то он так же будет распознан как фон и так же будет считаться не совпавшим.
2) Поскольку как минимум один пиксель(левый верхний) всегда будет считаться не совпавшим, то максимальная точность совпадения будет 99%.
3) Рекомендую использовать значения точности совпадения для картинок в пределах 70-95, а для текстов 90-99.
4) В случае если картинка имеет обширный фон, рекомендую изменить цвет левого верхнего пикселя на другой, не использующийся в изображении.

Автор: Zeleax 15.11.2011, 8:28

Возможный вариант решения проблемы неработающей клавиатуры в играх

Цитата(SkifF @ 14.11.2011, 22:36) *

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

А если еще сделать заготовку с размещением экранной клавиатуры в нужном месте экрана..., и еще относительные координаты всех нужных кнопок экранной клавы загнать в массив..., и еще всё это организовать через вызов процедуры с указанием только номера нужного элемента массива - то жизнь будет краше ))
Кстати, окно этой экранной клавиатуры можно попробовать задвинуть за край экрана, чтоб не мешало работать )
В виндоуз такая клавиатура называется Экранная клавиатура. А еще есть аналогичные сторонние программы, которые называются Виртуальная клавиатура.

Автор: Zeleax 15.11.2011, 10:46

Если мыша не двигается в нужное место, а только кликает там где находится:

Цитата(asdvo1ty @ 15.11.2011, 9:46) *

Возможно, стоит снять галочку с "Возвращать курсов мыши после кликов". Мне помогло)

Автор: Zeleax 14.12.2011, 18:14

А знаете ли Вы что:
1) в устаревших версиях пилота многие новые скрипты могут не работать - выдавать ошибку компиляции или выполнения;
2) чтобы получить ссылку на конкретное сообщение форума, нужно кликнуть лкм на его номере в правом верхнем углу сообщения. В появившемся окошке вы получите прямую ссылку на это сообщение.

rolleyes.gif

Автор: Zeleax 14.12.2011, 20:31

Цитата(Elvari @ 11.1.2012, 5:09) *

где можно скачать версию 2.23?

http://ifolder.ru/28067776

**************************
Цитата
в некоторые программы не удается посылать данные клавиатуры- часть пропадает
закладка "Еще", пункт "Пауза SendEx" - выбираем свою ОС и ставим задержку.
Кстати, команде send нужна привязка к окну, а post только для 32х битных систем, и уже не актуальна.

Учтите, что для системы даже отдельное поле ввода является отдельным рабочим окном!
Используйте Window Scanner для изучения структуры окон и функцию пилота GetWindow для выбора нужного окна из этой структуры.

**************************
Цитата(Elvari @ 8.1.2012, 23:07) *

нужно в самое начало скрипта вставить условие которое будет проверять не является ли содержимое файла строкой "#tn"
только вот как это сделать, если из-за символа # пилот сразу подумает что это число?

Пример занесения текстового значения '#tn' в переменную с помощью операций с массивами:
Код
set %a [1 1] #
set %a [1 2] tn
set $b %a [1]
msg %a [1]   #tn     $b

set #tn 7
set $b %a [1]
set #b $b
msg %a [1]   #tn     $b    #b
end_script

Автор: Zeleax 12.1.2012, 13:18

Небольшая процедура checkcolor для проверки значения цвета в указанных координатах окна без использования проверок цвета в if и getcolor, а только с помощью findcolor. Рабочее окно может быть закрыто другими окнами. В браузере Opera не работает (findcolor не находит цвет).

Код
set #cfound 0 // переменная для получение результатов поиска

call checkcolor 969, 64 1251183
if #cfound = 1  
   msg Цвет найден!
else
   msg Цвет не обнаружен!
end_if
end_script

// Проверяет в текущем рабочем окне пиксель с координатами #x, #y на соответствие цвету #c.
// Результат: глобальная переменная скрипта #cfound=1, если цвет найден; #cfound=0, если не найден
proc checkcolor #x #y #c
   set #cs current_script
   set #a findcolor (#x, #y #x, #y 1 1 #c %arr workwindow.#cs )
   if #a > 0
      set #cfound.#cs 1
   else
      set #cfound.#cs 0
   end_if      
end_proc

Автор: WKnight 13.1.2012, 2:22

Цитата
Если мыша не двигается в нужное место, а только кликает там где находится:
Цитата(asdvo1ty @ 15.11.2011, 9:46)
Возможно, стоит снять галочку с "Возвращать курсов мыши после кликов". Мне помогло)

еще есть галочка "перемещать курсор в точку клика", если правильно помню, аналог команды мове.

Автор: Zeleax 15.1.2012, 17:40

Цитата(Gabrrr @ 15.1.2012, 16:33) *

Как написать, чтобы просто кликнуть лкм в том месте, где сейчас мышка. можно подробнее?

Код
get mouse_pos #x #y abs
kleft #x #y abs

можно и без abs в обеих строках

Автор: Zeleax 15.1.2012, 21:42

Вопрос: Как задать рандомное (случайное) время ожидания? Например, от 6 до 7.5 секунд?

Ответ:

Код
wait random(1500) + 6000 // комментарий - 6000...7500 мсек

Автор: Zeleax 19.1.2012, 13:27

Буду собирать в этом посте дополнительную подборку интересных скриптов smile.gif

1) Отображение в реальном времени относительных координат курсора мыши для рабочего окна другого скрипта и цвет в той точке. Динамическое измерение смещения между указанной точкой и курсором мыши.
Особенно это актуально для браузерных игрушек. https://forum.uokit.com/index.php?showtopic=23096

2) https://forum.uokit.com/index.php?showtopic=22767
3) https://forum.uokit.com/index.php?showtopic=23748
4) https://forum.uokit.com/index.php?s=&showtopic=20701&view=findpost&p=145632
5) https://forum.uokit.com/index.php?showtopic=26742
6) https://forum.uokit.com/index.php?s=&showtopic=20548&view=findpost&p=207523

Автор: Zeleax 24.1.2012, 0:31

Цитата(Elvari @ 23.1.2012, 23:25) *

я уже давно на панель быстрого запуска добавил батничек, чтоб прибивать пилот при глюках smile.gif
Код
@echo off
taskkill /F /IM uopilot*


Автор: Zeleax 24.1.2012, 9:38

Для помощи в игре LA2 и для борьбы с фростом сделана dll (плагин к пилоту):

Цитата(WKnight @ 23.1.2012, 18:59) *

dll-ка мешает фросту пакостить в пилоте. что решает, это зависит от ряда факторов, у когото всё решает, у когото ничего. единственным минусом является мелкое ограничение функциональности интерфейса пилота.

В паре с этой дллкой очень хорошо показал себя касперский, другие не тестил.
Не рекомендуется использовать эту dll, если пилот нормально работает без неё.

https://forum.uokit.com/index.php?s=&showtopic=23004&view=findpost&p=163862. Также желательно прочитать всю тему, в которой находится указанное сообщение.

Автор: Zeleax 27.1.2012, 14:11

https://forum.uokit.com/index.php?s=&showtopic=21882&view=findpost&p=156310 написания своего плагина к пилоту

Автор: Zeleax 28.1.2012, 9:54

Цитата(WKnight @ 28.1.2012, 3:18) *

Есть автоматическое переименование пилота при запуске. Заголовок настраивается в конфиге.

RenameSelf=1
RenameSelfTo=Program Manager


Вопрос: Как найти остаток от деления одного числа на другое? Как делать спойлеры?
Ответ:
Остаток от деления
Код
set #a 7
set #b 3
set #c #a - ( #a / #b ) * #b
msg Остаток от деления #a на #b равен #c
end_script

Чтобы увидеть пример написания спойлера, нажмите под этим моим сообщением кнопку "Ответить" и увидите пример использования в открывшемся внизу окошке в тексте цитаты. Используется ключевое слово spoiler в начале и /spoiler в конце блока (и то и другое в квадратных скобках)

Автор: Zeleax 30.1.2012, 11:38

Мини-хелп по "неработающему" пилоту

Если пилот не работает (не кликает мышкой, не нажимает кнопки, не находит цвета/картинки, не работают макросы, появляются ошибки), то рассмотрим следующие варианты "лечения".

То что обычно забывают сделать:
1) установить самую новую версию UOPilot (ссылка есть в 1-м посте этой темы). В старых версиях многие команды и возможности просто не работают;
2) привязать пилот к рабочему окну или полю ввода текста (см.1-й пост темы). Иногда спасает только привязка по заголовку окна (особенно в ЛА2);
3) запускать пилот с правами администратора (правый клик мышкой на пилоте, "Запустить с правами администратора"); еще хорошо помогает отключение UAC (см.Яндекс) с последующей перезагрузкой - особенно при проблемах с макросами;
4) в некоторых играх используется технология защиты "фрост". Для таких игр можно попробовать версию пилота с анти-фрост плагином + поставить Касперского и всячески ограничить фрост в правах.
5) могут быть проблемы с определением цветов, поиском изображений, управлением мышкой, если игра работает в полноэкранном режиме - попробуйте переключить игру в оконный режим.

Далее рассмотрим отдельные направления:

Не жмутся кнопки клавиатуры (не печатается текст):
а) в настройках уберите птичку с "Возвращать курсор мыши после кликов", если в скрипте используются клики мышкой;
а) попробуйте перед вводом текста сделать клик мышкой командой kleft на рабочем окне или в нужном месте ввода текста.
б) попробуйте разные команды отправки текста(нажатия кнопок) в порядке следующей очередности: sendex / send / send217 / post (для 32-битных ОС) / send_down+wait+send_up / say (см."Историю развития" в хелпе пилота);
Обычно sendex хорошо помогает (кнопки типа F1 пишем как {F1}). Но sendex работает только в активном окне.
в) перед использованием команд нажатия кнопок: поднимите рабочее окно на передний план командой showwindow (особенно важно для sendex, который не работает в свернутых или закрытых окнах) и поставьте команду wait для того, чтобы система успела отреагировать и "полностью поднять" на верхний план нужное окно.
Программа "Максимум" выглядит так:

Код
showwindow // поднимаем нужное рабочее окно на передний план
wait 500 // ждем, чтоб окно поднялось
kleft 10, 20 // кликаем в точке ввода текста
wait 200 // ждем
sendex test // печатаем нужный текст


Если при использовании sendex "глотаются" символы
В пилоте на закладке "Ещё" настраиваем опции sendex:
- выбираем свою ОС
- задаём паузу между символами от 10 до 200 мс

Есть еще один вариант - https://forum.uokit.com/index.php?s=&showtopic=20548&view=findpost&p=160759. Довольно надёжно работает, но несколько неудобно в использовании в скриптах.

Не кликает мышка
- поменяйте команды kleft <> left (однако kleft не работает в фоновом окне);
- перед кликом командой move переместите мышку в точку клика , или поставьте птичку в настройках пилота "Перемещать курсор в точку клика";
- в настройках уберите птичку с "Возвращать курсор мыши после кликов".

Есть еще хитрое решение, использующее виртуальную машину, позволяющее обходить различные защиты в играх:
- запускаем игру в развёрнутом окне виртуальной машины
- запускаем пилот и включаем скрипт на основном компьютере (не в виртуальной машине)
Получается, что пилот кликает мышкой на основном компьютере, а защита в игре об этом даже не догадывается, т.к. не отличает поступающие клики пилота внутрь виртуальной машины от обычных "правильных" кликов.
Из самых известных виртуальных машин можно порекомендовать: VirtualBox (бесплатно), VMWare.

Не находится нужный цвет/картинка
Основных 4 варианта:
1) Картинка имеет неверный формат/"повреждена" конвертацией. Надо bmp 24 бита, проще всего сделать в Paint (PrintScreen в игре с последующий вставкой в Paint по Ctrl+V, "Сохранить bmp", "24-xразрядный bmp"). Ни в коем случае не переделывайте jpg в bmp. Вообще никогда не переделывайте форматы. Никак. Переименование и конвертация и еще что-нибудь тоже не помогут. Картинка изначально должна быть bmp 24 бита.
2) Ошибочные координаты поиска.
3) Отсутствие привязки скрипта к рабочему окну либо ошибочная привязка приведет к пункту 2.
4) Ошибочный адрес файла с картинкой.

Сделайте log #a, это позволит хотя бы ошибок в адресе избежать.Если set #a findimage (...) возвращает -4, то это косяк адреса.

- Используйте последний синтаксис команд findcolor/findimage для поиска в рабочем окне (см."Историю развития" в хелпе пилота):
Код
set #a findcolor (#x1, #y1   #x2, #y2  1 1  #color %array workwindow)
set #a findimage (#x1, #y1   #x2, #y2 ($полный_путь_к_файлу_картинки)  %array workwindow #точность 1 #отклонение)

- возможно, что в игре картинка немного отличается от указанной (актуально, когда она в игре полупрозрачна), тогда попробуйте указать #отклонение в пределах от 10 до 20. Иногда можно еще попробовать снизить #точность от 100 до 70 (90).
- помните, что если рабочее окно свёрнуто, то пилот в нём не найдет цветов/картинок. Если же окно не свернуто (неважно- закрыто другими окнами или нет), то findcolor/findimage в последней версии пилота обычно нормально находят цвета и картинки. if color, while color, get color работают только в видимых на экране окнах (не в свёрнутых, и не в перекрытых).

Не работают макросы
Должен отметить, что в Win7x64 наблюдаются серъезные проблемы с макросами ("синий экран смерти"). Решения пока нет (кроме смены ОС). Есть альтернатива- вместо макросов сделайте всё на скриптах.

Автор: Zeleax 2.2.2012, 20:07

Настройка горячих клавиш для запуска скриптов

Иногда возникает необходимость сделать быстрый запуск каких-либо скриптов по нажатию "горячих" клавиш.
Делается это следующим образом:
1) загружаем все необходимые скрипты в отдельные вкладки UOPilot;
2) открываем в пилоте вкладку "Ещё";
3) нажимаем кнопку Edit HotKeys;
4) в появившемся окошке кликаем на нужном скрипте в правом нижем углу, чтобы он был выделен (см.рисунок);
5) в левом нижнем углу выбираем- какой комбинацией клавиш запускать указанный скрипт;
6) слева внизу нажимаем кнопку Apply. В правом нижнем углу напротив скрипта справа появится комбинация кнопок для его запуска, а слева от имени значок "X";
http://imageshack.us/photo/my-images/190/20120202185249.jpg/

Если нужно назначить горячие кнопки для другого скрипта - переходим к п.4

Если требуется убрать назначение горячих клавиш для скрипта, то следует нажать на крестике слева от имени скрипта, чтобы крестик исчез. Затем нажать кнопку Apply.

P.S.:
- слева вверху и справа вверху птички ставить не нужно;
- для отдельных скриптов можно назначить горячие кнопки только для запуска (но никто не запрещает сделать дополнительный скрипт, в котором есть команды паузы/остановки других нужных вам скриптов)

Автор: Zeleax 7.2.2012, 13:39

Цитата
добавил функцию установки текущей раскладки клавиатуры 'set $var setlayout (layout)'. возвращает 1 если установка раскладки прошла удачно, в противном случае 0. 'layout' можно указывать четырех-восьми символьным шестнадцатеричным значением.

Пример использования:
Код
// печатаем одной строкой текста: Вася.Пупкин@gmail.com

set $var setlayout (0419) // включили русскую раскладку
sendex Dfcz/Gegrby // Вася.Пупкин (смотрим на клавиатуру)
set $var setlayout (0409) // включили английскую раскладку
sendex ~2gmail.com // @gmail.com

Список языков для setlayout:
0419 - русский;
0409 - английский;
0422 - украинский;
0423 - белорусский

Иногда sendex начинает глючить. Тогда нужно закрыть и снова запустить UOPilot.

Автор: Zeleax 10.2.2012, 10:13

Цитата(ortego @ 9.2.2012, 16:03) *

Помогите, есть ли команда какая либо, чтоб в игре пилот делал поворот камеры в сторону, тоесть нажал правую кнопку мыши и провел в право ?


Зажатие правой кнопки мыши и движение в сторону
Код
set linedelay 1 // устанавливаем задержку времени между строк скрипта в мс
wait 1000 // немного подождем в начале скрипта (необязательно)
get mouse_pos #x #y // получаем текущие координаты курсора мыши
set #n 10 // число перемещений мыши в сторону
set #step 15 // шаг перемещения курсора мыши
set #dir 1 // направление движения курсора мыши: 1 направо, -1 налево

set #step_i ( #dir ) * #step // вычисляем шаг с учетом направления
set #iEnd #x + ( #n * #step ) * #dir // конечная координата X курсора мыши

kright_down #x #y // зажимаем правую кнопку мыши
for #i #x #iEnd #step_i
   move #i #y // перемещаем курсор с заданным шагом
   wait 100 // задержка в мс между перемещениями
end_for
kright_up #iEnd #y // отпускаем правую кнопку мыши
end_script // конец скрипта

Автор: Zeleax 10.2.2012, 13:58

Цитата(DarkMaster @ 10.2.2012, 12:23) *

Некоторые приложения в свернутом/не активном состоянии не обрабатывают клики клавиатуры (зачастую бОльшая часть приложения переходит в режим ожидания для снижения нагрузки).
тут вариантов к сожалению не много. на вин ХР иногда можно быо обмануть подобные приложения. Делаем активным окно в которое необходимо посылать нажатия, наводим мышкой на панели задач правее кнопки "пуск" на это самое окно, нажимаем один раз левой кнопкой мышки по окну на панели задач. Далее все работало, однако были и грабли - приложение обрабатывало все нажатия не только пилота, но и человека. Т.е. если печатать в блокноте, то в это время чар будет носиться и кутяпликов убивать.

Автор: Zeleax 12.2.2012, 11:53

Не используйте goto для выхода из цикла for, т.к. при повторном входе в этот цикл произойдет ошибка (спасибо DarkMaster и zavas за информацию). Исправлено начиная с версии 2.31

Пример
Код
:start
for #i 1 5 // тут будет ошибка после использования goto внутри цикла
  if #i = 3
     msg Используем goto
     goto after
  else
     gosub after_end
  end_if
end_for
:after
msg Вне цикла i = #i

for #j 1 2 // работает нормально
   msg Цикл j = #j
end_for

goto start
end_script

:after_end
   msg test
return

Автор: DarkMaster 12.2.2012, 12:02

gosub тоже низя. Из-за этого пришлось переписывать в свое время управляющий блок скрипта. Возможно было связано с break внутри подпрограммы, точно не помню, но грабли были точно.

Автор: DarkMaster 5.3.2012, 11:43

Нахождение целой части квадратного корня:

Код
set #x 549846
set #min 1
set #raznostb 1

:start
set #x #x - #min
if #x > #min
set #min #min + 2
goto start
end_if
set #rezult (#min + 1) / 2
msg #rezult
stop_script

Автор: zavas 5.3.2012, 23:38

Цитата(DarkMaster @ 12.2.2012, 13:02) *

gosub тоже низя. Из-за этого пришлось переписывать в свое время управляющий блок скрипта. Возможно было связано с break внутри подпрограммы, точно не помню, но грабли были точно.

Как раз с gosub проблем не возникало. Потому что выхода из цикла, как такового нет, т.к. return возвращает в цикл...
Перебегая из задней двери троллейбуса в переднюю- повторная плата за проезд не взимается. Троллейбус все тот же.

Автор: zavas 6.3.2012, 9:19

Проверка ввода символов на не числовые значения. Например для торговли.
Торговать словами могут только политики biggrin.gif
При вводе символов, отличных от цифр, в переменную #number записывается число -1.

Три копейки

Код
set $number prompt (Дави на кнопки)
set #number hex2dec ($number)
if #number < 0
   msg Введенные значения не числовые = $number
else
   msg Введены числовые значения = $number
end_if


end_script


Автор: WKnight 7.3.2012, 14:20

Цитата
set #number hex2dec ($number)

а чем не нравится 'get number'?

Автор: Zeleax 7.3.2012, 16:13

Цитата(zavas @ 7.3.2012, 14:16) *
Можно ли использовать системное время?

Код
msg Сейчас  hour : min : sec - day / month / year 
end_script

Автор: Zeleax 11.3.2012, 13:21

Пример скрипта для сортировки одномерного массива по возрастанию элементов

Скрипт сортировки одномерного массива
Код
// Инициализация массива
set %m[1] 5
set %m[2] 3
set %m[3] 10
set %m[4] 1
set %m[5] 7
set #n size(%m) // число строк в массиве

gosub print_array
msg Сейчас сделаем сортировку...
// Сортируем массив
for #i 1 #n
   set #min %m[#i]
   set #imin #i
   set #ii #i + 1
   for #j #ii #n
      if %m[#j] < #min
         set #min %m[#j]
         set #imin #j
      end_if  
   end_for
   // меняем местами минимальный элемент с текущим, используя промежуточную #z
   set #z %m[#i]
   set %m[#i] %m[#imin]
   set %m[#imin] #z  
end_for

gosub print_array

end_script

:print_array
// Соберем все элементы в одну текстовую строку
set $s // пустая строка
for #i 1 #n
   set $s $s  %m[#i] // добавляем каждый элемент в конец строки  
end_for
msg Массив M содержит #n элементов: $s
return

Автор: Zeleax 21.3.2012, 21:50

Цитата(rogtrip @ 21.3.2012, 20:32) *

Нашел программу http://synergy-foss.org/?hl=ru_RU, очень доволен.
Можно 1 мышкой и клавой управлять всеми компами, так же можно настроить: нажимаю у себя кнопку и нужная кнопка нажимается на нужном компе.
У кого пару компов юзайте, очень удобная программа.

Автор: WKnight 25.3.2012, 13:15

панелька для изменения адресов параметров чара и прочих переменных, считываемых из памяти приложения при обращении к ним, открывается при выборе клиента 'custom'

Автор: Zeleax 7.4.2012, 23:18

Цитата(zavas @ 7.4.2012, 22:04) *

Есть строка:
set $string П е ч а т н а я ~ м а ш и н к а
как узнать количество символов (не считая пробелов)?

Ответ:
Код
set $s a b c
set #sz size($s)
set #n 0
for #i 1 #sz
  set $c copy($s #i 1)
  if $c != " "
    set #n #n + 1
  end_if
end_for
msg В строке $s всего #n символа(-ов) кроме пробела
end_script

Автор: zavas 18.4.2012, 3:46

Чуть-чуть расширил пример остатка от деления от Zeleax

Чёт-нечёт

set #a 33
set #b 10
set #c #a - ( #a / #b ) * #b
set #x #c - (#c / 2) * 2
if #x = 1
set $evenOdd Не чётное
else
set $evenOdd Чётное
end_if
msg Остаток от деления #a на #b равен #c /nЧисло $evenOdd

end_script

Автор: Zeleax 18.4.2012, 7:05

Цитата(_LESTAT_ @ 17.4.2012, 23:38) *

Вот придумал тихий запуск:
Код
set %mas [ 1 1 ] activex.Run("cmd /c start http:/
set %mas [ 1 2 ] /ya.ru", 0, true);
set %js [1] var activex = new ActiveXObject("WScript.Shell");
set %js [2] %mas [1]
save_array %js "c:\Temp.js"
ExecAndWait wscript "c:\Temp.js"
//DeleteFile  "c:\Temp.js"
end_script


В пилоте сильно нехватает команды DeleteFile, чтобы тихо удалять временные файлы. Я понимаю, что можно удалять через командную строку, то тогда смысл в тихом запуске пропадает. Пожалуйста добавте такую полезную мелоч, в следующей версии.
Если микрофайлик Temp.js в корне вам мешает, а моргающее 0.3-1сек черное окошко нет, то замените строку //DeleteFile "c:\Temp.js" на exec cmd /c del "c:\Temp.js"

Автор: Zeleax 19.4.2012, 9:53

Программу Ybex Clipboard удобно использовать для передачи содержимого буфера обмена между двумя компьютерами. Она поддерживает как текстовые, так и графические данные.
Для получения доступа к удаленному буферу нужно лишь завести бесплатную учетную запись на сайте http://ybex.com и указать ее данные на каждом ПК, а также установить на них соответствующую программу. После этого все объединенные таким образом машины смогут использовать единый буфер обмена.

Автор: Zeleax 24.4.2012, 14:44

Что такое массивы и с чем их едят smile.gif
https://forum.uokit.com/index.php?s=&showtopic=16290&view=findpost&p=123670

Автор: DarkMaster 2.5.2012, 14:23

Вычисление дня недели

1 пн, 2 вт, 3 ср, 4 чт, 5 пт, 6 сб, 7 вск
Код

// В переменные #year, #month, #day
// помещаются соответственно
// год, месяц, число.
// В качестве примера взята текущая дата.
set #year  Year
set #month Month
set #day   Day
gosub dayOfWeek
msg #dayofWeek
stop_script

:dayOfWeek
   if #month > 2 // Расчет текущего (сегодня) дня недели.
      set #month #month -2
      set #century #year / 100
      set #year #year - #century * 100
   else
      set #month #month 10
      set #year #year - #year / 100 * 100 - 1
      set #century #y / 100
   end_if
   set #dayOfWeek #day + ( ( 13 * #month - 1 ) / 5 ) + #year + ( #year / 4 ) + ( #century / 4 ) - 2 * #century
   set #dayOfWeek #dayOfWeek - #dayOfWeek / 7 * 7
   if #dayOfWeek < 0
      set #dayOfWeek #dayOfWeek + 7
   end_if
return


Дополнение от zavas к скрипту DarkMaster'а "название дня недели"
название дня

set %day[1] Понедельник
set %day[2] Вторник
set %day[3] Среда
set %day[4] Четверг
set %day[5] Пятница
set %day[6] Суббота
set %day[7] Воскресенье

msg %day[#dayOfWeek]

Автор: WKnight 5.5.2012, 8:23

Цитата
избавиться от абсолютного адреса при сохранении скринов

.\
не? smile.gif
правда хз каким каталогом он будет воспринимать текущий smile.gif
придумаем ченить

Автор: Zeleax 13.5.2012, 19:31

MapKeyboard - небольшая бесплатная утилита (англоязычная) с помощью которой можно легко переназначить или полностью отключить кнопки на клавиатуре. Программа будет полезна пользователям нестандартных клавиатур (например на ноутбуках), причем внесенные изменения будут актуальны во все приложениях. MapKeyboard не требует инсталляции.
Сайт программы: http://www.inchwest.com/mapkeyboard.htm


Прикрепленные файлы
Прикрепленный файл  mapkeyboard.zip ( 24,18 килобайт ) Кол-во скачиваний: 846

Автор: DarkMaster 13.5.2012, 22:08

По поводу проги. Она правит реестр подменяя коды клавиш. Минусы - отсутствие возможности сделать перемещение только под русскую или английскую раскладки.
Microsoft Layout Creator полноценный инструмент для создания собственной раскладки. После необходимых вам изменений будет создан инсталяционный файл, который добавит вашу раскладку в стандартные языковые раскладки. По сути будет такая же полноценная раскладка как английская, русская, немецкая, украинская и т.д.
http://go.microsoft.com/fwlink/?LinkId=82315&clcid=0x409

Автор: Zeleax 28.5.2012, 11:35

Простые бесплатные программы для управления удаленным рабочим столом (компьютером):
http://teamviewer.com - проверено, работает smile.gif
http://www.ammyy.com - очень маленького размера (пока не проверял)

Автор: zavas 4.6.2012, 17:25

В пилоте не надо думать, как пишется та или иная клавиша. Достаточно выбрать необходимую клавишу из списка.
http://radikal.ru/F/s018.radikal.ru/i501/1206/25/ea2064d232f6.bmp.html

Автор: Zeleax 3.8.2012, 10:56

Вопрос:

Цитата(JohnyLee @ 3.8.2012, 10:48) *

Здравствуйте.
Мне необходимо средствами UO Pilot реализовать следующий процесс.
1) Я в игре нажимаю клавишу, например f1, пилот запускает скрипт который отправляет в игру нажатия уже трех других клавиш, например f2, f3, f4, и переходит в режим ожидания, пока я снова не нажму f1.

Ответ:
Пишем скрипт, который жмет всё что нужно. Затем для запуска скрипта https://forum.uokit.com/index.php?s=&showtopic=20548&view=findpost&p=164756.
В конце скрипта не забудьте добавить команду end_script

Автор: xolost 4.8.2012, 20:17

Если вы нарезаете картинки в разрешении 1280 на 1024 с включенными настройками сглаживания винды(clearType), то эти картинки не будут равны картинкам в более низких разрешениях экрана.

Поэтому, если есть вы считаете, что будете запускать скрипты в разрешении ниже чем 1280 на 1024, то совет нарезать картинки так же в более низком разрешении(любом низком отличным от этого).

Автор: Zeleax 4.11.2012, 17:47

Вопрос:
Прошу подсказать мне, или разобраться..
Задаю условие

Код
if_not (x1 y1 color1) and (x2 y2 color2) // условие такого вида не хочет работать правильно
  bla bla bla
end_if

Однако если реализовать следующим образом
Код
if_not (x1 y1 color1)
if_not (x2 y2 color2)
    bla bla bla
end_if
end_if // то все прекрасно выполняется

Собственно вопрос. Это баг или я что-то неправильно делаю?

Ответ:
Обобщим ситуацию: т.е. вам нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия.
Действительно, с условием if_not у людей часто возникают некоторые недоразумения. smile.gif

Решение простое, хоть и не совсем понятное сразу. Поэтому отвечу и кратко, и развернуто.
Нужно делать так:
Код
if_not (x1 y1 color1) OR (x2 y2 color2)
   что-то делаем
end_if

Почему OR ? Всё довольно просто.

Условие if_not срабатывает только в случае
if_not ЛОЖЬ
(в отличие от оператора if ИСТИНА)

Мы имеем следуюшие логические выражения:
ЛОЖЬ or ЛОЖЬ = ЛОЖЬ
ЛОЖЬ or ИСТИНА = ИСТИНА
ИСТИНА or ЛОЖЬ = ИСТИНА
ИСТИНА or ИСТИНА = ИСТИНА

ЛОЖЬ and ЛОЖЬ = ЛОЖЬ
ЛОЖЬ and ИСТИНА = ЛОЖЬ
ИСТИНА and ЛОЖЬ = ЛОЖЬ
ИСТИНА and ИСТИНА = ИСТИНА

Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше.
Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).

Автор: Zeleax 10.11.2012, 13:33

RAM-диск

Часто приходится в скриптах активно использовать работу с файлами на жестком диске компьютера.
Например, команда пилота FindImage использует файлы на жестком диске для поиска соответствующих картинок на экране. Или команды для чтения/записи массивов (load_array/save_array).

Чтобы зря не гонять винт и для ускорения работы можно в памяти компьютера создать дополнительный виртуальный логический диск, т.н. http://ru.wikipedia.org/wiki/RAM_drive. И уже на этом диске размещать файлы для вывода результатов работы, картинки и т.п.
Вот примеры подобных программ:
http://memory.dataram.com/products-and-services/software/ramdisk (freeware/shareware)
http://www.ltr-data.se/opencode.html/#ImDisk (freeware)
http://www.romexsoftware.com (shareware)

Автор: Zeleax 25.11.2012, 20:49

Дополнение https://addons.mozilla.org/ru/firefox/addon/fastest-search к Mozilla FireFox может искать http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F на текстовой странице браузера и выделять найденный текст. Т.е. текст соответствующий заданному шаблону поиска, а не указанный точно!

В сочетании с командами пилота для работы с клавиатурой и буфером обмена это позволит получать почти любой требуемый текст со страницы браузера. Единственное требование- возможность выделения текста на странице, т.е. из флеша достать текст таким образом не получится.

После установки дополнения необходимо перезапустить браузер (хотя пишут, что и без перезапуска работает). Вызов поиска- комбинация Ctrl+Shift+F.
А вообще есть видеообучение и документация к этому дополнению )

Например, если на странице есть текст "У вас осталось 12 жизней", то можно сделать небольшой скрипт, который будет получать со страницы именно число "12".

Нижеприведенный скрипт находит в данном посте число жизней и отображает его. Перед его запуском в FireFox уже должно быть установлено дополнение Fastest Search и в окне поиска (Ctrl+Shift+F) обязательно должна быть включена опция RegEx (остальные опции нужно выключить или оставить на ваше усмотрение). Окно поиска должно отсутствовать на экране. Пилот должен быть привязан к окну браузера (Ctrl+A).

Код
showwindow // отображаем рабочее окно браузера на передний план
wait 200 // небольшая задержка
set $reg осталось \d{1,3} жизн // искомое регулярное выражение...
set clipboard $reg // ...записываем в буфер обмена
sendex ^~f  // Ctrl+Shift+F - вызов окна поиска Fastest Search (на RegEx должна быть установлена "птичка")
wait 100
sendex ~{Insert} // вставляем из буфера искомое выражение в окно поиска
wait 100
sendex {Enter} // ищем
wait 500 // задержка, чтоб найти и выделить текст в окне
sendex ^{Insert} // копируем выделенный текст в буфер обмена
get clipboard $s // забираем его в переменную $s
get word $w 2 $s // выковыриваем второе слово в строке = числу жизней
if is_real ($w) = 1 // проверяем было ли найдено именно число
   msg Число жизней = $w
else
   msg Не удалось получить число жизней!
end_if
end_script

Автор: DarkMaster 16.2.2013, 2:16

Цитата(EL-GReeN @ 15.2.2013, 22:04) *

Как пилот высчитывает откуда читать статы в уо? просто пробовал найти адрес и считывать хп мп стамину и тд, но у другого человека с таким же клиентом по тому же адресу не то что нужно, вывод: как то по смещениям пилот добирается, как и по каким адресам можете открыть секрет? (client 1,26,4а)

Артмани, пункт 10 справки.

Автор: Zeleax 24.2.2013, 10:38

Считывание текста с изображений на экране.

Изображение
Готовый скрипт Zeleax для считывания линейного текста (любых символов) и обсуждение здесь:
https://forum.uokit.com/index.php?showtopic=25752

Изображение
Если нужно только считать цифры без букв и знаков, то можно воспользоваться менее "тяжелым" и более быстрым скриптом zavas из этой темы:
https://forum.uokit.com/index.php?showtopic=23599

Если нужно распознать несколько слов или капчу, то можно попробовать специальную программу Tesseract
Тема для обсуждения:
https://forum.uokit.com/index.php?showtopic=25759

Автор: Zeleax 2.3.2013, 15:50

Отправка из скрипта сообщения на E-mail

Качаем бесплатную прогу sendEmail
Сайт программы: http://caspian.dotconf.net/menu/Software/SendEmail/
Прямая ссылка на скачивание: http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v156.zip
Скачать с форума: Прикрепленный файл  sendEmail_v156.zip ( 1,39 мегабайт ) Кол-во скачиваний: 985

Распаковываем архив в нужную папку. Всё, пользуемся!

Пример использования в скрипте (одной строкой!):

Код
exec d:\TEMP\sendEmail -t EMail_Получателя -f LOGIN@yandex.ru -xu LOGIN@yandex.ru -xp PASSWORD 
-s smtp.yandex.ru -u Tema soobschenia -m Text soobschenia


1. Вспоминаем имя (LOGIN) и пароль (PASSWORD) от почтового ящика на yandex.ru (если страшно- заводим "левый" ящик :-)
Если еще нет почтового ящика - заводим.
2. Заменяем в примере LOGIN@yandex.ru на свой E-mail на Яндексе, PASSWORD - на свой пароль от указанного почтового ящика на Яндексе. Эти данные нужны для ОТПРАВКИ E-mail через SMTP-сервер Яндекса.
3. EMail_Получателя заменяем на нужный E-mail (куда слать письма)
4. Tema soobschenia - заменяем на нужный текст темы письма (НА АНГЛИЙСКОМ)
5. Text soobschenia - заменяем на нужный текст сообщения письма (НА АНГЛИЙСКОМ)

Можно настроить отправку письма и на русском через доп.опции - почитайте хелп к проге.

Автор: Zeleax 3.3.2013, 11:28

Получение SMS-уведомления о получении письма с определенными параметрами на почтовый ящик GMail:
http://lifehacker.ru/2012/10/14/kak-poluchat-sms-uvedomleniya-o-prikhode-novykh-pisem-v-gmail/

Автор: zavas 25.3.2013, 0:15

Для тех людей, кто не любит ставить лишний софт в систему (мой выбор) и считает, что в системе уже достаточно того, что нужно для работы.
Отправка писем
Powershell предустановлен на OS windows начиная с Vista
Создаём сценарий для "powershell" с именем "mail.ps1". У меня этот файл лежит тут: C:\Users\Sergey\Desktop\UOPilot\

Сценарий отправки писем для powershell

Код
$EmailFrom = "адрес@отправителя"
$EmailTo = "адрес@получателя"
$Subject = "Заголовок письма"
$Body = "Тело письма"
$SMTPServer = "смтп адрес сервера (для gmail = smtp.gmail.com)"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("имя", "пароль");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)



В пилоте выполняем команду
Код
exec powershell -executionpolicy unrestricted -file C:\Users\Sergey\Desktop\UOPilot\mail.ps1 

end_script



Более подробную информацию можно прочитать в теме https://forum.uokit.com/index.php?s=&showtopic=26054&view=findpost&p=189400

Автор: Zeleax 7.5.2013, 12:29

Цитата(KoMoK @ 23.4.2013, 20:14) *

Чтобы переслать в окно EVEonline комбинацию клавиш [Ctrl/Alt/Shift]+[другаякнопка] из UOpilota версии 2.18 и выше, надо использовать такую конструкцию:

На примере [Ctrl]+[F]:

sendex ^{} // нажатие [Ctrl]
send217 f // нажатие [F]
sendex q // сброс [Ctrl]
end_script

По другому не работает к сожалению.

Автор: Zeleax 28.11.2013, 7:39

Цитата(nazar @ 27.11.2013, 22:24) *

что значит если findimage возвращает -4?

файл искомой картинки не найден на диске (неправильно указан путь к файлу в команде).
Добавил в описание команды на UOWiki

Автор: nazar 28.11.2013, 22:05

Цитата(Zeleax @ 28.11.2013, 8:39) *

файл искомой картинки не найден на диске (неправильно указан путь к файлу в команде).
Добавил в описание команды на UOWiki

интересно что ето возникает если картинка толщиной в 1 пиксель, в остальных случаях все норм.

Автор: DarkMaster 28.11.2013, 23:36

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

Автор: nazar 29.11.2013, 1:30

Цитата(DarkMaster @ 29.11.2013, 0:36) *

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


на 1 пиксель вправо и на 3 вниз, при чем все 3 однакового цвета, кажеться я начинаю понимать в чем проблема.

Автор: Zeleax 29.11.2013, 8:24

Странно тогда, что возвращается -4, а не 0. Тоже дописал в UOWiki

Автор: nazar 29.11.2013, 15:01

Цитата(Zeleax @ 29.11.2013, 9:24) *

Странно тогда, что возвращается -4, а не 0. Тоже дописал в UOWiki

я так понял что просто раз все картинка одного цвета и первый пексель делает его исключением то фактическа картинка получаеться пустой, потому и -4=) зделала первый пиксель тупо черным и все заработало))

Автор: DarkMaster 25.12.2013, 9:13

Часто кнопки подсвечиваются при наведении на них. Но несмотря на это, на них зачастую есть статичные цвета. Чтобы не писать диапазоны или не раздувать if'ы, можно поискать не изменяющиеся цвета и их координаты. Собственно код:

Скрипт
Код
set linedelay 0
set #dev 1
if  #dev = 1
    log close
    log clear
    log mode noScript
    set #handleLogWindow findwindow ("Log Window")
    showwindow #handleLogWindow show
    log open 1430 -10 500 300
    set #handleUoPilot findwindow ("UoPilot")
end_if
set $bmp ".bmp"

log Наведите на целевое окно и нажмите ctrl+A.
log Окно будет испозовано только,
log как точка начала отсчета относительных координат.
set workwindow 0
while workwindow = 0
    wait 100
end_while
set #workwindow workwindow

log
log Наведите на ЛЕВЫЙ ВЕРХНИЙ левый угол
log анализируемого объекта и нажмите ctrl+A.
set workwindow 0
while workwindow = 0
    wait 50
end_while
get mouse_pos #startX #startY
log
log Наведите на ПРАВЫЙ НИЖНИЙ угол
log анализируемого объекта и нажмите ctrl+A.
log После чего НЕ перемещайте курсор.
set workwindow 0
while workwindow = 0
    showwindow #handleUoPilot show  
    wait 50
end_while
get mouse_pos #endX #endY

:start
    for #i #startX #endX 1
        for #j #startY #endY 1
            get color #c #i #j
            set %arr1 [ #i #j ] #c
        end_for
        log дипазон строк: #startX #endX текущая строка: #i
    end_for
    set #lastWorkwindow workwindow
    log
    log Теперь убрете кусор с анализируемого объекта  и
    log нажмите ctrl+A для продолжения.
    set workwindow 0
    while workwindow = 0
        alarm
    end_while
    for #i #startX #endX 1
        for #j #startY #endY 1
            get color #c #i #j
            set %arr2 [ #i #j ] #c
        end_for
        log дипазон строк: #startX #endX текущая строка: #i
    end_for
    log clear
    log Статичные точки:
    for #i #startX #endX 1
        for #j #startY #endY 1
            if  %arr1 [ #i #j ] = %arr2 [ #i #j ]
                log #i   #j   %arr1 [ #i #j ]
            end_if
        end_for
    end_for
    stop_script
goto start

stop_script

Ссылка не тему https://forum.uokit.com/index.php?showtopic=27054

Автор: Zeleax 26.10.2014, 8:18

Скрипт для отслеживания координат, смещений и цветов точек на экране

Смысл скрипта:
Запускаем, водим мышей по экрану, и видим данные по координатам и цветам точек под курсором. Если надо запомнить очередную точку под курсором- жмем Ctrl+A.
Когда закончили сбор инфы по точкам - на последней точке жмём Ctrl+A два раза.

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

Пояснения по пунктам меню:
Отслеживание - просто просмотр инфы о пикселах
Мышка_0 - мышкой указываем на экране точку нулевого отсчета (для определения смещений)
Клавиатура_отн0 - с клавиатуры вводим точку нулевого отсчёта в относительных координатах окна
Инфо_окна - получить инфу об указанном окне (координаты угла, размеры, хендл, заголовок)- в буфер обмена и на экран.

Обработка инфы по собранным точкам- подготовка к копированию в буфер обмена:
copy_abs_coords - копируем абсолютные координаты точек
copy_relative_coords - копируем относительные координаты точек
copy_deltas - копируем смещения

dont_add_colors - не добавляем цвет после каждой координаты
add_active_colorsA - добавляем цвет после каждой координаты, тот что был под курсором мыши в момент нажатия Ctrl+A
add_nonactive_colorsB - добавляем цвет после каждой координаты, тот что сейчас

Скрипт
Код
// Скрипт отслеживания координат и цвета v1.6 (c) Zeleax
set #sn 0 - 1  // !!! отслеживаем координаты курсора и цвет для указанного скрипта
set #uopilot findwindow (UoPilot)
if #uopilot = 0
   msg Не найдено окно пилота
   stop_script
end_if

// если указанный номер < 0, то предлагается выбрать рабочее окно вручную
gosub showcoord
end_script

// Отображает текущие относительные и абсолютные кординаты курсора для другого скрипта
// заданного по номеру. а также цвет ДЛЯ РАБОЧЕГО ОКНА в текущей позиции мыши
// В отслеживаемом скрипте после привязки к окну обязательно должна быть строка:
// set #myworkwindow workwindow
:showcoord
   set linedelay 1
   if #sn < 0 // or #myworkwindow.#sn = "" // забыли привязаться к другому скрипту, или другой скрипт не работает
      msg Укажите рабочее окно: поместите мышку над ним и нажмите Ctrl+A
      showwindow #uopilot
      
      set workwindow 0
      while workwindow = 0
      end_while
   else
      set workwindow #myworkwindow.#sn // задали рабочее окно
   end_if
   set #w workwindow
  
   :start1
   set #b prompt(Отслеживание Мышка_0 Клавиатура_отн0 Инфо_окна)

   if ( #b = 1 ) or ( #b = 0 )
      set #mode 1
   else
      set #mode 2
   end_if

   if #b = 2 // указание точки отсчета на экране
      msg Наведите мышку на точку нулевого отсчета в окне и нажмите Ctrl+A. /n Последующие нажатия Ctrl+A запоминают указанные точки в буфер обмена/n Закончить: Ctrl+A на последней точке повторно
      showwindow #uopilot

      hint Наведите мышку на точку нулевого отсчета в окне и нажмите Ctrl+A
      set workwindow 0
      while workwindow = 0
      end_while
      
      set workwindow #w
   end_if
   if #b = 3 // ввод кординат точки отсчета вручную
      set $x 0
      set $y 0
      set $x prompt (Введите_X0)
      set $y prompt (Введите_Y0)
      set #x0 $x
      set #y0 $y
      wait 500
      move #x0 #y0
   end_if
   if #b = 4 // Инфо окна
      set $wtitle getwindowtext (workwindow)
      get windowpos workwindow #x #y #width #height
      set $tmp Хендл: workwindow . Xabs= #x, Yabs= #y, W= #width, H= #height . Заголовок: $wtitle
      set clipboard $tmp
      msg $tmp /n Данные в буфере обмена
      goto start1 // окно выбора вариантов
   end_if

   if #mode = 2 // относительные смещения
      get mouse_pos #x0 #y0 abs
      set #a findcolor (#x0 #y0 #x0 #y0 1 1 (R(0-255)+G(0-255)+B(0-255)) %arr workwindow abs) // получаем цвет в точке
      get color #color %arr[1 1] %arr[1 2] abs // сохраняем цвет в переменной
      alarm
    end_if

    get mouse_pos #xa #ya abs
    get mouse_pos #x #y
    set #diffx #xa - #x
    set #diffy #ya - #y
  
   set #n 0
   while 1 = 1 // бесконечный цикл
      set workwindow 0
      while workwindow = 0
        get mouse_pos #xa #ya abs
        get color #color #xa #ya abs // сохраняем цвет в переменной
        set #x #xa - #diffx
        set #y #ya - #diffy
      
        if #xa < 350 and #ya < 150
           set #hy 200
        else
           set #hy 0
        end_if
        set #tmp colorToRGB(#color %cc)
        if #mode = 1
            hint (12 255 0 #hy ( #x, #y / #xa, #ya abs - цвет #color (%cc[1 1] %cc[1 2] %cc[1 3]) /n Точек: #n ))
        else
          set #dx #xa - #x0 // считаем смещение относительно нулевой точки
          set #dy #ya - #y0
          hint (12 255 0 #hy ( #x, #y / #xa, #ya abs - цвет #color (%cc[1 1] %cc[1 2] %cc[1 3]) /n (dx, dy) = #dx, #dy /n Точек: #n ))
        end_if
        wait 100
      end_while // workwindow = 0
      
      if #n > 0 and %brr[#n 1] = #xa and %brr[#n 2] = #ya // кликнули Ctrl+A 2 раза в одном месте
        break
      end_if
      
      set #n #n + 1
      init_arr %brr (#n 3) #xa #ya #color
   end_while // бесконечный цикл
  
   set #k prompt(copy_abs_coords copy_relative_coords copy_deltas)
   set #c prompt(dont_add_colors add_active_colorsA add_nonactive_colorsB)
   set $buf
  
   if #c = 3 // убираем мышку в нулевую точку
     move 0 0 abs
     wait 200
   end_if
  
   set #brlen size(%brr)
   for #i 1 #brlen
     switch #k
       case 1: set #x %brr[#i 1]
         set #y %brr[#i 2]
         break
       case 2: set #x %brr[#i 1] - #diffx
         set #y %brr[#i 2]  - #diffy
         break
       case 3: set #x %brr[#i 1] - #x0
         set #y %brr[#i 2]  - #y0
         break  
       case: stop_script  
     end_switch
    
     switch #c
       case 1: set $buf $buf #x #y ,
         break
       case 2: set $buf $buf #x #y %brr[#i 3] ,
         break
       case 3: get color %brr[#i 1] %brr[#i 2] #color abs
            set $buf $buf #x #y #color ,
         break        
     end_switch
    
   end_for
  
   set clipboard $buf
  
   msg Данные в буфере обмена
  
end_script

Автор: cirus 3.11.2014, 22:15

Цитата(Gizcerbes @ 3.11.2014, 21:21) *

Ребят помогите, может кто то знает как сохранять сразу группу скриптов в UoPilot:? А то как то не очень нравится по очереди открывать))

Откройте все нужные скрипты, нажмите сохранить настройки. Когда будете скидывать кому-то скрипты давайте еще uopilot.ini. В нём все последние настройки будут сохранены, включая последние запущенные скрипты. Только пусть скриптам должен быть у всех одинаковый. К, примеру, C:\Script.

Автор: Zeleax 4.2.2015, 21:00

Цитата
надо делать #zz положительным, если он отрицательны.
SET #zz -#zz не работает.

Цитата(cirus @ 30.1.2015, 20:00) *

Как вариант:
Код
set #zz -50
   if #zz < 0
      set #zz #zz - (#zz * 2)
   end_if
log #zz


или так
Код
set #zz -50
set #zz abs(#zz)

Автор: Mislitel2000 10.11.2015, 12:16

Цитата(Zeleax @ 25.11.2012, 21:49) *

Дополнение https://addons.mozilla.org/ru/firefox/addon/fastest-search к Mozilla FireFox может искать http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F на текстовой странице браузера и выделять найденный текст. Т.е. текст соответствующий заданному шаблону поиска, а не указанный точно!

В сочетании с командами пилота для работы с клавиатурой и буфером обмена это позволит получать почти любой требуемый текст со страницы браузера. Единственное требование- возможность выделения текста на странице, т.е. из флеша достать текст таким образом не получится.

После установки дополнения необходимо перезапустить браузер (хотя пишут, что и без перезапуска работает). Вызов поиска- комбинация Ctrl+Shift+F.
А вообще есть видеообучение и документация к этому дополнению )

Например, если на странице есть текст "У вас осталось 12 жизней", то можно сделать небольшой скрипт, который будет получать со страницы именно число "12".

Нижеприведенный скрипт находит в данном посте число жизней и отображает его. Перед его запуском в FireFox уже должно быть установлено дополнение Fastest Search и в окне поиска (Ctrl+Shift+F) обязательно должна быть включена опция RegEx (остальные опции нужно выключить или оставить на ваше усмотрение). Окно поиска должно отсутствовать на экране. Пилот должен быть привязан к окну браузера (Ctrl+A).
Код
showwindow // отображаем рабочее окно браузера на передний план
wait 200 // небольшая задержка
set $reg осталось \d{1,3} жизн // искомое регулярное выражение...
set clipboard $reg // ...записываем в буфер обмена
sendex ^~f  // Ctrl+Shift+F - вызов окна поиска Fastest Search (на RegEx должна быть установлена "птичка")
wait 100
sendex ~{Insert} // вставляем из буфера искомое выражение в окно поиска
wait 100
sendex {Enter} // ищем
wait 500 // задержка, чтоб найти и выделить текст в окне
sendex ^{Insert} // копируем выделенный текст в буфер обмена
get clipboard $s // забираем его в переменную $s
get word $w 2 $s // выковыриваем второе слово в строке = числу жизней
if is_real ($w) = 1 // проверяем было ли найдено именно число
   msg Число жизней = $w
else
   msg Не удалось получить число жизней!
end_if
end_script



Там вроде при копировании выделенного текста в буфер вместо sendex ^{Insert} должно быть sendex ^c. Во всяком случае у меня только так заработало smile.gif

Автор: terex78 22.9.2016, 1:18

Подскажите возможно ли настроить на этой программе 4-5 действий только для мыши? Если да то пожалуйста подробно как..

Автор: cirus 22.9.2016, 2:38

http://uopilot.tati.pro/index.php?title=Список_функций
Раздел Мышка. Смотрите примеры. Если что-то не понятно создайте отдельную тему.

Автор: Mik 25.1.2017, 19:07

Здравствуйте, кто подскажет, как запускать автоматически все рабочие скрипты вместе с запуском UO Pilot а?

Автор: cirus 25.1.2017, 19:13

Код
Здравствуйте, кто подскажет, как запускать автоматически все рабочие скрипты вместе с запуском UO Pilot а?

Первый пост этой темы, под спойлером Запуск UO Pilot, Автоматический запуск скрипта.

Автор: Mik 26.1.2017, 18:58

Цитата(cirus @ 25.1.2017, 19:13) *

Код
Здравствуйте, кто подскажет, как запускать автоматически все рабочие скрипты вместе с запуском UO Pilot а?

Первый пост этой темы, под спойлером Запуск UO Pilot, Автоматический запуск скрипта.


"Командная строка
Для загрузки с параметрами, указанными ниже, отредактируйте ярлык либо создайте bat файл."
Объясните, пожалуйста мне, нубу, что и где редактировать и создавать blink.gif

Автор: cirus 26.1.2017, 20:02

В свойствах ярлыка дописать /r0, где 0 это номер скрипта.
Прикрепленное изображение

Автор: Mik 28.1.2017, 0:16

Цитата(cirus @ 26.1.2017, 20:02) *

В свойствах ярлыка дописать /r0, где 0 это номер скрипта.
Прикрепленное изображение



Прикрепленные файлы
Прикрепленный файл  Новый_точечный_рисунок__4_.bmp ( 3,75 мегабайт ) Кол-во скачиваний: 582

Автор: cirus 28.1.2017, 1:00

Через пробелы надо писать. Посмотрите мой скрин.

Автор: Mik 28.1.2017, 22:06

Цитата(cirus @ 28.1.2017, 1:00) *

Через пробелы надо писать. Посмотрите мой скрин.


По всякому пробовал, решил проблему через бат файл, спасибо за помощь

Автор: FREEON 14.2.2017, 1:40

Проблема в том что когда значение не верное то отправляет приглашение как и нужно, но дальше продолжает выполнять скрипт игнорируя строку if. Как сделать что бы пилот повторял запрос if_not до тех пор пока не соберутся 5 звезд как нужно...звезды повышают игроки и время ожидания может быть разным. А по кругу нет смысла делать ведь нужно выполнить пять квестов данного типа и затем переключиться на другое задание.

Код
Скрипт:
if 1555, 398 65
     left 1555, 398      //Открыть окно ГИ
end_if
if 590, 399 931255
     left 593, 358 //Получить квест
end_if
if_not 642, 443 3394287 //Если нет 5 звезд,
     left 1553, 395 //то отправить приглашение
     wait 5s
end_if
if  642, 443 3394287 //если есть 5 звезд
     left  1394, 376 //выполнить задание
end_if
Дальше идет тоже самое только на 4 однотипных заданий

Я новенький, поэтому не очень разбираюсь еще, только в простых совсем скриптах. И если можно то сбросте свои мануалы с комментариями к каждой строке...если таковы имеются. Потренироваться хочу unsure.gif
P.S. И как задовать цикличность повторений. А то у меня функция Repeat не работает, а гоняет покругу пока не выключишь сам
Код

repeat 25
left координаты
wait 1s
left координаты
end_repeat
end_script

Автор: cirus 14.2.2017, 2:18

Лучше создайте новую тему с интересующими вопросами, чтобы не засорять эту.

Цитата
Как сделать что бы пилот повторял запрос if_not

Код
if_not 642, 443 3394287 //Если нет 5 звезд,
     left 1553, 395 //то отправить приглашение
     wait 5s
end_if

Заменить на:
Код
while_not 642, 443 3394287 //Если нет 5 звезд,
     left 1553, 395 //то отправить приглашение
     wait 5s
end_while

Цитата
И если можно то сбросте свои мануалы с комментариями к каждой строке

http://uopilot.tati.pro/index.php?title=Список_функций
Цитата
P.S. И как задовать цикличность повторений. А то у меня функция Repeat не работает, а гоняет покругу пока не выключишь сам

А вы сколько времени ждали? 25 повторений с паузой 1 секунда, т. е. 25 секунд будет скрипт выполняться.
Также есть for:
Код
For #i 1 10      // выполнить 10 раз
    log #i         // показать в логе значение переменной
    wait 100     // пауза 0,1 сек
end_for
end_script

Автор: Yassia 7.10.2017, 23:22

При старте скрипта выскакивает сообщение с текстом "Error while creating lua virtual machine" скрипт работает вроде, хотя не все функции пробовал, вообще влияет ли эта ошибка на что-то?

Автор: uligan 9.10.2017, 20:46

Всем привет.
Такой вопрос.
Есть ли возможность заставить пилот брать текст из кода программы и вставлять его после клика мышкой в закрепленном окне.
Пытался сделать в 2х окнах, блокнот с текстом который копировался двойным кликом и командой sendex ^C
далее перемещение в окно в котором нужно вставить исходный текст кнопкой kleft и sendex ^V.
на этом моменте скрипт не работает.
Подскажите как решить проблему, либо есть ли функция напечатать текст который я вставлю в код.

еще момент.
Думаю помогло бы решить проблему создание 2х скриптов с привязкой к разным окнам, но не знаю как заставить их работать поочередно, то есть сразу чтобы выполнялся 1й скрипт потом 2й и так на повторе

Автор: cirus 10.10.2017, 2:10

Лучше создайте отдельную тему, если есть ещё какие-то вопросы, не нужно засорять тему полезных советов.

Цитата
как заставить их работать поочередно

Код
// в скрипте 1 
// какие-то действия
start_script 2 wait    // запустить скрипт 2 и ждать когда он завершит работу
// когда скрипт 2 остановится этот скрипт продолжит работу или начнётся сначала, если не дописать какие-то ещё действия

Код
// скрипт 2
// какие-то действия
end_script

Цитата
есть ли функция напечатать текст

Не факт что напечатаются все символы.
Код
get clipboard $str   // получить в переменную текст из буфера, если текст большой нужно использовать массив
send $str       // напечатать текст
end_script    


Автор: DarkMaster 10.10.2017, 3:12

Цитата
Не факт что напечатаются все символы.

При нормальных задержках проблемы обычно нет.

Автор: uligan 14.10.2017, 13:09

Цитата(cirus @ 10.10.2017, 3:10) *

Лучше создайте отдельную тему, если есть ещё какие-то вопросы, не нужно засорять тему полезных советов.

Код
// в скрипте 1 
// какие-то действия
start_script 2 wait    // запустить скрипт 2 и ждать когда он завершит работу
// когда скрипт 2 остановится этот скрипт продолжит работу или начнётся сначала, если не дописать какие-то ещё действия

Код
// скрипт 2
// какие-то действия
end_script


Не факт что напечатаются все символы.
Код
get clipboard $str   // получить в переменную текст из буфера, если текст большой нужно использовать массив
send $str       // напечатать текст
end_script    



Спасибо, помогло

Автор: FREEON 4.4.2018, 21:18

Colors - небольшая портативная (не требует инсталляции) утилита, которая может быть полезна в качестве инструмента для легкого определения цвета любого объекта. Результат может быть представлен в различных форматах, как например RGB, HSV, HTML, CMYK, Hex.
Бесплатная программа для некоммерческого использования(первый запуск нажать Принять для использования без активации, далее прога будет сразу запускаться)
Операционка Windows 10, 8.1, 8, 7, Vista, XP
Интерфейс Русский
Прикрепленное изображение
Прикрепленный файл  colors_2.4.zip ( 1,64 мегабайт ) Кол-во скачиваний: 181

Text Replacer - Утилита для поиска и замены многострочных фрагментов текста в файлах указанного каталога и вложенных папок.
Text Replacer осуществляет поиск и замену текста в файлах выбранной папки и подпапок. Поддерживается поиск и замена многострочных фрагментов текста с учетом регистра и игнорируемых символов - таких как пробелы, переводы строки (windows и *nix). Результаты работы могут быть записаны в файл, где останется подробный журнал всех произведённых на диске изменений.
Программа обрабатывает файлы следующих типов:
Текстовые файлы (*.txt, *.ini, *.html и т.д.) - поиск и замена в выбранной кодировке.
Документы Word (*.doc, *.docx, *.rtf) - поиск и замена.
Любые другие файлы обрабатываются подобно текстовым.

Интерфейс Русский
Бесплатная
Более детальная справка тут http://tr.infortech.ru/support/help/
Прикрепленное изображение
Прикрепленный файл  Text_Replacer_3.2.3.rar ( 5,07 мегабайт ) Кол-во скачиваний: 1818

Важно! Если нужно заменить строки в одном файле, то лучше указать имя и тип файла иначе прога заменит все искомые строки в файлах которые находятся в папке. Обработанные файлы сразу заменяют строки и сохраняют обработанные документы на жесткий диск после нажатия кнопки ЗАМЕНИТЬ.
P.S. Многие редакторы как notepad++ и прочие позволяют искать и заменять лишь только одну строку или слово, а данный редактор может заменять код абзацами(в одном файле или в группе файлов), что очень удобно.

Автор: FREEON 18.11.2021, 18:44

WinMerge инструмент который может сравнивать файлы, папки, отображая различия в визуальной текстовой форме, которые легко понять и обработать.
Программа является весьма полезной для определения мест, которые изменились между версиями проекта, а затем она позволяет объединять изменения между версиями. WinMerge можно использовать в качестве внешнего инструмента определения разностей/слияния, или как автономное приложение.

Скрин и описание

Изображение
https://winmerge.org/screenshots/
Особенности (фичи)
В дополнение, WinMerge имеет множество вспомогательных возможностей, которые делают процесс сравнения, синхронизации и слития настолько простым, насколько это возможно:
Общее

Supports Microsoft Windows XP SP3 or newer
Обработка текстовых форматов файлов Windows, Unix и Mac
Поддержка Unicode
Интерфейс с закладками

Сравнение файлов

3-way File Comparison
Визуальная подсветка изменений и слияния текстовых файлов
Удобный редкатор с подсветкой синтаксима, нумерацией строк и переносом строк
Подсветка изменений внутри строки
Панель различий показывает различия текущего файла в двух вертикальных панелях
Панель расположения отображает карту сравниваемых файлов
Обнаружение перемещенных строк

Сравнение содержимого каталогов

Фильтрация файлов, основанная на регулярных выражениях, позволяет включать и исключать элементы из выборки
Быстрое сравнение, учитывающее размеры файлов и даты
Сравнение одного каталога, или сравнение включая подкаталоги
Может отображать результат сравнения папок в виде дерева
3-way Folder Comparison

Image Compare

Support many types of images
Can highlight the differences with blocks
Overlaying of the pictures is possible

Table Compare

Shows CSV/TSV file contents in table format
Text can be wrapped for each column

Управление версиями

Создает файлы патчей (Normal-, Context- и Unified форматы)
Разрешить конфликты файлов

Другое

Интеграция с контекстным меню (поддерживает 64-битные версии Windows)
Поддержка архивов осуществляется с помощью 7-Zip
Поддержка плагинов.
Локализуемый интерфейс

Интерфейс: Русский
Open Source
https://winmerge.org/downloads/?lang=ru или https://github.com/WinMerge/winmerge/releases/download/v2.16.16/WinMerge-2.16.16-Setup.exe

DeskPins
это бесплатный инструмент для Windows, который позволяет иметь одно или несколько окон в постоянном поле зрения на рабочем столе так, чтобы обеспечить доступ к ним максимально быстро, позволяющее закреплять одни окна поверх остальных.
Скрин и описание
Изображение
https://efotinis.neocities.org/deskpins/gallery.html

Интерфейс: en. Выполнил перевод на русский(кроме справки) v1.32 Прикрепленный файл  DeskPinsRU.zip ( 62,15 килобайт ) Кол-во скачиваний: 281

Open Source
https://efotinis.neocities.org/deskpins/ или https://efotinis.neocities.org/downloads/DeskPins-1.32-setup.exe.

Custom Desktop Logo это программа, выполняющая немного необычную функцию, у которой, впрочем, есть сразу несколько вариантов применения. С ее помощью вы сможете отобразить в нужной части экрана изображение, выступающее поверх всех остальных открытых окон. А также возможсть задать свои папки для быстрого открытия по клику мыши на logo. Полезное приложение если необходимо наложить свою сетку или часть " изображения графической панели" или трафорет для графического редактора или создания карты поверх всех окон.
Скрин

Изображение

Интерфейс: en. Русский язык Прикрепленный файл  Rus_v2.2.zip ( 1,92 килобайт ) Кол-во скачиваний: 258

Open Source
http://customdesktoplogo.wikidot.com/download или http://customdesktoplogo.wikidot.com/local--files/download/Custom_Desktop_Logo_V2.2.zip

Keyboard Test Utility С помощью этой программы вы сможете проверить клавиши на клавиатуре. Интерфейс Keyboard Test Utility сделан, введи виртуальной клавиатуры, для тестирования вам надо будет нажимать на клавиши вашей клавиатуры. Все нажатые физически на реальной клавиатуре клавиши, в программе Keyboard Test Utility будут помечены жёлтым цветом (в зависит от выбранного цвета клавиатур). Также дополнительно будут показаны Scan Code и VK Code этих нажатых клавиш. Из настроек можно выбрать цвет клавиатур их 3 штуки (по умолчанию, белый и чёрный) и расположение клавиш на клавиатуре их тоже 3 вида (ANSI, DP-72, SL-92).
Скрин
Изображение
Изображение

(перезалил т.к. пропала с форума)
Прикрепленный файл  keyboardtestutility.zip ( 943,8 килобайт ) Кол-во скачиваний: 260

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)