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

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

UoKit.com Форумы _ UO Pilot _ Новая Версия Uopilot v.2.39 (09.03.2017)

Автор: WKnight 9.3.2017, 23:31

Пожертвовать на дальнейшее развитие:
Изображение
Рубли: R849464451336
Гривны: U145931779718
Доллары: Z353114408274

Изображение
410011422550405


--v.2.39--

Исправил установку размеров в команде 'log open', при первом открытии окна лога.

Исправил зависание пилота при выходе с работающими скриптами.

Добавил команду перезапуска скриптов 'restart_script [number | filename | all | allex]'. Сначала останавливает все указанные, потом запускает все указанные, и потом перезапускает свой скрипт, если нужно.

Исправил команду 'log close', открывавшую закрытый лог.

Исправил ошибку, возникающую, при указании комментария в описании процедуры. "proc test // comment".

Исправил показ хелпа с Wiki для составных команд типа 'set clipboard'.

При открытии Wiki страницы по ПКМ на команде в скрипте, фокус устанавливается на саму статью, а не на выпадающий список.

Исправил копирование примеров с Wiki в пилот.

Исправил ошибку в команде 'set windowpos' с параметрами TOP и BOTTOM.

Добавил возможность перезагрузки указанного плагина. 'pluginload [filename]', 'pluginreload [filename]', 'pluginunload [filename]'.

Добавил функцию плавного перемещения курсора, синтаксис как у команды 'move'. 'move_smooth <х> <у> [+х +у [-х -у]] [abs|handle]'.

В форматирование добавил форматирование подпрограмм от ":метки" до "return" находящихся на одном уровне вложенности.

Команда 'repeat'. Исправил вход в цикл при указанном количестве повторов <= 0.

Исправил ошибку "-4" в команде 'findimage', возникающую, если координата и путь к файлу не разделены пробелом.

Подправил функцию чтения памяти клиента.

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

Добавил ключ командной строки, изменяющий рабочую папку пилота. "UoPilot.exe /hC:\Temp\".

Добавил функцию запоминания части экранной области 'GetImage (StartX StartY EndX EndY [type|handle] [abs])'. Возвращает строку в виде "Адрес в памяти|Ширина|Высота|Длина строки в байтах/", либо код ошибки.

Добавил функцию удаления запомненной части экранной области 'DeleteImage (address)'. Возвращает "0" или "1", либо код ошибки.

Переделал функцию 'findimage'. В качестве типа поиска принимает адрес из функции 'GetImage'. Координаты в функции 'findimage' указываются относительно части экрана, сохраненной в функции 'GetImage', но возвращаются относительно привязанного окна\экрана.
set %a GetImage ( 100 100 1000 1000 )
set #v %a [1 1]
set $a findimage ( 51 51 1403 1403 (C:\test.bmp) %arr #v 80 1)
set $b DeleteImage ( %a [1 1] )

Отключил по-умолчанию галочку "Возвращать курсор мыши после кликов".

Вынес 'findcolor' из потока пилота, теперь оно меньше подтормаживает сам пилот.

Исправил функцию 'findwindow'. Ничего не находила при нажатых клавишах "Alt+Tab".

Команду 'Exec' переделал по типу 'ExecAndWait'. Теперь переменная 'errorlevel' содержит PID запущенного процесса.

Добавил возможность задавать зарезервированные переменные, читаемые из памяти клиента. Имя переменной и цепочка адресов задается в файле конфигурации, в секции "[CustomVariables]" в формате "имя=адрес,тип читаемых данных;прибавляемое значение,тип читаемых данных;".
Пример: wow=0xB4B2BC,d;0x65B8,d;0x40,f;
Скрипт: set wow wow + 1

Добавил описание изменений "ночной сборки" во встроенную справу в пилоте.

Добавил функцию загрузки изображения из файла 'LoadImage (filename)'. Возвращает строку в виде "Адрес в памяти|Ширина|Высота|Длина строки в байтах/", либо код ошибки.

Добавил в функцию 'findimage' поиск изображений загруженных в память, при указании адреса в памяти вместо пути к файлу.

Добавил присваивание строке массива строки вида '3|7/3|8/4|7/4|8/'.

Добавил функцию сохранения изображения в файл 'SaveImage (Address filename)'. Поддерживаются форматы ".bmp", ".jpg", ".png" (определяется по расширению).

Исправил ошибку в разборе строки диапазонов цветов, указанных в 'findcolor', когда лишние пробелы вокруг "-" приводили к недопониманию.

Исправил вычисления с отрицательными числами.

Исправил присваивание строковых переменных в параллельных скриптах, при указании индекса скрипта переменной.

Исправил команду 'sort_array', сломанную после 2.38.

После выполнения команды 'Exec' переменная 'errorlevel' содержит PID запущенного процесса либо код ошибки.

Добавил команды блокировки функций клавиатуры и мыши: 'keyboard <enable|disable>', 'mouse <enable|disable>'. Команды эмуляции 'sendex' и 'kleft' также блокируются, 'send' и 'left' работают.

Добавил функцию 'GetFocus', возвращает хэндл окна, имеющего фокус ввода.

Добавил горячую клавишу для разблокировки функций клавиатуры и мыши, заблокированных командами 'keyboard disable', 'mouse disable'. По-умолчанию "Alt+Home".

Добавил поддержку '.lnk' в команды 'Exec' и 'ExecAndWait'.

Исправил команды 'Exec' и 'ExecAndWait' на предмет ошибки 267. Актуально для файлов '.com', '.exe', '.cmd', '.bat', '.lnk'.

Исправил ошибку в команде 'set %arr findwindow (caption)', возникающую при наличии в найденных "caption" символов '|' и '/'.

Исправил 'break' при использовании вложенных 'switch'.

Прикрутил корявенький поиск на форму Wiki.

Исправил ошибку, возникающую при отсутствии пробела перед скобкой в команде 'prompt'.

Добавил возможность переходить по ссылкам с Wiki справки. Открываются в браузере.

Исправил ошибку, возникающую при отсутствии пробела перед скобкой после имени команды.

Исправил параметр '#result' в команде 'get windowpos'.

Исправил размер и цвет шрифта "по-умолчанию" в команде 'hint'.

Если в команде 'writemem' значение для записи заключено в кавычки, то кавычки удаляются.

Добавил возможность "Сохранить настройки как..." и "Загрузить настройки...".

Добавил чтение содержимого бакпака для клиента UO версии 2.0.3, с помощью функции 'set %arr backpack'. Сохраняет в массив по столбцам "ID", "itemType", "count", "color", "posX", "posY".

Поменял местами 'lengthdir_x' и 'lengthdir_y', были перепутаны.

Исправил задание адресов для "War\Hidden", "AlwaysRun", "ConsoleUnicodeText" при выборе "Custom Client".

Добавил "Backpack" в "Custom Client".

Добавил возможность выполнения скриптов "Lua". Пока только версии 5.1, 5.2.
Признаком того, что скрипт на языке луа, является "--lua" в первой строке скрипта.
Скрипт пилотом не обрабатывается, а передается сразу интерпретатору Lua.
По завершении выполнения скрипт не перезапускается сначала, т.е. выполняется однократно.
Для многократного выполнения используйте циклы\операторы перехода.
В Lua отсутствует нормальная возможность прервать выполнения скрипта из вне.
Поэтому, при остановке скрипта пилотом, глобальная переменная "terminate" устанавливается в "true".
И ее необходимо проверять с вкрипте Lua.
Кроме того, после установки "terminate" в "true", все вызываемые функции пилота игнорируюся.
Из скрипта Lua доступны некоторые переменные пилота, доступные для изменения: 'workwindow', 'delimiter', 'clickoffsetx', 'clickoffsety', 'findoffsetx', 'findoffsety', 'sendexdelay', 'mouseclickdelay', 'promptpos_x', 'promptpos_y'.
И несколько доступных только для чтения: 'errorlevel', 'terminated', 'current_script', 'workwindowpid', 'homepath', 'exefilename'.
Остальные переменные вызываются как функции 'windowhandle()'. Т.е. наличие скобок обязательно.
Параметры всех функций заключаются в скобки, даже если в синтаксисе пилота они скобок не имеют.
Все текстовые строки заключаются в двойные кавычки 'sendex ("test")'.
Возвращаемые значения некоторых функций слегка изменены, например 'findwindow' всегда возвращает массив.
--lua
while terminated ~= true do
as3 = findwindow ("Блокнот")
log (as3[1][1], as3[1][2])
wait (1500)
end

Добавил возможность закомментировать строку нажатием ЛКМ по её номеру, и раскомментировать повторным нажатием ЛКМ по номеру.

Подправил вычисления с большими числами.

Добавил функции для работы с датой и временем. "Date", "Date1", "Date2" может быть датой и\или временем, или таймштампом. Дату или время следует указывать полностью. "Years", "Months", "Days", "Hours", "Minutes", "Seconds" обычное число. Все функции сложения и вычитания возвращают таймштамп.
AddDate(Date1 Date2) : складывает даты;
AddYears(Date Years) : добавляет несколько лет;
AddMonths(Date Months) : добавляет несколько месяцев;
AddDays(Date Days) : добавляет несколько дней;
AddHours(Date Hours) : добавляет несколько часов;
AddMinutes(Date Minutes) : добавляет несколько минут;
AddSeconds(Date Seconds) : добавляет несколько секунд;
SubDate(Date1 Date2) : вычитает даты;
SubYears(Date Years) : вычитает несколько лет;
SubMonths(Date Months) : вычитает несколько месяцев;
SubDays(Date Days) : вычитает несколько дней;
SubHours(Date Hours) : вычитает несколько часов;
SubMinutes(Date Minutes) : вычитает несколько минут;
SubSeconds(Date Seconds) : вычитает несколько секунд;
YearFromDate(Date) : Возвращает год;
MonthFromDate(Date) : Возвращает месяц;
DayFromDate(Date) : Возвращает день;
HourFromDate(Date) : Возвращает часы;
MinuteFromDate(Date) : Возвращает минуты;
SecondFromDate(Date) : Возвращает секунды;
DateNow: возвращает текущую дату 29.11.2016;
TimeNow: возвращает текущее время 10:30:25;
TimeStamp (Date): преобразует таймштамп в человеческий вид и обратно.

В форматирование добавил форматирование цикла 'repeat'.

Исправил ошибку в функциях 'minx' и 'maxx', возникающую, если в имени массива есть заглавные не английские буквы.

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




http://uopilot.uokit.com/old/dl239.php

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

http://uopilot.uokit.com/dlAntiFrost.php
http://uopilot.uokit.com/dlAntiGate.php
пароль на архивы: uopilot.uokit.com

Автор: DarkMaster 10.3.2017, 0:01

Ура! Дождались! Кнайт... только сейчас боюсь надо будет много хотфиксов по луа...

Таймштамп текущего момента как получить?

Автор: Cockney 10.3.2017, 0:21

Чудо

Добавить возможность комментить блок кода путем выделения строк + нажатие на любой номер строки выделенного блока.


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

Автор: cirus 10.3.2017, 3:23

Код
move_smooth 100 100
move_smooth 101 100
end_script

В меню ПКМ post не активно.
Прикрепленное изображение
Добавить в меню ПКМ:
GetImage и прочее.
GetFocus.
Функции для работы с датой и временем.
keyboard <enable|disable> и mouse <enable|disable>


Автор: DarkMaster 10.3.2017, 6:04

Цитата
Чудо

Потому что кнайт приколист. lua.dll скачайте сами. Ну собственно либо скачайте сами, либо "баааабушка"(ералаш).

Кстати к моему удивлению твой скрипт нормально отработал. Я думал log() тебя обматерит за то, что ты передаешь в него несколько параметров либо просто проигнорирует втрое значение, ан нет - сожрал. Я предполагал, что в данном случае будет правильной конструкция:
log(as3[1][1] .. as3[1][2])
Тем не менее форматирование различалось и в твоем варианте присутствовал пробел, что может быть, как удобно, так не очень.
Выводы:
528124 Безымянный — Блокнот // Твой
528124Безымянный — Блокнот // Мой

Автор: WKnight 10.3.2017, 9:07

Там в принципе много фиксов надо, так что особой разницы нет.

TimeStamp (DateNow TimeNow)

post сейчас временно отключена, можно конечно совсем убрать, просто надеялся быстро закончить.
Много надо и в меню добавлять и в подсветку. Както совсем забыл про это.
Впрочем как и про длл. Добавил ссылку.

log примет до 20 параметров. При слиянии разделяются пробелом.

Автор: FREEON 10.3.2017, 11:00

Ого новую версию запилили, так-то еще старую до конца не изучил smile.gif laugh.gif

Автор: cirus 10.3.2017, 11:58

Напишите что lua.dll должен быть рядом с exe пилота, а то я по привычке как плагин закинул в папку плагины, а оно не работает smile.gif
Пример с поиском блокнота не самый удачный. Если блокнот не открыт, то будет ошибка.

Автор: Cockney 10.3.2017, 12:16

Теперь результат каждой функции нужно проверять. Примерно так :

Код
while terminated ~= true do
as3 = findwindow ("Блокнот")
if (#as3 ~= 0) then
    log (as3[1][1], as3[1][2])
else
    log ("Не найдено")
end
wait (1500)
end

Автор: DarkMaster 11.3.2017, 1:02

os.clock() не ресетится после остановки скрипта. Я так понимаю там что-то не завершается до конца и продолжает работать.

Автор: DarkMaster 11.3.2017, 1:39

Цитата
Теперь результат каждой функции нужно проверять. Примерно так :

Ты пытаешься получить доступ к несуществующему элементу массива. На мой взгляд это вполне логично, что ты при этом получаешь вылет скрипта. Едва ли продолжение работы при этом привело к хоть сколько-то хорошим результатам. Да возможно отвалилась бы какая-то не очень существенная часть программы или было удобнее заниматься отладкой, но имхо это не так критично. В том же пилоте из-за его прозрачных проверок и обходов пустоты иногда приходилось вылавливать причину, которая оказывалась как раз в сглаживании углов. Мне пожалуй больше привычен все-таки пилотовский вариант, но едва ли он правильнее или лучше.

Автор: cirus 14.3.2017, 11:38

Код
exec wscript C:\Users\abc\Desktop\123.vbs
end_script

В 2.38 работает. В этой версии нет.

Автор: cirus 18.3.2017, 3:26

Запуск макроса из скрипта грузит ядро на 100%.

Код
macro_play
end_script

При этом, тот же макрос, запущенный с горячей клавиши или Макрос --> Воспроизвести, вообще не грузит проц. В 2.38 тоже самое.

Автор: DarkMaster 18.3.2017, 16:28

Код
log size(%tmp2)
set %tmp %tmp2
log size(%tmp)
end_script

(autosaved_0.txt, 0): 0
(autosaved_0.txt, 2): 1

ппц сколько я это ловил...

Автор: WKnight 18.3.2017, 20:25

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

Автор: WKnight 20.3.2017, 19:51

night version, 20.03.2017 Build 001

Исправил присвоение переменной 'workwindow' при запуске скрипта Lua.

Исправил ошибку, возникающую при выполнении скрипта Lua, после остановки его пилотом.

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

Автор: Cockney 20.3.2017, 22:44

Цитата(WKnight @ 20.3.2017, 19:51) *

night version, 20.03.2017 Build 001
Добавил возможность комментировать блок кода путем выделения строк, проводя мышкой по номерам строк.



А если нужен коммент на 400 строк ? Просто бы кликнуть по полю с номерами строк, и весь выделенный блок или коммент или наоборот.

Автор: WKnight 20.3.2017, 22:56

Когда кликаешь по полю с номерами строк, выделение с текста снимается.

Автор: Cockney 20.3.2017, 22:57

А горячую клавишу можно ? Желательно настраиваемую.

Автор: WKnight 20.3.2017, 23:00

Сам хочу. В ближайших планах.

Автор: Cockney 20.3.2017, 23:26

Как вариант, может доп., клик пкм -> комментировать/раскомментировать

Автор: cirus 21.3.2017, 3:21

Ещё бы как-то сделать комментирование для lua.

Цитата
Исправил ошибку, возникающую при выполнении скрипта Lua, после остановки его пилотом.

Ошибки нет, но остановка скрипта и вот:
Прикрепленное изображение

Автор: DarkMaster 21.3.2017, 7:03

а что с финдами то? как их использовать?

Автор: cirus 21.3.2017, 11:27

Цитата
а что с финдами то? как их использовать?

Вообще они работают, только массив не создаётся:
Код
--lua
a = findcolor("0 0 1920 1080 (4638935) %arr")
hint (a)


Может их переделать по типу findwindow? Чтобы результат сразу возвращался в массив. Код ошибки записывать в errorlevel.
Код
arr = findcolor("0 0 1920 1080 (255) 2 -1 3")
#arr - количество цветов/картинок


Автор: DarkMaster 21.3.2017, 13:40

под луа я бы вообще возвращал это чудо в 2 переменные. Точнее в переменную и массив:
local size, arr = find....
ну и в массив уже бы писал все точности совпадения, координаты и прочее. Т.к. исторически $a приводила к проблемам и приходилось в итоге все равно использовать size(%arr). Много проблем бы решили.

Автор: WKnight 21.3.2017, 20:07

Цитата
Ошибки нет, но остановка скрипта и вот:

Так ты из скрипта не вышел, оно и продолжает пытаться вызывать функции пилота.
Проверять надо и выходить из скрипта луа
while terminated == false do
end
Более другого способа пока не найдено.

Автор: DarkMaster 21.3.2017, 20:09

Цитата
Более другого способа пока не найдено.

Почему не грохать машину?

Автор: WKnight 21.3.2017, 20:33

Не помню, там что-то про нестабильность было.

Автор: WKnight 21.3.2017, 21:19

Нашел способ как прервать не прибивая. В следующей бете будет.

Автор: cirus 22.3.2017, 2:49

Горячую клавишу разблокировки мыши/клавы поставь включенной изначально.

Автор: DarkMaster 25.3.2017, 23:47

сделать поле/столбец/формочку между номером строки и кодом. При нажатии на нее каретка будет переводится в начало строки. Я уже просто зае*ался случайно ставить/убирать комменты.

Автор: cirus 26.3.2017, 1:48

И заодно какую-нибудь галку, отвечающую за тип комментария (// или --).

Автор: WKnight 26.3.2017, 18:38

Цитата
тип комментария (// или --)
Сейчас оно ищет "--lua" в первой строке скрипта, и если находит, то коментирует в стиле луа "--". Галку точно надо?

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

Код
--lua
//a = 1

Это вызывает ошибку. Если можно будет комментировать через //, то галка может и не нужна.


Автор: WKnight 26.3.2017, 19:30

Недопонял, зачем в луа скрипте коментарии в стиле пилота?

Автор: cirus 26.3.2017, 19:42

Для этого и предлагал сделать галку или ещё что-то. Чтобы нажимая на номер строки ставился комментарий в стиле луа, а не пилота.
Если уж совсем по простому. Галка стоит - ставится комментарий --, галка не стоит - ставится //.

Автор: WKnight 26.3.2017, 20:03

Цитата
Чтобы нажимая на номер строки ставился комментарий в стиле луа, а не пилота.
Цитата
оно ищет "--lua" в первой строке скрипта, и если находит, то коментирует в стиле луа "--".
Имелось ввиду, что в следующей бете уже сделано так.

Автор: cirus 26.3.2017, 20:12

Понял. Нормально.

Автор: cirus 8.4.2017, 19:34

Код
log DateNow  TimeNow      // так работают

set #time AddHours (10:00:00 3)
log TimeStamp (#time) DateNow  TimeNow    // DateNow  TimeNow не работают
end_script

Автор: Cockney 17.5.2017, 14:04

Где бетки то ?

Автор: WKnight 18.5.2017, 18:10

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

Автор: dron4938 21.5.2017, 22:55

Цитата(WKnight @ 18.5.2017, 19:10) *

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

Изображение

Автор: WKnight 22.5.2017, 20:20

Пасиб, освежает wink.gif

Автор: WKnight 22.5.2017, 22:31

build 2
Добавил возможность комментировать блок кода в скриптах Lua.
Исправил принудительную остановку скрипта Lua. Теперь не требуется проверять переменную 'terminate'.
Исправил сохранение изображения в файл в функции 'SaveImage', при указании неправильного адреса. Добавил код ошибки '-7' - не нашли указанное изображение.
Исправил возврат массива в Lua, функциями 'findcolor' и 'findimage'.
Исправил округление до 2х знаков, возвращаемых из Lua, дробных чисел.
Добавил в настройки возможность включить коментирование в скрипте по клику мышкой на номере строки, и выделении нескольких строк по их номерам. По-умолчанию отключено.


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

Цитата
Исправил возврат массива в Lua, функциями 'findcolor' и 'findimage'.

Примерчик бы увидеть, как оно теперь выглядит.

Автор: WKnight 23.5.2017, 20:41

Примерно так

--lua
a = findcolor("0 0 1920 1080 (255) %arr")
log (a)
log (arr[1][1],arr[1][2],arr[1][3])

build 3
Исправил возврат массива в Lua, функциями 'findcolor' и 'findimage'.

Кстати более-менее нормально работает только на луа 5.1...

Автор: DarkMaster 23.5.2017, 20:48

Цитата
Кстати более-менее нормально работает только на луа 5.1...

Есть мнение, что этого достаточно. В частности читал, что 5.2 намного более тормозной. При загрузке плагинов и прочей хрени 5.1 до сих пор самые распространенные закачки. Эталон так сказать...

Автор: cirus 24.5.2017, 11:04

Код
set %arr [1 1]
set %arr [1 2] 11
set %arr [1 3] 22
set %arr [2 2] 33

//save_array %arr C:\arr.txt
set %tmp minx(%arr)
log size(%arr[])   size(%tmp[])
//save_array %tmp C:\tmp.txt
end_script

Если в первом столбце отсутствуют значения, то minx/maxx возвращают результат не с первого столбца, а со второго. Т. е. со смещением на 1 столбец.

Автор: Cockney 28.5.2017, 0:24

Что за костыль ?

Код
a = findcolor("0 0 1920 1080 (255) %arr")


Разве луа не понимает множество параметров ?

Автор: cirus 29.5.2017, 0:36

Исправить тип данных, которые возвращают функции пилота. Убрать признак пилотовских массивов %.

Код
--lua
a = findcolor("100 100 100 100 (0-16777215) %arr")
log (type(a), type(arr[1][1]))

Цитата
Что за костыль ?

Всё равно в том же findimage путь придётся указывать в кавычках.
В findcolor от 6 до 12 параметров, т. е. от 5 до 11 запятых. Мне проще 2 кавычки поставить.

Автор: DarkMaster 29.5.2017, 2:45

Цитата
Мне проще 2 кавычки поставить.

По факту это приводит к излишнему парсингу и привидению типов. Так же это делает неудобной работу с переменными.

Автор: Рудауда 29.5.2017, 21:29

Прошу помощи!
написал простенький скриптик для посадки семечек диаметром 63х63 пиксиля, но при попытке запуска с привязкой окна ArcheAge лог выдает ошибку (Клиент мертв), в чем может быть проблема? ( может Game Guard блочит?)

Скриптик:

set #startX 231
set #startY 457
set #str 0

:metka1
if (#str = 50)
stop_script // Остановить скрипт
else
Send 1 //нажать клавишу '1'
kleft #startX #startY // Клик левой клавиши мыши по координатам в переменных
Wait 3000
set #startX #startX + 64
if (#startX >= 999)
send_down w 3000 // пройти немного вперед
send_up w
set #startX 231
set #str #str + 1
goto metka1
end_if
end_if

Автор: dron4938 29.5.2017, 21:37

Цитата(Рудауда @ 29.5.2017, 22:29) *

ArcheAge лог выдает ошибку (Клиент мертв)

Правильно выдает laugh.gif

Автор: Рудауда 29.5.2017, 22:34

Цитата(dron4938 @ 29.5.2017, 21:37) *

Правильно выдает laugh.gif


Так то оно так, но хотелось бы, что бы заработало )

Автор: dron4938 29.5.2017, 22:53

Цитата(Рудауда @ 29.5.2017, 23:34) *

Так то оно так, но хотелось бы, что бы заработало )

Так ты сначала проверь простой скрипт какой-нить, работает или нет, типа:
Код
set #handle FindWindow ("ArcheAge") // ищем окно ArcheAge
set workwindow #handle // делаем найденное окно рабочим
showwindow #handle // выставляем рабочее окно на передний план
if  #handle = 0
    hint (24 clRed 400, 400  (Окно ArcheAge не найдено))
    end_script
end_if
:aaa
send 1 // нажимаем 1
wait 1s // ждем 1 секунду
goto aaa // возвращаемся на цикл ааа


Как вообще можно написать скрипт с передвижениями персонажа по зажатой кнопке и при этом ни разу не протестировав действие)

Автор: Рудауда 29.5.2017, 23:09

Цитата(dron4938 @ 29.5.2017, 22:53) *

Так ты сначала проверь простой скрипт какой-нить, работает или нет, типа:
Код
set #handle FindWindow ("ArcheAge") // ищем окно ArcheAge
set workwindow #handle // делаем найденное окно рабочим
showwindow #handle // выставляем рабочее окно на передний план
if  #handle = 0
    hint (24 clRed 400, 400  (Окно ArcheAge не найдено))
    end_script
end_if
:aaa
send 1 // нажимаем 1
wait 1s // ждем 1 секунду
goto aaa // возвращаемся на цикл ааа


Как вообще можно написать скрипт с передвижениями персонажа по зажатой кнопке и при этом ни разу не протестировав действие)


проверял на других программах, ок, только в АА не пашет.
С твоим скриптом ошибка та же : 23:08:35 2 (autosaved_2.txt, 0): set - Клиент мертв...

Автор: dron4938 29.5.2017, 23:14

Цитата(Рудауда @ 30.5.2017, 0:09) *

проверял на других программах, ок, только в АА не пашет.
С твоим скриптом ошибка та же : 23:08:35 2 (autosaved_2.txt, 0): set - Клиент мертв...

https://forum.uokit.com/index.php?showtopic=21749
почитай тут

Автор: Cockney 3.6.2017, 13:56

А миксинг луа кода с пилотовским будет ?

Если --lua обозначает начало луа скрипта, то --endlua соответственно....

Автор: DarkMaster 5.6.2017, 19:01

Цитата
А миксинг луа кода с пилотовским будет ?

А смысл? Я бы настоятельно рекомендовал переходить на луа.

Автор: Cockney 5.6.2017, 21:21

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

Автор: DarkMaster 5.6.2017, 23:25

Цитата
Если планируется вообще отказаться от пилотного языка

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

Автор: Cockney 6.6.2017, 0:44

Проблемы с натяжкой :
1)--lua
2)качать длл
3)если оставить пилотовский, то его продолжат использовать. Т.е. , потенциально остануться вопросы на форуме аля 'че не работает 2 + 2' и 'pilot -> lua'.

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

Цитата
build 3
Исправил возврат массива в Lua, функциями 'findcolor' и 'findimage'.

Код
a = findimage("0 0 1920 1080 (C:\Users\abc\Desktop\1.bmp) %arr")
hint (a)

Выдает -4.



Автор: veiron 6.6.2017, 9:51

есть где хэлп как пользоваться луа почитать? А то скачал длл, положил рядом с пилотом. добавил скрипт

Код
--lua
a = findcolor("0 0 1920 1080 (4638935) %arr")
hint (a)

и в лог пишет неопознанная команда --lua

Автор: cirus 6.6.2017, 12:17

Цитата
--lua

Должно быть в 0 строке скрипта.
Версия пилота 2.39?
После запуска пилота, если открыть лог, в нём есть?: Lua 5.1 загружен.

Автор: veiron 6.6.2017, 12:28

Цитата(cirus @ 6.6.2017, 12:17) *

Должно быть в 0 строке скрипта.
Версия пилота 2.39?
После запуска пилота, если открыть лог, в нём есть?: Lua 5.1 загружен.

находится в 0 строке, что луа загружен в логе нет

Автор: cirus 6.6.2017, 12:34

Вопрос конечно идиотский, но всякое бывает. Надеюсь dll рядом с exe пилота, а не ярлыком пилота?

Автор: veiron 6.6.2017, 12:51

Цитата(cirus @ 6.6.2017, 12:34) *

Вопрос конечно идиотский, но всякое бывает. Надеюсь dll рядом с exe пилота, а не ярлыком пилота?

нет, dll с exe рядом, правда версия 2.38.1 b039. скачал 2.39, заработал. Можете подсказать где почитать как для луа скрипты писать?

Автор: cirus 6.6.2017, 13:56

Цитата
Можете подсказать где почитать как для луа скрипты писать?

Скрипты пишутся также. Просто синтаксис другой.
несколько примеров
Код
    -- Пример 1
    -- Равенство/неравенство: a == b, a ~= b
a = 1   -- присвоить переменной a число 1
b = 2   -- присвоить переменной b число 1
if a == b then
    log ("a равно b")
else
    log ("a не равно b")
end

    -- Пример 2
for i = 1, 5 do
    log (i)
end

    -- Пример 3
move (100, 150)   -- переместить курсор

    -- Пример 4
a = 300
b = 100
kleft (a, b)     -- сделать клик

    -- Пример 5
send ("q")      -- нажать клавишу q

    -- Пример 6
str = "строки заключаются в кавычки"    -- или одинарные кавычки 'текст'
log (str)

Можно тут почитать: https://gcup.ru/publ/programming/lua_tutorial_dlja_nachinajushhikh/8-1-0-623, https://gcup.ru/publ/programming/lua_tutorial_dlja_nachinajushhikh_chast_2/8-1-0-624, https://gcup.ru/publ/programming/lua_tutorial_dlja_nachinajushhikh_chast_3/8-1-0-625, https://gcup.ru/publ/programming/lua_tutorial_dlja_nachinajushhikh_chast_4/8-1-0-626

Автор: veiron 6.6.2017, 14:54

спасибо. а что луа лучше и быстрее чем пилот?

Автор: cirus 6.6.2017, 15:29

Цитата
а что луа лучше и быстрее чем пилот?

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

Автор: veiron 6.6.2017, 16:58

Цитата(cirus @ 6.6.2017, 15:29) *

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

Тогда мне нет смысла перехода на луа, мне надо проверка цвета, поиск картинок и клики.

Автор: pet 27.6.2017, 23:33

Цитата
Добавил чтение содержимого бакпака для клиента UO версии 2.0.3, с помощью функции 'set %arr backpack'. Сохраняет в массив по столбцам "ID", "itemType", "count", "color", "posX", "posY".

Координаты предметов возвращаются относительно бэкпака. А как получить координаты самого бекпака?

Автор: WKnight 28.6.2017, 19:42

build 5
Подправил запуск скриптов при зажатии горячей клавиши.

Добавил переменные, возвращающие координаты самого бекпака для клиента UO версии 2.0.3 'backpackposx' и 'backpackposy'.
Возможно они даже работают, возможно даже для записи. Проверить негде.

Автор: pet 29.6.2017, 19:20

Цитата
Добавил переменные, возвращающие координаты самого бекпака для клиента UO версии 2.0.3 'backpackposx' и 'backpackposy'.
Возможно они даже работают, возможно даже для записи. Проверить негде.

С удовольствием проверю:) Где взять последний билд?

Автор: Cockney 29.6.2017, 21:32

Цитата(pet @ 29.6.2017, 19:20) *

Где взять последний билд?




http://uopilot.uokit.com/

Автор: pet 29.6.2017, 22:31

Цитата(Cockney @ 29.6.2017, 21:32) *

http://uopilot.uokit.com/


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

Автор: WKnight 30.6.2017, 0:23

А можно этот набор в студию?

Автор: pet 30.6.2017, 8:54

Цитата
А можно этот набор в студию?


Наборы поменялись. Вчера другие цифры были.
backpackposx: 1108294093
backpackposy: 1177567759

Автор: pet 4.7.2017, 23:50

Скажите, а сборщика мусора во встроенном Lua нет? Планируется ли или он не работает?

Первый запуск

Код
--lua
function foo()
    local a = 2
end


foo()
log(a) -- Возвращает ошибку: не найдена глобальная переменная


Второй запуск, объявляем глобальную переменную 'а'
Код
--lua
function foo()
    local a = 2
end

a=10
foo()
log(a) -- Возвращает 10


Третий запуск, удаляем глобальную переменную 'а'
Код
--lua
function foo()
    local a = 2
end

foo()
log(a) -- !!Возвращает 10


По всей видимости, продолжает ссылаться на область в памяти, где храниться значение, поэтому его отображает. Можно принудительно присваивать nil, ненужным переменным, или просто не использовать одинаковые имена переменных. Но можно много ошибок так наплодить, особенно если есть привычка присваивать счетчикам в циклах имена i, j, k

Почему-то не работают переменные Ultima в Lua - глобальная переменная не найдена. Пишу со скобками в конце.

Автор: Cockney 5.7.2017, 11:55

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

Другой вариант - сборщик отключен, пока есть доступная память для машины. Вот когда забьются 2ГБ +-, тогда он и включится. Т.е. никогда в большинстве случаев.

Автор: cirus 16.7.2017, 12:09

Цитата
Добавил возможность закомментировать строку нажатием ЛКМ по её номеру, и раскомментировать повторным нажатием ЛКМ по номеру.

Комментарии поставленные таким способом не сохраняются в редакторе при выходе из пилота. Точнее сохраняются только первый раз.
Открываем новую вкладку, пишем:
Код
--lua
log ()

Комментируем строку log () нажатием на номер строки. Закрываем пилот, запускаем его. Всё нормально.
Убираем комментарий строки log () нажатием на номер строки. Закрываем пилот, запускаем его. Строка осталась закомментированна.

Автор: WKnight 16.7.2017, 18:09

Fixed.
Бетку попозже выложу.

Автор: cirus 16.7.2017, 18:41

Что на счёт команд clipboard, windpos, т. е. тех что начинались с set/get?
А также: load/save_array, hint (с параметрами)?
Ещё GetImage и LoadImage надо подправить чтобы возвращали результат не строкой, а массивом или отдельными параметрами. Что вроде:

Код
arr = getimage(100, 100, 200, 200) 
arr[1] - адрес    arr[2] - ширина    arr[3] - высота
или
address, width, height, size = getimage(100, 100, 200, 200)

Меню ПКМ тоже будет меняться в зависимости от наличия строки --lua?

Автор: WKnight 16.7.2017, 21:31

Цитата
Что на счёт команд ...
Пилить надо... Но сейчас со временем напряг, как обычно.
Цитата
Меню ПКМ тоже будет меняться в зависимости от наличия строки --lua?
Как то не думалось даже об этом. Добавлю в планы.

Автор: cirus 18.7.2017, 12:31

На счёт синтаксиса findimage и findcolor в луа. Скобки, в которых указываются путь или цвет, по идее можно убрать. В findcolor передавать массив с цветами, т. к. если указывать больше 1 цвета, то придётся заключать их в кавычки, т. е. переменными цвета не задать.

Код
findimage(startx, starty, endx, endy, filename, resultarray) 
findcolor(startx, starty, endx, endy, color, resultarray)   -- 1 цвет без шага
findcolor(startx, starty, endx, endy, shiftx, shifty, color, resultarray)   -- 1 цвет с шагом

arr_color = {color1, color2, color3, "color4-color5", "R(11)+G(73-80)+B(1)"}   -- массив с цветами
resultarray = {}
findcolor(startx, starty, endx, endy, arr_color, resultarray)         -- без шага
findcolor(startx, starty, endx, endy, shiftx, shifty, arr_color, resultarray)   -- с шагом

Автор: WKnight 19.7.2017, 18:52

Сейчас синтаксис в луа максимально приближен к пилотовскому, чтобы проще было парсить, потому как делалось всё оптом, а не каждая функция в отдельности.
Много чего нужно допиливать, сейчас как бы тестовый вариант, чтоб узнать работает оно вообще или нет. Почти все предложения записываются в todo и ковыряются по мере возможности.

У findimage и findcolor в луа можно указывать до 20 параметров, поэтому скобки можно указать отдельно, а то что должно быть внутри них - переменными.


Автор: DarkMaster 15.8.2017, 10:32

Цитата
Скажите, а сборщика мусора во встроенном Lua нет? Планируется ли или он не работает?

Есть. Работает самостоятельно. Можно вызвать вручную.
Цитата
Функции сборщика мусора

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

collectgarbage("collect") - Работает один полный цикл сборки мусора.

collectgarbage("count") - Возвращает объем памяти , используемой в настоящий момент программой в килобайтах.

collectgarbage("restart") - Если сборщик мусора был остановлен, он перезапускает его.

collectgarbage("setpause") - Устанавливает значение , заданное в качестве второго параметра , деленная на 100 для переменной паузы сборщика мусора. Его применение, как описано чуть выше.

collectgarbage("setstepmul") - Устанавливает значение , заданное в качестве второго параметра , деленная на 100 переменной мусора шаг множителя. Его применение, как описано чуть выше.

collectgarbage("step") - Выполняет один шаг сборки мусора. Чем больше второй аргумент, тем больше этот шаг будет. Collectgarbage возвращает истину, если срабатывает шаг был последний шаг цикла сборки мусора.

collectgarbage("stop") - останавливает сборщик мусора , если его ход.

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

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

Цитата
Другой вариант - сборщик отключен, пока есть доступная память для машины. Вот когда забьются 2ГБ +-, тогда он и включится. Т.е. никогда в большинстве случаев.

Там несколько хитрее он работает. Там на каждый такт выделения памяти указывается сколько тактов памяти он пытается освободить и шаг при котором он это делает. По дефолту шаг не помню, но что-то в пределах разумного (30-200%).

Автор: cirus 3.9.2017, 15:39

Код
log clear
log current_script    active_script     // всё нормально
log active_script     current_script    // а так в логе только одно значение
end_script

Код
--lua
a = active_script ()    -- со скобками
b = current_script     -- без скобок
log (a)
log (b)

Может сделать чтобы было одинаково.

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

build 6

Исправил сохранение скриптов при комментировании строк нажатием ЛКМ по их номерам.

Добавил в конфигурационный файл возможность указать имя загружаемой библиотеки Lua.

Сделал перезапуск виртуальной машины Lua при перезапуске скрипта.

Добавил в скрипты Lua команду "end_script ()".

Автор: DarkMaster 6.9.2017, 12:46

Цитата
Сделал перезапуск виртуальной машины Lua при перезапуске скрипта.

Для каждой вкладки свой экземпляр машины?

Автор: WKnight 6.9.2017, 12:56

Да, так вроде изначально было.

Автор: WKnight 6.9.2017, 13:12

build 7

При вызове из Lua, команды 'getimage' и 'loadimage' возвращают только "Адрес в памяти" или код ошибки.

Автор: cirus 6.9.2017, 15:45

В 2.39 (не бета).

Код
set %get [1] LoadImage (test.bmp)   // картинка 10*10
set %image [1] LoadImage (image.bmp)    // ищем 5*5
set #a Findimage(0 0 1 9 (%image [1 1]) %arr %get [1 1] 100)
log #a   // т. е. картинка шириной в 5 пикселей найдена в области 0-1 по X.
set #a Findimage(0 0 10 8 (%image [1 1]) %arr %get [1 1] 100)
log #a   // не найдена
end_script

Прикрепленный файл  test.bmp ( 376 байт ) Кол-во скачиваний: 226

Прикрепленный файл  image.bmp ( 136 байт ) Кол-во скачиваний: 234

Автор: DarkMaster 6.9.2017, 18:25

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

Автор: cirus 7.9.2017, 3:37

Цитата
build 7

А где оно? По ссылке обычная 2.39.

Автор: pet 7.9.2017, 10:20

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

Автор: DarkMaster 11.9.2017, 2:07

return вызванный из for приводит к ошибке при попытке входа в цикл for. Кусок кода не привожу, т.к. не локализовывал, а вложенность вызовов и подпрограмм очень большая. Между выходом по return и ошибкой ~ 2500 строк лога.

Автор: WKnight 11.9.2017, 20:41

Цитата
А где оно?

Это типа "ночная" сборка. Ссылка на пару строк ниже релизной

night version, 07.09.2017 Build 008
Последняя, на данный момент, скомпилированная версия. Обычно работает.

build 9

Изменен синтаксис команды 'dir' при вызове из Lua. 'resultarray = dir ([Path [Filemask]])'

Изменен синтаксис команды 'regexp' при вызове из Lua. 'position, hitstring, errorcode = regexp (<string>, <regexp>)'

Добавил возможность вывода дерева каталогов без рекурсии, с помощью соответствующего ключевого слова 'dir (%dir path file [norecursion])'.

Добавил возврат количества найденных элементов в команде 'dir' при вызове из Lua. 'resultarray, count = dir ([Path [Filemask]] [norecursion])'

Автор: WKnight 11.9.2017, 21:19

build 10

Исправил ошибку, возникающую при прерывании циклов 'for' и 'repeat' по команде 'return'.

Автор: DarkMaster 12.9.2017, 0:17

Цитата
build 10

Падает при остановке скрипта.

Автор: WKnight 12.9.2017, 18:36

А скрипт на чем? На любых командах или есть зависимость? И появилось с какого билда?

Автор: DarkMaster 13.9.2017, 2:31

c 10 билда, на луа. Проявилось при dir(c:\\). Остановил ибо на долго, но дир тут вряд ли причина, т.к. падает и на других луа скриптах без дира.

Автор: cirus 13.9.2017, 4:01

10 beta.

Код
--lua
for i = 1, 10 do
    move (100, 100)
    wait (500)
end

Остановка скрипта через Ctrl+Alt+End закроет пилот. В 8 beta всё нормально. 9 у меня нет.

Автор: cirus 27.9.2017, 2:59

Что-то новенькое.
Прикрепленное изображение

Автор: cirus 7.10.2017, 18:34

Прикрепленное изображение
Прикрепленное изображение
Скрин 1: ищем число 38782 в виде картинки, получаем координаты 30 1000. Всё нормально.
Скрин 2: ищем число 38782 в виде картинки, но меняем endY с 1080 на 1079, получаем координаты 30 999.

Автор: pet 8.10.2017, 14:43

Почему-то не работают переменные Ultima в Lua - глобальная переменная не найдена. Пишу со скобками в конце.

Автор: DarkMaster 10.10.2017, 9:03

log(type(workwindow))
log(type(windowhandle()))

Автор: cirus 12.10.2017, 14:26

Цитата
build 11
Добавил в 'findimage' возврат процента совпадения найденной картинки в пятом элементе возвращаемого массива.

В пятом элементе пусто.
Цитата
Исправил в 'findimage' поиск запомненной картинки в загруженной области.

https://forum.uokit.com/index.php?s=&showtopic=67903&view=findpost&p=419338
Картинка не находится.


Автор: cirus 20.10.2017, 15:09

Починить wait.

Код
set timer
for #i 1 100
    wait 2
end_for
log timer
end_script

От 2 до 15 разницы в wait нет вообще.

Автор: WKnight 23.10.2017, 17:57

wait починил.

Автор: WKnight 23.10.2017, 23:14

build 12

Починил 'get windowpos' в Lua. Теперь работает как функция 'x, y, width, height, errorcode = windowpos ()'.
Подправил обновление переменной 'workwindow' при нажатии Ctrl+A.
Исправил 'readmem' и 'writemem' в Lua. 'readmem' возвращает строку.
Переделал обработку параметров в команде 'dir' при вызове из Lua. Теперь должна понимать пути с пробелами.
Переделал команду 'wait', 'send', переменную 'timer' и задержку в кликах мышкой на более точный таймер.
Исправил в 'findimage' возврат процента совпадения найденной картинки в пятом элементе возвращаемого массива.
Исправил в 'findimage' поиск запомненной картинки в загруженной области.

Автор: DarkMaster 24.10.2017, 0:32

Цитата
возвращает строку

Почему строку то, если там считывается в т.ч. байт, ворд, дворд, тем более флоат и дабл?

Кнайт, вообще насколько реально поправить типы данных, чтобы избежать левого парсинга? Писал обработку изображения для финдимиджа, так на конвертацию битовой маски в массив луа уходило ~3 секунд, обработка таблицы занимала 0.02 секунды. Из этих 3 секунд полезная работа занимала времени, которую можно принять за погрешность не имеющую значения biggrin.gif. Я догадываюсь, что это далеко не самая занимательная писанина, да и твои усилия хотелось бы тратить на что-то более осмысленное... Есть ли смысл передавать данную обезъянкину работу "инициативной группе" не уверен, т.к. может больше проблем вызвать, чем проку, но очень хотелось бы решить этот вопрос.

Автор: cirus 24.10.2017, 2:57

Цитата
Исправил в 'findimage' поиск запомненной картинки в загруженной области.

Работает, если искать от начальных координат 0 0.
Код
set %get [1] LoadImage (test2.bmp)      // картинка 10*10, искомый объект в координатах 1 1
set %image [1] LoadImage (image.bmp)        
set #a Findimage(1 1 10 10 (%image [1 1]) %arr %get [1 1] 100)   // начальные координаты 1 1
log #a  // не найдено
end_script

Прикрепленный файл  image.bmp ( 136 байт ) Кол-во скачиваний: 185

Прикрепленный файл  test2.bmp ( 376 байт ) Кол-во скачиваний: 177


Автор: WKnight 24.10.2017, 20:23

Проверь ночнушку не стабильную.

Автор: cirus 25.10.2017, 2:27

Цитата
Проверь ночнушку не стабильную.

Ещё конечные координаты доделать.
Код
set %get [1] LoadImage (test2.bmp)      // картинка 10*10, искомый объект в координатах 1 1
set %image [1] LoadImage (image.bmp)     // картинка 5*5
set #a Findimage(1 1 5 5 (%image [1 1]) %arr %get [1 1] 100)   // начальные координаты 1 1, конечные 5 5
log #a  // не найдено
end_script


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