https://uopilot.uokit.com/wiki/api.php?action=feedcontributions&user=Tatikoma&feedformat=atom
UoPilot - Вклад участника [ru]
2024-03-29T11:25:20Z
Вклад участника
MediaWiki 1.33.0
https://uopilot.uokit.com/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sandes&diff=892
Участник:Sandes
2021-05-09T21:14:33Z
<p>Tatikoma: Создание страницы участника для нового участника.</p>
<hr />
<div>asd adasd adasd a dasd asd aad a da dasda dada</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Sandes&diff=893
Обсуждение участника:Sandes
2021-05-09T21:14:33Z
<p>Tatikoma: Добро пожаловать!</p>
<hr />
<div>'''Добро пожаловать в ''UoPilot''!''' Мы надеемся на ваше плодотворное участие.<br />
Возможно, вам будет интересно ознакомиться со [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочными страницами]. Ещё раз добро пожаловать, приятного времяпрепровождения. [[Участник:Tatikoma|Tatikoma]] ([[Обсуждение участника:Tatikoma|обсуждение]]) 21:14, 9 мая 2021 (UTC)</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:DarkMaster&diff=873
Участник:DarkMaster
2021-03-21T21:48:14Z
<p>Tatikoma: Создание страницы участника для нового участника.</p>
<hr />
<div>DarkMaster DarkMaster DarkMaster DarkMaster DarkMaster DarkMaster</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:DarkMaster&diff=874
Обсуждение участника:DarkMaster
2021-03-21T21:48:14Z
<p>Tatikoma: Добро пожаловать!</p>
<hr />
<div>'''Добро пожаловать в ''UoPilot''!''' Мы надеемся на ваше плодотворное участие.<br />
Возможно, вам будет интересно ознакомиться со [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочными страницами]. Ещё раз добро пожаловать, приятного времяпрепровождения. [[Участник:Tatikoma|Tatikoma]] ([[Обсуждение участника:Tatikoma|обсуждение]]) 21:48, 21 марта 2021 (UTC)</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Fors1k&diff=867
Участник:Fors1k
2020-09-21T09:08:08Z
<p>Tatikoma: Создание страницы участника для нового участника.</p>
<hr />
<div>qwe asd zxc qwe asd zxc</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Fors1k&diff=868
Обсуждение участника:Fors1k
2020-09-21T09:08:08Z
<p>Tatikoma: Добро пожаловать!</p>
<hr />
<div>'''Добро пожаловать в ''UoPilot''!''' Мы надеемся на ваше плодотворное участие.<br />
Возможно, вам будет интересно ознакомиться со [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочными страницами]. Ещё раз добро пожаловать, приятного времяпрепровождения. [[Участник:Tatikoma|Tatikoma]] ([[Обсуждение участника:Tatikoma|обсуждение]]) 09:08, 21 сентября 2020 (UTC)</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Cirus&diff=857
Участник:Cirus
2019-11-15T09:20:51Z
<p>Tatikoma: Создание страницы участника для нового участника.</p>
<hr />
<div>a b c d e f</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Cirus&diff=858
Обсуждение участника:Cirus
2019-11-15T09:20:51Z
<p>Tatikoma: Добро пожаловать!</p>
<hr />
<div>'''Добро пожаловать в ''UoPilot''!''' Мы надеемся на ваше плодотворное участие.<br />
Возможно, вам будет интересно ознакомиться со [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочными страницами]. Ещё раз добро пожаловать, приятного времяпрепровождения. [[Участник:Tatikoma|Tatikoma]] ([[Обсуждение участника:Tatikoma|обсуждение]]) 09:20, 15 ноября 2019 (UTC)</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%AD%D0%BA%D1%80%D0%B0%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&diff=856
Экранирование
2019-08-28T11:38:36Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''" "''' - двойные кавычки являются символами экранирования.<br />
<br>Cтрока, заключенная в кавычки, считается одним словом и не обрабатывается на предмет замены переменных.<br />
<br>Если первый и последний символы в строке - двойные кавычки, и в строке больше таких кавычек нет, то они удаляются.<br />
<br>Длинные имена необходимо заключать в кавычки.<br />
<br>Если символы '//' заключены в двойные кавычки, то они не считаются признаком комментария.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: нет.<br />
<br>Работа со свернутым окном: да.<br />
<br />
== Примеры ==<br />
// Пример 1 <br />
set #a prompt (первый второй выбор третий)<br />
set #a prompt (первый "второй выбор" третий) // в этом случае 'второй выбор' будет считаться одним элементом<br />
End_script <br />
<br />
// Пример 2<br />
set %arr [1 1] 123<br />
save_array %arr C:\Program Files\array.txt // массив не будет сохранён, т. к. путь содержит пробел<br />
save_array %arr "C:\Program Files\array1.txt" // с кавычками массив будет сохранён <br />
End_script<br />
<br />
// Пример 3<br />
set %arr [1] https://www.google.ru // без кавычек два слеша будут восприняты как признак комментария, т. е. всё что после них игнорируется<br />
log %arr [1]<br />
set %arr [2] "https://www.google.ru" <br />
log %arr [2]<br />
End_script<br />
<br />
// Пример 4<br />
// Экранирование переменных<br />
set #a 123<br />
set $a Строка<br />
set %a [1] Массив<br />
<br />
set %arr [1] "#a"<br />
set %arr [2] "$a"<br />
set %arr [3] "%a [1]"<br />
<br />
log %arr [1] = #a<br />
log %arr [2] = $a<br />
log %arr [3] = %a [1]<br />
End_script<br />
<br />
// Пример 5<br />
set $str [text]<br />
log $str<br />
set $str1 "[text]"<br />
log $str1<br />
End_script<br />
<br />
// Пример 6<br />
// Сохранить в файл строку: ObjShell.Run "C:\Program Files"<br />
// чтобы путь был задан переменной<br />
<br />
set %path [1] C:\Program Files<br />
set %b [1] "<br />
set %arr [1] ObjShell.Run %b [1]%path [1]%b [1] <br />
save_array %arr C:\VBS.txt // получили в файле ObjShell.Run "C:\Program Files"<br />
End_script<br />
<br />
// Пример 7<br />
// Добавить кавычки в текст<br />
set $a www.google.com<br />
set %a [1] " <br />
<br />
set $b "%a [1]$a%a [1]"<br />
log $b<br />
end_script<br />
<br />
== Смотрите также ==<br />
<br />
[[If]]<br />
<br>[[Save_array]]<br />
<br>[[Переменные из других скриптов]]<br />
<br />
== История развития ==<br />
<br />
'''2.00'''<br />
<br>Cтрока, заключенная в кавычки, считается одним словом и не обрабатывается на предмет замены переменных.<br />
<br />
'''2.07'''<br />
<br>Если первый и последний символы в строке - двойные кавычки, и в строке больше таких кавычек нет, то они удаляются. <br />
<br />
'''2.30'''<br />
<br>Добавил команды для работы с файлами. Если у команды более одного параметра, то длинные имена необходимо заключать в кавычки.<br />
<br>Если символы '//' заключены в двойные кавычки, то они не считаются признаком комментария.<br />
set $a "test // passed"<br />
<br />
[[Категория: Прочее]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9_(Lua)&diff=855
Список функций (Lua)
2019-08-28T11:38:14Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Мышка ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Mouse_pos_(Lua) mousepos] - получить координаты курсора мыши.<br />
:[http://uopilot.tati.pro/index.php?title=Move_(Lua) move] - переместить курсор мыши в указанные координаты.<br />
:[http://uopilot.tati.pro/index.php?title=Move_Smooth_(Lua) move_smooth] - плавно переместить курсор мыши в указанные координаты.<br />
:[http://uopilot.tati.pro/index.php?title=Drag_(Lua) drag] - перенести из точки с координатами <откуда> в точку с координатами <куда>.<br />
:'''simple (в активном и не активном окне)'''<br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) left] - ''клик левой кнопки мыши в указанные координаты.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) right] - ''клик правой.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) middle] - ''клик средней.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) double_left] - ''двойной клик левой кнопки мыши в указанные координаты.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) double_right] - ''двойной клик правой.'' <br />
::[http://uopilot.tati.pro/index.php?title=Left_(Lua) double_middle] - ''двойной клик средней.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) left_down] - ''зажать левую кнопку мыши.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) right_down] - ''зажать правую.''<br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) middle_down] - ''зажать среднюю.'' <br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) left_up] - ''отпустить левую кнопку мыши.'' <br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) right_up] - ''отпустить правую.'' <br />
::[http://uopilot.tati.pro/index.php?title=Left_Up_(Lua) middle_up] - ''отпустить среднюю.'' <br />
<br />
:'''k (только в активном окне, захватывают мышь)'''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) kleft] - ''клик левой кнопки мыши в указанные координаты.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) kright] - ''клик правой.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) kmiddle] - ''клик средней.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) double_kleft] - ''двойной клик левой кнопки мыши в указанные координаты.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) double_kright] - ''двойной клик правой.'' <br />
::[http://uopilot.tati.pro/index.php?title=Kleft_(Lua) double_kmiddle] - ''двойной клик средней.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kleft_down] - ''зажать левую кнопку мыши.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kright_down] - ''зажать правую.''<br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kmiddle_down] - ''зажать среднюю.'' <br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kleft_up] - ''отпустить левую кнопку мыши.'' <br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kright_up] - ''отпустить правую.'' <br />
::[http://uopilot.tati.pro/index.php?title=Kleft_Down_(Lua) kmiddle_up] - ''отпустить среднюю.'' <br />
<br />
:'''wheel (эмулирует прокручивание колёсика мыши)'''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) wheel_down] - ''прокручивание вниз.''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) wheel_up] - ''прокручивание вверх.''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) kwheel_down] - ''аналог Wheel_down.''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) kwheel_up] - ''аналог Wheel_up.''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) pwheel_down] - ''для Windows XP sp2-3 32 бит и Vista Home 32 бит).''<br />
::[http://uopilot.tati.pro/index.php?title=Wheel_Up_(Lua) pwheel_up] - ''для Windows XP sp2-3 32 бит и Vista Home 32 бит).''<br />
<br />
== Клавиши ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Getlayout_(Lua) getlayout] - позволяет получить текущую раскладку клавиатуры.<br />
:[http://uopilot.tati.pro/index.php?title=Setlayout_(Lua) setlayout] - устанавливает язык раскладки клавиатуры для команд send, sendex.<br />
<br />
:'''В активном и не активном окне'''<br />
::[http://uopilot.tati.pro/index.php?title=Send_(Lua) send] - ''нажать клавишу.''<br />
::[http://uopilot.tati.pro/index.php?title=Send_down_(Lua) send_down] - ''зажать клавишу.''<br />
::[http://uopilot.tati.pro/index.php?title=Send_down_(Lua) send_up] - ''отпустить клавишу.''<br />
::[http://uopilot.tati.pro/index.php?title=Send217_(Lua) send217] - ''аналог send.''<br />
::[http://uopilot.tati.pro/index.php?title=Send_down_(Lua) send217_down] - ''аналог send_down.''<br />
::[http://uopilot.tati.pro/index.php?title=Send_down_(Lua) send217_up] - ''аналог send_up.''<br />
::[http://uopilot.tati.pro/index.php?title=Say_(Lua) say] - ''набрать текст.'' <br />
<br />
:'''Только в активном окне''' (Позволяют нажимать\зажимать клавиши Ctrl, Alt, Shift)<br />
::[http://uopilot.tati.pro/index.php?title=Sendex_(Lua) sendex] - ''нажать клавишу или комбинацию клавиш.''<br />
::[http://uopilot.tati.pro/index.php?title=Sendex_down_(Lua) sendex_down] - ''зажать клавишу или комбинацию клавиш.''<br />
::[http://uopilot.tati.pro/index.php?title=Sendex_down_(Lua) sendex_up] - ''отпустить клавишу или комбинацию клавиш.''<br />
<br />
== Циклы ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Break_(Lua) break] - ''прерывание цикла.''<br />
:[http://uopilot.tati.pro/index.php?title=Repeat_(Lua) repeat] - ''выполняет блок кода до тех пор, пока условие не станет истинным.''<br />
:[http://uopilot.tati.pro/index.php?title=For_(Lua) for] - ''выполняет цикл несколько раз в соответствии со значением переменной управления циклом. Также используется для обхода элементов массива/таблицы.''<br />
:[http://uopilot.tati.pro/index.php?title=While_(Lua) while] - ''цикл, с проверкой условия.''<br />
<br />
== Условия ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=If_(Lua) if] - ''проверка условия истина\ложь.''<br />
<br />
== Цвет и изображения ==<br />
:[http://uopilot.tati.pro/index.php?title=Findimage_(Lua) findimage] - ''поиск изображения.''<br />
:[http://uopilot.tati.pro/index.php?title=Color_(Lua) color] - ''определяет цвет в заданных координатах. Может находить цвет в перекрытых окнах.''<br />
:[http://uopilot.tati.pro/index.php?title=Getimage_(Lua) getimage] - ''запомнить части экранной области.''<br />
:[http://uopilot.tati.pro/index.php?title=Saveimage_(Lua) saveimage] - ''сохраняет часть экранной области из памяти.''<br />
:[http://uopilot.tati.pro/index.php?title=Deleteimage_(Lua) deleteimage] - ''удаляет запомненную часть экранной области.''<br />
:[http://uopilot.tati.pro/index.php?title=Loadimage_(Lua) loadimage] - ''функция загрузки изображения в память.''<br />
<br />
== Массивы и таблицы ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Table.insert_(Lua) table.insert] - ''добавляет элемент в массив.''<br />
:[http://uopilot.tati.pro/index.php?title=Table.remove_(Lua) table.remove] - ''удаляет из массива элемент.''<br />
:[http://uopilot.tati.pro/index.php?title=Table.concat_(Lua) table.concat] - ''возвращает значения массива.''<br />
:[http://uopilot.tati.pro/index.php?title=Unpack_(Lua) unpack] - ''возвращает значения массива.''<br />
:[http://uopilot.tati.pro/index.php?title=Table.maxn_(Lua) table.maxn] - ''возвращает наибольший положительный числовой индекс таблицы''<br />
:[http://uopilot.tati.pro/index.php?title=Table.sort_(Lua) table.sort] - ''сортирует массив в заданном порядке.''<br />
<br />
== Скрипты ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Start_script_(Lua) start_script] - ''запустить указанный скрипт.''<br />
:[http://uopilot.tati.pro/index.php?title=Stop_script_(Lua) stop_script] - ''остановить текущий или указанный скрипт.''<br />
:[http://uopilot.tati.pro/index.php?title=Restart_script_(Lua) restart_script] - ''перезапуск скрипта или всех скриптов.''<br />
:[http://uopilot.tati.pro/index.php?title=End_script_(Lua) end_script] - ''остановbnm скрипт.''<br />
:[http://uopilot.tati.pro/index.php?title=Load_script_(Lua) load_script] - ''загрузить скрипт.''<br />
:[http://uopilot.tati.pro/index.php?title=Current_script_(Lua) current_script] - ''переменная, возвращающая номер закладки текущего скрипта.''<br />
:[http://uopilot.tati.pro/index.php?title=Active_script_(Lua) active_script] - ''переменная, возвращающая номер закладки активного скрипта.''<br />
:[http://uopilot.tati.pro/index.php?title=Scripts_(Lua) scripts] - ''позволяет выяснить количество вкладок со скриптами, с занесением в массив их номеров, имен и статуса запуска.''<br />
:[http://uopilot.tati.pro/index.php?title=Get_script_text_(Lua) get_script_text] - ''возвращает в таблицу скрипт с указанным номером, либо текущий, если номер не указан.''<br />
<br />
== Программы ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Exec_(Lua) exec] - ''запуск внешнего приложения.''<br />
:[http://uopilot.tati.pro/index.php?title=ExecAndWait_(Lua) execandwait] - ''запуск внешнего приложения и ожидание его завершения.''<br />
:[http://uopilot.tati.pro/index.php?title=Terminate_(Lua) terminate] - ''завершает приложение.''<br />
<br />
== Файлы ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Dir_(Lua) dir] - ''вывод дерева каталогов.''<br />
:[http://uopilot.tati.pro/index.php?title=Filecopy_(Lua) filecopy] - ''копировать файл.''<br />
:[http://uopilot.tati.pro/index.php?title=Filerename_(Lua) filerename] - ''переименовать файл.'' <br />
:[http://uopilot.tati.pro/index.php?title=Filedelete_(Lua) filedelete] - ''удалить файл.''<br />
:[http://uopilot.tati.pro/index.php?title=Filesetdate_(Lua) filesetdate] - ''установить дату и время последнего изменения файла.''<br />
:[http://uopilot.tati.pro/index.php?title=Filesetattr_(Lua) filesetattr] - ''установить атрибуты для файла.''<br />
:[http://uopilot.tati.pro/index.php?title=Filegetattr_(Lua) filegetattr] - ''получить атрибуты файла.''<br />
:[http://uopilot.tati.pro/index.php?title=Filegetdate_(Lua) filegetdate] - ''получить дату и время последнего изменения.''<br />
:[http://uopilot.tati.pro/index.php?title=Fileexists_(Lua) fileexists] - ''возвращает 1, если файл существует, иначе 0.''<br />
:[http://uopilot.tati.pro/index.php?title=Dircreate_(Lua) dircreate] - ''создание директории (папки/папок).''<br />
:[http://uopilot.tati.pro/index.php?title=Dirremove_(Lua) dirremove] - ''удаление пустых каталогов (папок).''<br />
:[http://uopilot.tati.pro/index.php?title=Write_(Lua) write] - ''дописать текст в файл.''<br />
<br />
== Окна ==<br />
:[http://uopilot.tati.pro/index.php?title=Findwindow_(Lua) findwindow] - ''поиск хендла окна по его заголовку или PID.''<br />
:[http://uopilot.tati.pro/index.php?title=Workwindow_(Lua) workwindow] - ''возвращает хендл окна, к которому привязан скрипт. Привязывает скрипт к окну с указанным хендлом.''<br />
:[http://uopilot.tati.pro/index.php?title=Workwindowpid_(Lua) workwindowpid] - ''переменная, возвращающая PID процесса, которому принадлежит рабочее окно.''<br />
:[http://uopilot.tati.pro/index.php?title=Windowhandle_(Lua) windowhandle] - ''переменная хранящая хендл окна пилота.''<br />
:[http://uopilot.tati.pro/index.php?title=Windowfromcursor_(Lua) windowfromcursor] - ''возвращает хэндл окна или контрола под курсором мыши.''<br />
:[http://uopilot.tati.pro/index.php?title=Getwindow_(Lua) getwindow] - ''позволяет получить хендл активного окна или же окна относительно указанного.''<br />
:[http://uopilot.tati.pro/index.php?title=Getfocus_(Lua) getfocus] - ''возвращает хэндл окна, имеющего фокус ввода.''<br />
:[http://uopilot.tati.pro/index.php?title=Windowpos_(Lua) windowpos] - ''позволяет получить или установить координаты и размер окна.''<br />
:[http://uopilot.tati.pro/index.php?title=Showwindow_(Lua) showwindow] - ''управление состоянием окна.''<br />
:[http://uopilot.tati.pro/index.php?title=Setwindowtext_(Lua) setwindowtext] - ''изменяет заголовок указанного окна.''<br />
:[http://uopilot.tati.pro/index.php?title=Getwindowtext_(Lua) getwindowtext] - ''возвращает заголовок указанного окна.''<br />
<br />
== Память ==<br />
:[http://uopilot.tati.pro/index.php?title=Readmem_(Lua) readmem] - ''чтение из памяти.''<br />
:[http://uopilot.tati.pro/index.php?title=Writemem_(Lua) writemem] - ''запись в память.''<br />
<br />
== Буфер ==<br />
:[http://uopilot.tati.pro/index.php?title=Clipboard_(Lua) clipboard] - ''чтение или запись в буфера обмена.''<br />
<br />
== Строки ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Tonumber_(Lua) tonumber] - ''преобразование параметра в число.''<br />
:[http://uopilot.tati.pro/index.php?title=Tostring_(Lua) tostring] - ''конвертирует параметр любого типа в строку.''<br />
:[http://uopilot.tati.pro/index.php?title=String.byte_(Lua) string.byte] - ''возвращает числовые коды символов.''<br />
:[http://uopilot.tati.pro/index.php?title=String.char_(Lua) string.char] - ''возвращает строку из переданной последовательности кодов.''<br />
:[http://uopilot.tati.pro/index.php?title=String.lower_(Lua) string.lower] - ''возвращает копию строку, в которой все буквы заменены на строчные.''<br />
:[http://uopilot.tati.pro/index.php?title=String.upper_(Lua) string.upper] - ''возвращает копию строку, в которой все буквы заменены на заглавные.''<br />
:[http://uopilot.tati.pro/index.php?title=String.rep_(Lua) string.rep] - ''возвращает строку, в которой содержится n копий строки.''<br />
:[http://uopilot.tati.pro/index.php?title=String.reverse_(Lua) string.reverse] - ''возвращает строку, в которой символы строки расположены в обратном порядке.''<br />
:[http://uopilot.tati.pro/index.php?title=String.len_(Lua) string.len] - ''возвращает длину строки.''<br />
:[http://uopilot.tati.pro/index.php?title=String.sub_(Lua) string.sub] - ''возвращает подстроку строки.''<br />
:[http://uopilot.tati.pro/index.php?title=String.find_(Lua) string.find] - ''возвращает позицию подстроки в строке.''<br />
:[http://uopilot.tati.pro/index.php?title=String.match_(Lua) string.match] - ''поиск первого вхождения шаблона в строку.''<br />
:[http://uopilot.tati.pro/index.php?title=String.gmatch_(Lua) string.gmatch] - ''возвращает итератор, который, при каждом вызове, возвращает следующее вхождение шаблона в строке.''<br />
:[http://uopilot.tati.pro/index.php?title=String.gsub_(Lua) string.gsub] - ''возвращает копию строки, в которой все вхождения 'шаблона поиска' заменяются на 'шаблон замены'.''<br />
:[http://uopilot.tati.pro/index.php?title=String.format_(Lua) string.format] - ''возвращает отформатированную строку.''<br />
:[http://uopilot.tati.pro/index.php?title=Regexp_(Lua) regexp] - ''поиск позиции подстроки в строке с помощью регулярного выражения.''<br />
:[http://uopilot.tati.pro/index.php?title=Copy_(Lua) copy] - ''копирование одного или нескольких символов из строки с указанной позиции.''<br />
:[http://uopilot.tati.pro/index.php?title=Delete_(Lua) delete] - ''удаление одного или нескольких символов из строки с указанной позиции.''<br />
:[http://uopilot.tati.pro/index.php?title=Insert_(Lua) insert] - ''вставка одного или нескольких символов в строку в указанную позицию.''<br />
:[http://uopilot.tati.pro/index.php?title=String_letters_(Lua) string_letters] - ''возвращает строку, выбрасывая из неё все числа.''<br />
:[http://uopilot.tati.pro/index.php?title=String_digits_(Lua) string_digits] - ''возвращает строку, выбрасывая из неё все буквенные символы.''<br />
:[http://uopilot.tati.pro/index.php?title=String_count_(Lua) string_count] - ''возвращает число, показывающее сколько раз подстрока встречается в строке.''<br />
:[http://uopilot.tati.pro/index.php?title=Trim_(Lua) trim] - ''удаляет лишние пробелы вначале и в конце строки.''<br />
:[http://uopilot.tati.pro/index.php?title=Ltrim_(Lua)&amp;redirect=no ltrim] - ''удаляет пробелы в начале строки.''<br />
:[http://uopilot.tati.pro/index.php?title=Rtrim_(Lua)&amp;redirect=no rtrim] - ''удаляет пробелы в конце строки.''<br />
<br />
== Числа ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Math.random_(Lua) math.random] - ''генерирует псевдослучайное число.'' <br />
:[http://uopilot.tati.pro/index.php?title=Math.abs_(Lua) math.abs] - ''возвращает абсолютную величину (модуль) числа.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.min_(Lua) math.min] - ''возвращает минимальный из аргументов.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.max_(Lua) math.max] - ''возвращает максимальный из аргументов.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.floor_(Lua) math.floor] - ''возвращает x округлённый до ближайшего целого числа, которое меньше x.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.ceil_(Lua) math.ceil] - ''возвращает x округлённый до ближайшего целого числа, которое больше x.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.modf_(Lua) math.modf] - ''возвращает целую и дробную часть числа.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.fmod_(Lua) math.fmod] - ''возвращает остаток от деления 'x' на 'y'.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.sqrt_(Lua) math.sqrt] - ''возвращает квадратный корень.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.pow_(Lua) math.pow] - ''возвращает x в степени n. Вместо функции можно использовать x^n.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.sin_(Lua) math.sin] - ''возвращает синус угла.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.cos_(Lua) math.cos] - ''возвращает косинус угла.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.tan_(Lua) math.tan] - ''возвращает тангенс угла.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.asin_(Lua) math.asin] - ''возвращает арксинус x.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.acos_(Lua) math.acos] - ''возвращает арккосинус x.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.atan_(Lua) math.atan] - ''возвращает арктангенс x.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.deg_(Lua) math.deg] - ''преобразовывает угол, заданный в радианах, в градусы.''<br />
:[http://uopilot.tati.pro/index.php?title=Math.rad_(Lua) math.rad] - ''преобразовывает угол, заданный в градусах, в радианы.''<br />
:[http://uopilot.tati.pro/index.php?title=Point_distance_(Lua) point_distance] - ''возвращает расстояние между двумя точками в виде дробного числа, представленного строкой.''<br />
:[http://uopilot.tati.pro/index.php?title=Point_direction_(Lua) point_direction] - ''возвращает угол (в градусах) между осью X и вектором с началом в точке (x1,y1) и окончанием в точке (x2,y2).''<br />
:[http://uopilot.tati.pro/index.php?title=Lengthdir_x_(Lua) lengthdir_x] - ''возвращает горизонтальный x-катет вектора определённый указанной длиной и направлением.''<br />
:[http://uopilot.tati.pro/index.php?title=Lengthdir_x_(Lua) lengthdir_y] - ''возвращает вертикальный y-катет вектора определённый указанной длиной и направлением.''<br />
:[http://uopilot.tati.pro/index.php?title=Dec2hex_(Lua) dec2hex] - ''преобразует десятичное значение в шестнадцатеричное.''<br />
:[http://uopilot.tati.pro/index.php?title=Hex2dec_(Lua) hex2dec] - ''преобразует шестнадцатеричное значение в десятичное.''<br />
<br />
== Дата и время ==<br />
<br />
:[http://uopilot.tati.pro/index.php?title=Os.date_(Lua) os.date] - ''возвращает дату и время в виде строки или таблицы.''<br />
:[http://uopilot.tati.pro/index.php?title=Os.time_(Lua) os.time] - ''возвращает время в формате posix.''<br />
:[http://uopilot.tati.pro/index.php?title=Os.clock_(Lua) os.clock] - ''возвращает время в секундах с точностью до миллисекунд с момента запуска UoPilot.''<br />
<br />
== Вывод сообщений ==<br />
:[http://uopilot.tati.pro/index.php?title=Logging_(Lua) logging] - ''лог.''<br />
:[http://uopilot.tati.pro/index.php?title=Logging_(Lua) log] - ''лог, аналог logging.''<br />
:[http://uopilot.tati.pro/index.php?title=Msg_(Lua) msg] - ''вывод сообщения.''<br />
:[http://uopilot.tati.pro/index.php?title=Alarm_(Lua) alarm] - ''воспроизвести звук или звуковой файл.''<br />
:[http://uopilot.tati.pro/index.php?title=Flash_(Lua) flash] - ''мигнуть в таскбаре.''<br />
<br />
== Другие ==<br />
:[http://uopilot.tati.pro/index.php?title=Homepath_(Lua) homepath] - ''возвращает путь к exe пилота.''<br />
:[http://uopilot.tati.pro/index.php?title=Exefilename_(Lua) exefilename] - ''возвращает имя exe пилота.''<br />
:[http://uopilot.tati.pro/index.php?title=Loghandle_(Lua) loghandle] - ''возвращает хендл окна лога.''<br />
:[http://uopilot.tati.pro/index.php?title=Version_(Lua) version] - ''возвращает в массив версию пилота.''<br />
:[http://uopilot.tati.pro/index.php?title=Wait_(Lua) wait] - ''приостанавливает выполнение текущего скрипта на указанное количество времени.''<br />
:[http://uopilot.tati.pro/index.php?title=Printscreen_(Lua) printscreen] - ''команда сохранения копии экрана в файл.''<br />
:[http://uopilot.tati.pro/index.php?title=Exit_(Lua) exit] - ''выход из пилота.''<br />
:[http://uopilot.tati.pro/index.php?title=Type_(Lua) type] - ''возвращает тип параметра в виде строки.''<br />
:[http://uopilot.tati.pro/index.php?title=Timer_(Lua) timer] - ''выполняет код через определённый промежуток времени.''</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9&diff=854
Список функций
2019-08-28T11:38:03Z
<p>Tatikoma: </p>
<hr />
<div>== Мышка ==<br />
:[[Get mouse_pos]] - ''позволяет получить координаты курсора.''<br />
:[[Move]] - ''переместить курсор мыши в указанные координаты.''<br />
:[[Move Smooth]] - ''плавно переместить курсор мыши в указанные координаты.''<br />
:[[Drag]] - ''перенести из точки с координатами <откуда> в точку с координатами <куда>.''<br />
:'''simple (в активном и не активном окне)'''<br />
::[[Left]] - ''клик левой кнопки мыши в указанные координаты.''<br />
::[[Right]] - ''клик правой.''<br />
::[[Middle]] - ''клик средней.''<br />
::[[Double_left]] - ''двойной клик левой кнопки мыши в указанные координаты.''<br />
::[[Double_Right]] - ''двойной клик правой.'' <br />
::[[Double_Middle]] - ''двойной клик средней.''<br />
::[[Left_down]] - ''зажать левую кнопку мыши.''<br />
::[[Right_down]] - ''зажать правую.''<br />
::[[Middle_down]] - ''зажать среднюю.'' <br />
::[[Left_up]] - ''отпустить левую кнопку мыши.'' <br />
::[[Right_up]] - ''отпустить правую.'' <br />
::[[Middle_up]] - ''отпустить среднюю.'' <br />
<br />
:'''k (только в активном окне, захватывают мышь)'''<br />
::[[Kleft]] - ''клик левой кнопки мыши в указанные координаты.''<br />
::[[Kright]] - ''клик правой.''<br />
::[[Kmiddle]] - ''клик средней.''<br />
::[[Double_Kleft]] - ''двойной клик левой кнопки мыши в указанные координаты.''<br />
::[[Double_Kright]] - ''двойной клик правой.'' <br />
::[[Double_Kmiddle]] - ''двойной клик средней.''<br />
::[[Kleft_down]] - ''зажать левую кнопку мыши.''<br />
::[[Kright_down]] - ''зажать правую.''<br />
::[[Kmiddle_down]] - ''зажать среднюю.'' <br />
::[[Kleft_up]] - ''отпустить левую кнопку мыши.'' <br />
::[[Kright_up]] - ''отпустить правую.'' <br />
::[[Kmiddle_up]] - ''отпустить среднюю.'' <br />
<br />
:'''p (для Windows XP sp2-3 32 бит и Vista Home 32 бит)'''<br />
::[[Pleft]] - ''клик левой кнопки мыши в указанные координаты.''<br />
::[[Pright]] - ''клик правой.''<br />
::[[Pmiddle]] - ''клик средней.''<br />
::[[Double_Pleft]] - ''двойной клик левой кнопки мыши в указанные координаты.''<br />
::[[Double_Pright]] - ''двойной клик правой.'' <br />
::[[Double_Pmiddle]] - ''двойной клик средней.''<br />
::[[Pleft_down]] - ''зажать левую кнопку мыши.''<br />
::[[Pright_down]] - ''зажать правую.''<br />
::[[Pmiddle_down]] - ''зажать среднюю.'' <br />
::[[Pleft_up]] - ''отпустить левую кнопку мыши.'' <br />
::[[Pright_up]] - ''отпустить правую.'' <br />
::[[Pmiddle_up]] - ''отпустить среднюю.'' <br />
<br />
:'''wheel (эмулирует прокручивание колёсика мыши)'''<br />
::[[Wheel_down]] - ''прокручивание вниз.''<br />
::[[Wheel_up]] - ''прокручивание вверх.''<br />
::[[Kwheel_down]] - ''аналог Wheel_down.''<br />
::[[Kwheel_up]] - ''аналог Wheel_up.''<br />
::[[Pwheel_down]] - ''для Windows XP sp2-3 32 бит и Vista Home 32 бит).''<br />
::[[Pwheel_up]] - ''для Windows XP sp2-3 32 бит и Vista Home 32 бит).''<br />
<br />
== Клавиши ==<br />
:[[Getlayout]] - позволяет получить текущую раскладку клавиатуры.<br />
:[[Setlayout]] - устанавливает язык раскладки клавиатуры для команд send, sendex.<br />
<br />
:'''В активном и не активном окне'''<br />
:[[Send]] - ''нажать клавишу.''<br />
:[[Send_down]] - ''зажать клавишу.''<br />
:[[Send_up]] - ''отпустить клавишу.''<br />
:[[Send217]] - ''аналог Send.''<br />
:[[Send217_down]] - ''аналог Send_down.''<br />
:[[Send217_up]] - ''аналог Send_up.''<br />
:[[Say]] - ''набрать текст.'' <br />
:[[Post]] - ''аналог Send (для Windows XP sp2-3 32 бит и Vista Home 32 бит).''<br />
<br />
:'''Только в активном окне''' (Позволяют нажимать\зажимать клавиши Ctrl, Alt, Shift)<br />
:[[Sendex]] - ''нажать клавишу или комбинацию клавиш.''<br />
:[[Sendex_down]] - ''зажать клавишу или комбинацию клавиш.''<br />
:[[Sendex_up]] - ''отпустить клавишу или комбинацию клавиш.''<br />
<br />
== Циклы ==<br />
:[[Break]] - ''прерывание цикла.''<br />
:[[Continue]] - ''переход на следующий шаг цикла.''<br />
:[[Repeat]] - ''повтор действий указанное количество раз.''<br />
:[[For]] - ''выполняет цикл несколько раз в соответствии со значением переменной управления циклом.''<br />
:[[While]] - ''цикл, с проверкой условия.''<br />
<br />
== Условия ==<br />
:[[If]] - ''проверка условия истина\ложь.''<br />
:[[Switch]] - ''позволяет сделать логическое ветвление.''<br />
<br />
== Цвет и изображения ==<br />
:[[Get color]] - ''определяет цвет в заданных координатах.''<br />
:[[While]] - ''цикл, с проверкой цвета в заданных координатах.''<br />
:[[If]] - ''проверка цвета в заданных координатах.''<br />
:[[Findimage]] - ''поиск сохраненного изображения в заданной области.''<br />
:[[Findcolor]] - ''поиск определённого цвета(-ов) в заданной области.''<br />
:[[GetImage]] - ''запомнить части экранной области.''<br />
:[[SaveImage]] - ''сохраняет часть экранной области из памяти.''<br />
:[[DeleteImage]] - ''удаляет запомненную часть экранной области.'' <br />
:[[LoadImage]] - ''функция загрузки изображения в память.''<br />
:[[Color]] - ''определяет цвет в заданных координатах.''<br />
:[[ColorToRed]] - ''возвращает значение красного канала указанного цвета.''<br />
:[[ColorToGreen]] - ''возвращает значение зелёного канала указанного цвета.''<br />
:[[ColorToBlue]] - ''возвращает значение синего канала указанного цвета.''<br />
:[[ColorToRGB]] - ''раскладывает указанный цвет на отдельные цветовые каналы (RGB).''<br />
<br />
== Подпрограммы ==<br />
:[[Call]] - ''вызов процедуры.''<br />
:[[Proc]] - ''процедура.''<br />
:[[Gosub]] - ''перенаправление в подпрограмму.''<br />
<br />
== Макросы ==<br />
:'''Работают только на Windows 32 бита.'''<br />
:[[Macro_load]] - ''загрузить макрос.''<br />
:[[Macro_play]] - ''воспроизвести макрос.''<br />
:[[Macro_send]] - ''отправка нажатий клавиш с помощью макроса.''<br />
<br />
== Массивы ==<br />
:[[Load_array]] - ''загрузить массив.''<br />
:[[Save_array]] - ''сохранить массив.''<br />
:[[Init_arr]] - ''присваивание нескольких элементов массива одной строкой.''<br />
:[[Indexof]] - ''поиск в массиве.''<br />
:[[Sort_array]] - ''сортировка массива.''<br />
:[[Delete_array]] - ''удаление указанных строк или столбцов массива.''<br />
:[[Size]] - ''узнать размер массива.''<br />
<br />
== Скрипты ==<br />
:[[Start_script]] - ''запустить указанный скрипт.''<br />
:[[Stop_script]] - ''остановить текущий или указанный скрипт.''<br />
:[[Restart_script]] - ''перезапустить указанный скрипт.''<br />
:[[Pause_script]] - ''поставить на паузу текущий или указанный скрипт.''<br />
:[[Resume_script]] - ''продолжить скрипт.''<br />
:[[End_script]] - ''конец скрипта.''<br />
:[[Load_script]] - ''загрузить скрипт.''<br />
:[[Priority]] - ''приоритет скрипта.''<br />
:[[Current_script]] - ''переменная, возвращающая номер закладки текущего скрипта.''<br />
:[[Active_script]] - ''переменная, возвращающая номер закладки активного скрипта.''<br />
:[[Get scripts]] - ''позволяет выяснить количество вкладок со скриптами.''<br />
:[[Hotkeystart]] - ''установить горячую клавишу для запуска/остановки текущего скрипта.'' <br />
:[[Hotkeypause]] - ''установить горячую клавишу для приостановки текущего скрипта.'' <br />
<br />
== Программы ==<br />
:[[Exec]] - ''запуск внешнего приложения.''<br />
:[[ExecAndWait]] - ''запуск внешнего приложения и ожидание его завершения.''<br />
:[[Terminate]] - ''завершает приложение.''<br />
<br />
== Файлы ==<br />
:[[FileCopy]] - ''копировать файл.''<br />
:[[FileRename]] - ''переименовать файл.'' <br />
:[[FileDelete]] - ''удалить файл.''<br />
:[[Filesetdate]] - ''установить дату и время последнего изменения файла.''<br />
:[[Filesetattr]] - ''установить атрибуты для файла.''<br />
:[[Filegetattr]] - ''получить атрибуты файла.''<br />
:[[Filegetdate]] - ''получить дату и время последнего изменения.''<br />
:[[Fileexists]] - ''возвращает 1, если файл существует, иначе 0.''<br />
:[[DirCreate]] - ''создание директории (папки/папок).''<br />
:[[DirRemove]] - ''удаление пустых каталогов (папок).''<br />
:[[Dir]] - ''вывод дерева каталогов.''<br />
:[[Write]] - ''дописать текст в файл.''<br />
<br />
== Окна ==<br />
:[[Set windowpos]] - ''переместить окно в указанные координаты и изменить его размер.''<br />
:[[Get windowpos]] - ''получить координаты и размер окна.''<br />
:[[Findwindow]] - ''поиск хендла окна по его заголовку или PID.''<br />
:[[Workwindow]] - ''переменная хранящая хендл окна к которому привязан скрипт.''<br />
:[[Getwindow]] - ''получить хендл активного окна или же окна относительно указанного.''<br />
:[[Getwindowtext]] - ''возвращает заголовок указанного окна.''<br />
:[[Setwindowtext]] - ''изменяет заголовок указанного окна.''<br />
:[[Showwindow]] - ''управление состоянием окна.''<br />
:[[WindowFromCursor]] - ''возвращает хэндл окна или контрола под курсором мыши.''<br />
:[[WindowFromPoint]] - ''возвращает хендлы всех окон, находящихся в указанной точке экрана.''<br />
:[[WorkwindowPID]] - ''переменная, возвращающая PID процесса которому принадлежит рабочее окно.''<br />
:[[SendMessage]] - ''отсылает приложению WinAPI событие.''<br />
:[[PostMessage]] - ''отсылает приложению WinAPI событие.'' <br />
<br />
== Память ==<br />
:[[Readmem]] - ''чтение из памяти.'' <br />
:[[Writemem]] - ''запись в память.''<br />
:[[RelativeAddress2absolute]] - ''преобразование абсолютного адреса в приложении в адрес относительно загруженного модуля.''<br />
:[[AbsoluteAddress2relative]] - ''преобразование абсолютного адреса в приложении в адрес относительно загруженного модуля.''<br />
<br />
== Буфер ==<br />
:[[Set clipboard]] - ''записать в буфер указанный текст.''<br />
:[[Get clipboard]] - ''получить текст из буфера в переменную.''<br />
<br />
== Строки ==<br />
:[[PosEx]] - ''возврат позиции подстроки в строке.''<br />
:[[Copy]] - ''копирование одного или нескольких символов из строки с указанной позиции.''<br />
:[[Delete]] - ''удаление одного или нескольких символов из строки с указанной позиции.''<br />
:[[Insert]] - ''вставка одного или нескольких символов в строку в указанную позицию.''<br />
:[[CharToHex]] - ''возвращает строку с переведенным символами в шестнадцатеричные ASCII коды.'' <br />
:[[CharToHexF]] - ''с разбивкой по 8+8 кодов символов и строкой 8+8 символов.''<br />
:[[Trim]] - ''удаляет лишние пробелы вначале и в конце строки.''<br />
:[[Ltrim]] - ''удаляет пробелы в начале строки.''<br />
:[[Rtrim]] - ''удаляет пробелы в конце строки.''<br />
:[[RegExp]] - ''поиск позиции подстроки в строке с помощью регулярного выражения.''<br />
:[[Get number]] - ''получить первое число из строки.''<br />
:[[Get word]] - ''получить слово или число из строки по его порядковому номеру.''<br />
:[[GetSelectedText]] - ''присваивает переменной выделенный текст из активного окна.''<br />
:[[SetSelectedText]] - ''заменяет выделенный текст на указанный в активном контроле.''<br />
:[[Is_real]] - ''возвращает 1, если x число.''<br />
:[[Is_string]] - ''возвращает 1, если x является строкой (не число).''<br />
:[[Chr]] - ''возвращает символ с ASCI кодом val.''<br />
:[[Ord]] - ''возвращает ASCI код первого символа в строке.''<br />
:[[String_replace]] - ''возвращает конечный результат замены подстроки на другую подстроку в заданной строке.''<br />
:[[String_count]] - ''возвращает число, показывающее, сколько раз подстрока встречается в строке.''<br />
:[[String_lower]] - ''возвращает строку, с замененными прописными символами на строчные.''<br />
:[[String_upper]] - ''возвращает строку, записанную большими буквами.''<br />
:[[String_letters]] - ''возвращает строку, выбрасывая из неё все числа.''<br />
:[[String_digits]] - ''возвращает строку, выбрасывая из неё все буквенные символы.''<br />
:[[Size]] - ''узнать размер строки (количество символов).''<br />
<br />
== Числа ==<br />
:[[Random]] - ''генерирует псевдослучайное число.''<br />
:[[Size]] - ''возвращает длину указанного параметра.''<br />
:[[Abs]] - возвращает абсолютную величину (модуль) x.<br />
:[[Round]] - ''возвращает x, округлённый до самого близкого целого числа.''<br />
:[[Floor]] - ''возвращает x округлённый до ближайшего целого числа, которое меньше x.''<br />
:[[Ceil]] - ''возвращает x округлённый до ближайшего целого числа, которое больше x.''<br />
:[[Frac]] - ''возвращает дробную часть x, то есть часть, стоящую позади десятичной точки\запятой.''<br />
:[[Sqrt]] - ''возвращает квадратный корень.''<br />
:[[Power]] - ''возвращает x в степени n''.<br />
:[[Exp]] - ''возвращает e (экспонента) в степени x.''<br />
:[[Ln]] - ''Возвращает натуральный логарифм от x.''<br />
:[[Log]] - ''возвращает логарифм от x по основанию n.''<br />
:[[Sin]] - ''возвращает синус x (в радианах).''<br />
:[[Cos]] - ''возвращает косинус x (в радианах).''<br />
:[[Tan]] - ''возвращает тангенс x (в радианах).''<br />
:[[Arcsin]] - ''возвращает арксинус x.''<br />
:[[Arccos]] - ''возвращает арккосинус x.''<br />
:[[Arctan]] - ''возвращает арктангенс x.''<br />
:[[Degtorad]] - ''преобразовывает градусы в радианы.''<br />
:[[Radtodeg]] - ''преобразовывает радианы в градусы.''<br />
:[[Trunc]] - ''отбрасывает дробную часть.''<br />
:[[Minx]] - ''возвращает минимальную из величин. Может находить минимальное число в массиве.''<br />
:[[Maxx]] - ''возвращает максимальную из величин. Может находить максимальное число в массиве.'' <br />
:[[Mean]] - ''возвращает среднее арифметическое.'' <br />
:[[Point_distance]] - ''возвращает расстояние между двумя точками в виде дробного числа, представленного строкой.''<br />
:[[Point_direction]] - ''возвращает угол (в градусах) между осью X и вектором с началом в точке (x1,y1) и окончанием в точке (x2,y2).''<br />
:[[Lengthdir_x]] - ''возвращает горизонтальный x-катет вектора определённый указанной длиной и направлением.'' <br />
:[[Lengthdir_y]] - ''возвращает вертикальный y-катет вектора определённый указанной длиной и направлением.''<br />
:[[Dec2hex]] - ''преобразует десятичное значение в шестнадцатеричное.''<br />
:[[Hex2dec]] - ''преобразует шестнадцатеричное значение в десятичное.'' <br />
:[[CharToHex]] - ''возвращает строку с переведенным символами в шестнадцатеричные ASCII коды.'' <br />
:[[CharToHexF]] - ''с разбивкой по 8+8 кодов символов и строкой 8+8 символов.''<br />
:[[Mod]] - ''возвращает остаток от деления 'x' на 'y'.''<br />
:[[Div]] - ''возвращает целую часть от деления 'x' на 'y'.''<br />
:[[Pi]] - ''число Пи.''<br />
<br />
== Дата и время ==<br />
<br />
:[[AddDate]] - ''складывает даты.''<br />
:[[AddYears]] - ''добавляет несколько лет.''<br />
:[[AddMonths]] - ''добавляет несколько месяцев.''<br />
:[[AddDays]] - '' добавляет несколько дней.''<br />
:[[AddHours]] - ''добавляет несколько часов.''<br />
:[[AddMinutes]] - '' добавляет несколько минут.''<br />
:[[AddSeconds]] - '' добавляет несколько секунд.''<br />
:[[SubDate]] - '' вычитает даты.''<br />
:[[SubYears]] - '' вычитает несколько лет.''<br />
:[[SubMonths]] - '' вычитает несколько месяцев.''<br />
:[[SubDays]] - '' вычитает несколько дней.''<br />
:[[SubHours]] - '' вычитает несколько часов.'' <br />
:[[SubMinutes]] - '' вычитает несколько минут.''<br />
:[[SubSeconds]] - '' вычитает несколько секунд.''<br />
:[[YearFromDate]] - '' возвращает год.''<br />
:[[MonthFromDate]] - ''возвращает месяц.''<br />
:[[DayFromDate]] - '' возвращает день.''<br />
:[[HourFromDate]] - '' возвращает часы.''<br />
:[[MinuteFromDate]] - '' возвращает минуты.''<br />
:[[SecondFromDate]] - '' возвращает секунды.''<br />
:[[DayOfWeek]] - ''возвращает день недели''.<br />
:[[DateNow]] - ''возвращает текущую дату.''<br />
:[[TimeNow]] - ''возвращает текущее время.''<br />
:[[TimeStamp]] - ''преобразует таймштамп в человеческий вид и обратно.''<br />
<br />
== Вывод сообщений ==<br />
:[[Logging]] - ''лог.''<br />
:[http://uopilot.tati.pro/index.php?title=Logging Log] - ''лог, аналог logging.''<br />
:[[Msg]] - ''вывод сообщения.''<br />
:[[Hint]] - ''вызов подсказки.''<br />
:[[Alarm]] - ''воспроизвести звук или звуковой файл.''<br />
:[[Flash]] - ''мигнуть в таскбаре.''<br />
:[[Prompt]] - ''запроса ввода от пользователя.''<br />
<br />
== Другие ==<br />
:[[Set]] - ''запись значения в переменную и/или ее объявление.''<br />
:[[Wait]] - ''приостанавливает выполнение текущего скрипта на указанное количество времени.''<br />
:[[Eval]] - ''собирает всё что в скобках в одну строку и подставляет вместо себя.''<br />
:[[Goto]] - ''переход к другому участку кода, обозначенному меткой.''<br />
:[[Printscreen]] - ''команда сохранения копии экрана в файл.''<br />
:[[Exit]] - ''выход из пилота.''<br />
:[[Version]] - ''возвращает в массив версию пилота.''<br />
:[[Timer]] - ''переменная, которая считает количество миллисекунд от начала выполнения скрипта.''</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%A1%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BE%D0%BA%D0%BD%D0%B0%D0%BC%D0%B8&diff=853
Смещение между окнами
2019-08-28T11:37:52Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
<br />
Скрипт предназначен для определения смещения между родительским и дочерним окном. Иногда требуется для функций [[Get color]] и [[Color]].<br />
<br>Запускаем скрипт, наводим курсор на родительское окно (обычно заголовок или рамка), нажимаем Ctrl + A, наводим курсор на дочернее окно (то, в котором нужно проверить цвет), нажимаем Ctrl + A. В результате в логе будет указано смещение по X и Y.<br />
<br />
== Версия ==<br />
1.0<br />
<br />
== Минимальная версия UOPilot ==<br />
2.36<br />
<br />
== Скрипт ==<br />
log mode compact<br />
set linedelay 1<br />
set #a desktopwidth / 3<br />
set #b desktopheight / 3<br />
set workwindow 0<br />
showwindow WindowHandle<br />
while workwindow = 0<br />
hint (32 clBlack #a #b (Укажите Родительское окно (Ctrl + A)))<br />
end_while<br />
set #handle1 workwindow<br />
set workwindow 0<br />
while workwindow = 0<br />
hint (32 clBlack #a #b (Укажите Дочернее окно (Ctrl + A)))<br />
end_while<br />
set #handle2 workwindow<br />
set workwindow 0<br />
get windowpos #handle1 #X #Y #width #height #result<br />
get windowpos #handle2 #X1 #Y1 #width1 #height1 #result1<br />
set #x #X1 - #X<br />
set #y #Y1 - #Y<br />
hint (32 clBlack #a #b 390 70 (Смещение #x #y))<br />
log Смещение #x #y<br />
End_script<br />
<br />
== Смотрите также ==<br />
[[Get color]]<br />
<br>[[Color]]<br />
<br>[[Findcolor]]<br />
<br />
== Первоисточник ==<br />
<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%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_(Regexp)&diff=852
Регулярные выражения (Regexp)
2019-08-28T11:37:41Z
<p>Tatikoma: </p>
<hr />
<div><table border="1" cellspacing="0" cellpadding="15"> <br />
<tr style="background-color:#cccccc" align="center"><td colspan="2">Спецсимволы</td><br />
<td colspan="2">Квантификаторы</td><br />
<td colspan="2">Диапазоны</td><br />
</tr><br />
<br />
<tr VALIGN=top><br />
<td>^<br />
$ <br />
<br>\b <br />
<br>\B<br />
<br>\t<br />
<br>\s<br />
<br>\S<br />
<br>\d<br />
<br>\D<br />
<br>\w<br />
<br>\W<br />
</td><br />
<br />
<td>начало строки<br />
конец строки<br />
<br>граница слова<br />
<br>не граница слова<br />
<br>табуляция<br />
<br>пробел<br />
<br>не пробел<br />
<br>цифра<br />
<br>не цифра<br />
<br>слово<br />
<br>не слово<br />
</td><br />
<br />
<td><nowiki>*</nowiki><br />
<nowiki>*?</nowiki><br />
<br>+<br />
<br>+?<br />
<br>?<br />
<br>??<br />
<br>{3}<br />
<br>{3,}<br />
<br>{3,5}<br />
<br>{3,5}?<br />
</td><br />
<br />
<td>0 или больше<br />
0 или больше, нежадный<br />
<br>1 или больше<br />
<br>1 или больше, нежадный <br />
<br>0 или 1<br />
<br>0 или 1, нежадный<br />
<br>ровно 3<br />
<br>3 или больше<br />
<br>3, 4 или 5<br />
<br>3, 4 или 5, нежадный<br />
</td><br />
<br />
<td>.<br />
(a|b)<br />
<br>(...)<br />
<br>(?:...)<br />
<br>[abc] <br />
<br>[^abc]<br />
<br>[a-q]<br />
<br>[A-Q]<br />
<br>[0-7]<br />
<br>[а-я]<br />
<br>[А-Я]<br />
</td><br />
<br />
<td>любой символ, кроме переноса строки<br />
a или b<br />
<br>группа<br />
<br>пассивная группа<br />
<br>a, b или с <br />
<br>кроме a, b, с <br />
<br>буква между a и q<br />
<br>буква между A и Q<br />
<br>цифра между 0 и 7<br />
<br>буква между а и я, ё не входит в этот диапазон<br />
<br>буква между А и Я, Ё не входит в этот диапазон<br />
</td><br />
</tr><br />
<br />
<tr style="background-color:#cccccc" VALIGN=top><br />
<td colspan="2" align="center">Утверждения</td><br />
<td colspan="2" align="center">Обратные ссылки</td><br />
<td style="background-color:#ffffff" colspan="2" rowspan="2">\ - общий экранирующий символ<br />
Символы, которые нужно экранировать: ^$()<>[]{}\|.=*+?<br />
<br>(?x) - игнорировать пробелы внутри регэкспа<br />
(?#комментарий) - комментарий внутри регэкспа</td><br />
</tr><br />
<br />
<td>?=<br />
?!<br />
<br>?<=<br />
<br>?<!<br />
</td><br />
<br />
<td>просмотр вперед<br />
отрицание просмотра вперед<br />
<br>просмотр назад<br />
<br>отрицание просмотра назад<br />
</td><br />
<br />
<td VALIGN=top>\n<br />
(?<char>\w)<br />
<br>\k<char><br />
<br>\k'name'<br />
<br>(?n)<br />
</td><br />
<br />
<td VALIGN=top>n - номер группы<br />
именованная группа<br />
<br>обращение к группе<br />
<br>обращение к группе<br />
<br>ссылка на подмаску<br />
</td><br />
</table><br />
<br />
<br />
== Примеры с числами ==<br />
<br />
// Найти цифру.<br />
set $regexp "\d" // регэксп<br />
set $string Вася съел 3 яблока. // строка, в которой нужно найти цифру<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0 // если найдено<br />
log $hitstring // вывод в лог что нашлось<br />
end_if<br />
end_script<br />
<br />
// Найти трехзначное число.<br />
set $regexp "\d\d\d" // или "\d{3}"<br />
set $string 1 килограмм 458 грамм.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из трёх-пяти цифр.<br />
set $regexp "\d{3,5}"<br />
set $string Потрачено 5389 рублей.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из 3 и более цифр.<br />
set $regexp "\d{3,}"<br />
set $string 12 32 65432 4<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из любого количества цифр.<br />
set $regexp "\d+"<br />
set $string 23567812<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из любого количества цифр, при этом слева и справа не должно быть других букв.<br />
// Т. е. в строке: 'Vasya123' число 123 не будет найдено, т. к оно является границей слова Vasya.<br />
set $regexp "\b\d+\b"<br />
set $string Логин: Vasya123. Пароль: 5432.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из любого количества цифр, при этом оно должно быть границей слова.<br />
set $regexp "\B\d+"<br />
set $string Логин: Vasya123 Пароль: 54321.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, состоящее из трёх или шести цифр.<br />
set $regexp "\b\d{3}\b|\b\d{6}\b"<br />
set $string 1234 345678 22<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти дробное число. При этом целое число не будет найдено.<br />
set $regexp "\d+[,.]\d+" <br />
set $string 444 123.456 22<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти целое или дробное число.<br />
set $regexp "\b\d*[,.]??\d+\b"<br />
set $string qwe 833.45 rrr<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число с точками или запятыми.<br />
set $regexp "\d+([,.]\d+)+"<br />
set $string На вашем счету: 2.000.000.000 рублей.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти все числа в строке. Дробные и целые.<br />
set $regexp "\b\d*[,.]??\d+\b"<br />
set $string USD 64,70 EUR 73,19 НЕФТЬ 50,48<br />
set #n regexp (#position $hitstring $string $regexp)<br />
while 1 = 1<br />
if #n > 0<br />
log $hitstring // вывод результата в лог<br />
set #z #position + size($hitstring) // позиция числа + длина числа<br />
set $string delete($string 1 #z) // удалить начало строки для дальнейшего поиска<br />
set #n regexp (#position $hitstring $string $regexp)<br />
else<br />
break // если ничего не найдено прервать цикл<br />
end_if<br />
end_while<br />
End_script<br />
<br />
// Найти дату в формате xx.xx.xxxx<br />
set $regexp "\d{2}\.\d{2}\.\d{4}"<br />
set $string Дата рождения 10.09.2016<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти дату в формате xx.xx.xxxx или xx.xx.xx<br />
set $regexp "\d{2}\.\d{2}\.\d{4}|\d{2}\.\d{2}\.\d{2}"<br />
set $string Дата рождения 10.09.16<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, если оно вначале строки<br />
set $regexp "^\d+"<br />
set $string 444 qwer 666<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, если оно в конце строки<br />
set $regexp "\d+$"<br />
set $string 444 qwer 666 <br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число после слова 'сумма:', может быть целым и не целым<br />
set $regexp "(?<=сумма:)\s*[\d.,]+"<br />
set $string Вы получили 540 рублей, общая сумма: 5032 рубля.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
// учтите, что пробелы перед числом тоже будут присутствовать в строке<br />
// если после слова 'сумма:' будет пробел, то переменная '$hitstring' будет содержать ' 5032' <br />
// в избежание ошибок рекомендуется обрезать пробелы с помощью trim<br />
set $a trim($hitstring)<br />
log $a <br />
end_if<br />
end_script<br />
<br />
// Найти число после слова 'сумма:', может быть целым и не целым<br />
// В отличии от примера 2, в котором после слова 'сумма:' может быть любое количество пробелов и требуется обрезать их,<br />
// то в этом, пробел может отсутствовать или быть только 1, но при этом не требуется использовать trim. <br />
set $regexp "(?<=сумма:|сумма:\s)[\d.,]+"<br />
set $string Вы получили 540 рублей, общая сумма: 5032 рубля.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring <br />
end_if<br />
end_script<br />
<br />
// Найти число, которое стоит перед словом 'золото'<br />
set $regexp "[\d.,]+(?=\s*золото)" <br />
set $string Ваши ресурсы: 48 золото, 69 руда.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число между словами: 'Петя' и 'груш'<br />
set %a [1] Вася съел 2 яблока, а Петя 3 груши. // строка, в которой ищем текст<br />
log mode compact<br />
set $regexp "(?<=Петя)\s*\d+(?=\s*груш)" // искать число между словами Петя и груш<br />
set #n regexp (#position $hitstring %a [1] $regexp) <br />
if #n > 0<br />
set $hitstring trim($hitstring) // обрезать пробелы<br />
log $hitstring<br />
end_if<br />
End_script<br />
<br />
// Найти положительное число, т. е. если перед ним нет знака минус '-'<br />
set $regexp "(?<!-)\b\d+\b"<br />
set $string -123 456<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти число, если после него нет слова доллар<br />
set $regexp "\b\d+\b(?!\s*доллар)"<br />
set $string 123 доллара, 456 рублей<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти в строке пару одинаковых чисел<br />
set $regexp "(\d)\1" <br />
set $string 14325778690<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log Найдено $hitstring в позиции #position<br />
end_if<br />
end_script<br />
<br />
// Найти все целые числа в тексте. В строке может быть несколько чисел.<br />
log mode compact<br />
log clear<br />
// массив, может быть получен из буфера или загружен из файла<br />
set %a [1] qwe 111 222 wer<br />
set %a [2] 333 rrr trt<br />
set %a [3] tyt eerr 444 zxc 555 dff<br />
set %a [4] sdf oi qw ee w<br />
set %a [5] 666 ewewewe 777 ewewe 888<br />
set %a [6] jkjk 999 ewe<br />
<br />
set $regexp "\d+" // любые целые числа (если нужно искать другие данные, изменить регэксп на нужное)<br />
<br />
for #i 1 size(%a) // перебираем все строки<br />
set $string %a[#i]<br />
set #n regexp (#position $hitstring $string $regexp)<br />
while 1 = 1<br />
if #n > 0<br />
log $hitstring // вывод результата в лог<br />
set #z #position + size($hitstring) // позиция числа + длина числа<br />
set $string delete($string 1 #z) // удалить начало строки для дальнейшего поиска<br />
set #n regexp (#position $hitstring $string $regexp)<br />
else<br />
break // если ничего не найдено прервать цикл и искать в следующей строке<br />
end_if<br />
end_while<br />
end_for<br />
End_script<br />
<br />
// Найти чётное число<br />
set $regexp "\b\d*[02468]\b"<br />
set $string 123 321 456 327<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти нечётное число<br />
set $regexp "\b\d*[13579]\b"<br />
set $string 122 321 456<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n = 1<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти ip адрес<br />
set $regexp "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(?1)){3}\b"<br />
set $string qwert 123 rty 192.168.1.1 452 ewq<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
== Примеры с текстом ==<br />
<br />
// Найти текст (не число)<br />
set $regexp "\D+"<br />
set $string 123 + 456<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
set $hitstring trim($hitstring) // обрезать пробелы, т. к. они тоже не являются числами и будут найдены<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово<br />
set $regexp "\w+" // \w это: a-z, A-Z, 0-9 и _<br />
set $string Hello World!!!<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти 2 слова через пробел или несколько пробелов<br />
set $regexp "\w+\s+\w+"<br />
set $string Hello World!!!<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script <br />
<br />
// Найти слово без заглавных букв<br />
set $regexp "\b[a-z]+"<br />
set $string Hello world!!!<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово из русских букв<br />
set $regexp "[а-яА-Я]+" // буква ё не входит в диапазон, её надо записывать отдельно: [а-яА-ЯёЁ]+<br />
set $string Hello Мир!!!<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово, заканчивающееся на 3, 6 или 9<br />
set $regexp "\w+[369]\b"<br />
set $string Vasya32 and Misha36<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово, заканчивающееся на любое число<br />
set $regexp "[a-zA-Z]+[0-9]+\b"<br />
set $string Vasya, Misha364<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти первое слово в строке<br />
set $regexp "^\w+"<br />
set $string Hello world<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти последнее слово в строке<br />
set $regexp "\w+$"<br />
set $string Hello world<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слова hot, hat или hit<br />
set $regexp "h[oai]t"<br />
set $string hot water<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово из 5 букв<br />
set $regexp "\w{5}"<br />
set $string My name is Misha.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово из 4-6 букв<br />
set $regexp "[a-zA-Z]{4,6}"<br />
set $string Cat, dog, mouse, rat.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти слово из 6 или больше букв<br />
set $regexp "[a-zA-Z]{6,}"<br />
set $string Cat, dog, mouse, crocodile, rat.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти дату в формате: число месяц буквами год<br />
set $regexp "\d{1,2}\s*[а-я]+\s*\d{4}"<br />
set $string День рождения: 26 ноября 2016<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти текст после слова 'была'<br />
set $regexp "(?<=была\s)[а-яa-z]+"<br />
set $string У попа была собака.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти текст перед словами ', в лес'<br />
set $regexp "[а-яa-z]+(?=,\s*в лес)"<br />
set $string Работа не волк, в лес не уйдёт.<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти текст между тегами <nowiki><div> </div></nowiki><br />
set $regexp <nowiki>"(?<=\<div\>).*(?=\<\/div\>)"</nowiki><br />
set $string <nowiki><div>text1</div></nowiki><br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Проверить состоит ли строка из 5-10 символов,<br />
// из которых хотя бы 1 заглавная буква, 1 строчная и 1 цифра<br />
set $regexp "^((?=.*[A-Z])(?=.*[a-z])(?=.*\d).{5,10})$"<br />
set $string qWeRty43<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script<br />
<br />
// Найти имя картинки в формате jpg, bmp или png<br />
set $regexp "([^\s]+(?=\.(jpg|bmp|png))\.\2)" // или так: "[^\s]+(?=\.(jpg|bmp|png))", если нужно имя без расширения<br />
set $string Image: foto123.jpg<br />
set #n regexp (#position $hitstring $string $regexp)<br />
if #n > 0<br />
log $hitstring<br />
end_if<br />
end_script</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B&diff=851
Полезные советы
2019-08-28T11:37:30Z
<p>Tatikoma: </p>
<hr />
<div>[[Экранирование]]<br />
<br>[[Переменные из других скриптов]]<br />
<br>[[Ложные условия]]<br />
<br>[[Таблица ASCII кодов]]<br />
<br>[[Оконная система Windows]]<br />
<br>[[Массивы]]<br />
<br>[[Макросы]]<br />
<br>[[Регулярные выражения (Regexp)]]<br />
<br>[[Перемешивание массива]]<br />
<br>[[Определение цвета в подсвечивающихся объектах (Ctrl + B)]]<br />
<br>[[Подготовка картинки для Findimage]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B&diff=850
Полезные программы
2019-08-28T11:37:19Z
<p>Tatikoma: </p>
<hr />
<div><br />
== InqSoft Window Scanner ==<br />
Эта программа позволяет не только просматривать большое количество параметров окон, таких, как размеры, видимость, текст и имя класса окна, но и изменять многие из них. Кроме того, программа способна строить дерево окон, просматривать главное меню окон, управлять потоками и процессами, включать отключенные пункты меню и многое другое.<br />
Кроме того, InqSoft Window Scanner включает в себя инструменты для решения некоторых специфических задач, таких. как: захват содержимого окон с экрана, захват цвета нужного пикселя, принудительное извлечение данных из окон, редактирование памяти процесса и многое другое.<br />
<br>[http://forum.uokit.com/index.php?act=Attach&amp;type=post&amp;id=1171 Скачать программу]<br />
<br />
<br />
== Unique Colors Search ==<br />
Программа анализа набора изображений с расширенной статистикой цветов. Полезна для нахождения уникальных цветов объекта(например мобов), для поиска наиболее распространенных цветов, подбора нескольких оптимальных цветов.<br />
Позволяет сгенерировать условие поиска картинки в пилоте.<br />
<br>[http://forum.uokit.com/index.php?act=Attach&amp;type=post&amp;id=1036 Скачать программу]<br />
<br>[http://forum.uokit.com/index.php?showtopic=20545 Подробное описание]<br />
<br />
<br />
== Keylocker ==<br />
Небольшая программа, которая блокирует и разблокирует мышь и клавиатуру при нажатии определённого сочетания клавиш. Позволяет исключить случайные нажатия на клавиатуру и движения мышью. При этом пилот сможет выполнять нажатия и перемещать курсор.<br />
<br>[http://yadi.sk/d/6tuYzXoQvMMei Скачать программу]<br />
<br>[http://uopilot.tati.pro/index.php?title=Keylocker Подробное описание]<br />
<br />
<br />
== Fastest Search ==<br />
Дополнение к Mozilla FireFox. Может искать регулярные выражения на текстовой странице браузера и выделять найденный текст. Т.е. текст соответствующий заданному шаблону поиска, а не указанный точно.<br />
<br>[http://addons.mozilla.org/En-us/firefox/addon/fastest-search/?src=search Скачать]<br />
<br>[http://uopilot.tati.pro/index.php?title=Fastest_Search Подробное описание]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9D%D0%B5%D0%B1%D0%B5%D1%81%D0%B0_:_%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B8%D0%B3%D1%80%D0%B0_!&diff=849
Поиск хода в Небеса : уникальная игра !
2019-08-28T11:37:08Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
[https://www.youtube.com/watch?v=ahGqGXk9cqY Видео-инструкция] настройки скрипта при помощи дополнительного скрипта (указан после основного скрипта).<br />
<br>Пилот запускать от администратора.<br />
<br />
== Версия ==<br />
3.0<br />
<br>Внесённые изменения:<br />
<br>1. В лог выводятся все варианты хода.<br />
<br>2. Добавлен расчёт стоимости хода.<br />
// имя стоимость цвет<br />
init_arr %imya (1) Череп 6 11988223<br />
init_arr %imya (2) Красный 5 196688<br />
init_arr %imya (3) Жёлтый 3 171991<br />
init_arr %imya (4) Зелёный 1 393204<br />
init_arr %imya (5) Крест 1 7834774<br />
Череп стоит 6, красный 5. Т. е. если будет найдено 3 черепа и 3 красных будет сделан ход черепа, т. к. 3 (черепа)* 6 (стоимость) = 18, больше чем 3 (красных) * 5 (стоимость) = 15.<br />
Стоимость можно менять в зависимости от того что приоритетнее. Указывать число от 1 и выше.<br />
<br>3. Ходы где будет составлено 2 ряда тоже просчитываются. Т .е . если найдены ходы: 3 черепа и 3 красных + 3 жёлтых, то будет сделан ход с красным и жёлтым, т. к. 3 черепа это 18 очков, а красный с жёлтым это 24 (3*5 + 3*3).<br />
<br>4. Ход из 5 в ряд всегда в приоритете. Если такой ход возможен, то он будет сделан независимо от стоимости других ходов.<br />
<br />
== Минимальная версия UOPilot ==<br />
2.38<br />
<br />
== Скрипт ==<br />
<br />
'''Поиск хода'''<br />
<br />
// Небеса поиск хода<br />
init_arr %hod (1) 849, 204 936748 // кнопка хода<br />
init_arr %LevVerh (1) 848, 259 // левая верхняя картинка<br />
<br />
// имя стоимость цвет<br />
init_arr %imya (1) Череп 6 11988223<br />
init_arr %imya (2) Красный 5 196688<br />
init_arr %imya (3) Жёлтый 3 171991<br />
init_arr %imya (4) Зелёный 1 393204<br />
init_arr %imya (5) Крест 1 7834774<br />
<br />
set #workwin 0 // 0 - в активном окне, 1- в перекрытом<br />
<br />
<br />
if #workwin = 0<br />
set #handle 2<br />
init_arr %workwindow (1) 0 0 // не изменять!!<br />
else<br />
init_arr %workwindow (1) 0 0 // смещение между родительским и дочерним окном<br />
set #handle findwindow (Небеса)<br />
end_if<br />
<br />
gosub begin<br />
<br />
:start<br />
gosub poisk // поиск картинок<br />
call line6 %a $regexp6 0 // поиск ряд из 6<br />
call line6 %b $regexp6 1 // столбец из 6<br />
call line5 %a $regexp5 0 // ряд из 5<br />
call line5 %b $regexp5 1 // столбец из 5<br />
call line4 %a $regexp4 0 // ряд из 4<br />
call line4 %b $regexp4 1 // столбец из 4<br />
gosub line3 // ряд из 3, стодбец из 3<br />
gosub showresult // вывод в лог результатов<br />
gosub hod // просчёт хода<br />
<br />
// ход<br />
left #x1 #y1<br />
wait 200<br />
left #x2 #y2<br />
wait 100<br />
left 133, 575 20 20 20 20 // клик в любое место, чтобы курсор не оставался над картинками<br />
wait 1000<br />
goto start<br />
End_script<br />
<br />
:begin<br />
set linedelay 0<br />
if workwindow = 0<br />
log Не указано рабочее окно<br />
End_script<br />
end_if<br />
log open<br />
wait 100<br />
set windowpos 0 0 500 400 loghandle<br />
log clear<br />
log mode compact<br />
set $regexp6 "(\d)\1\1\d\1\1|(\d)\2\d\2\2\2|(\d)\d\3\3\3\3|(\d)\4\4\4\4\d|(\d)\5\5\5\d\5|\d(\d)\6\6\6\6"<br />
set %reg [1 1] "(\d)\1\1\1\d\d|(\d)\d\2\2\2\2|(\d)\3\3\3\d\3|\d(\d)\4\4\4\d|\d\d(\d)\5\5\5|(\d)\d\6\6\6\d|"<br />
set %reg [1 2] "(\d)\7\d\7\7\d|(\d)\8\8\d\8\d|\d(\d)\9\d\9\9|\d(?<10>\d)\k<10>\k<10>\d\k<10>|\d(?<11>\d)\d\k<11>\k<11>\k<11>"<br />
set $regexp5 %reg [1]<br />
set $regexp4 "(\d)\1\1|(\d)\2\d\2|(\d)\d\3\3|(\d)\4\4(\d)\5\5"<br />
set $regexp3_1 "(\d)\1"<br />
set $regexp3_2 "(\d)\d\1"<br />
<br />
set #startX %LevVerh [1 1] + %workwindow [1 1]<br />
set #startY %LevVerh [1 2] + %workwindow [1 2]<br />
set #stepX 41<br />
set #stepY 41<br />
set #endX #startX + #stepX * 5<br />
set #endY #startY + #stepY * 5<br />
set #hodx %hod [1 1] + %workwindow [1 1]<br />
set #hody %hod [1 2] + %workwindow [1 2]<br />
return<br />
<br />
:poisk<br />
set size(%left)<br />
set size(%left2)<br />
set #result 0<br />
if #workwin = 0<br />
while_not #hodx #hody %hod [1 3] // ждать появление кнопки хода<br />
wait 100<br />
end_while<br />
else<br />
while_not color (#hodx #hody #handle) = %hod [1 3] // для перекрытого окна<br />
wait 100<br />
end_while<br />
end_if<br />
wait 300<br />
log clear<br />
set timer<br />
<br />
// создание сетки<br />
set #a findcolor (#startX #startY #endX #endY #stepX #stepY (%imya [1 3] %imya [2 3] %imya [3 3] %imya [4 3] %imya [5 3]) %arr #handle)<br />
//save_array %arr C:\Users\abc\Desktop\Setkafind.txt<br />
if #a > 0<br />
set #z 0<br />
for #i 1 6<br />
for #j 1 6<br />
set #z #z + 1<br />
switch %arr [#z 3]<br />
case %imya [1 3]: set %a [#i #j] 1 // череп<br />
break<br />
case %imya [2 3]: set %a [#i #j] 2 // красный<br />
break<br />
case %imya [3 3]: set %a [#i #j] 3 // жёлтый<br />
break<br />
case %imya [4 3]: set %a [#i #j] 4 // крест<br />
break<br />
case %imya [5 3]: set %a [#i #j] 5 // зелёный<br />
end_switch<br />
end_for<br />
end_for<br />
//save_array %a C:\Users\abc\Desktop\Setka.txt //массив сетка<br />
else<br />
goto start<br />
end_if<br />
<br />
for #i 1 size(%a)<br />
init_arr %b (#i) %a[1 #i] %a[2 #i] %a[3 #i] %a[4 #i] %a[5 #i] %a[6 #i]<br />
end_for<br />
return<br />
<br />
<br />
<br />
:line3<br />
for #i 1 size(%a)<br />
set $string %a [#i]<br />
call line3_1 %a #i $string $string 0 $regexp3_1 0<br />
call line3_2 %a #i $string $string 0 $regexp3_2 0<br />
end_for<br />
set %a %b<br />
for #i 1 size(%a)<br />
set $string %a [#i]<br />
call line3_1 %a #i $string $string 0 $regexp3_1 1<br />
call line3_2 %a #i $string $string 0 $regexp3_2 1<br />
end_for<br />
return<br />
<br />
:showresult<br />
if size(%left) > 0<br />
for #i 1 size(%left)<br />
log Поменять местами %left [#i 2] %left [#i 1] и %left [#i 4] %left [#i 3] Ряд из %left [#i 6] %left [#i 7]<br />
end_for<br />
else<br />
log Варианты не найдены<br />
end_if<br />
sort_array %left 6 dec<br />
//save_array %left C:\Users\abc\Desktop\Resultleft.txt<br />
return<br />
<br />
:hod<br />
if %left [1 6] > 4<br />
set #summa1 %left [1 6] * %imya [%left [1 5] 2]<br />
log<br />
log Ход: %left [1 2] %left [1 1] и %left [1 4] %left [1 3] Ряд из %left [1 6] %left [1 7] Сумма: #summa1<br />
init_arr %xy (1) %left [1 2] %left [1 1] %left [1 4] %left [1 3]<br />
else<br />
for #i 1 eval (size(%left) - 1)<br />
set #hod1 %left[#i 2]%left[#i 1]%left[#i 4]%left[#i 3]<br />
set #jj #i + 1<br />
for #j #jj eval (size(%left) - 1)<br />
set #hod2 %left[#j 4]%left[#j 3]%left[#j 2]%left[#j 1]<br />
if #hod1 = #hod2<br />
set #zz #zz + 1<br />
set #summa %left [#i 6] * %imya [%left [#i 5] 2] + %left [#j 6] * %imya [%left [#j 5] 2]<br />
init_arr %left2 (#zz) %left[#i 2] %left[#i 1] %left[#i 4] %left[#i 3] %left[#i 6] %imya[%left[#i 5] 1] %left[#j 6] %imya[%left[#j 5] 1] #summa<br />
end_if<br />
end_for<br />
end_for<br />
for #k 1 size(%left)<br />
set #summa2 %left [#k 6] * %imya [%left [#k 5] 2]<br />
set %left [#k 8] #summa2<br />
end_for<br />
sort_array %left 8 dec<br />
sort_array %left2 5 dec<br />
if #zz > 0<br />
if %left [1 8] < %left2 [1 9]<br />
log<br />
log Ход: %left2 [1 1] %left2 [1 2] и %left2 [1 3] %left2 [1 4] Ряд из %left2 [1 5] %left2 [1 6] и %left2 [1 7] %left2 [1 8] Сумма: %left2 [1 9]<br />
init_arr %xy (1) %left2 [1 1] %left2 [1 2] %left2 [1 3] %left2 [1 4]<br />
else<br />
log<br />
log Ход: %left [1 2] %left [1 1] и %left [1 4] %left [1 3] Ряд из %left [1 6] %left [1 7] Сумма: %left [1 8]<br />
init_arr %xy (1) %left [1 2] %left [1 1] %left [1 4] %left [1 3]<br />
end_if<br />
else<br />
log<br />
log Ход: %left [1 2] %left [1 1] и %left [1 4] %left [1 3] Ряд из %left [1 6] %left [1 7] Сумма: %left [1 8]<br />
init_arr %xy (1) %left [1 2] %left [1 1] %left [1 4] %left [1 3]<br />
end_if<br />
end_if<br />
set #x1 (#startX + %xy [1 2] * #stepX) - #stepX - %workwindow [1 1]<br />
set #y1 (#startY + %xy [1 1] * #stepY) - #stepY - %workwindow [1 2]<br />
set #x2 (#startX + %xy [1 4] * #stepX) - #stepX - %workwindow [1 1]<br />
set #y2 (#startY + %xy [1 3] * #stepY) - #stepY - %workwindow [1 2]<br />
log<br />
log На поиск хода затрачено: timer мсек<br />
return<br />
<br />
proc colrow #col1 #row1 #col2 #row2 #flagcolrow #number #cur #z<br />
set #result.#cur 1<br />
log mode compact<br />
if #flagcolrow = 0<br />
set #size size(%left.#cur)<br />
set #size #size + 1<br />
set %left.#cur [#size 1] #row1<br />
set %left.#cur [#size 2] #col1<br />
set %left.#cur [#size 3] #row2<br />
set %left.#cur [#size 4] #col2<br />
set %left.#cur [#size 5] #z<br />
set %left.#cur [#size 6] #number<br />
set %left.#cur [#size 7] %imya.#cur [#z 1]<br />
else<br />
set #size size(%left.#cur)<br />
set #size #size + 1<br />
set %left.#cur [#size 1] #col1<br />
set %left.#cur [#size 2] #row1<br />
set %left.#cur [#size 3] #col2<br />
set %left.#cur [#size 4] #row2<br />
set %left.#cur [#size 5] #z<br />
set %left.#cur [#size 6] #number<br />
set %left.#cur [#size 7] %imya.#cur [#z 1]<br />
end_if<br />
end_proc<br />
<br />
// поиск 111110 011111 101111 110111 111011 111101 (проверка на 6 в ряд)<br />
proc line6 %c $regexp #flagcolrow<br />
for #i 1 size(%c)<br />
set #n regexp (#pos $str %c[#i] $regexp)<br />
if #n > 0<br />
if #i < 6<br />
set #col #i + 1<br />
set #n regexp (#pos1 $str1 %c[#i] (\d)\1\1\1\1)<br />
if #n > 0<br />
if #pos1 = 1<br />
set #z copy($str1 1 1)<br />
if %c [#col 6] = #z<br />
call colrow #i 6 #col 6 #flagcolrow 6 current_script #z<br />
end_if<br />
else<br />
set #z copy($str1 5 1)<br />
if %c [#col 1] = #z<br />
call colrow #i 1 #col 1 #flagcolrow 6 current_script #z<br />
end_if<br />
end_if<br />
else<br />
set #n regexp (#position $strnew %c[#i] (?<=(\d))(?!\1)\d)<br />
if #n > 0<br />
set #str %c[#i]<br />
if #position = 2<br />
set #z copy($str 3 1)<br />
else<br />
set #z copy($str 2 1)<br />
end_if<br />
if %c [#col #position] = #z<br />
call colrow #i #position #col #position #flagcolrow 6 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
end_if<br />
if #i > 1<br />
set #col #i - 1<br />
set #n regexp (#pos1 $str1 %c[#i] (\d)\1\1\1\1)<br />
if #n > 0<br />
if #pos1 = 1<br />
set #z copy($str1 1 1)<br />
if %c [#col 6] = #z<br />
call colrow #i 6 #col 6 #flagcolrow 6 current_script #z<br />
end_if<br />
else<br />
set #z copy($str1 5 1)<br />
if %c [#col 1] = #z<br />
call colrow #i 1 #col 1 #flagcolrow 6 current_script #z<br />
end_if<br />
end_if<br />
else<br />
set #n regexp (#position $strnew %c[#i] (?<=(\d))(?!\1)\d)<br />
if #n > 0<br />
set #str %c[#i]<br />
if #position = 2<br />
set #z copy($str 3 1)<br />
else<br />
set #z copy($str 2 1)<br />
end_if<br />
if %c [#col #position] = #z<br />
call colrow #i #position #col #position #flagcolrow 6 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
end_if<br />
end_if<br />
end_for<br />
end_proc<br />
<br />
// поиск 111100 011110 001111 101111 111101<br />
<br />
proc line5 %c $regexp #flagcolrow<br />
for #i 1 size(%c)<br />
set #n regexp (#pos $str %c[#i] $regexp)<br />
if #n > 0<br />
set #z copy($str 1 1)<br />
set #n2 regexp (#pos3 $str3 %c[#i] (\d)\1\1\1\1) // проверка что не 11111<br />
if #n2 = 0<br />
set #n1 regexp (#pos2 $str2 %c[#i] (\d)\d\1\1\1\1|(\d)\2\2\2\d\2)<br />
if #n1 = 0 // если 111100 011110 001111<br />
set #n regexp (#pos $str %c[#i] (\d)\1\1\1)<br />
if #n > 0<br />
set #z copy($str 1 1)<br />
if #i < 6<br />
set #col #i + 1<br />
switch #pos<br />
case 1:<br />
if %c [#col 5] = #z<br />
call colrow #i 5 #col 5 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [#col 1] = #z<br />
call colrow #i 1 #col 1 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col 6] = #z<br />
call colrow #i 6 #col 6 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [#col 2] = #z<br />
call colrow #i 2 #col 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_switch<br />
if #i > 1<br />
set #col #i - 1<br />
switch #pos<br />
case 1:<br />
if %c [#col 5] = #z<br />
call colrow #i 5 #col 5 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [#col 1] = #z<br />
call colrow #i 1 #col 1 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col 6] = #z<br />
call colrow #i 6 #col 6 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [#col 2] = #z<br />
call colrow #i 2 #col 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
end_if<br />
else<br />
// 111101 101111<br />
set #n regexp (#pos $str %c[#i] (\d)\1\1\1)<br />
if #n > 0<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
switch #i<br />
case 1:<br />
if #pos = 1<br />
if %c [#i 6] = #z and %c [#col1 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 5 current_script #z<br />
end_if<br />
else<br />
if %c [#i 1] = #z and %c [#col1 2] != #z<br />
call colrow #i 1 #i 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
case 3:<br />
case 4:<br />
case 5:<br />
if #pos = 1<br />
if %c [#i 6] = #z and %c [#col1 5] != #z and %c [#col2 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 5 current_script #z<br />
end_if<br />
else<br />
if %c [#i 1] = #z and %c [#col1 2] != #z and %c [#col2 2] != #z<br />
call colrow #i 1 #i 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 6:<br />
if #pos = 1<br />
if %c [#i 6] = #z and %c [#col2 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 5 current_script #z<br />
end_if<br />
else<br />
if %c [#i 1] = #z and %c [#col2 2] != #z<br />
call colrow #i 1 #i 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
// 111010 011101 101110 010111 110110 011011<br />
set #n regexp (#pos1 $str1 %c[#i] (\d)\1\1\1\1) // проверка что не 5 одинаковых чисел<br />
if #n = 0<br />
set #n regexp (#pos1 $str1 %c[#i] (\d)\d\1\1\1\d|(\d)\2\d\2\2\d|(\d)\3\3\d\3\d|\d(\d)\4\d\4\4|\d(\d)\d\5\5\5|\d(\d)\6\6\d\6)<br />
if #n > 0<br />
set #n1 regexp (#pos1 $str1 %c[#i] (\d)\1\1) // 111010 011101 101110 010111<br />
set #n2 regexp (#pos3 $str3 %c[#i] (\d)\1\d\1\1) // 110110 011011<br />
switch #i<br />
case 1:<br />
if #n1 > 0<br />
set #z copy($str1 1 1)<br />
switch #pos1 // позиция 111<br />
case 1:<br />
if %c [2 4] = #z and %c [#i 6] != #z<br />
call colrow #i 4 2 4 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [2 5] = #z and %c [#i 1] != #z<br />
call colrow #i 5 2 5 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [2 2] = #z and %c [#i 6] != #z<br />
call colrow #i 2 2 2 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %c [2 3] = #z and %c [#i 1] != #z<br />
call colrow #i 3 2 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
// 110110 011011<br />
if #n2 > 0<br />
if #pos3 = 1<br />
if %c [2 3] = #z and %c [#i 6] != #z<br />
call colrow #i 3 2 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
if #pos3 = 2<br />
set #z copy($str3 1 1)<br />
if %c [2 4] = #z and %c [#i 1] != #z<br />
call colrow #i 4 2 4 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
case 2:<br />
case 3:<br />
case 4:<br />
case 5:<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
if #n1 > 0<br />
set #z copy($str1 1 1)<br />
switch #pos1 // позиция 111<br />
// 111010 011101 101110 010111<br />
case 1:<br />
if %c [#i 6] != #z<br />
if %c [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %c [#i 1] != #z<br />
if %c [#col1 5] = #z<br />
call colrow #i 5 #col1 5 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 5] = #z<br />
call colrow #i 5 #col2 5 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %c [#i 6] != #z<br />
if %c [#col1 2] = #z<br />
call colrow #i 2 #col1 2 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 2] = #z<br />
call colrow #i 2 #col2 2 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 4:<br />
if %c [#i 1] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
<br />
if #flagbreak = 1<br />
break<br />
end_if<br />
end_if<br />
// 110110 011011<br />
if #n2 > 0<br />
if #pos3 = 1<br />
set #z copy($str3 1 1)<br />
if %c [#i 6] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
if #pos3 = 2<br />
set #z copy($str3 1 1)<br />
if %c [#i 1] != #z<br />
if %c [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 5 current_script #z<br />
end_if<br />
if %c [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
end_if<br />
break<br />
case 6:<br />
// 110110 011011<br />
if #n2 > 0<br />
if #pos3 = 1<br />
if %c [5 3] = #z and %c [#i 6] != #z<br />
call colrow #i 3 5 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
if #pos3 = 2<br />
set #z copy($str3 1 1)<br />
if %c [5 4] = #z and %c [#i 1] != #z<br />
call colrow #i 4 5 4 #flagcolrow 5 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
// 111010 011101 101110 010111<br />
if #n1 > 0<br />
set #z copy($str1 1 1)<br />
switch #pos1<br />
case 1:<br />
if %c [5 4] = #z and %c [#i 6] != #z<br />
call colrow #i 4 5 4 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [5 5] = #z and %c [#i 1] != #z<br />
call colrow #i 5 5 5 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [5 2] = #z and %c [#i 6] != #z<br />
call colrow #i 2 5 2 #flagcolrow 5 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %c [5 3] = #z and %c [#i 1] != #z<br />
call colrow #i 3 5 3 #flagcolrow 5 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
end_if<br />
end_if<br />
end_for<br />
end_proc<br />
<br />
proc line4 %c $regexp #flagcolrow<br />
for #i 1 size(%c)<br />
set #n regexp (#pos $str %c[#i] $regexp)<br />
if #n > 0<br />
set #flagbreak 0<br />
switch #i<br />
case 1:<br />
//111000<br />
set #n1 regexp (#pos1 $str1 %c[#i] (\d)\1\1(\d)\2\2)<br />
if #n1 > 0<br />
set #z copy($str1 4 1)<br />
if %c [2 3] = #z and %c [#i 2] != #z<br />
call colrow #i 3 2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
// 110100 011010 001101<br />
set #n2 regexp (#pos2 $str2 %c[#i] (\d)\1\d\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n2 > 0<br />
set #z copy($str2 1 1)<br />
switch #pos2<br />
case 1:<br />
if %c [2 3] = #z and %c [#i 5] != #z<br />
call colrow #i 3 2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [2 4] = #z and %c [#i 1] != #z and %c [#i 6] != #z<br />
call colrow #i 4 2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [2 5] = #z and %c [#i 2] != #z<br />
call colrow #i 5 2 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
// 101100 010110 001011<br />
set #n3 regexp (#pos3 $str3 %c[#i] (\d)\d\1\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n3 > 0<br />
set #z copy($str3 1 1)<br />
switch #pos3<br />
case 1:<br />
if %c [2 2] = #z and %c [#i 5] != #z<br />
call colrow #i 2 2 2 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [2 3] = #z and %c [#i 1] != #z and %c [#i 6] != #z<br />
call colrow #i 3 2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [2 4] = #z and %c [#i 2] != #z<br />
call colrow #i 4 2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
// 111010 011101 101110 010111<br />
set #n4 regexp (#pos4 $str4 %c[#i] (\d)\1\1)<br />
if #n4 > 0<br />
set #n5 regexp (#pos5 $str5 %c[#i] (\d)\1\1\1)<br />
if #n5 = 0<br />
set #z copy($str4 1 1)<br />
switch #pos4<br />
case 1:<br />
if %c [2 4] != #z and %c [1 5] = #z<br />
call colrow #i 4 #i 5 #flagcolrow 4 current_script #z<br />
else<br />
if %c [1 5] = #z and %c [2 4] != #z<br />
call colrow #i 4 2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %c [2 5] != #z and %c [1 6] = #z and %c [1 1] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 4 current_script #z<br />
else<br />
if %c [1 6] != #z and %c [1 1] != #z<br />
call colrow #i 5 2 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
if %c [1 5] != #z and %c [2 1] = #z<br />
call colrow #i 1 2 1 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [2 2] != #z and %c [1 1] = #z<br />
call colrow #i 1 #i 2 #flagcolrow 4 current_script #z<br />
else<br />
if %c [1 6] != #z and %c [1 1] != #z and %c [2 2] = #z<br />
call colrow #i 2 2 2 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
if %c [1 2] != #z and %c [1 6] != #z and %c [2 6] = #z<br />
call colrow #i 6 2 6 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %c [2 3] != #z and %c [1 2] = #z<br />
call colrow #i 2 #i 3 #flagcolrow 4 current_script #z<br />
else<br />
if %c [1 2] != #z and %c [2 3] = #z<br />
call colrow #i 3 2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
case 2:<br />
case 3:<br />
case 4:<br />
case 5:<br />
//111000<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
set #n1 regexp (#pos1 $str1 %c[#i] (\d)\1\1(\d)\2\2)<br />
if #n1 > 0<br />
set #z copy($str1 4 1)<br />
if %c [#i 2] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
// 110100 011010 001101<br />
set #n2 regexp (#pos2 $str2 %c[#i] (\d)\1\d\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n2 > 0<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
set #z copy($str2 1 1)<br />
switch #pos2<br />
case 1:<br />
if %c [#i 5] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %c [#i 6] != #z and %c [#i 1] != #z<br />
if %c [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %c [#i 2] != #z<br />
if %c [#col1 5] = #z<br />
call colrow #i 5 #col1 5 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 5] = #z<br />
call colrow #i 5 #col2 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
if #flagbreak = 1<br />
break<br />
end_if<br />
// 101100 010110 001011<br />
set #n3 regexp (#pos3 $str3 %c[#i] (\d)\d\1\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n3 > 0<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
set #z copy($str3 1 1)<br />
switch #pos3<br />
case 1:<br />
if %c [#i 5] != #z<br />
if %c [#col1 2] = #z<br />
call colrow #i 2 #col1 2 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 2] = #z<br />
call colrow #i 2 #col2 2 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %c [#i 6] != #z and %c [#i 1] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %c [#i 2] != #z<br />
if %c [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
if #flagbreak = 1<br />
break<br />
end_if<br />
// 111010 011101 101110 010111<br />
set #n4 regexp (#pos4 $str4 %c[#i] (\d)\1\1)<br />
if #n4 > 0<br />
set #n5 regexp (#pos5 $str5 %c[#i] (\d)\1\1\1)<br />
if #n5 = 0<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
set #z copy($str4 1 1)<br />
switch #pos4<br />
case 1:<br />
if %c [#i 5] = #z<br />
if %c [#col1 4] != #z and %c [#col2 4] != #z<br />
call colrow #i 4 #i 5 #flagcolrow 4 current_script #z<br />
end_if<br />
else<br />
if %c [#i 5] != #z<br />
if %c [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
// 011101<br />
case 2:<br />
if %c [#i 6] = #z and %c [#col1 5] != #z and %c [#col2 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 4 current_script #z<br />
else<br />
if %c [#i 6] != #z<br />
if %c [#col1 5] = #z<br />
call colrow #i 5 #col1 5 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 5] = #z<br />
call colrow #i 5 #col2 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
if %c [#i 5] != #z<br />
if %c [#col1 1] = #z<br />
call colrow #i 1 #col1 1 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 1] = #z<br />
call colrow #i 1 #col2 1 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
// 101110 010111<br />
case 3:<br />
if %c [#i 1] = #z and %c [#col1 2] != #z and %c [#col2 2] != #z<br />
call colrow #i 1 #i 2 #flagcolrow 4 current_script #z<br />
else<br />
if %c [#i 1] != #z<br />
if %c [#col1 2] = #z<br />
call colrow #i 2 #col1 2 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 2] = #z<br />
call colrow #i 2 #col2 2 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
if %c [#i 2] != #z<br />
if %c [#col1 6] = #z<br />
call colrow #i 6 #col1 6 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 6] = #z<br />
call colrow #i 6 #col2 6 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
// 010111<br />
case 4:<br />
if %c [#i 2] = #z and %c [#col1 3] != #z and %c [#col2 3] != #z<br />
call colrow #i 2 #i 3 #flagcolrow 4 current_script #z<br />
else<br />
if %c [#i 2] != #z<br />
if %c [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 4 current_script #z<br />
end_if<br />
if %c [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
set #flagbreak 1<br />
break<br />
case 6:<br />
// 111010 011101 101110 010111 просто 3 числа 111<br />
set #n4 regexp (#pos4 $str4 %c[#i] (\d)\1\1)<br />
if #n4 > 0<br />
set #n5 regexp (#pos5 $str5 %c[#i] (\d)\1\1\1)<br />
if #n5 = 0<br />
set #z copy($str4 1 1)<br />
switch #pos4<br />
case 1:<br />
if %c [6 5] = #z and %c [5 4] != #z<br />
call colrow #i 4 #i 5 #flagcolrow 4 current_script #z<br />
else<br />
if %c [5 4] = #z and %c [6 5] != #z<br />
call colrow #i 4 5 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %c [6 6] = #z and %c [5 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 4 current_script #z<br />
else<br />
if %c [5 5] = #z and %c [#i 6] != #z<br />
call colrow #i 5 5 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
if %c [5 1] = #z and %c [#i 5] != #z<br />
call colrow #i 1 5 1 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
// 101110 010111<br />
case 3:<br />
if %c [6 1] = #z and %c [5 2] != #z<br />
call colrow #i 1 #i 2 #flagcolrow 4 current_script #z<br />
else<br />
if %c [5 2] = #z and %c [#i 1] != #z<br />
call colrow #i 2 5 2 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
if %c [5 6] = #z and %c [#i 2] != #z<br />
call colrow #i 6 5 6 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %c [6 2] = #z and %c [5 3] != #z<br />
call colrow #i 2 #i 3 #flagcolrow 4 current_script #z<br />
else<br />
if %c [5 3] = #z and %c [6 2] != #z<br />
call colrow #i 3 5 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
if #flagbreak = 1<br />
break<br />
end_if<br />
//111000<br />
set #n1 regexp (#pos1 $str1 %c[#i] (\d)\1\1(\d)\2\2)<br />
if #n1 > 0<br />
set #z copy($str1 4 1)<br />
if %c [5 3] = #z and %c [#i 2] != #z<br />
call colrow #i 3 5 3 #flagcolrow 4 current_script #z<br />
end_if<br />
end_if<br />
// 110100 011010 001101<br />
set #n2 regexp (#pos2 $str2 %c[#i] (\d)\1\d\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n2 > 0<br />
set #z copy($str2 1 1)<br />
switch #pos2<br />
case 1:<br />
if %c [5 3] = #z and %c [#i 5] != #z<br />
call colrow #i 3 5 3 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [5 4] = #z and %c [#i 6] != #z and %c [#i 1] != #z<br />
call colrow #i 4 5 4 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [5 5] = #z and %c [#i 2] != #z<br />
call colrow #i 5 5 5 #flagcolrow 4 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
if #flagbreak = 1<br />
break<br />
end_if<br />
end_if<br />
// 101100 010110 001011<br />
set #n3 regexp (#pos3 $str3 %c[#i] (\d)\d\1\1)<br />
set #n6 regexp (#pos6 $str6 %c[#i] (\d)\1\1\1)<br />
if #n6 = 0<br />
if #n3 > 0<br />
set #z copy($str3 1 1)<br />
switch #pos3<br />
case 1:<br />
if %c [5 2] = #z and %c [#i 5] != #z<br />
call colrow #i 2 5 2 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %c [5 3] = #z and %c [#i 6] != #z and %c [#i 1] != #z<br />
call colrow #i 3 5 3 #flagcolrow 4 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %c [5 4] = #z and %c [#i 2] != #z<br />
call colrow #i 4 5 4 #flagcolrow 4 current_script #z<br />
end_if<br />
end_switch<br />
end_if<br />
end_if<br />
end_switch<br />
end_if<br />
end_for<br />
end_proc<br />
<br />
proc line3_1 %a #i $string $newstring #del $regexp #flagcolrow<br />
set #n regexp (#pos $str $newstring $regexp)<br />
if #n > 0<br />
set #pos #pos + #del<br />
if #pos < 5<br />
set #del #pos + 1<br />
set $newstring delete($newstring 1 2)<br />
if #flagcolrow = 0<br />
call line3_1 %a #i $string $newstring #del (\d)\1 0<br />
else<br />
call line3_1 %a #i $string $newstring #del (\d)\1 1<br />
end_if<br />
end_if<br />
end_if<br />
if #n > 0<br />
set #z copy($str 1 1)<br />
switch #i<br />
case 1:<br />
switch #pos<br />
case 1:<br />
if %a [1 3] != #z<br />
if %a [2 3] = #z and %a [1 4] != #z<br />
call colrow #i 3 2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 4] = #z and %a [2 3] != #z<br />
call colrow #i 3 1 4 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %a [1 1] != #z and %a [1 4] != #z<br />
if %a [2 1] = #z<br />
call colrow #i 1 2 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [2 4] = #z and %a [1 5] != #z<br />
call colrow #i 4 2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 5] = #z and %a [2 4] != #z<br />
call colrow #i 4 1 5 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %a [1 2] != #z and %a [1 5] != #z<br />
if %a [2 2] = #z and %a [1 1] != #z<br />
call colrow #i 2 2 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 1] = #z and %a [2 2] != #z<br />
call colrow #i 2 1 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [2 5] = #z and %a [1 6] != #z<br />
call colrow #i 5 2 5 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 6] = #z and %a [2 5] != #z<br />
call colrow #i 5 1 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 4:<br />
if %a [1 3] != #z and %a [1 6] != #z<br />
if %a [2 3] = #z and %a [1 2] != #z<br />
call colrow #i 3 2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 2] = #z and %a [2 3] != #z<br />
call colrow #i 3 1 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [2 6] = #z and %a [1 6] != #z<br />
call colrow #i 6 2 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 5:<br />
if %a [1 4] != #z<br />
if %a [2 4] = #z and %a [1 3] != #z<br />
call colrow #i 4 2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 3] = #z and %a [2 4] != #z<br />
call colrow #i 4 1 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 6:<br />
if %a [1 4] != #z<br />
if %a [2 4] = #z and %a [1 3] != #z<br />
call colrow #i 4 2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [1 3] = #z and %a [2 4] != #z<br />
call colrow #i 4 1 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
break<br />
case 2:<br />
case 3:<br />
case 4:<br />
case 5:<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
switch #pos<br />
case 1:<br />
if %a [#i 3] != #z<br />
if %a [#col1 3] = #z and %a [#i 4] != #z<br />
call colrow #i 3 #col1 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 3] = #z and %a [#i 4] != #z<br />
call colrow #i 3 #col2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 4] = #z and %a [#col1 3] != #z and %a [#col2 3] != #z<br />
call colrow #i 3 #i 4 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %a [#i 1] != #z and %a [#i 4] != #z<br />
if %a [#col1 1] = #z<br />
call colrow #i 1 #col1 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 1] = #z<br />
call colrow #i 1 #col2 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col1 4] = #z and %a [#i 5] != #z<br />
call colrow #i 4 #col1 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 4] = #z and %a [#i 5] != #z<br />
call colrow #i 4 #col2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 5] = #z and %a [#col1 4] != #z and %a [#col2 4] != #z<br />
call colrow #i 4 #i 5 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %a [#i 2] != #z and %a [#i 5] != #z<br />
if %a [#col1 2] = #z and %a [#i 1] != #z<br />
call colrow #i 2 #col1 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 2] = #z and %a [#i 1] != #z<br />
call colrow #i 2 #col2 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 1] = #z and %a [#col1 2] != #z and %a [#col2 2] != #z<br />
call colrow #i 2 #i 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col1 5] = #z and %a [#i 6] != #z<br />
call colrow #i 5 #col1 5 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 5] = #z and %a [#i 6] != #z<br />
call colrow #i 5 #col2 5 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 6] = #z and %a [#col1 5] != #z and %a [#col2 5] != #z<br />
call colrow #i 5 #i 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 4:<br />
if %a [#i 3] != #z and %a [#i 6] != #z<br />
if %a [#col1 3] = #z and %a [#i 2] != #z<br />
call colrow #i 3 #col1 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 3] = #z and %a [#i 2] != #z<br />
call colrow #i 3 #col2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 2] = #z and %a [#col1 3] != #z and %a [#col2 3] != #z<br />
call colrow #i 3 #i 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col1 6] = #z<br />
call colrow #i 6 #col1 6 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 6] = #z<br />
call colrow #i 6 #col2 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 5:<br />
if %a [#i 4] != #z<br />
if %a [#col1 4] = #z and %a [#i 3] != #z<br />
call colrow #i 4 #col1 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 4] = #z and %a [#i 3] != #z<br />
call colrow #i 4 #col2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 3] = #z and %a [#col1 4] != #z and %a [#col2 4] != #z<br />
call colrow #i 4 #i 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 6:<br />
if %a [#i 4] != #z<br />
if %a [#col1 4] = #z and %a [#i 3] != #z<br />
call colrow #i 4 #col1 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 4] = #z and %a [#i 3] != #z<br />
call colrow #i 4 #col2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#i 3] = #z and %a [#col1 4] != #z and %a [#col2 4] != #z<br />
call colrow #i 4 #i 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
break<br />
case 6:<br />
switch #pos<br />
case 1:<br />
if %a [6 3] != #z<br />
if %a [5 3] = #z and %a [6 4] != #z<br />
call colrow #i 3 5 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 4] = #z and %a [5 3] != #z<br />
call colrow #i 3 6 4 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
<br />
case 2:<br />
if %a [6 1] != #z and %a [6 4] != #z<br />
if %a [5 1] = #z<br />
call colrow #i 1 5 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [5 4] = #z and %a [6 5] != #z<br />
call colrow #i 4 5 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 5] = #z and %a [5 4] != #z<br />
call colrow #i 4 6 5 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %a [6 2] != #z and %a [6 5] != #z<br />
if %a [5 2] = #z and %a [6 1] != #z<br />
call colrow #i 2 5 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 1] = #z and %a [5 2] != #z<br />
call colrow #i 2 6 1 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [5 5] = #z and %a [6 6] != #z<br />
call colrow #i 5 5 5 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 6] = #z and %a [5 5] != #z<br />
call colrow #i 5 6 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 4:<br />
if %a [6 3] != #z and %a [6 6] != #z<br />
if %a [5 3] = #z and %a [6 2] != #z<br />
call colrow #i 3 5 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 2] = #z and %a [5 3] != #z<br />
call colrow #i 3 6 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [5 6] = #z<br />
call colrow #i 6 5 6 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 5:<br />
if %a [6 4] != #z<br />
if %a [5 4] = #z and %a [6 3] != #z<br />
call colrow #i 4 5 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 3] = #z and %a [5 4] != #z<br />
call colrow #i 4 6 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 6:<br />
if %a [6 4] != #z<br />
if %a [5 4] = #z and %a [6 3] != #z<br />
call colrow #i 4 5 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [6 3] = #z and %a [5 4] != #z<br />
call colrow #i 4 6 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
end_switch<br />
end_switch<br />
end_if<br />
end_proc<br />
<br />
<br />
proc line3_2 %a #i $string $newstring #del $regexp #flagcolrow<br />
set #n regexp (#pos $str $newstring $regexp)<br />
if #n > 0<br />
set #pos #pos + #del<br />
if #pos < 4<br />
set #del #pos<br />
set $newstring delete($string 1 #pos)<br />
if #flagcolrow = 0<br />
call line3_2 %a #i $string $newstring #del (\d)\d\1 0<br />
else<br />
call line3_2 %a #i $string $newstring #del (\d)\d\1 1<br />
end_if<br />
end_if<br />
end_if<br />
if #n > 0<br />
set #z copy($str 1 1)<br />
switch #i<br />
case 1:<br />
switch #pos<br />
case 1:<br />
if %a [1 2] != #z and %a [2 2] = #z and %a [1 4] != #z<br />
call colrow #i 2 2 2 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %a [1 3] != #z and %a [2 3] = #z and %a [1 5] != #z and %a [1 1] != #z<br />
call colrow #i 3 2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %a [1 4] != #z and %a [2 4] = #z and %a [1 2] != #z and %a [1 6] != #z<br />
call colrow #i 4 2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %a [1 5] != #z and %a [2 5] = #z and %a [1 3] != #z<br />
call colrow #i 5 2 5 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
end_switch<br />
break<br />
case 2:<br />
case 3:<br />
case 4:<br />
case 5:<br />
set #col1 #i + 1<br />
set #col2 #i - 1<br />
switch #pos<br />
case 1:<br />
if %a [#i 2] != #z and %a [#i 4] != #z<br />
if %a [#col1 2] = #z<br />
call colrow #i 2 #col1 2 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 2] = #z<br />
call colrow #i 2 #col2 2 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 2:<br />
if %a [#i 3] != #z and %a [#i 1] != #z and %a [#i 5] != #z<br />
if %a [#col1 3] = #z<br />
call colrow #i 3 #col1 3 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 3] = #z<br />
call colrow #i 3 #col2 3 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 3:<br />
if %a [#i 4] != #z and %a [#i 2] != #z and %a [#i 6] != #z<br />
if %a [#col1 4] = #z<br />
call colrow #i 4 #col1 4 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 4] = #z<br />
call colrow #i 4 #col2 4 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
case 4:<br />
if %a [#i 5] != #z and %a [#i 3] != #z<br />
if %a [#col1 5] = #z<br />
call colrow #i 5 #col1 5 #flagcolrow 3 current_script #z<br />
end_if<br />
if %a [#col2 5] = #z<br />
call colrow #i 5 #col2 5 #flagcolrow 3 current_script #z<br />
end_if<br />
end_if<br />
break<br />
end_switch<br />
break<br />
case 6:<br />
switch #pos<br />
case 1:<br />
if %a [6 2] != #z and %a [5 2] = #z and %a [6 4] != #z<br />
call colrow #i 2 5 2 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 2:<br />
if %a [6 3] != #z and %a [5 3] = #z and %a [6 1] != #z and %a [6 5] != #z<br />
call colrow #i 3 5 3 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 3:<br />
if %a [6 4] != #z and %a [5 4] = #z and %a [6 2] != #z and %a [6 6] != #z<br />
call colrow #i 4 5 4 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
case 4:<br />
if %a [6 5] != #z and %a [5 5] = #z and %a [6 3] != #z<br />
call colrow #i 5 5 5 #flagcolrow 3 current_script #z<br />
end_if<br />
break<br />
end_switch<br />
end_switch<br />
end_if<br />
end_proc<br />
<br />
'''Настройка'''<br />
// скрипт для настройки<br />
init_arr %hod (1) 848, 203 1265456 // кнопка хода<br />
init_arr %LevVerh (1) 849, 260 // левая верхняя картинка<br />
<br />
<br />
set linedelay 0<br />
set #handle workwindow<br />
log mode compact<br />
log open<br />
wait 200<br />
set windowpos 0 0 500 400 loghandle<br />
log clear<br />
log close<br />
set workwindow windowhandle<br />
set windowpos 0 400<br />
set workwindow #handle<br />
set #startX %LevVerh [1 1]<br />
set #startY %LevVerh [1 2]<br />
set #stepX 41<br />
set #stepY 41<br />
set #endX #startX + #stepX * 5<br />
set #endY #startY + #stepY * 5<br />
<br />
:start<br />
set size(%output)<br />
while_not %hod [1 1] %hod [1 2] %hod [1 3] // ждать появление кнопки хода<br />
wait 100<br />
end_while<br />
wait 300<br />
log clear<br />
set timer<br />
<br />
<br />
set #a findcolor (#startX #startY #endX #endY #stepX #stepY (0-16777215) %arr)<br />
//save_array %arr C:\Users\abc\Desktop\ColorInput.txt<br />
if size(%arr) > 0<br />
set #sizeInput size (%arr)<br />
set #sizeOutput 0<br />
set size(%output)<br />
for #i 1 #sizeInput 1 // Перебираем исходный массив.<br />
set #duplicat 0 // Обнуляем состояние флага, что строка является дубликатом.<br />
for #n 1 #sizeOutput 1 // Перебираем итоговый массив.<br />
if %arr[#i 3] = %output[#n] // Сравниваем есть ли уже такие значение в итоговом массиве.<br />
set #duplicat 1 // Если есть, то ставим флаг дубля.<br />
break // прерываем перебор итогового массива.<br />
end_if<br />
end_for<br />
if #duplicat = 0 // Проверяем чем закончился поиск дубля.<br />
set #sizeOutput #sizeOutput + 1 // Увеличиваем размер итогового массива.<br />
set %output[#sizeOutput ] %arr[#i 3] // Если значение не является дублем, то дописываем его.<br />
end_if<br />
end_for<br />
end_if<br />
<br />
if size(%output) != 5<br />
goto start<br />
end_if<br />
printscreen 0 0 0 0 0 C:\Nebesa.jpg<br />
for #i 1 6<br />
for #j 1 6<br />
set #z #z + 1<br />
set %setka [#i #j] %arr [#z 3]<br />
end_for<br />
end_for<br />
save_array %setka C:\SetkaNebesa.txt<br />
<br />
log Открыть файл C:\Nebesa.jpg<br />
log Открыть файл C:\SetkaNebesa.txt<br />
End_script<br />
<br />
== Смотрите также ==<br />
[[Смещение между окнами]]<br />
<br />
== Первоисточник ==<br />
<br />
[https://forum.uokit.com/index.php?s=&amp;showtopic=29738&amp;view=findpost&amp;p=222372 Форум UOPilot]<br />
<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D1%82%D0%BE%D1%87%D0%B5%D0%BA&diff=848
Поиск статичных точек
2019-08-28T11:36:57Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
<br />
Поиск статичных точек на различных объектах.<br />
<br />
== Версия ==<br />
2.0(?)<br />
<br />
== Минимальная версия UOPilot ==<br />
2.37<br />
<br />
== Скрипт ==<br />
set linedelay 0<br />
log clear<br />
log open<br />
log mode compact<br />
set windowpos 0 0 400 300 loghandle<br />
<br />
log Наведите на ЛЕВЫЙ ВЕРХНИЙ угол<br />
log анализируемого объекта и нажмите ctrl+A.<br />
set workwindow 0<br />
while workwindow = 0<br />
showwindow windowhandle<br />
wait 50<br />
end_while<br />
get mouse_pos #startX #startY<br />
log<br />
log Наведите на ПРАВЫЙ НИЖНИЙ угол<br />
log анализируемого объекта и нажмите ctrl+A.<br />
log После чего НЕ перемещайте курсор.<br />
set workwindow 0<br />
while workwindow = 0<br />
showwindow windowhandle<br />
wait 50<br />
end_while<br />
get mouse_pos #endX #endY<br />
<br />
for #i #startX #endX 1<br />
for #j #startY #endY 1<br />
get color #c #i #j<br />
set %arr1 [ #i #j ] #c<br />
end_for<br />
log Диапазон строк: #startX #endX текущая строка: #i<br />
end_for<br />
<br />
log<br />
log Теперь уберите курсор с анализируемого объекта и<br />
log нажмите ctrl+A для продолжения.<br />
set workwindow 0<br />
while workwindow = 0<br />
alarm<br />
wait 50<br />
end_while<br />
for #i #startX #endX 1<br />
for #j #startY #endY 1<br />
get color #c #i #j<br />
set %arr2 [ #i #j ] #c<br />
end_for<br />
log Диапазон строк: #startX #endX текущая строка: #i<br />
end_for<br />
log clear<br />
log Статичные точки (X Y Color):<br />
for #i #startX #endX 1<br />
for #j #startY #endY 1<br />
if %arr1 [ #i #j ] = %arr2 [ #i #j ]<br />
log #i #j %arr1 [ #i #j ]<br />
end_if<br />
end_for<br />
end_for<br />
End_script<br />
<br />
== Смотрите также ==<br />
[[Set]]<br />
<br>[[For]]<br />
<br>[[Get color]]<br />
<br>[[Get mouse_pos]]<br />
<br>[[While]]<br />
<br>[[Workwindow]]<br />
<br>[[Showwindow]]<br />
<br />
== Первоисточник ==<br />
[https://forum.uokit.com/index.php?s=&amp;showtopic=27054&amp;view=findpost&amp;p=221956 Форум UOPilot]<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D1%83%D1%82%D0%B8_%D0%BA_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B5%D0%BC%D1%83_%D0%BE%D0%BA%D0%BD%D1%83&diff=847
Поиск пути к дочернему окну
2019-08-28T11:36:46Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
<br />
Данный скрипт предназначен для автоматической генерации кода поиска дочернего окна. Скрипт находится в конце страницы.<br />
<br><br>После запуска скрипта нужно указать родительское окно (обычно это заголовок или рамка), навести курсор и нажать Ctrl + A, затем навести курсор на дочернее окно (то, к которому обычно делается привязка), нажать Ctrl + A. В результате в логе будет что-то вроде этого (строк может быть больше):<br />
set #ownerHandle findwindow (Небеса: уникальная игра! - Игра – Yandex)<br />
set #tmp getwindow (#ownerHandle child)<br />
set #childHandle getwindow (#tmp )<br />
<nowiki>#ownerHandle</nowiki> - это будет хендл родительского окна (иногда требуется для поиска в перекрытых окнах).<br />
<br><nowiki>#childHandle</nowiki> - это будет хендл дочернего окна (то, к которому обычно делается привязка).<br />
<br>Вставляете этот код в начало вашего скрипта и дописываете:<br />
set workwindow #childHandle //сделать рабочим окном<br />
В итоге получится:<br />
set #ownerHandle findwindow (Небеса: уникальная игра! - Игра – Yandex)<br />
set #tmp getwindow (#ownerHandle child)<br />
set #childHandle getwindow (#tmp )<br />
set workwindow #childHandle<br />
Теперь, при каждом запуске скрипта будет найдено нужное окно и сделана привязка. Ctrl + A уже не потребуется.<br />
<br />
== Версия ==<br />
1.3<br />
<br />
== Минимальная версия UOPilot ==<br />
?<br />
<br />
== Скрипт ==<br />
set linedelay 0<br />
// Автор DarkMaster.<br />
// Вопросы и предложения оставляйте на форуме<br />
// в специальной теме по данному скрипту.<br />
// http://forum.uokit.com/index.php?showtopic=26742<br />
set #handlePilot findwindow ()<br />
log #handlePilot<br />
log close<br />
log clear<br />
log open<br />
<br />
set #logSizeX 300<br />
set #logSizeY 200<br />
<br />
set #handleLog 0<br />
while #handleLog = 0<br />
set #handleLog findwindow (Log Window)<br />
end_while<br />
set #x (screenwidth - #logSizeX) / 2 <br />
set #y screenheight / 4<br />
set windowpos #x #y #logSizeX #logSizeY #handleLog<br />
log mode compact<br />
<br />
set workwindow 0<br />
showwindow #handlePilot<br />
log Укажите родительское окно (Ctrl+A)<br />
while workwindow = 0<br />
wait 100<br />
showwindow #handlePilot<br />
end_while<br />
set #startHandle workwindow<br />
<br />
log Теперь укажите дочернее окно (Ctrl+A)<br />
while workwindow = #startHandle<br />
wait 100<br />
showwindow #handlePilot<br />
end_while<br />
set #targetHandle workwindow<br />
log clear<br />
<br />
// Получаем имя родительского окна.<br />
set $ownerTitle getwindowtext (#startHandle)<br />
if $ownerTitle != "" // Генерируем только если у родительского окна есть имя.<br />
set $findwindow "findwindow"<br />
log set #ownerHandle $findwindow ($ownerTitle)<br />
end_if<br />
<br />
// Ищем от дочернего к родительскому, чтобы знать все child'ы<br />
set %middleOwnerHandle #targetHandle<br />
set #i 1 <br />
set #n 1<br />
while #startHandle <> %middleOwnerHandle [ #i ]<br />
set #i #i + 1<br />
set #arrToIntTmp %middleOwnerHandle [ #n ]<br />
set %middleOwnerHandle [ #i ] getwindow (#arrToIntTmp owner)<br />
set #n #n + 1 <br />
end_while<br />
<br />
set #sizeMiddleOwnerHandle size (%middleOwnerHandle)<br />
<br />
// Перебираем от родительского к дочернему.<br />
set $beginString "set #tmp getwindo"<br />
set $middleString "w (#tmp"<br />
set $w "w"<br />
set #var getwindow (#startHandle child)<br />
log set #tmp getwindo$w (#ownerHandle child)<br />
set #i #sizeMiddleOwnerHandle - 1<br />
set $direction ""<br />
while #var <> #targetHandle <br />
if $direction <> ""<br />
log $beginString$middleString $direction) <br />
end_if<br />
// Выход за пределы массива<br />
if #i > #sizeMiddleOwnerHandle<br />
log Ошибка!<br />
log Пути от родительского окна<br />
log к дочернему не существует.<br />
log Возможные причины данной ошибки:<br />
log 1) Вы спутали местами дочернее и родительское окно.<br />
log 2) Вы промазали и нажали Ctrl+A по другому окну.<br />
log 3) Дочернее окно не принадлежит родительскому.<br />
end_if<br />
// Текущее окно совпало с одним из чайлдов,<br />
// найденных в начале скрипта <br />
if %middleOwnerHandle [ #i ] = #var <br />
set #var getwindow (#var child) <br />
set $direction child<br />
set #i #i - 1<br />
else<br />
set #var getwindow (#var next)<br />
set $direction next<br />
end_if<br />
end_while<br />
log set #childHandle getwindo$middleString $direction)<br />
<br />
set #x (screenwidth - #logSizeX) / 2 <br />
set #y screenheight / 4<br />
set #logSizeX 450<br />
set #logSizeY screenheight / 8 * 5<br />
<br />
set windowpos #x #y #logSizeX #logSizeY #handleLog<br />
<br />
set $tmp "http:/"<br />
set $tmp2 "/forum.uokit.com/index.php?showtopic=26742"<br />
log<br />
log Автор скрипта DarkMaster.<br />
log Ветка на форуме: $tmp$tmp2<br />
<br />
<br />
stop_script<br />
<br />
== Смотрите также ==<br />
[[Set]]<br />
<br>[[Set windowpos]]<br />
<br>[[While]]<br />
<br>[[Showwindow]]<br />
<br>[[Logging]]<br />
<br />
== Первоисточник ==<br />
[https://forum.uokit.com/index.php?s=&amp;showtopic=26742&amp;view=findpost&amp;p=195707 Форум UOPilot]<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B4%D1%83%D0%B1%D0%BB%D0%B5%D0%B9&diff=846
Поиск дублей
2019-08-28T11:36:35Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
Данный скрипт позволяет найти в файле повторяющиеся строки и записать другой файл без повторяющихся строк. <br />
<br />
== Версия ==<br />
1.0<br />
<br />
== Минимальная версия UOPilot ==<br />
2.38<br />
<br />
== Скрипт ==<br />
// %input - исходный массив.<br />
// %output - итоговый массив.<br />
// #i - счетчик строк исходного массива.<br />
// #n - счетчик строк итогового массива.<br />
// #sizeInput - размер исходного массива.<br />
// #sizeOutput - размер итогового массива.<br />
<br />
set #sizeInput size (%input )<br />
set #sizeOutput 0 <br />
<br />
for #i 1 #sizeInput 1 // Перебираем исходный массив.<br />
set #duplicat 0 // Обнуляем состояние флага, что строка является дубликатом.<br />
for #n 1 #sizeOutput 1 // Перебираем итоговый массив.<br />
if %input[#i] = %output[#n] // Сравниваем есть ли уже такие значение в итоговом массиве.<br />
set #duplicat 1 // Если есть, то ставим флаг дубля.<br />
break // прерываем перебор итогового массива.<br />
end_if<br />
end_for<br />
if #duplicat = 0 // Проверяем чем закончился поиск дубля.<br />
set #sizeOutput #sizeOutput + 1 // Увеличиваем размер итогового массива.<br />
set %output[#sizeOutput ] %input[#i] // Если значение не является дублем, то дописываем его.<br />
end_if<br />
end_for<br />
end_script<br />
<br />
== Пример ==<br />
load_array %Input C:\papka\file.txt // загрузить массив из файла 'C:\papka\file.txt'<br />
<br />
set #sizeInput size (%input )<br />
set #sizeOutput 0 <br />
<br />
for #i 1 #sizeInput 1 // Перебираем исходный массив.<br />
set #duplicat 0 // Обнуляем состояние флага, что строка является дубликатом.<br />
for #n 1 #sizeOutput 1 // Перебираем итоговый массив.<br />
if %input[#i] = %output[#n] // Сравниваем есть ли уже такие значение в итоговом массиве.<br />
set #duplicat 1 // Если есть, то ставим флаг дубля.<br />
break // прерываем перебор итогового массива.<br />
end_if<br />
end_for<br />
if #duplicat = 0 // Проверяем чем закончился поиск дубля.<br />
set #sizeOutput #sizeOutput + 1 // Увеличиваем размер итогового массива.<br />
set %output[#sizeOutput ] %input[#i] // Если значение не является дублем, то дописываем его.<br />
end_if<br />
end_for<br />
<br />
save_array %Output C:\papka\file789.txt // сохранить итоговый массив в файл 'C:\papka\file789.txt'<br />
end_script<br />
<br />
== Смотрите также ==<br />
[[Load_array]]<br />
<br>[[Save_array]]<br />
<br>[[If]]<br />
<br>[[For]]<br />
== Первоисточник ==<br />
<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B5%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%B2_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B5&diff=845
Поиск ближайшего числа в массиве
2019-08-28T11:36:24Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число.<br />
<br>Принцип работы скрипта:<br />
<br>Массив с числами разбивается на 2 массива. В одном числа, которые меньше N, во втором, которые больше N.<br />
<br>Из первого массива берётся последнее число, оно будет ближайшим из тех что меньше N.<br />
<br>Из второго берётся первое число, оно будет ближайшим из тех что больше N.<br />
<br>Из двух чисел выбирается ближайшее к N.<br />
<br />
== Версия ==<br />
1.0<br />
<br />
== Минимальная версия UOPilot ==<br />
2.38<br />
<br />
== Скрипт ==<br />
set linedelay 0 // задержка между строк<br />
log mode compact // компактный режим лога <br />
init_arr %a 10 20 30 40 50 60 70 80 90 100 // массив с числами<br />
sort_array %a // сортировка массива (нужна если массив не сортирован) <br />
set #N random(120) // псевдослучайное число от 0 до 119 (число N)<br />
<br />
set #z 0<br />
set #z1 0<br />
set size(%b)<br />
set size(%b1)<br />
for #i 1 size(%a)<br />
if #N > %a [#i]<br />
set #z #z + 1<br />
set %b [#z] %a [#i]<br />
else<br />
set #z1 #z1 + 1<br />
set %b1 [#z1] %a [#i]<br />
end_if<br />
end_for<br />
if size(%b) != 0 and size(%b1) != 0<br />
set #min #N - %b [size(%b)]<br />
set #max %b1 [1] - #N<br />
if #min < #max // если заменить на: if #min <= #max, то, к примеру, 35 будет ближе к 30, чем к 40<br />
set #x %b [size(%b)]<br />
else<br />
set #x %b1 [1]<br />
end_if<br />
else<br />
if size(%b) = 0<br />
set #x %a [1]<br />
else<br />
set #x %a [size(%a)]<br />
end_if<br />
end_if<br />
log N = #N, ближайшее число: #x<br />
// set #pos indexof(%a (#x)) // если нужно узнать позицию ближайшего числа в массиве<br />
// log Позиция числа в массиве: #pos<br />
end_script<br />
<br />
== Смотрите также ==<br />
[[Массивы]]<br />
<br>[[Load_array]]<br />
<br>[[Save_array]]<br />
<br>[[If]]<br />
<br>[[For]]<br />
== Первоисточник ==<br />
<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D1%81%D0%B2%D0%B5%D1%82%D0%BA%D0%B0_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81%D0%B0&diff=844
Подсветка синтаксиса
2019-08-28T11:36:13Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
Позволяет выделить в редакторе разным цветом операторы и функции .<br />
<br>Цвета пока настраиваются только через конфиг пилота (в файле uopilot.ini) в секции [Highlighter]. <br />
<br>Зарезервированные слова разделены на группы по смысловому назначению. Их цвета указываются в параметрах начинающихся со строки 'RW ' в формате : Background, Foreground, Style. <br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<имя_группы_объектов>=<цвета_фона_под_объектом>,<цвет_объекта>,<стиль><br />
'''<имя_группы_объектов>''' - называние группы объектов. Список объектов:<br />
Assembler=-16777211,0,0 // Зарезервировано.<br />
Character=-16777211,0xAAAA00,0 // Числовые переменные.<br />
Comment=-16777211,8388608,2 // Комментарии.<br />
Float=-16777211,0xAAAAAA,0 // Дробные числа. Отключено.<br />
Hexadecimal=-16777211,8388608,0 // Строковые переменные.<br />
Identifier=-16777211,0,0 // Текст: пути, имена окон и почему-то имена массивов.<br />
Number=-16777211,0xAAAAAA,0 // Числа в виде текста.<br />
Preprocessor=-16777211,32768,2 // Зарезервировано.<br />
Reserved Word=-16777211,0,1 // Неизвестно.<br />
RW Array=-16777211,255,1 // Операторы работы с массивами. НЕ относится к самим массивам.<br />
RW CharParam=-16777211,0,1 // Переменные чара UO.<br />
RW ColorAndCord=-16777211,0,1 // Переменные цветов(clgreen, clblue и т.д.) и координат (defXabs, desktopheight и т.д.).<br />
RW EndScript=-16777211,0,1 // end_script.<br />
RW For=-16777211,0,1 // Циклы: for, while, repeat, continue, break.<br />
RW Function=-16777211,0,1 // Функции. Все, что идет после set и перед скобками(findimage, findcolor, size,random и т.д.).<br />
RW Get=-16777211,0,1 // Get и set.<br />
RW If=-16777211,0,1 // Условия IF, Switch.<br />
RW Keyboard=-16777211,0,1 // Эмуляция клавиатуры.<br />
RW LastObject=-16777211,0,1 // Переменные last* для UO.<br />
RW Macros=-16777211,0,1 // Макросы.<br />
RW Memory=-16777211,0,1 // readmem, writemem.<br />
RW Mouse=-16777211,0,1 // Эмуляция мыши.<br />
RW Msg=-16777211,0,1 // Log, msg, hint.<br />
RW Other=-16777211,0,1 // Прочее. В т.ч.: clipboard, color, copy, delete, word, insert, number, posex, printscreen, indexof, injection. <br />
RW Plugin=-16777211,0,1 // Функции плагинов.<br />
RW Proc=-16777211,0,1 // Работа с файлами, exec, terminate.<br />
RW Script=-16777211,0,1 // Функции скриптов и переменные скриптов (active_script, priority и т.д.).<br />
RW Sub=-16777211,0,1 // Подпрограммы и процедуры.<br />
RW Time=-16777211,0,1 // Таймер, переменные даты.<br />
RW Wait=-16777211,0,1 // linedelay, wait, waitfortarget.<br />
RW Windows=-16777211,0,1 // Функции работы с окнами.<br />
Space=-16777211,0,0 // Пробелы и управляющие символы. Используется в основном для изменения фона.<br />
String=-16777211,8388608,0 // 'текст в одиночных кавычках'.<br />
Symbol=-16777211,0,0 // <>=,.() и т.д.<br />
Полный список объектов: https://forum.uokit.com/index.php?s=&amp;showtopic=28816&amp;view=findpost&amp;p=213600, первый спойлер.<br />
<br>'''<цвета_фона_под_объектом>''' - фон под текстом. В т.ч. цвет пробелов, т.к. пробелы не имеют как такового отображаемого объекта.<br />
<br>По умолчанию стоит цвет "-16777211"(с минусом) - это цвет соответствует цвету вашей темы в системе, независимо от того какая выбрана тема.<br />
<br>'''<цвет_объекта>''' - цвет текста. Задаётся в десятичном виде по RGB.<br />
<br>Цвет так же можно задать цвета в шестнадцатеричном виде 0xFFFFFF, однако уже почему в формате BGR.<br />
<br>Так же после перезапуска значение будет перезаписано в виде десятичного.<br />
<br>Тем не менее для настройки намного удобнее, чем сидеть с калькулятором и считать каждый раз десятичные цвета.<br />
<br>'''<стиль>''' - список стилей:<br />
0 - обычный.<br />
1 - полужирный.<br />
2 - курсив.<br />
3 - полужирный+курсив.<br />
4 - подчеркнутый.<br />
5 - подчеркнутый+полужирный.<br />
6 - подчеркнутый+курсив.<br />
7 - подчеркнутый+курсив+полужирный.<br />
8 - зачеркнутый.<br />
9 - зачеркнутый+полужирный.<br />
10 - зачеркнутый+курсив.<br />
11 - зачеркнутый+курсив+полужирный.<br />
12 - зачеркнутый+подчеркнутый.<br />
13 - зачеркнутый+подчеркнутый+полужирный.<br />
14 - зачеркнутый+подчеркнутый+курсив.<br />
15 - зачеркнутый+подчеркнутый+курсив+полужирный.<br />
<br />
== Примеры ==<br />
Изменять строки нужно в файле uopilot.ini. Файл находится рядом с exe пилота.<br />
<br>If и Switch будут красным цветом:<br />
RW If=-16777211,255,1<br />
<br />
If и Switch будут красным цветом на голубом фоне:<br />
RW If=16510357,255,1<br />
<br />
If и Switch будут красным цветом на голубом фоне и подчёркнуты:<br />
RW If=16510357,255,4<br />
<br />
== Смотрите также ==<br />
<br />
[[Set]]<br />
<br>[[Массивы]]<br />
<br />
== История развития ==<br />
<br />
'''2.22'''<br />
<br>Сделал подсветку синтаксиса в редакторе. Цвета пока настраиваются только через конфиг пилота в секции [Highlighter]. Зарезервированные слова разделены на группы по смысловому назначению. Их цвета указываются в параметрах начинающихся со строки 'RW ' в формате : Background, Foreground, Style.<br />
Style может принимать значения:<br />
0 - обычный;<br />
1 - жирный;<br />
2 - курсив;<br />
4 - подчеркнутый;<br />
8 - зачеркнутый;<br />
и их комбинации.<br />
<br />
'''2.23'''<br />
<br>Перевел команду 'say' из группы 'msg' в группу 'keyboard' в подсветке синтаксиса.<br />
<br>Добавил в подсветку синтаксиса 'RW CharParam' (psysresist, fireresist, coldresist, poisresist, enerresist, luck, damage, hitsmax, manamax, stammax, wghtmax, damagemax, followers, followersmax), 'RW Keyboard' (getlayout, post), 'RW Script' (scripts).<br />
<br>Отключил подсветку паскалевских комментариев в стиле (* *)<br />
<br />
'''2.32'''<br />
<br>Добавил новые операторы в подсветку синтаксиса:<br />
CharParam: fireresist<br />
ColorAndCord: desktopheight, desktopwidth, monitor, monitorheight, monitorwidth, screenheight, screenwidth<br />
ColorAndCord: claqua, clblack, clblue, cldkgray, clfuchsia, clgray, clgreen, cllime, clltgray, clmaroon, clnavy, clolive, clpurple, clred<br />
ColorAndCord: clsilver, clteal, clwhite, clyellow, colortorgb, colortored, colortogreen, colortoblue<br />
Macros: macro_send<br />
Keyboard: send217<br />
Array: init_arr<br />
Proc: dir, dircreate, dirremove, errorlevel, execandwait, filecopy, filedelete, fileexists, filegetattr, filegetdate, filerename, filesetattr, filesetdate<br />
Msg: log<br />
Other: copy, delete, insert, posex, indexof. <br />
Mouse: mousepos_x, mousepos_y, mouseposabs_x, mouseposabs_y<br />
Function: windowfrompoint<br />
Function: abs, round, floor, ceil, frac, sqrt, power, exp, ln, sin, cos, tan, arcsin, arccos, arctan, degtorad, radtodeg, trunc, pi<br />
Function: minx, maxx, mean, mod, point_distance, point_direction, lengthdir_x, lengthdir_y, is_real, is_string, chr, ord<br />
Function: string_replace, string_count, string_lower, string_upper, string_letters, string_digits, dayofweek, eval<br />
Other: iniwrite, iniread, regwrite, regread, write<br />
CharParam: shownames, transparency, pathfinding, criminalactions.<br />
<br />
'''2.36'''<br />
<br>Добавил кучу всего в подсветку синтаксиса.<br />
<br />
'''2.38'''<br />
<br>Сделал подсветку переменных массивов цветом соответствующих операторов.<br />
<br />
[[Категория:Прочее]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B8_%D0%B4%D0%BB%D1%8F_Findimage&diff=843
Подготовка картинки для Findimage
2019-08-28T11:36:02Z
<p>Tatikoma: </p>
<hr />
<div>[[Файл:Findimage.jpg]]<br />
<br />
== Подготовка картинки ==<br />
Если картинка статична и не меняется, то достаточно вырезать нужную часть.<br />
<br>Обычно не требуется вырезать картинку с точностью до пикселя. Можно искать лишь небольшую часть.<br />
<br>Нужно найти картинку 24*24 пикселя:<br />
<br>[[Файл:Nobless1.png]]<br />
<br>Можно искать её целиком:<br />
<br>[[Файл:Nobless2.png]]<br />
<br>Но, вполне достаточно 10*10:<br />
<br>[[Файл:Nobless3.png]]<br />
<br>Левый верхний пиксель желательно (но, не обязательно) закрасить в любой цвет, которого нет в картинке.<br />
<br />
== Подготовка картинки для поиска текста в чате Lineage2 ==<br />
<br />
Чат прозрачный и цвет фона меняется, поэтому его не нужно учитывать при поиске текста.<br />
<br>1. Открыть Paint, Photoshop или другую программу для редактирования изображений.<br />
<br>2. Вырезать текст, который нужно найти. Для удобства можно увеличить картинку.<br />
<br>4. Выбрать инструмент карандаш (не кисточка) или заливка.<br />
<br>3. Закрасить фон (или то, что не нужно учитывать при поиске) и левый верхний пиксель, обязательно в один цвет (любой).<br />
<br>4. Сохранить картинку в формате bmp 24 бита.<br />
<br>Для примера, нужно найти Hello в чате.<br />
<br>[[Файл:Chat.jpg]]<br />
<br>При увеличении слово Hello будет выглядеть так:<br />
<br>[[Файл:HelloReal.png]]<br />
<br>Если искать картинку в таком виде, то она, скорее всего, не найдётся. Т. к. фон везде разный.<br />
<br>Поэтому, закрашиваем левый верхний пиксель и фон в один и тот же цвет. Любой цвет, это не имеет значения, т. к. он будет игнорироваться при поиске.<br />
<br>[[Файл:HelloNorm.png]]<br />
<br>Теперь, можно использовать картинку для поиска.<br />
<br>Не забывайте про параметр deviation (погрешность оттенка) в Findimage.<br />
<br>Также, можно искать текст полоской высотой в 1 пиксель.<br />
<br>[[Файл:HelloPoloska.png|trumb|374px]]<br />
<br />
== Подготовка картинки для поиска части изображения ==<br />
[[Файл:Repair1.jpg]]<br />
<br>Нужно найти предмет, который находится в красной рамке. Т. к. предметов в игре много делать для каждого картинку нет смысла.<br />
<br>Можно искать красную рамку.<br />
<br>Вырезаем рамку и закрашиваем всё лишнее любым цветом и обязательно в этот же цвет левый верхний пиксель, теперь, всё что закрашено в цвет левого верхнего пикселя не будет сравниваться. Т. е. будет искаться только рамка.<br />
<br>[[Файл:Рамка.jpg]] <br />
<br>Не забываем, формат картинки должен быть bmp 24 бита.<br />
<br />
== Пример, когда фон закрашивать не нужно или закрашивать частично ==<br />
[[Файл:Ринуться в бой.png]]<br />
<br>Нужно найти кнопку. Можно вырезать её и искать.<br />
<br>Но, при при наведении на неё курсора она подсвечивается, в итоге не будет находится, если курсор оказался над ней.<br />
<br>[[Файл:Ринуться в бой5.png]]<br />
<br>Если закрасить весь зелёный фон, добавить в параметры FindImage deviation (погрешность оттенка), то открыв блокнот, картинка будет найдена. <br />
<br>Потому что буквы белого цвета на белом фоне блокнота будут найдены, фон ведь не учитывается. <br />
<br>[[Файл:Ринуться в бой2.png]] <br />
<br>Т. е. вариант с закрашивание фона не подходит. Можно конечно сделать 2 картинки, одну в обычном состоянии, вторую в подсвеченом.<br />
<br>Но зачем делать и искать две картинки, когда можно обойтись одной.<br />
<br>Вариант 1:<br />
<br>Оставляем часть фона, которая не меняется или меняется не сильно.<br />
<br>[[Файл:Ринуться в бой1.png]]<br />
<br>Вариант 2:<br />
<br>Ищем не текст кнопки, а её края, они не меняются при наведении курсора на кнопку.<br />
<br>[[Файл:Ринуться в бой4.png]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%88%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%B0&diff=842
Перемешивание массива
2019-08-28T11:35:51Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
Пример, как перемешать массив. <br />
<br />
== Версия ==<br />
1.0<br />
<br />
== Минимальная версия UOPilot ==<br />
2.31<br />
== Скрипт ==<br />
set linedelay 0 // задержка между строк 0<br />
log clear // очистка лога<br />
log mode compact // компактный лог<br />
// массив<br />
set %arr [1] 10<br />
set %arr [2] 20<br />
set %arr [3] 30<br />
set %arr [4] 40<br />
set %arr [5] 50<br />
set %arr [6] 60<br />
set %arr [7] 70<br />
<br />
log Исходный массив<br />
log %arr [1] %arr [2] %arr [3] %arr [4] %arr [5] %arr [6] %arr [7]<br />
log<br />
// перемешивание<br />
for #i 1 10 // 10 раз поменять местами случайные элементы массива<br />
set #a 1 + random(size(%arr))<br />
set #b 1 + random(size(%arr))<br />
set #tmp %arr [#a]<br />
set %arr [#a] %arr [#b]<br />
set %arr [#b] #tmp<br />
end_for <br />
<br />
log Перемешанный массив<br />
log %arr [1] %arr [2] %arr [3] %arr [4] %arr [5] %arr [6] %arr [7]<br />
end_script<br />
<br />
== Смотрите также ==<br />
[[Массивы]]<br />
<br>[[Load_array]]<br />
<br>[[Save_array]]<br />
<br>[[Random]]<br />
<br>[[For]]<br />
<br />
== Первоисточник ==<br />
<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8%D0%B7_%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D1%85_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2&diff=841
Переменные из других скриптов
2019-08-28T11:35:40Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''.''' - используется в ссылках на переменные и массивы в параллельных скриптах.<br />
<br>При этом скрипт, к которому обращаются за переменной, должен работать или быть на паузе.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: нет.<br />
<br>Работа со свернутым окном: да.<br />
<br>При двух или более запущенных скриптах вы можете обращаться к переменным, определенным в других скриптах пилота. Синтаксис указания таких переменных следующий:<br />
#i.2 - обращаемся к переменной #i из скрипта, находящегося в окне номер 2.<br />
== Примеры ==<br />
// Пример 1<br />
log #a.1 // отобразить в логе значение переменной '#a' из первого скрипта<br />
log $a.1 // отобразить в логе значение переменной '$a' из первого скрипта<br />
log %a.1 [1 1] // отобразить в логе значение элемента массива '%a [1 1]' из первого скрипта<br />
<br />
// Пример 2<br />
set #a #a.3 // присвоить переменной '#a' значение переменной '#a' из 3 скрипта<br />
set %arr [1 1] #a.2 // присвоить элементу массива '%arr [1 1]' значение переменной '#a' из 2 скрипта<br />
<br />
// Пример 3<br />
set #handle workwindow.4 // присвоить переменной '#handle' значение переменной 'workwindow' из 4 скрипта<br />
set workwindow #handle // сделать окно рабочим для текущего скрипта<br />
<br />
// Пример 4<br />
set %arr.2 [1 1] 321 // присвоить '321' элементу массива '%arr [1 1]' 2 скрипта<br />
<br />
// Пример 5<br />
if #a.3 = 10 // если переменная '#a' из 3 скрипта равна 10<br />
log !!!<br />
end_if<br />
<br />
// Пример 6<br />
while #b.1 < 10 // пока переменная '#b' из первого скрипта меньше 10 <br />
hint ++++<br />
wait 100<br />
end_while<br />
<br />
// Пример 7<br />
set #b 3<br />
set #d #a.#b // присвоить переменной '#d' значение переменной '#a' из 3 скрипта<br />
<br />
== Смотрите также ==<br />
<br />
[[Set]]<br />
<br>[[Массивы]]<br />
<br>[[Init_arr]]<br />
<br />
== История развития ==<br />
<br />
'''1.07'''<br />
<br>Добавил возможность использовать переменные из параллельных скриптов, добавив к имени переменной номер скрипта через точку.<br />
set #i.2 5<br />
say $test.2 #i.2<br />
Добавил возможность использовать характеристики персонажа из параллельных скриптов, добавив к имени переменной номер скрипта через точку.<br />
set lasttargetid.1 7<br />
say hits.1<br />
<br />
'''2.25'''<br />
<br>Научил понимать переменные из других скриптов в формате #a.#b, #a.$b, #a.active_script<br />
'''2.33'''<br />
<br>Подправил ссылку на переменные 'timer' и 'workwindow' других скриптов.<br />
<br />
'''2.35'''<br />
<br>Исправил ошибку, возникающую при одновременном вычислении выражений в параллельных скриптах.<br />
<br />
'''2.39'''<br />
<br>Исправил присваивание строковых переменных в параллельных скриптах, при указании индекса скрипта переменной.<br />
<br />
[[Категория: Массивы]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%86%D0%B2%D0%B5%D1%82%D0%B0_%D0%B2_%D0%BF%D0%BE%D0%B4%D1%81%D0%B2%D0%B5%D1%87%D0%B8%D0%B2%D0%B0%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0%D1%85_(Ctrl_%2B_B)&diff=840
Определение цвета в подсвечивающихся объектах (Ctrl + B)
2019-08-28T11:35:18Z
<p>Tatikoma: </p>
<hr />
<div>Иногда, при наведении курсора, объект подсвечивается, в результате цвет меняется. Чтобы определить цвет:<br />
<br>1. Навести курсор в нужную точку, нажать Ctrl + A.<br />
<br>2. Убрать курсор, чтобы объект перестал подсвечиваться, нажать Ctrl + B.<br />
<br />
<br>Несмотря на то, что объект подсвечивается, могут оставаться точки, в которых цвет не меняется. <br />
<br>Можно найти эти точки скриптом: [[Поиск статичных точек]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%8B&diff=839
Массивы
2019-08-28T11:34:56Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
Самый простой способ понять массивы - это рассматривать их как набор одноименных переменных с номером. Что-то вроде:<br />
#значение1<br />
#значение2<br />
#значение3<br />
#значение4<br />
#значение5<br />
Тот же самый набор некоторых значений. Разница лишь в записи. А это в виде массива:<br />
%arr [ 1 ]<br />
%arr [ 2 ]<br />
%arr [ 3 ]<br />
%arr [ 4 ]<br />
%arr [ 5 ]<br />
Весь смысл в том, что эти цифры в массивах можно задать переменной. Вот тебе и все массивы. Т.е.:<br />
set #a 1<br />
set #b 2<br />
set #c 3<br />
set #d 4<br />
set #e 5<br />
%arr [ #a ]<br />
%arr [ #b ]<br />
%arr [ #c ]<br />
%arr [ #d ]<br />
%arr [ #e ]<br />
В итоге опять имеем тот же набор некоторых значений, все с теми же индексами от 1 до 5. Для нас это все те же 5 значений, как и в 1 записи, только номера этих переменных мы задали уже переменными.<br />
set #i 1<br />
%arr [ #i ]<br />
set #i #i + 1 // получилось i = 2<br />
%arr [ #i ]<br />
set #i #i + 1 // получилось i = 3<br />
%arr [ #i ]<br />
set #i #i + 1 // получилось i = 4<br />
%arr [ #i ]<br />
set #i #i + 1 // получилось i = 5<br />
%arr [ #i ]<br />
В этой записи мы создаем переменную #i равной 1, затем используем ее при обращении к массиву. После каждого обращения к массиву мы увеличиваем значение переменной на 1 (set #i #i + 1). Таким образом, не смотря на то, что мы постоянно обращаемся к %arr [ #i ], каждый раз обращение происходит к следующему элементу, т.к. #i у нас увеличивается на 1.<br />
<br>Чтобы не писать такие однотипные строки, можно использовать оператор for. Весь смысл этого оператора- выполнять код циклами, увеличивая(или уменьшая) указанную переменную-счётчик.<br />
for #i 1 5 1<br />
<br>#i - изменяемая переменная ("счётчик")<br />
<br>1 (первая в записи) - начальное значение<br />
<br>5 - конечное значение (при его превышении цикл прервется)<br />
<br>1 (вторая в записи) - число которое будет каждый раз прибавляться.<br />
<br><br>Проще говоря запись означает, создать переменную #i равной 1 и прибавлять 1, пока #i не станет больше 5.<br />
В нашем примере это выглядело бы так:<br />
for #i 1 5 1<br />
%arr [ #i ]<br />
end_for<br />
Мы обратились пять раз к массиву, это были элементы:<br />
%arr [ 1 ]<br />
%arr [ 2 ]<br />
%arr [ 3 ]<br />
%arr [ 4 ]<br />
%arr [ 5 ]<br />
<br>Собственно если понять смысл данного поста, то 90% возможностей массивов вы сможете использовать.<br />
<br><br>Если не всё понятно, то ещё небольшое описание. По сути, массив - это таблица, в которой каждая ячейка имеет номер по горизонтали и вертикали, и в ней находятся какие-то данные.<br />
Допустим имеется массив 3*2 (3 строки и 2 столбца), с именем %arr:<br />
// Это массив:<br />
set %arr [1 1] 100 // индексы [1 1] означают: первая строка, первый столбец<br />
set %arr [1 2] 200 // [1 2] - первая строка, второй столбец<br />
set %arr [2 1] 300 // вторая строка, первый столбец<br />
set %arr [2 2] 400<br />
set %arr [3 1] 500<br />
set %arr [3 2] 600 // третья строка, второй столбец<br />
<br />
// можно сохранить его, чтобы посмотреть как хранятся данные<br />
save_array %arr C:\SaveArray.txt<br />
End_script<br />
Если открыть файл 'SaveArray.txt', то увидим:<br />
<br>100 200 <br />
<br>300 400<br />
<br>500 600<br />
<br>Чтобы обратиться к какому-то элементу массива нужно указать индексы (номер строки и столбца):<br />
set %arr [1 1] 100<br />
set %arr [1 2] 200<br />
set %arr [2 1] 300<br />
set %arr [2 2] 400<br />
set %arr [3 1] 500<br />
set %arr [3 2] 600<br />
<br />
msg Первая строка, первый столбец: %arr [1 1]<br />
msg Вторая строка, первый столбец: %arr [2 1] <br />
msg Третья строка, второй столбец: %arr [3 2]<br />
<br />
msg Индексы можно задавать переменными.<br />
set #a 2<br />
msg Переменная "#a" равна #a<br />
msg Первая строка, второй столбец: %arr [1 #a] <br />
End_script<br />
В основном массивы используют в циклах [[For]].<br />
set %arr [1 1] 100<br />
set %arr [2 1] 200<br />
set %arr [3 1] 300<br />
set #size size(%arr) // присвоить переменной '#size' размер массива (количество строк), в данном случае будет присвоено 3. <br />
<br />
for #i 1 #size 1 // цикл, в котором переменная '#i' будет увеличиваться на единицу от 1 до 3<br />
log Переменная "#i" равна #i <br />
log Содержимое элемента массива: %arr [#i 1] <br />
end_for<br />
End_script<br />
Массив может быть одномерным, в нём только один столбец, т. е. указывается только номер строки.<br />
<br>И может быть двумерным, тогда нужно указывать номер строки и столбца.<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
set <массив> [номер_строки] <значение><br />
Одномерный массив, где:<br />
<br>'''<массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'<br />
<br>'''[номер_строки]''' - номер строки массива.<br />
<br>'''<значение>''' - значение элемента массива.<br />
<br />
set <массив> [номер_строки номер_столбца] <значение><br />
Двумерный массив, где:<br />
<br>'''<массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'<br />
<br>'''[номер_строки номер_столбца]''' - номер строки и столбца массива.<br />
<br>'''<значение>''' - значение элемента массива.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
set %arr [1] 200 <br />
set %arr [2] 300<br />
move %arr [1] %arr [2] // переместит курсор в координаты 200 300<br />
End_script<br />
<br />
// Пример 2<br />
set %a [1] Вася <br />
set %a [2] Петя<br />
set %a [3] Маша<br />
set %a [4] Андрей<br />
set %a [5] Катя<br />
set #size size(%a) // размер массива (сколько в нём строк, в данном случае их 5)<br />
for #i 1 #size 1 // цикл, в котором переменная '#i' будет увеличиваться на единицу от 1 до 5<br />
log Переменная "#i" равна #i // вывод в лог переменной '#i'<br />
log %a [#i] // вывод в лог значений массива, переменная '#i' указывает к какому элементу обращаться <br />
end_for<br />
End_script <br />
<br />
// Пример 3<br />
set %array [1 1] 111<br />
set %array [1 2] 222<br />
set %array [2 1] 333<br />
set %array [2 2] 444<br />
set %array [3 1] 555<br />
set %array [3 2] 666<br />
save_array %array C:\qwer4321.txt // сохранит массив на диске 'C:\' в файле 'qwer4321.txt'<br />
// можно посмотреть как хранятся данные в массиве<br />
for #i 1 size(%array) 1 <br />
move %array [#i 1] %array [#i 2] // переместит курсор по координатам из массива<br />
log %array [#i 1] %array [#i 2] // вывод в лог координат<br />
wait 1000 // ждать 1 секунду (1 секунда = 1000 мсек.)<br />
end_for<br />
End_script<br />
<br />
// Пример 4<br />
// Вывод в сообщение случайного элемента массива<br />
init_arr %array a b c d e f g h i j k<br />
set #a 1 + random(size(%array)) // получить псевдослучайное число от 1 до 11 (количество строк массива)<br />
msg %array [#a] // вывод в сообщение<br />
<br />
<br />
== Смотрите также ==<br />
<br />
[[Init arr]]<br />
<br>[[Indexof]]<br />
<br>[[Load array]]<br />
<br>[[Save array]]<br />
<br>[[Sort array]]<br />
<br>[[Delete array]]<br />
<br />
== История развития ==<br />
<br />
'''1.07 beta 5'''<br />
<br>Добавил массивы. отныне символ процента '%' считается идентификатором массива. индексы массива указываются после имени в квадратных скобках '[' и ']'. размер массива равен максимальному использованному индексу. присваивание значений осуществляется каждому элементу индивидуально. элементы массива могут содержать как строки, так и числа. <br />
допустимо ссылаться на массивы параллельных скриптов, указав после имени массива, через точку, номер скрипта.<br />
при указании только первого индекса в двумерном массиве, результатом будет строка из всех элементов второй размерности массива, соответствующих указанному индексу, и разделенных пробелом<br />
set %ar [4] тест // одномерный массив на 4 элемента<br />
set %arr [50 1] 544 <br />
set %arr [50 2] 800 // двумерный массив на 50 раз по 2 элемента<br />
set %ar.2 [5] // одномерный массив в параллельном скрипте<br />
left %arr [50] // клик левой кнопкой по координатам 544 800<br />
<br />
'''1.07 beta 7'''<br />
<br>Исправил ошибку присваивания элементам массива значений переменных.<br />
<br />
'''2.02'''<br />
<br>Исправил ошибку с присваиванием значений всегда только последнему элементу массивов, независимо от указанного.<br />
<br>Исправил ошибку с присваиванием значений массивам скрипта с номером 0, из других скриптов.<br />
<br />
'''2.05'''<br />
<br>Добавил переменную delimiter, используется для разделения элементов массива:<br />
set %a [1 1] 1<br />
set %a [1 2] 2<br />
set delimiter '+'<br />
msg %a [1]<br />
set #n %a [1]<br />
msg #n<br />
set delimiter<br />
set #n %a [1]<br />
msg #n<br />
<br />
'''2.17'''<br />
<br>Добавил функцию 'size', возвращает длину указанного параметра пример:<br />
set %q [4 3] test string here<br />
set %q [7 5] 0<br />
set $q 123 + 8645<br />
set #q 12<br />
msg size (%q [ 4 3 ] ) // 16 - длина элемента массива<br />
msg size (%q [ 4 ] ) // 5 - вторая размерность массива<br />
msg size (%q ) // 7 - первая размерность массива<br />
msg size ($q) // 10 - длина строки<br />
msg size (#q) // 2 - количество разрядов<br />
msg size ( another test string ) // 19 - длина строки<br />
<br />
'''2.19'''<br />
<br>Исправил эксепшен при попытке записи пустого массива.<br />
<br>Массивы загружаются оттуда же, откуда и скрипты, если не указано иное.<br />
<br>Исправил ошибку с зарузкой массива (в результате чего оно дописывалось в конец существующего массива и он увеличивался с каждой загрузкой).<br />
<br>Исправил ошибку присвоения элементам массива значаний похожих на вычисляемые, например '-', выскакивал эксепшен.<br />
<br>Поправил неправильную запись массивов. игнорировалось указанное количество столбцов. <br />
<br />
'''2.20'''<br />
<br>Добавил задание размера массива. если массив не существовал, то он создается. если необязательные параметры отсутствуют, то принимаются равными нулю. 'set size (%arr <x> <y>)'.<br />
<br />
'''2.21'''<br />
<br>Научил условные операторы понимать элементы массива в качестве параметров. указание индексов массива элементами массива не поддерживается.<br />
<br>Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки. Пример:<br />
set %a[1] 110 120 8030463<br />
set %a[2] 110 120<br />
set %a[5 1] 110,<br />
set %a[5 2] 120,<br />
set %a[5 3] 8030463<br />
if (%a[1]) and (%a[2] 8030463) and %a[5]<br />
<br />
'''2.24.1'''<br />
<br>Добавил конструкции: <br />
set %b [2] %a [2] // присваивание второму элементу массива B, всех элементов второй строки массива А (оно и раньше работало)<br />
set %b %a [2] // создание одномерного массива В из второй строки массива А<br />
set %b %a // создание массива В из массива А (копирование)<br />
<br />
'''2.28'''<br />
<br>Добавил возможность передавать в подпрограммы массивы. следите за соответствием типов переменных<br />
передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте.<br />
но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование).<br />
set %var [1 1] abc<br />
set %var [1 2] 123<br />
set #e 1<br />
set delimiter '_'<br />
call test2 %var [1 2] %var [#e] %var %var.5 <br />
end_script<br />
proc test2 #v1 $v2 %v3 %v4<br />
set delimiter '^'<br />
set logging Dump: #v1 $v2 %v3 [1] %v4 [1]<br />
// Dump: 123 abc_123 abc^123 abc^123<br />
end_proc<br />
<br />
'''2.30'''<br />
<br>Если в качестве приемника в команде 'findwindow' указан массив, то записываем в него хендлы и имена ВСЕХ окон, в заголовке которых содержится указанная строка, или процессов, полностью совпадающих с указанным. Регистрозависимо.<br />
set %arr FindWindow (World of Warcraft)<br />
Добавил команду присваивания нескольких элементов массива одной строкой 'init_arr <массив> [(номер_строки [число_столбцов [начальный_столбец]])] <набор_значений>'. разделителями слов считаются те же символы, что и в остальных командах. исходный массив не удаляется. отсутствующие параметры по-умолчанию принимаются равными '1'.<br />
init_arr %a 11 32 43 46 // одномерный массив, 4 эл-та (элементы [1] [2] [3] [4])<br />
init_arr %a (2) 13 24 35 // во 2-ю строку пишем в 3 столбца, начиная с 1-го (элементы [2, 1] [2, 2] [2, 3])<br />
init_arr %a (3, 2) 5 6 7 8 // в 3-ю строку пишем в 2 столбца, начиная с 1-го (получится 2 строки, элементы [3, 1] [3, 2] [4, 1] [4, 2])<br />
init_arr %a (3, 2, 7) 5 6 7 8 // в 3-ю строку пишем в 2 столбца, начиная с 7-го (получится 2 строки, элементы [3, 7] [3, 8] [4, 7] [4, 8]<br />
Добавил поиск строки в массиве. по-умолчанию ищет точное совпадение, регистронезависимо. 'set %result indexOf ( %arr [noabs] [case] [[startRow [EndRow]] count] (text) )'.<br />
параметры:<br />
noabs - если указано, то ищем подстроку, иначе абсолютное совпадение, кроме регистра<br />
case - если указано, то при сравнении учитывается регистр символов<br />
count - максимальное число найденых элементов. если > 0, то ищем в направлении "с начала", если < 0, то ищем в направлении "с конца". если не указан, то ищем "все". этот параметр имеет приоритет в порядке распознавания, над начальной и конечной позицией поиска.<br />
ищет по столбцам. возвращает адреса найденных элементов в формате 'строка|столбец/'. пример: '3|7/3|8/4|7/4|8/'. его хорошо понимает команда 'set' для присваивания элементов массива пачкой. если ничего не найдено, то вернет пустую строку.<br />
если в качестве приемника указана целая переменная ('set #e indexOf...'), то возвращаем номер только одной строки. причем 'count' указывает какое по порядку вхождение нужно искать. если элемент с указанным номером не найден, то результат -1.<br />
примеры: <br />
set #a indexOf ( %arr case -1 (Test) ) // ищет номер последнего элемента массива %arr, имеюшего значение в точности равное Test (с учетом регистра)<br />
set #b indexOf ( %arr (12) ) // ищет номер первого элемента массива %arr, имеюшего значение в точности равное 12<br />
set #c indexOf ( %arr noabs 3 (admin) ) // ищет номер третьего элемента массива %arr, содержащего подстроку 'admin'<br />
set %r indexOf ( %arr case 5 15 2 (Passed) ) // просматривает элементы массива %arr с пятой строки по пятнадцатую, и возвращает в массив %r адреса ячеек, содержащих первые два точных совпадения с искомой строкой<br />
set %r indexOf ( %a (14) ) // возвращает в массив %r адреса всех ячеек, сорвпадающих с указанной строкой<br />
<br />
'''2.31'''<br />
<br>Починил возврат массивов из процедур, при изменении в процедуре последней колонки или строки массива.<br />
<br />
'''2.32'''<br />
<br>Добавил в 'findimage' возврат конечных координат найденной картинки в третьем и четвертом элементе возвращаемого массива.<br />
<br>Добавил проверку на круглость скобок в команде 'init_arr'. Сообщение выводим, но выполнение не прерываем.<br />
<br>Исправил обязательное наличие пробела перед скобками в команде 'init_arr'.<br />
<br>Добавил функции разложения цвета:<br />
colorToRed (color) - возвращает значение красного канала указанного цвета<br />
colorToGreen (color) - возвращает значение зеленого канала<br />
colorToBlue (color) - возвращает значение синего канала<br />
colorToRGB (color %arr) - разлаживает цвет на составляющие в первую строку указанного массива<br />
colorToRGB (color %arr[x]) - то-же, но в конкретную строку // %arr [ 1 1 ] R, %arr [ 1 2 ] G, %arr [ 1 3 ] B<br />
Научил функцию 'minx' и 'maxx' искать минимум и соответственно максимум в массиве.<br />
minx (%arr [1]) - возвращает минимальное значение конкретной строки массива<br />
minx (%arr) - возвращает минимальные значения всех столбцов массива в формате '1|2|3' (для присваивания массива пачкой), т.е. в первую строку нового массива.<br />
То же самое про 'maxx', только наоборот.<br />
<br>Добавил вывод в скобках значения элемента массива после его имени, для команды 'set logging commands'.<br />
<br />
'''2.31'''<br />
<br>Научил 'findimage' понимать координаты, указанные элементами массива.<br />
<br />
'''2.33'''<br />
<br>Исправил поиск элемента во всем массиве в функциях 'minx' и 'maxx'.<br />
<br />
'''2.36'''<br />
<br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.<br />
<br>Добавил функцию, возвращающую адрес массива в памяти, и его размерность "set $s arrayaddress (%a) // $s = 12341578 1 1". Структура массива: <br />
aDescr: shortstring ;<br />
aValue: array of array of string;<br />
<br />
'''2.37'''<br />
<br>Добавил возможность сортировки массивов 'sort_array %array [+col | -row] [dec]'. Положительное число задает сортировку по столбцам, отрицательное - по строкам.<br />
<br />
'''2.39'''<br />
<br>Добавил присваивание строке массива строки вида '3|7/3|8/4|7/4|8/'.<br />
<br />
[[Категория:Массивы]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D1%8B&diff=838
Макросы
2019-08-28T11:34:45Z
<p>Tatikoma: </p>
<hr />
<div>Для работы макросов на Win7 x64 и Win10 x64 требуется соблюдение ряда условий.<br />
<br>1. Запускаемый файл пилота должен располагаться в "доверенном месте". Например, в Program Files.<br />
<br>2. Запускаемый файл пилота должен быть подписан (иметь валидную цифровую подпись). Например с помощью "Driver Signature Enforcement Overrider".<br />
<br>3. Рядом с файлом пилота должен лежать файл манифеста с именем "uopilot.exe.manifest", или как там у вас файл пилота называется, в кодировке "UTF-8", примерно такого содержания:<br />
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <br />
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><br />
<assemblyIdentity <br />
version="1.0.0.0" <br />
processorArchitecture="*" <br />
name="UOPilot" <br />
type="win32"/><br />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><br />
<security><br />
<requestedPrivileges><br />
<requestedExecutionLevel<br />
level="requireAdministrator"<br />
uiAccess="true"/><br />
</requestedPrivileges><br />
</security><br />
</trustInfo><br />
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <br />
<application> <br />
<!--The ID below indicates application support for Windows Vista --><br />
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <br />
<!--The ID below indicates application support for Windows 7 --><br />
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><br />
</application> <br />
</compatibility><br />
</assembly></div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%9B%D0%BE%D0%B6%D0%BD%D1%8B%D0%B5_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F&diff=837
Ложные условия
2019-08-28T11:34:34Z
<p>Tatikoma: </p>
<hr />
<div>'''Вопрос:'''<br />
<br>Задаю условие:<br />
if_not (x1 y1 color1) and (x2 y2 color2) // условие такого вида не хочет работать правильно<br />
bla bla bla<br />
end_if<br />
<br />
Однако, если реализовать следующим образом:<br />
if_not (x1 y1 color1)<br />
if_not (x2 y2 color2)<br />
bla bla bla<br />
end_if<br />
end_if // то все прекрасно выполняется<br />
<br />
<br />
'''Ответ:'''<br />
<br>Обобщим ситуацию: нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия.<br />
<br>Действительно, с условием if_not у людей часто возникают некоторые недоразумения.<br />
<br>Решение простое, хоть и не совсем понятное сразу.<br />
<br>Нужно делать так:<br />
if_not (x1 y1 color1) OR (x2 y2 color2)<br />
что-то делаем<br />
end_if<br />
<br />
Почему OR ? Всё довольно просто.<br />
<br>Условие if_not срабатывает только в случае<br />
if_not ЛОЖЬ<br />
(в отличие от оператора if ИСТИНА)<br />
<br />
<br>Мы имеем следующие логические выражения:<br />
<br>ЛОЖЬ or ЛОЖЬ = ЛОЖЬ<br />
<br>ЛОЖЬ or ИСТИНА = ИСТИНА<br />
<br>ИСТИНА or ЛОЖЬ = ИСТИНА<br />
<br>ИСТИНА or ИСТИНА = ИСТИНА<br />
<br />
<br>ЛОЖЬ and ЛОЖЬ = ЛОЖЬ<br />
<br>ЛОЖЬ and ИСТИНА = ЛОЖЬ<br />
<br>ИСТИНА and ЛОЖЬ = ЛОЖЬ<br />
<br>ИСТИНА and ИСТИНА = ИСТИНА<br />
<br />
<br>Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше.<br />
Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%97%D0%B0%D0%BF%D1%83%D1%81%D0%BA_UOPilot&diff=836
Запуск UOPilot
2019-08-28T11:34:23Z
<p>Tatikoma: </p>
<hr />
<div>:'''Для загрузки с параметрами, указанными ниже, отредактируйте ярлык либо создайте bat файл.'''<br />
==Загрузка нужного скрипта==<br />
UoPilot.exe /s"{Path to script}"<br />
Пример:<br />
"G:\Хранить вечно\uopilot\uopilot.exe" /s"scripts\TitanQuest mana click 2.1.txt" /s"G:\Хранить вечно\uopilot\Scripts\WOW арена 1,22.txt"<br />
При запуске будет загружено 2 скрипта во вкладки 0 и 1. Хочу заметить, что возможны как относительные, так и абсолютные адреса.<br />
<br><br />
==Выбор клиента==<br />
Работает только для Ultima Online.<br />
UoPilot.exe /c"{Path to client}"<br />
Пример:<br />
"G:\Хранить вечно\uopilot\uopilot.exe" /c"c:\games\uo\client3.exe"<br />
Этот параметр заносит указанную строку в окошко в нижнем левом углу на вкладке разное. Используется для запуска и автологина, когда стоит ограничение на количество юзеров и народ подолгу стоит в очереди.<br />
<br />
==Автоматический запуск скрипта==<br />
<br />
UoPilot.exe /r0 /r12<br />
Пример:<br />
"G:\Хранить вечно\uopilot\uopilot.exe" /r0<br />
/r0 запустит 0 скрипт. Вместо 0 просто подставьте номер закладки с нужным скриптом.<br />
"G:\Хранить вечно\uopilot\uopilot.exe" /r8 /r10<br />
Запустятся 8 и 10 скрипты(если надо несколько сразу стартовать).<br />
<br />
==Выбор конфигурационного файла==<br />
<br />
UoPilot.exe /i"{Path to config}"<br />
Пример:<br />
"G:\Хранить вечно\uopilot\uopilot.exe" /i "MyCFG.ini"<br />
Может пригодится при запуске нескольких версий пилота, либо для запуска с определенными параметрами. Конфиг хранится по умолчанию в uopilot.ini рядом с uopilot.exe. Хочу обратить внимание на то, что загружаемые скрипты и порядок вкладок, тоже является параметром. Т.е. вы можете создать что-то вроде профиля:<br />
:1) Сделать резервную копию uopilot.ini (если вы хотите сохранить текущие настройки).<br />
:2) Запустите пилот.<br />
:3) Загрузите необходимые скрипты.<br />
:4) При необходимости измените настройки.<br />
:5) Сохраните настройки.(Настройки/Сохранить настройки)<br />
:6) Переименуйте uopilot.ini в любое другое название, например MyCFG.ini<br />
:7) Создайте ярлык, например "G:\Хранить вечно\uopilot\uopilot.exe" /i "MyCFG.ini".<br />
Теперь вы всегда сможете запустить пилот с сохраненными настройками. Например вы можете сделать профиль со скриптами только для Л2 и профиль со скриптами только для ВОВ и обычным кликом по ярлыку загрузить нужные вам скрипты и при желании их запустить ключем /r, рассмотренным выше.<br />
<br />
==Изменить рабочую папку пилота==<br />
<br />
'''2.39'''<br />
<br>Добавил ключ командной строки, изменяющий рабочую папку пилота. "UoPilot.exe /hC:\Temp\".</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%94%D0%B5%D1%82%D0%B5%D0%BA%D1%82%D0%BE%D1%80_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BC%D1%8B%D1%88%D0%BA%D0%B8&diff=835
Детектор движений мышки
2019-08-28T11:34:12Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
Данный скрипт будет отслеживать перемещения мышки. Если активность не наблюдалась заданное время, то сработает ваш код. Может быть полезно для автоматического запуска при простое или для контроля работы других ваших скпиптов, например, если вылетел скрипт, значит не водит мышкой - можно перезапустить или подать тревогу.<br />
<br>Так же данный скрипт может быть очень полезен для предотвращения работы в отсутствии пользователя, чтобы не вызывать подозрений у других игроков, например, при использовании автоматических хилок.<br />
<br />
== Версия ==<br />
1.0<br />
<br />
== Минимальная версия UOPilot ==<br />
2.30<br />
<br />
== Скрипт ==<br />
get mouse_pos #xLast #yLast<br />
set #timerAFK timer + 3000 <br />
<br />
:start<br />
get mouse_pos #x #y<br />
if #x = #xLast and #y = #yLast<br />
if #timerAFK < timer<br />
//СЮДА ПИШЕМ ЧТО СДЕЛАТЬ ПРИ ПРОСТОЕ(запуск/остановка скрипта, изменение переменной и т.д.)<br />
log #timerAFK > timer<br />
alarm<br />
end_if<br />
else<br />
set #timerAFK timer + 3000 // ВРЕМЯ ПРОСТОЯ в миллисекундах (1000 = 1 секунда)<br />
end_if<br />
set #xLast #x<br />
set #yLast #y<br />
goto start<br />
<br />
== Смотрите также ==<br />
[[Move]]<br />
<br>[[Kleft]]<br />
<br>[[If]]<br />
<br>[[Timer]]<br />
<br />
== Первоисточник ==<br />
[https://forum.uokit.com/index.php?showtopic=20548 Форум UOPilot]<br />
[[Категория:Библиотека скриптов]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F&diff=834
Главная временная
2019-08-28T11:34:01Z
<p>Tatikoma: </p>
<hr />
<div><table width="100%" border="0" <br />
align="left" cellspacing="0" cellpadding="10"><br />
<tr><br />
<td VALIGN=top>[[Файл:YM.png|thumb|left|410011422550405]]<br>[[Файл:WM.png|thumb|left|<br>R849464451336<br>U145931779718<br>Z353114408274]]</td><br />
<br />
<td rowspan="3" VALIGN=top><br />
<div style="font-size: 20px;">[http://uopilot.uokit.com/dl.php СКАЧАТЬ ПОСЛЕДНЮЮ ВЕРСИЮ]</div><br />
Вики посвящена программе-кликеру UOPilot. Здесь вы сможете найти справочные материалы, инструкции для начинающих, описание языка, примеры и советы по написанию собственных скриптов.<br />
<div style="font-size: 16px; color: red;">Важно!</div> Начиная с версии 2.41 появилась возможность писать скрипт на языке lua. Рекомендуется использовать его. Основные преимущества:<br />
* Простой и неворятно гибкий синтаксис.<br />
* Скорость работы. Прирост производительности до 300 000 раз. Он действительно быстрый.<br />
* Возможность подключения dll без их модификации.<br />
* Огромное количество уже готовых биндингов https://luapower.com.<br />
* Работа с сетью (при использовании luasocket).<br />
* Возможность делать вставки на ASM.<br />
* Вы можете использовать внешние специализированные среды разработки (например, ZeroBrane).<br />
Если вы только начинаете писать скрипты, то вам рекомендуется начать с:<br />
<br>[[Введение в синтаксис Lua | Введение в пилотный скриптинг (Lua)]] <br />
<br>[[Введение в пилотный скриптинг | Введение в пилотный скриптинг]]<br />
* Скачать последнюю версию можно с [http://uopilot.uokit.com/ официальной страницы разработчика]. Либо по [http://uopilot.uokit.com/dl.php прямой ссылке].<br />
* Задать вопросы, обсудить скрипты, тонкости защит и реализаций можно на [http://forum.uokit.com/index.php?showforum=87 официальном форуме].<br />
* Поделиться своими предложениями можно в специальной [http://forum.uokit.com/index.php?showtopic=23643 теме] на форуме.<br />
<div style="font-size: 14px;"><br />
[[Список функций (Lua)]]<br />
<br>[[Список функций]]<br />
<br>[[Переменные, зарезервированные]]<br />
<br>[[Полезные советы]]<br />
<br>[[Полезные программы]]<br />
<br>[[Запуск UOPilot]]<br />
<br>[[Библиотека скриптов]]<br />
<br>[[Подсветка синтаксиса]]<br />
<br>[http://forum.uokit.com/index.php?showforum=243 Плагины]<br />
[http://redmine.uokit.com/projects/uopilot Пожелания по улучшению]</div></td><br />
<br />
<td rowspan="3">[[Файл:UoPilot2.38main.png|trumb|right|471px]]</td><br />
</tr><br />
</table><br />
<div style="font-size:20px;">Некоторые полезные ресурсы<br></div><br />
* [//www.mediawiki.org/wiki/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];<br />
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список возможных настроек];<br />
<br>UOPilot скачать, download, бесплатно, официальный сайт, последняя версия, справка, инструкция, форум, Lineage 2, кликер, эмуляция, клавиши.</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F&diff=833
Главная
2019-08-28T11:33:50Z
<p>Tatikoma: </p>
<hr />
<div><table width="100%" border="0" <br />
align="left" cellspacing="0" cellpadding="10"><br />
<tr><br />
<td VALIGN=top>[[Файл:YM.png|thumb|left|410011422550405]]<br>[[Файл:WM.png|thumb|left|<br>R849464451336<br>U145931779718<br>Z353114408274]]</td><br />
<br />
<td rowspan="3" VALIGN=top><br />
<div style="font-size: 20px;">[http://uopilot.uokit.com/dl.php СКАЧАТЬ ПОСЛЕДНЮЮ ВЕРСИЮ]</div><br />
Вики посвящена программе-кликеру UOPilot. Здесь вы сможете найти справочные материалы, инструкции для начинающих, описание языка, примеры и советы по написанию собственных скриптов.<br />
<div style="font-size: 16px; color: red;">Важно!</div> Начиная с версии 2.41 появилась возможность писать скрипт на языке lua. Рекомендуется использовать его. Основные преимущества:<br />
* Простой и неворятно гибкий синтаксис.<br />
* Скорость работы. Прирост производительности до 300 000 раз. Он действительно быстрый.<br />
* Возможность подключения dll без их модификации.<br />
* Огромное количество уже готовых биндингов https://luapower.com.<br />
* Работа с сетью (при использовании luasocket).<br />
* Возможность делать вставки на ASM.<br />
* Вы можете использовать внешние специализированные среды разработки (например, ZeroBrane).<br />
Если вы только начинаете писать скрипты, то вам рекомендуется начать с:<br />
<br>[[Введение в синтаксис Lua | Введение в пилотный скриптинг (Lua)]] <br />
<br>[[Введение в пилотный скриптинг | Введение в пилотный скриптинг]]<br />
* Скачать последнюю версию можно с [http://uopilot.uokit.com/ официальной страницы разработчика]. Либо по [http://uopilot.uokit.com/dl.php прямой ссылке].<br />
* Задать вопросы, обсудить скрипты, тонкости защит и реализаций можно на [http://forum.uokit.com/index.php?showforum=87 официальном форуме].<br />
* Поделиться своими предложениями можно в специальной [http://forum.uokit.com/index.php?showtopic=23643 теме] на форуме.<br />
<div style="font-size: 14px;"><br />
[[Список функций (Lua)]]<br />
<br>[[Список функций]]<br />
<br>[[Переменные, зарезервированные]]<br />
<br>[[Полезные советы]]<br />
<br>[[Полезные программы]]<br />
<br>[[Запуск UOPilot]]<br />
<br>[[Библиотека скриптов]]<br />
<br>[[Подсветка синтаксиса]]<br />
<br>[http://forum.uokit.com/index.php?showforum=243 Плагины]<br />
[http://redmine.uokit.com/projects/uopilot Пожелания по улучшению]</div></td><br />
<br />
<td rowspan="3">[[Файл:UoPilot2.38main.png|trumb|right|471px]]</td><br />
</tr><br />
</table><br />
<div style="font-size:20px;">Некоторые полезные ресурсы<br></div><br />
* [//www.mediawiki.org/wiki/Manual:FAQ Часто задаваемые вопросы и ответы по MediaWiki];<br />
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Список возможных настроек];<br />
<br>UOPilot скачать, download, бесплатно, официальный сайт, последняя версия, справка, инструкция, форум, Lineage 2, кликер, эмуляция, клавиши.</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81_Lua&diff=832
Введение в синтаксис Lua
2019-08-28T11:33:39Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Введение ==<br />
Любой скрипт в UoPilot на языке Lua начинается с --lua в нулевой строке скрипта.<br />
<br>По завершении выполнения скрипт не перезапускается сначала, т.е. выполняется однократно.<br />
<br>Для многократного выполнения используйте циклы/операторы перехода. <br />
<br>Параметры всех функций заключаются в скобки и разделяются запятыми.<br />
<br />
== Привязка ==<br />
Для работы многих команд требуется привязать скрипт к целевому окну.<br />
<br>Что бы это сделать поместите пилот поверх окна, разместите курсор мыши над окном и нажмите Ctrl+A.<br />
<br>Также можно использовать функцию findwindow для поиска нужного окна.<br />
<br />
== Комментарии ==<br />
-- (два дефиса) - все что после "--" в строке не выполняется.<br />
<br />
== Переменные ==<br />
:'''Объявление переменной и присваивание значения.'''<br />
--lua<br />
local a = 3 -- объявить переменную "a" и присвоить ей значение 3<br />
local b = 5 -- объявить переменную "b" и присвоить ей значение 5 <br />
log (a, b) -- вывести в лог значение переменной a и b<br />
<br />
:'''Переменные чувствительны к регистру.'''<br />
--lua<br />
local a = 1<br />
local A = 2<br />
log (a, A) -- a и A это разные переменные<br />
<br />
:'''Можно присваивать значения нескольким переменным'''<br />
--lua<br />
local a, b, c = 3, 1, 6<br />
log (a, b, c)<br />
<br />
:'''А так же менять их значения местами.'''<br />
--lua<br />
local a, b = 10, 35<br />
log (a, b)<br />
a, b = b, a -- присвоить переменной 'a' значение переменной 'b' и переменной 'b' значение 'a'<br />
log (a, b)<br />
<br />
--lua<br />
local a, b, c, d = 11, 22, 33, 44<br />
a, b, c, d = d, c, b, a<br />
log (a, b, c, d)<br />
<br />
:'''Переменные могут содержать разные данные.'''<br />
--lua<br />
local x = 2 -- содержит число<br />
local s = "это строка" -- любые символы, кроме чисел, заключаются в кавычки "текст" или 'текст'<br />
log (x, s)<br />
<br />
== Типы данных ==<br />
:1. nil — означает отсутствие данных.<br />
:2. boolean — логический тип данных. К нему относятся true (истина) и false (ложь).<br />
:3. number — числовой. Десятичный разделитель в Lua — точка.<br />
:4. string — строка. <br />
:5. function — функция.<br />
:6. table — таблица. <br />
Узнать тип данных можно с помощью функции type().<br />
--lua<br />
local a = 15 -- число (тип number)<br />
local b = "UoPilot" -- строка (тип string) <br />
local arr = {1, 2, 3} -- массив (тип table)<br />
local c = a == 15 -- если переменная 'a' равна 15 вернёт true, иначе false (тип boolean)<br />
log (type(a))<br />
log (type(b))<br />
log (type(arr))<br />
log (type(c))<br />
<br />
== Математические операции ==<br />
:+ (сложение) <br />
:- (вычитание) <br />
:<nowiki>*</nowiki> (умножение)<br />
:/ (деление) <br />
:% (остаток от деления) <br />
:^ (возведение в степень)<br />
<br />
--lua<br />
local x = 10 + 5<br />
log (x)<br />
<br />
--lua <br />
local a = 4<br />
local b = 7<br />
local c = a + b<br />
log (c)<br />
<br />
--lua<br />
local d = 4 ^ 3<br />
log (d)<br />
<br />
== Логические операторы ==<br />
:not (не) <br />
:and (и) <br />
:or (или) <br />
:== (равно) <br />
:~= (не равно) <br />
:> (больше) <br />
:< (меньше) <br />
:>= (больше или равно) <br />
:<= (меньше или равно)<br />
<br />
== Условия ==<br />
:'''Любое условие имеет вид:'''<br />
:if ... then <br />
:... <br />
:end<br />
<br />
--lua<br />
local a = 13<br />
if a == 13 then -- если переменная 'a' равна 13 <br />
log ("Условие выполнено, т. к. переменная a равна 13")<br />
end -- конец условия<br />
<br />
--lua<br />
local a = 4<br />
local b = 7 + a<br />
if b == 11 then -- если переменная 'b' равна 11 <br />
log ("Переменная b равна 11")<br />
end<br />
<br />
--lua<br />
local x, y = 10, 30<br />
if x + y == 40 then -- если сумма 'x' и 'y' равна 40<br />
log ("+++")<br />
end <br />
<br />
:'''Условия с else.''' <br />
else выполняет другое действие, если условие c if не выполнилось.<br />
--lua<br />
local x = 100<br />
if x > 101 then -- если 'x' больше 101<br />
log ("x больше 101")<br />
else -- иначе<br />
log ("x меньше 101")<br />
end<br />
<br />
:'''Условия с elseif.'''<br />
--lua<br />
local a = 15<br />
local b = 0<br />
if a > 20 then -- если а больше 20<br />
b = 3 -- присвоить 3 переменной b<br />
elseif a < 20 then -- если же а меньше 20<br />
b = 1 -- присвоить 1 переменной b<br />
else -- иначе<br />
b = -1 -- присвоить -1 переменной b<br />
end<br />
log (b)<br />
<br />
:'''Несколько условий в одном if.'''<br />
--lua<br />
local x = 5<br />
local y = 7<br />
if x == 5 and y == 7 then -- если x равен 5 и y равен 7<br />
log ("+++")<br />
end<br />
<br />
--lua<br />
local x = 5<br />
local y = 7<br />
if x == 5 or y == 10 then -- если x равен 5 или y равен 10<br />
log ("+++")<br />
end<br />
<br />
== Циклы ==<br />
:'''Цикл for.''' <br />
Выполняет действие заданное количество раз.<br />
--lua<br />
for i=1, 10 do <br />
log (i) -- вывести в лог переменную i<br />
end<br />
--Число 1 — с какого числа надо начинать цикл, 10 — до скольки продолжать.<br />
<br />
--lua<br />
for i=1, 10, 2 do -- с шагом 2<br />
log (i) -- вывести в лог переменную i<br />
end<br />
<br />
:'''Цикл while.''' <br />
Выполняет цикл до тех пор, пока заданное условие является истинным.<br />
--lua<br />
local x = 0<br />
while x < 5 do -- пока x меньше 5<br />
x = x + 1 -- прибавляем 1 к "x" <br />
log (x)<br />
end<br />
<br />
:'''Цикл repeat.''' <br />
Выполняет действие, пока не выполнится заданное условие. В отличии от while всегда выполнится хотя бы один раз.<br />
--lua<br />
local x = 3 <br />
repeat -- начало цикла <br />
x = x + 1<br />
log (x) <br />
until x == 6 -- выполнять цикл пока "x" не станет равен 6<br />
<br />
== Строки ==<br />
Строка — это текст, записанный в двойных " " или одинарных <nowiki>' '</nowiki> кавычках.<br />
--lua<br />
local s1 = "Hello!" <br />
local s2 = 'Hello!'<br />
log (s1, s2) <br />
<br />
Внутри двойных кавычек можно использовать одинарные и наоборот.<br />
--lua<br />
local s = '"Hello!"' <br />
local str1 = "'Hello!'" <br />
log (s)<br />
log (str1)<br />
<br />
== Конкатенация строк ==<br />
Соединение строк. Делается с помощью оператора ".." (две точки).<br />
--lua<br />
local a = "qwe"<br />
local b = "rty"<br />
log (a..b)<br />
-- или<br />
local c = a .. b<br />
log (c)<br />
<br />
--lua<br />
local a = 10<br />
local b = 12<br />
log ("Переменная a равна "..a..", Переменная b равна "..b)<br />
<br />
== Использование функций Uopilot ==<br />
:'''Проверка цвета в точке'''<br />
--lua<br />
-- в этом примере функция color проверяет цвет в координатах 333, 768 и возвращает полученный цвет<br />
-- if проверяет совпадает ли цвет с указанным (4071168)<br />
-- если цвет совпадает, то в лог будет выведено сообщение что цвет найден<br />
-- иначе сообщение что цвет не найден<br />
if color (333, 768) == 4071168 then<br />
log ("Цвет найден")<br />
else<br />
log ("Цвет не найден")<br />
end<br />
<br />
:'''Переместить курсор в указанные координаты'''<br />
--lua<br />
move (150, 330)<br />
<br />
:'''Нажатие клавиши'''<br />
--lua<br />
send ("q") -- нажать клавишу q, для работы команды требуется привязка<br />
<br />
== Список всех функций, с примерами их использования ==<br />
[http://uopilot.tati.pro/index.php?title=Список_функций_(Lua) Список функций (Lua)]</div>
Tatikoma
https://uopilot.uokit.com/wiki/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&diff=831
Введение в пилотный скриптинг
2019-08-28T11:33:17Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Теория ==<br />
<br />
Это небольшое обучение расчитано на тех кто не знаком со скриптами и программированием.<br />
Итак как работает скрипт и что в нем есть:<br />
Код состоит из текста(=команд) выполнение которого происходит построчно начиная с первой и до последней строки, но для <br />
обеспечения ветвления логики (=условных переходов) возможно как пропустить строки так и перейти в конкретное место.<br />
Команды состоят из групп переменных, операторов и функции, переменные это контейнеры в которые можно помещать числа или <br />
строки(буквы+цифры), переменные бывают трех типов, это числовые начинающиеся с #, строковые $, и массивы % представляющие <br />
собой переменные сгрупированные под одним именем:<br><br />
set #a 1<br />
set $b "asd"<br />
set %c[1] 1<br />
set %c[2] "asd"<br />
set %c[3] "asd 1"<br />
Таким образом мы можем думать о переменных как о данных с которыми можно делать много чего интересного.<br />
<br />
Функции и команды позволяют производить разнообразные действия с переменными и не только, некоторые функции могут возвращать <br />
значения, например "set #a 1" вместо 1 может быть функция которая вернет что то, set поместит это в #a, так же для работы <br />
функций им нужны параметры(переменные-данные), это можно написать так "Функция1(параметр1 параметр2 3.. 4.. и тд.)", можно <br />
сравнить с соковыжималкой(функция) и яблоком(данные), на выходе имеем сок(результат работы) и мякоть(возврашенные данные), <br />
притом и функции и соковыжималки требуют для работы электричество(выполнение) <br />
Дальше приводится описание самых необходимых команд и функций для начала скриптописания:<br />
<br />
'''//''' коментарий, все что после "//" в этой строке не выполняется<br />
<br />
'''set''' обьявление переменной и или присваивание значения:<br><br />
set #a 1 //создание переменной #a и присваивание ей числа 1<br />
set #a #a + 2 // присваивание #a ее же значение но +2, после выполнения #a будет содержать 3<br />
<br />
'''wait''' ожидание, можно указать с точностью до 1 милисекунды:<br><br />
wait 1s // ждать 1 секунду<br />
wait 2823 // ждать 2 секунды и 823 милисекунды<br />
<br />
'''if''' условный оператор, в результате вычисления выражения, тело "ифа" либо выполняется либо нет, выражения идут после if и <br />
должны быть в формате больше(>), меньше(<), равно(=), не(!), то есть приводить условие к однозначному результату ДА(true) <br />
или НЕТ(false), можно использовать несколько выражений соединенных and(и), or(и или), xor(или):<br><br />
if (#a > 0) and (#a < 10) // если #a больше чем ноль и меньше 10 тогда выполнится тело условия<br />
set #a 11 // это тело условия<br />
set $string asd11 // это тело условия<br />
end_if // конец условия<br />
<br />
'''while''' условный цикл "пока истинно", тоже самое что и if только после выполнения тела, перехода к следующей строчке после <br />
конца условия не будет, вместо этого опять вычислится выражение и если оно НЕТ(false) тогда будет выход из цикла, если <br />
ДА(true) тогда сново выполнится тело:<br><br />
while (#a > 0) and (#a < 10) // если #a больше чем ноль и меньше 10 тогда выполнится тело условного цикла<br />
set #a #a + 1 // это тело условного цикла<br />
set $string asd11 // это тело условного цикла<br />
end_while // конец условного цикла<br />
<br />
'''left''' кликнуть левой кнопкой мышки по координатам (=курсором), сначала пишется горизонтальная координата (X), а затем вертикальная (Y):<br><br />
left 450, 220// кликнуть левой кнопкой по координатам X=450, Y=220<br />
<br />
'''send''' нажать кнопку, в разных ОС что бы работало как надо, кнопку необходимо заключаться в {}:<br><br />
send N // нажать кнопку N<br />
send {N} // нажать кнопку N<br />
send F1 // нажать кнопку F1<br />
<br />
'''findcolor''' поиск точки по цвету в квадратной области, возвращает сколько точек найдено и где, параметры:<br><br />
FindColor (левыйКрайОбласти верхнийКрайОбласти правыйКрайОбласти нижнийКрайОбласти шагПоискаГоризонталь шагПоискаВертикать <br />
цвет массивДляКоординат типПоиска), пример:<br><br />
set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) // вернёт в $a сколько нашлось, вернёт в %arr координаты каждой найденной точки<br />
<br />
'''end_script''' завершение работы скрипта, можно не использовать и тогда в конце скрипта выполнение перейдет на первую строчку.<br><br />
<br />
== Практика ==<br />
<br />
Теперь можно использовать полученные знания и написать пару простейших ботов, сперва нужно привязать скрипт к целевому окну, <br />
что бы это сделать поместите пилот поверх окна, разместите курсор мыши над окном и нажмите ctrl+A:<br><br />
1)<br><br />
send F1 // нажать F1<br />
wait 3000 // ждать 3сек<br />
send G // нажать G<br />
wait 15s // ждать 15сек, по завершинии ожидания сново выполнится "send F1"<br />
//end_script // завершиние работы скрипта закоментированно, поэтому работать код будет до ручного выключения<br />
2)<br><br />
set $a 0 // для старта условного цикла нужна переменная $a с значением 0<br />
while $a < 1 // пока $a меньше 1, то есть тело будет выполнятся пока функция findcolor не вернет в $a по крайней мере 1 (количество найденных точек)<br />
set $a findcolor (154, 80 318, 260 1 1 2366701 %arr 2) // когда функция найдет точку она поместит ее координаты в %arr <br />
wait 10 // ждать 10мс<br />
end_while // конец цикла, переход к следующей строчке будет только тогда когда findcolor что то найдет и в $a будет уже не 0<br />
left %arr [1 1], %arr [1 2] // кликнуть мышкой по первой найденной точке,горизонтальная координата=%arr[1 1] вертикальная=%arr[1 2]<br />
wait 3s // ждать 3сек<br />
send F7 // нажать F7<br />
wait 7s // ждать 7сек, после ожидания выполнение перейдет на первую строчку где $a будет присвоено 0, благодаря чему цикл while сможет опять запустится <br />
<br />
Это только маленькая часть функций, полное описание можно найти тут:<br><br />
UOPilot Wiki http://uopilot.tati.pro<br><br />
UOPilot->?->Помощь по языку скриптов<br><br />
UOPilot->?->История развития программы<br></div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2&diff=830
Библиотека скриптов
2019-08-28T11:33:06Z
<p>Tatikoma: </p>
<hr />
<div>[[Детектор движений мышки]]<br />
<br>[[Поиск статичных точек]]<br />
<br>[[Поиск пути к дочернему окну]]<br />
<br>[[Смещение между окнами]]<br />
<br>[[Prompt динамической длины]]<br />
<br>[[Поиск хода в Небеса : уникальная игра !]]<br />
<br>[[Поиск дублей]]<br />
<br>[[Перемешивание массива]] <br />
<br>[[Поиск ближайшего числа в массиве]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=YearFromDate&diff=829
YearFromDate
2019-08-28T11:32:55Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''YearFromDate''' - возвращает год. <br />
<br>'''MonthFromDate''' - возвращает месяц.<br />
<br>'''DayFromDate''' - возвращает день.<br />
:Дату следует указывать полностью. <br />
<br />
== Синтаксис ==<br />
Привязка к окну: нет.<br />
<br>Работа со свернутым окном: да.<br />
YearFromDate(Date)<br />
MonthFromDate(Date)<br />
DayFromDate(Date)<br />
<br />
== Примеры ==<br />
<br />
// Пример 1<br />
set $date 19.06.2016<br />
set #year YearFromDate($date) // вернёт год<br />
set #month MonthFromDate($date) // вернёт месяц<br />
set #day DayFromDate($date) // вернёт день<br />
<br />
log #day #month #year // вывести в лог<br />
end_script <br />
<br />
// Пример 2<br />
set $date 09.06.2016<br />
set $day copy($date 1 2) // скопировать день<br />
set $month copy($date 4 2) // скопировать месяц<br />
set $year copy($date 7 4) // скопировать год<br />
<br />
log $day $month $year // вывести в лог, при этом 0, если он присутствует вначале числа, останется<br />
end_script<br />
<br />
== Смотрите также ==<br />
<br />
[[DateNow]]<br />
<br>[[TimeStamp]]<br />
<br>[[SubYears]]<br />
<br>[[Year]]<br />
<br />
== История развития ==<br />
<br />
'''2.39'''<br />
<br>Добавил функции для работы с датой и временем. "Date", "Date1", "Date2" может быть датой и\или временем, или таймштампом. Дату или время следует указывать полностью. "Years", "Months", "Days", "Hours", "Minutes", "Seconds" обычное число. Все функции сложения и вычитания возвращают таймштамп.<br />
AddDate(Date1 Date2) : складывает даты;<br />
AddYears(Date Years) : добавляет несколько лет;<br />
AddMonths(Date Months) : добавляет несколько месяцев;<br />
AddDays(Date Days) : добавляет несколько дней;<br />
AddHours(Date Hours) : добавляет несколько часов;<br />
AddMinutes(Date Minutes) : добавляет несколько минут;<br />
AddSeconds(Date Seconds) : добавляет несколько секунд;<br />
SubDate(Date1 Date2) : вычитает даты;<br />
SubYears(Date Years) : вычитает несколько лет;<br />
SubMonths(Date Months) : вычитает несколько месяцев;<br />
SubDays(Date Days) : вычитает несколько дней;<br />
SubHours(Date Hours) : вычитает несколько часов; <br />
SubMinutes(Date Minutes) : вычитает несколько минут; <br />
SubSeconds(Date Seconds) : вычитает несколько секунд; <br />
YearFromDate(Date) : Возвращает год;<br />
MonthFromDate(Date) : Возвращает месяц;<br />
DayFromDate(Date) : Возвращает день;<br />
HourFromDate(Date) : Возвращает часы;<br />
MinuteFromDate(Date) : Возвращает минуты;<br />
SecondFromDate(Date) : Возвращает секунды;<br />
DateNow: возвращает текущую дату 29.11.2016;<br />
TimeNow: возвращает текущее время 10:30:25;<br />
TimeStamp (Date): преобразует таймштамп в человеческий вид и обратно.<br />
<br />
[[Категория:Дата и время]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Year&diff=828
Year
2019-08-28T11:32:44Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''Year''' - переменная содержащая текущий год.<br />
<br>'''Month''' - переменная содержащая текущий месяц.<br />
<br>'''Day''' - переменная содержащая текущий день.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
msg day month year // показать в сообщении текущую дату (день, месяц, год)<br />
End_script<br />
<br />
// Пример 2<br />
init_arr %a (1) day . month . year //записать текущую дату в 1 строку (5 элементов массива)<br />
hint %a [1] //показать в сообщении (в правом нижнем углу)<br />
<br />
// Пример 3<br />
write (C:\TodayDate.txt day month year \r\n) //В файл C:\TodayDate.txt будет записана текущая дата<br />
End_script<br />
<br />
// Пример 4<br />
// Сохранить массив в файл, чтобы имя содержало дату<br />
set %a [1 1] 111<br />
set %a [1 2] 456<br />
set %a [1 3] 789<br />
init_arr %arr (1) day _ month _ year<br />
set $time C:\%arr [1].txt<br />
save_array %a $time // сохранить массив на диске 'C:\'<br />
End_script<br />
<br />
== Смотрите также ==<br />
<br />
[[DayOfWeek]]<br />
<br>[[Hour]]<br />
<br />
== История развития ==<br />
<br />
'''2.12'''<br />
<br>Добавил определение текущей даты 'year', 'month', 'day'.<br />
<br />
'''2.32'''<br />
<br>Добавил функцию вычисление дня недели 'dayofweek (Year Month Day)'.<br />
<br />
[[Категория:Дата и время]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Writemem_(Lua)&diff=827
Writemem (Lua)
2019-08-28T11:32:33Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''writemem''' - запись в память.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: да.<br />
<br>Работа со свернутым окном: да.<br />
<br><br />
writemem (<variable>, <adress>, <type> [, handle] [, ModuleName])<br />
Тип данных: <br />
<br>B:byte = 1b<br />
<br>W:word = 2b <br />
<br>D:dWord = 4b <br />
<br>C:char = 1b <br />
<br>S:String = 1-255b<br />
<br>DO:double = 8b<br />
<br>F:float = 4b<br />
<br>R:real = 6b<br />
<br />
== Примеры ==<br />
--lua<br />
-- требуется привязка к окну Ctrl+A, либо указать хендл нужного окна в функции<br />
writemem (99, 0x073B978, "d") -- записать значение типа dWord (d) <br />
<br />
== Смотрите также ==<br />
<br />
[[Readmem (Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Writemem&diff=826
Writemem
2019-08-28T11:32:22Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
<br />
<br />
== Синтаксис ==<br />
Привязка к окну: необходима.<br />
<br>Работа со свернутым окном: да.<br />
writemem <variable> <adress> <type> [handle] [ModuleName] [result]<br />
<br />
== Примеры ==<br />
<br />
<br />
== Смотрите также ==<br />
<br />
[[Readmem]]<br />
<br />
== История развития ==<br />
<br />
'''2.14'''<br />
<br>Добавил команду:<br />
'writemem <variable> <adress> <type> [result]'<br />
:B:byte = 1b<br />
:W:word = 2b<br />
:D:dWord= 4b<br />
:C:char = 1b<br />
:S:String = 1-255b;.<br />
Пишет по указанному адресу значение переменной указанного типа. В необязательном параметре 'result' возвращается количество записанных байт:<br />
<br />
'''2.24.1'''<br />
<br>Добавил в команды 'readmem' и 'writemem' операции с числами с плавающей запятой.<br />
:DO:double = 8b<br />
:F:float = 4b<br />
:R:real = 6b;<br />
В связи с тем, что пилот оперирует только с целыми числами, числа с плавающей запятой можно хранить только в строковых переменных.<br />
<br />
'''2.27.2'''<br />
<br>Плавающая запятая в командах 'readmem' и 'writemem' не тестировалась. Теоретически, работать должна.<br />
<br />
'''2.36'''<br />
<br>Добавил в команды 'readmem' и 'writemem' работу с 64 битными процессами. Новый тип данных L:long = 8b;<br />
<br>Добавил модульную адресацию в командах работы с памятью.<br />
readmem <variable> <adress> <type> <size> [modulename]<br />
writemem <variable> <adress> <type> [ModuleName] [result]<br />
<br />
'''2.39'''<br />
<br>Если в команде 'writemem' значение для записи заключено в кавычки, то кавычки удаляются.<br />
<br />
'''2.41'''<br />
<br>Добавил чтение\запись по хендлу.<br />
readmem variable adress type size [handle] [modulename]<br />
writemem variable adress type [handle] [ModuleName] [result]<br />
[[Категория:Память]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Write_(Lua)&diff=825
Write (Lua)
2019-08-28T11:32:11Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''write''' - позволяет дописывать текст в файл. <br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<br>Все параметры заключаются в скобки и разделяются запятыми.<br />
write (<filename>, <any text>)<br />
Где:<br />
<br>'''<filename>''' - путь к файлу. Заключается в квадратные скобки <nowiki>[[ ]]</nowiki>. Если файл не существует, то он будет создан.<br />
<br>'''<any text>''' - текст для записи в файл, может быть задан переменными.<br />
<br />
== Примеры ==<br />
<br />
--lua<br />
write (<nowiki>[[C:\123abc.txt]]</nowiki>, os.date("%X") .. "\r\n")<br />
-- в файл C:\123abc.txt запишутся текущие": час минуты и секунды<br />
<br />
--lua<br />
local a = 10<br />
local b = 15<br />
local c = a + b<br />
write (<nowiki>[[C:\456a.txt]]</nowiki>, c .. "\r\n")<br />
-- в файл C:\456a.txt запишется результат сложения переменных a и b <br />
<br />
== Смотрите также ==</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Write&diff=824
Write
2019-08-28T11:32:00Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
Оператор Write позволяет дописывать текст в файл. <br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
write (<filename> <any text>)<br />
'''<filename>''' - Путь к файлу. Если файл не существует, то он будет создан.<br />
<br>'''<any text>''' - текст для записи в файл, может быть задан переменными.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
write (C:\123abc.txt hour min sec \r\n)<br />
//В файл C:\123abc.txt запишутся текущие: час минуты и секунды<br />
end_script<br />
<br />
// Пример 2<br />
set #a 10<br />
set #b 15<br />
set #c #a + #b<br />
write (C:\456a.txt #c \r\n)<br />
//В файл C:\456a.txt запишется результат сложения переменных #a и #b <br />
end_script<br />
<br />
== Смотрите также ==<br />
<br />
[[Save array]]<br />
<br />
== История развития ==<br />
<br />
'''2.37'''<br />
<br>Добавил команду вывода текста в файл 'write (<filename> <any text>)'. Файл всегда дописывается если существует. Подстроки '\n' и '\r' заменяются на символы с кодами 13 и 10 соответственно.<br />
<br />
'''2.38'''<br />
<br>Поменял перенос строки.<br />
<br />
[[Категория:Текст]][[Категория:Файлы]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Workwindowpid_(Lua)&diff=823
Workwindowpid (Lua)
2019-08-28T11:31:49Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''workwindowpid''' - переменная, возвращающая PID процесса, которому принадлежит рабочее окно.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Да.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
== Примеры ==<br />
<br />
--lua<br />
-- Делаем привязку Ctrl + A<br />
log (workwindowpid())<br />
<br />
--lua<br />
local h=findwindow("Блокнот") -- найти окно блокнота<br />
if h then -- если найдено<br />
workwindow(h[1][1]) -- сделать его рабочим окном, тоже самое что Ctrl+A<br />
log(workwindowpid()) -- PID окна<br />
else<br />
log ("Окно не найдено")<br />
end<br />
<br />
== Смотрите также ==<br />
<br />
[[Workwindow (Lua)]]<br />
<br>[[Windowfromcursor (Lua)]]<br />
<br>[[Windowfrompoint (Lua)]]<br />
<br>[[Windowhandle (Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Workwindow_(Lua)&diff=822
Workwindow (Lua)
2019-08-28T11:31:38Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''workwindow''' - без параметров возвращает хендл окна, к которому привязан скрипт. <br />
<br>Если указан хендл, то делает окно, с указанным хендлом, рабочим.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: для работы оператора не требуется.<br />
<br>Работа со свернутым окном: да.<br />
workwindow ()<br />
workwindow ([handle])<br />
Без параметров вернёт хендл текущего рабочего окна<br />
<br>handle - хендл окна к которому необходимо привязать скрипт.<br />
<br>workwindow может быть использован везде, где необходимо указание хендла рабочего окна.<br />
<br />
== Примеры ==<br />
--Lua<br />
workwindow (6573546) -- сделать рабочим окно c указанным хендлом<br />
<br />
--Lua<br />
local h = findwindow("Блокнот") -- найти окно блокнота<br />
if h then -- если найдено <br />
workwindow (h[1][1]) -- сделать его рабочим окном<br />
end<br />
<br />
--Lua<br />
workwindow (windowfromcursor()) -- сделать рабочим окно, над которым сейчас находится курсор мыши<br />
<br />
== Смотрите также ==<br />
<br />
[[Findwindow (Lua)]]<br />
<br>[[Windowfromcursor_(Lua)]]<br />
<br>[[Getwindow_(Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=WorkwindowPID&diff=821
WorkwindowPID
2019-08-28T11:31:16Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''WorkwindowPID''' - переменная, возвращающая PID процесса, которому принадлежит рабочее окно.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Да.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
// Делаем привязку Ctrl + A<br />
log WorkwindowPID<br />
End_script<br />
<br />
== Смотрите также ==<br />
<br />
[[Workwindow]]<br />
<br>[[WindowFromCursor]]<br />
<br>[[WindowFromPoint]]<br />
<br>[[Windowhandle]]<br />
<br />
== История развития ==<br />
<br />
'''2.21'''<br />
<br>Добавил переменную, возвращающую PID процесса которому принадлежит рабочее окно 'WorkWindowPID'.<br />
<br />
[[Категория: Окна]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Workwindow&diff=820
Workwindow
2019-08-28T11:31:05Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
Переменная хранящая хендл окна к которому привязан скрипт.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: для работы оператора не требуется.<br />
<br>Работа со свернутым окном: да.<br />
set workwindow <handle><br />
<handle> - хендл окна к которому необходимо привязать скрипт.<br />
<br>Workwindow может быть использован везде, где необходимо указание хендла рабочего окна.<br />
<br />
== Примеры ==<br />
set workwindow 6573546 // сделать рабочим окно c указанным хендлом<br />
set workwindow #h // сделать рабочим окно, хендл которого хранится в переменной #h<br />
set workwindow windowfromcursor // сделать рабочим окно, над которым сейчас находится курсор мыши<br />
set #w workwindow // сохранить в переменной #w хендл рабочего окна<br />
set #h workwindow.3 // сохранить в переменной #h хендл рабочего окна скрипта из 3-й вкладки<br />
<br />
== Смотрите также ==<br />
<br />
[[Findwindow]]<br />
<br>[[Set windowpos]]<br />
<br>[[WindowFromCursor]]<br />
<br />
== История развития ==<br />
<br />
'''2.14'''<br />
<br>Добавил возможность задания рабочего окна из скрипта:<br />
'set WorkWindow <handle>'<br />
<br />
'''2.19'''<br />
<br>Добавил возможность ссылаться на 'workwindow' из других скриптов.<br />
<br />
'''2.30'''<br />
<br>Починил конструкции типа 'workwindow.#sn'.<br />
<br />
'''2.33'''<br />
<br>Подправил ссылку на переменные 'timer' и 'workwindow' других скриптов.<br />
<br />
'''2.41'''<br />
<br>Подправил обновление переменной 'workwindow' при нажатии Ctrl+A.<br />
<br>Исправил присваивание 'workwindow' в процедурах. Присваивание срабатывало только на вызывающий скрипт.<br />
<br />
[[Категория:Окна]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Windowpos_(Lua)&diff=819
Windowpos (Lua)
2019-08-28T11:30:54Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''windowpos''' - позволяет получить или установить координаты и размер окна.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: необходима, либо указание хендла в операторе.<br />
<br>Работа со свернутым окном: да.<br />
windowpos (x, y, width, height [, handle]) -- установить координаты и размеры окна <br />
'''<handle>''' - хендл окна с которым производится операция. При отсутствии указанного хендла, операция будет произведена с текущим окном.<br />
<br>'''x''' - новая координата 'X' окна.<br />
<br>'''y''' - новая координата 'Y' окна.<br />
<br>'''width''' - новая ширина окна.<br />
<br>'''height''' - новая высота окна.<br />
<br />
x, y, width, height, errorcode = windowpos (<handle>) -- получить координаты и размеры окна <br />
'''<handle>''' - хендл окна с которым производится операция. При отсутствии указанного хендла, операция будет произведена с текущим окном.<br />
<br>'''x''' - имя переменной, в которую будет помещена x координата окна.<br />
<br>'''y''' - имя переменной, в которую будет помещена y координата окна.<br />
<br>'''width''' - имя переменой, в которую будет помещена ширина окна.<br />
<br>'''height''' - имя переменой, в которую будет помещена высота окна.<br />
<br>'''errorcode''' - имя переменной, в которую будет возвращен код завершения оператора.<br />
<br><br>0 - Команда выполнена успешно.<br />
<br>1 - Ширина или высота окна не определены.<br />
<br>2 - X или Y координата не определена.<br />
<br>3 - Команда завершена с ошибкой.<br />
<br>4 - Хендл окна не определен. <br />
<br />
== Примеры ==<br />
<br />
--lua<br />
-- переместить рабочее окно в координаты 100 200, не меняя размеры окна<br />
-- Не забываем указать нужное окно Ctrl + A<br />
windowpos (100, 200, -1, -1, workwindow()) <br />
<br />
--lua<br />
local handle = findwindow("Блокнот") -- найти окно блокнота<br />
if handle then -- если окно найдено<br />
windowpos (100, 50, -1, -1, handle[1][1]) -- переместить в координаты 100, 50, не меняя размеры окна<br />
end<br />
<br />
--lua<br />
local handle = findwindow("Блокнот") -- найти окно блокнота<br />
if handle then -- если окно найдено<br />
local x, y, width, height, errorcode = windowpos (handle[1][1]) -- получить координаты окна и его размеры<br />
log(x, y, width, height, errorcode)<br />
end<br />
<br />
--lua<br />
local handle = findwindow("Блокнот") -- найти окно блокнота<br />
if handle then -- если окно найдено<br />
local x, y = windowpos (handle[1][1]) -- получить координаты окна и его размеры<br />
windowpos (x, y, 700, 500, handle[1][1]) -- изменить размеры окна, не меняя его положение<br />
end<br />
<br />
== Смотрите также ==<br />
<br />
[[Showwindow (Lua)]]<br />
<br>[[Workwindow (Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Windowhandle_(Lua)&diff=818
Windowhandle (Lua)
2019-08-28T11:30:43Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''Windowhandle''' - переменная хранящая хендл окна пилота.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
== Примеры ==<br />
<br />
--lua<br />
log (windowhandle())<br />
<br />
--lua<br />
local handle = windowhandle() <br />
log (handle) <br />
<br />
== Смотрите также ==<br />
<br />
[[Workwindow (Lua)]]<br />
<br>[[Exefilename (Lua)]]<br />
<br>[[Homepath (Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Windowhandle&diff=817
Windowhandle
2019-08-28T11:30:32Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''Windowhandle''' - переменная хранящая хендл окна пилота.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Да.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
set #handle Windowhandle // присвоить переменной '#handle' хендл окна пилота<br />
msg #handle // показать в сообщении<br />
End_script<br />
<br />
== Смотрите также ==<br />
<br />
[[Workwindow]]<br />
<br>[[Exefilename]]<br />
<br>[[Homepath]]<br />
<br />
== История развития ==<br />
<br />
'''2.35'''<br />
<br>Добавил переменные 'HomePath', 'ExeFileName', 'WindowHandle'.<br />
<br />
'''2.36'''<br />
<br>Исправил переменные 'HomePath', 'ExeFileName', 'WindowHandle'.<br />
<br />
[[Категория:Окна]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=Windowfromcursor_(Lua)&diff=816
Windowfromcursor (Lua)
2019-08-28T11:30:21Z
<p>Tatikoma: </p>
<hr />
<div>== Описание ==<br />
'''windowfromcursor''' - возвращает хэндл окна или контрола под курсором мыши.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: нет.<br />
<br>Работа со свернутым окном: нет.<br />
<br />
== Примеры ==<br />
--lua<br />
move (300, 300) -- переместить курсор в координаты 300 300 <br />
workwindow(windowfromcursor()) -- сделать рабочим окно находящее под курсором<br />
<br />
--lua<br />
move (300, 300) -- переместить курсор в координаты 300 300<br />
local handle = windowfromcursor() -- присвоить переменной хендл окна под курсором<br />
hint (handle) -- хендл окна, подсказка в правом нижнем углу экрана<br />
workwindow(handle) -- сделать рабочим окно находящее под курсором<br />
<br />
== Смотрите также ==<br />
<br />
[[Workwindow (Lua)]]<br />
<br>[[Findwindow (Lua)]]</div>
Tatikoma
https://uopilot.uokit.com/wiki/index.php?title=WindowFromPoint&diff=815
WindowFromPoint
2019-08-28T11:30:10Z
<p>Tatikoma: </p>
<hr />
<div><br />
== Описание ==<br />
'''WindowFromPoint''' - возвращает хендлы всех окон, находящихся в указанной точке экрана c абсолютными координатами, в порядке убывания значения TOP.<br />
<br />
== Синтаксис ==<br />
Привязка к окну: Нет.<br />
<br>Работа со свернутым окном: Нет.<br />
WindowFromPoint (#x #y [one|all|child])<br />
Где:<br />
<br>'''#x #y''' - абсолютные координаты X и Y.<br />
<br>'''[one|all|child]''' - необязательные параметры.<br />
<br>one - возвращает хендл окна (по умолчанию).<br />
<br>all - возвращает хендлы всех окон. Поиск осуществляется поочередным скрытием лишних окон. <br />
<br>child - возвращает хендл контрола. Если элемент неактивен, то возвращает родителя.<br />
<br />
== Примеры ==<br />
// Пример 1<br />
set %handle WindowFromPoint(800 500 all) //ищет все окна находящиеся в абсолютных координатах 800 500<br />
set #size size(%handle) //всего найдено окон<br />
msg Найдено окон: #size<br />
for #i 1 #size 1<br />
log %handle[#i] //показать в логе хендлы родительских окон<br />
end_for<br />
End_script<br />
<br />
== Смотрите также ==<br />
<br />
[[Findwindow]]<br />
<br>[[WindowFromCursor]]<br />
<br>[[Getwindow]]<br />
<br>[[Set windowpos]]<br />
<br />
== История развития ==<br />
<br />
'''2.30'''<br />
<br>добавил функцию, которая возвращает хендлы всех окон, находящихся в указанной точке экрана c абсолютными координатами, в порядке убывания значения TOP<br />
windowfrompoint (#x #y [one|all|child]) <br />
one - возвращает хендл окна (по умолчанию).<br />
<br>all - возвращает хендлы всех окон. Поиск осуществляется поочередным скрытием лишних окон. <br />
<br>child - возвращает хендл контрола. Если элемент неактивен, то возвращает родителя.<br />
<br />
[[Категория:Окна]]</div>
Tatikoma