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

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

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

Автор: WKnight 21.6.2016, 15:31

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

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


Для пожеланий и багов открыт специальный https://redmine.uokit.com/projects/uopilot/issues.
Крайне рекомендуется писать сообщения с соответствующим содержанием именно туда. В противном случае ваш пост будет промодерирован и вручную будет создана копия на багтреккере.

https://redmine.uokit.com/projects/uopilot/issues



--v.2.38--

Исправил определение имени переменной в команде 'set'.

Исправил ошибку подгрузки массива с частично пустыми значениями в команде 'load_array'.

Исправил усечение существующего массива при подгрузке нового в команде 'load_array'.

Исправил изменение регистра первого элемента, при присваивании массива в команде 'init_arr'.

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

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

Подправил пример плагина, добавил в него возврат значений вторым способом.

Исправил команду 'ExecAndWait', слегка сломанную в 2.36.

Исправил команду 'filegetattr'. Не работала.

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

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

Сделал сохранение расположения окна справки на экране.

Добавил хелп с Wiki. Вызывается по "F1" на операторе в скрипте или вверху меню по ПКМ в скрипте. Отображается на новой закладке на форме справки. Скачивает странички непосредственно с Wiki, хранит в папке "Help", рядом с пилотом. Если папки "Help" рядом с пилотом нет, то распаковывает архивную версию.

Сделал подсветку переменных массивов цветом соответствующих операторов.

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

Добавил команду удаления элементов массива 'delete_array %array [+col | -row] [count=1]'.

Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую).

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

Исправил функцию 'string_count', неправильно считала.

Исправил вывод в лог сообщений об ошибках при включенной галочке "Выводить сообщения в... Log".




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

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

Автор: DarkMaster 21.6.2016, 17:39

Тестим хелп. Я доволен smile.gif

Автор: Cockney 21.6.2016, 19:00

Заочно скажу за хелп - почти так и хотел. а в вики бы побольше живых примеров...

Автор: DarkMaster 21.6.2016, 19:18

Цитата
в вики бы побольше живых примеров...

Кто не дает? Пиши. Публичный логин и пароль в теме вики выложен. Хочешь персональный? Скинь в личку - зарегаю.
Вика на то и вика, чтобы писать ее всем. Вон Cirus проделал просто огромную работу и за месяц вика преобразилась.

Автор: Cockney 21.6.2016, 19:36

Я же не пишу на пилоте) + вы знаете намного больше рядового пользователя, в т.ч. меня.

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

Автор: Cockney 21.6.2016, 19:53

Добавить отображение процесса при нажатии Перекачать все с вики.

Автор: DarkMaster 21.6.2016, 21:18

Цитата
Я же не пишу на пилоте) + вы знаете намного больше рядового пользователя, в т.ч. меня.

Ой какие мы скромные сразу стали.

Автор: TemTriss 22.6.2016, 1:10

Цитата

Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую).

Блин)) А я думал у меня руки кривые)) Сегодня потестю smile.gif)

Автор: TemTriss 22.6.2016, 15:06

Цитата(TemTriss @ 22.6.2016, 1:10) *

Блин)) А я думал у меня руки кривые)) Сегодня потестю smile.gif)

Хм... а может и я криворукий. Не отрабатывает, как с абсолютными так и с относительными координатами
Абсолютные координаты
Прикрепленное изображение
Относительные
Прикрепленное изображение

P.s. А спойлеры не работают?((( удобно было бы картинки под спойлер прятать smile.gif)

Добавил проверку
else
set #test color (#x #y workwindow)
log #test

показывает другой цвет, но отрабатывает в перекрытом окне, но к сожалению через раз. В лог посыпались сообщения с цветом(когда окно не перекрыто лог пишет, что цвет 2301470 всегда), переодически проскакивает цвет из окна которое поверх.
15:30:16 0 (test.txt, 9): 2301470
15:30:17 0 (test.txt, 9): 2301470
15:30:18 0 (test.txt, 9): 2301470
15:30:19 0 (test.txt, 9): 16777215
15:30:20 0 (test.txt, 9): 2301470
и так каждые 5-7 тиков.

Автор: DarkMaster 22.6.2016, 15:33

Спойлеры работают.

Скрины в бмп 24 бита, код в виде кода.

Автор: TemTriss 22.6.2016, 15:42

Цитата(DarkMaster @ 22.6.2016, 15:33) *

Спойлеры работают.

Скрины в бмп 24 бита, код в виде кода.

Да там кода-то 10 строчек.
Вот он, чуть выше сообщение отредактировал. Добавил проверки и написал их результат.
Код
set #handleWin findwindow("MEmu 2.7.0 - MEmu_1")
set workwindow #handleWin
set #x 58
set #y 27
set #clr 3430269
if color (#x #y workwindow) = #clr
log цвет совпал, даже в перекрытом окне
else
set #test color (#x #y workwindow)
log #test
end_if

Автор: DarkMaster 22.6.2016, 16:04

а при
log color (#x #y workwindow)
что выдает?

Автор: TemTriss 22.6.2016, 16:14

Цитата(TemTriss @ 22.6.2016, 15:06) *

Добавил проверку
else
set #test color (#x #y workwindow)
log #test

показывает другой цвет, но отрабатывает в перекрытом окне, но к сожалению через раз. В лог посыпались сообщения с цветом(когда окно не перекрыто лог пишет, что цвет 2301470 всегда), периодически проскакивает цвет из окна которое поверх.
15:30:16 0 (test.txt, 9): 2301470
15:30:17 0 (test.txt, 9): 2301470
15:30:18 0 (test.txt, 9): 2301470
15:30:19 0 (test.txt, 9): 16777215
15:30:20 0 (test.txt, 9): 2301470
и так каждые 5-7 тиков.

Вот

Автор: DarkMaster 22.6.2016, 16:21

1) сделать поиск по цвету 2301470 в неперекрытом окне, чтобы понять куда идет смещение.
2) Почему проскакивает белый цвет - не знаю. Удостоверьтесь, что это именно окно, которое поверх. Например попробуйте поперемещать окно поверх и посмотрите будет ли меняться цвет.

Возможно из-за пункта 1 мы имеем пункт 2, т.к. в игре смотрится ошибочная координата.

Автор: WKnight 22.6.2016, 17:11

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

Автор: Cockney 22.6.2016, 17:30

Цитата(DarkMaster @ 21.6.2016, 21:18) *

Ой какие мы скромные сразу стали.



Ни в коем случае.

Автор: TemTriss 22.6.2016, 17:50

Цитата(DarkMaster @ 22.6.2016, 16:21) *

1) сделать поиск по цвету 2301470 в неперекрытом окне, чтобы понять куда идет смещение.

Как я понял это должно выглядеть примерно так?
Код
set #handleWin findwindow("MEmu 2.7.0 - MEmu_1")
set workwindow #handleWin
set #x 58
set #y 27
set #clr 3430269
if color (#x #y workwindow) = #clr
log цвет совпал, даже в перекрытом окне
else
// set #test color (#x #y workwindow)
// log #test
set #fclr findcolor (50 25, 68 30 1 1 (2301470) %mas 2)
if #fclr > 0
log #fclr
set #M1 1
for #i 1 #fclr 1
log x: %mas[#M1, 1], y: %mas[#M1, 2]
set #M1 #M1 +1
end_for
end_if
end_if

если да, то указанный мной диапазон поиска - 19х6 = 114
и если я правильно понял, то #fclr - должен вернуть кол-во найденных пикселей и он сразу пишет 114...
ну и соответственно в логе перебираются все пиксели в указанном диапазоне.

Вот, я наконец-то по ходу разобрался.
приложу скрин
Прикрепленный файл  test10.bmp ( 274,38 килобайт ) Кол-во скачиваний: 1096


Как я понял это считается как 2 разных окна.
т.к. пилот делает отсчет от 1 до 29(размер полоски - заголовка)
и потом заново начинает отсчет с нуля и по клику ctrl+a показывает 2 разных хэндла.
Так что косяк все же у меня. Но вот исходя из этого возник вопрос. А как мне найти хэндл этого окна/не окна/хз что это. И привязать его как ворквиндоу.
P.s. привязывать в окне пилота не вариант. Программа за частую крэшится и в скриптовой части у меня прописан ее перезапуск, следовательно хэндл уже будет другой. В данный момент мой скрипт работает на абсолютных координатах, но вот хочется его переписать

P.s.1 сори продолжение не много не по теме.

Автор: DarkMaster 22.6.2016, 20:50

посмотреть дерево окон, если будут проблемы, то в развернутом виде дерево приложения сюда скрином.
https://forum.uokit.com/index.php?act=Attach&type=post&id=1171

решение 1
http://forum.uokit.com/index.php?showtopic=26742
решение 2
https://forum.uokit.com/index.php?showtopic=28991

Автор: TemTriss 23.6.2016, 1:49

Сообщение потер.
Думал разобрался, оказалось нет.
продолжаю эксперементировать с окнами(

Автор: cirus 23.6.2016, 2:14

Смещение между окнами можно узнать этим.

код
Код
log mode compact
set linedelay 1
set #a desktopwidth / 3
set #b desktopheight / 3
set #handlePilot WindowHandle
set workwindow 0
showwindow #handlePilot
while workwindow = 0
    hint (32 clBlack #a #b(Укажите Родительское окно (Ctrl + A)))
end_while
set #handle1 workwindow
set workwindow 0
while workwindow = 0
    hint (32 clBlack #a #b (Укажите Дочернее окно (Ctrl + A)))
end_while
set #handle2 workwindow
set workwindow 0
get windowpos #handle1 #X #Y #width #height #result
get windowpos #handle2 #X1 #Y1 #width1 #height1 #result1
set #x #X1 - #X
set #y #Y1 - #Y
hint (32 clBlack #a #b 390 70 (Смещение abs(#x) abs(#y)))
log Смещение abs(#x) abs(#y)
End_script

Создайте отдельную тему. К 2.38 всё это не имеет никакого отношения.

Автор: TemTriss 23.6.2016, 2:29

Поробую еще раз с начала. С скринами и кодом.
Вот проверочный код.

Код

set workwindow 852584
set #x 58
set #y 27
if color (#x #y workwindow) = 3430269
log цвет совпал, даже в перекрытом окне
else
set #test color (#x #y workwindow)
log #test
set #fclr findcolor (50 25 68 60 1 1 (3430269) %mas 2)
if #fclr > 0
log #fclr
set #M1 1
for #i 1 #fclr 1
log x: %mas[#M1, 1], y: %mas[#M1, 2]
set #M1 #M1 +1
end_for
end_if
end_if

Вот скрин всех окон
Прикрепленный файл  test100500.bmp ( 339,94 килобайт ) Кол-во скачиваний: 455

Код

set #test color (#x #y workwindow)
log #test

выдает всегда 0
findcolor отрабатывает и находит координату только в случае если указан хэндл окна
RenderWindowWindow
вот строчки из лога
Код
x: 58, y: 27

или если хэндл окна MainWindowWindow в этом случае к y координате +30
В остальных случаях #fclr возвращает 0 - не найдено пикселей указоного цвета.
И вот почему не отрабатывает color не понимаю.
Перепробовал все окна методом тыка.

Автор: cirus 25.6.2016, 5:01

Несколько раз была ошибка при закрытии пилота. Скорее всего, как-то связано со справкой.
Прикрепленное изображение

Автор: cirus 25.6.2016, 19:40

Код
set %arr[1 1] Test
set %arr[2 2] Test
set %arr[3 3] Test
set %arr[4 4] Test
set %arr[5 5] Test
set %r indexOf (%arr noabs case 2 4 (Test))
for #i 1 size(%r)
    log %r [#i 1] %r [#i 2]
end_for
End_script

Получим в логе:
2 2
3 3
4 4
5 5
При том что startRow = 2, endRow = 4, т. е должно искать только во 2-4 строках. Похоже что endRow воспринимается как count.
С count вообще не понятно как оно работает.
Код
set %arr[1 1] Test
set %arr[2 2] Test
set %arr[3 3] Test
set %arr[4 4] Test
set %arr[5 5] Test
   //Пример из справки:
set #a indexOf ( %arr case -1 (Test) ) // ищет номер последнего элемента массива %arr, имеюшего значение в точности равное Test (с учетом регистра)
log #a
End_script

Последняя строка 5, возвращает 1.

Автор: cirus 25.6.2016, 22:48

Прикрепленное изображение
Исправить s$ на $s. Добавить trim.

Автор: DarkMaster 25.6.2016, 23:55

Цитата
Исправить s$ на $s. Добавить trim.

Это где?

Автор: cirus 25.6.2016, 23:57

Цитата
Это где?

Меню ПКМ.

Автор: cirus 26.6.2016, 10:03

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

Код
log open 0 0 500 300     //откроет с размерами 279 332
End_script

Автор: WKnight 4.9.2016, 20:27

По просьбам трудящихся сделал выкладывание текущей рабочей версии на сайт, автоматически при компиляции проекта.
Ссылка есть на хомпейдже, сразу под ссылками на релиз.
Это даже не бета. Это то, над чем проводится работа. Одна версия может отлично работать, другая не работать совсем. Обычно работает. Также обычно нет хистори.

Автор: Cockney 4.9.2016, 20:53

Хотябы основные фичи бы были написаны, а то что смотреть - непонятно. И если можно вместо приписки night(или каких либо других) писать номер билда.

Автор: WKnight 4.9.2016, 21:54

Пока отлаживаем батники, облагораживаем. В настоящий момент если где-то в темах написано "фиксед", или что-то решилось на багтрекере, то оно есть в сборке.
Номер билда имеется ввиду у самого скачиваемого пилота? Подумаем.

Автор: Cockney 4.9.2016, 22:01

Да. uopilot_002b.exe, например.

Автор: NexTurbo 4.9.2016, 23:50

для Last Chaos ру офф рабртает?

Автор: Andrey1995 6.9.2016, 11:25

Цитата(NexTurbo @ 5.9.2016, 2:50) *

для Last Chaos ру офф рабртает?

Пару дней назад перестал работать в LC, после обновы x-trap

Автор: Cockney 7.9.2016, 0:49

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

Автор: WKnight 9.9.2016, 10:02

На русской версии странички есть полный ченьжлог. До английской врятли доберусь, это уже на релиз похоже будет smile.gif

Автор: Cockney 9.9.2016, 11:05

Спасибо.

Автор: BSW_rama 1.10.2016, 15:00

set #f3 2
set #f5 -111
if #f5 <> 0
set #f8 #f3 / #f5
end_if

мы не умеем делить на отрицательные числа??????

Автор: cirus 1.10.2016, 19:10

Код
set #f3 2000
set #f5 -111
set #f8 #f3 / (#f5)
log #f8
end_script

Для дробных чисел есть плагин https://forum.uokit.com/index.php?showtopic=29139

Автор: WKnight 3.10.2016, 17:23

night version, 03.10.2016 Build 020

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

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

Переделал функцию '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] )

Автор: Cockney 3.10.2016, 17:45

В чем прикол возвращать координаты относительно привязки, когда поиск идет в памяти ? Искали в окне, значит относительно окна. Искали в памяти, значит относительно размеров скрина в памяти.


Длина строки в байтах зачем вообще ?

И да, ну почему нельзя выделить еще одну команду, например, memfind. Ну зачем все в тип поиска пихать ? К чему этот костыль вообще ? Это же безумие какое-то. Да, будет больше конструкций, но за то сразу понятно что и как нужно указывать и какой это результат дает.

Автор: DarkMaster 3.10.2016, 19:19

Цитата
В чем прикол возвращать координаты относительно привязки, когда поиск идет в памяти ? Искали в окне, значит относительно окна. Искали в памяти, значит относительно размеров скрина в памяти.

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

Автор: WKnight 3.10.2016, 22:52

Цитата
В чем прикол возвращать координаты относительно привязки, когда поиск идет в памяти ? Искали в окне, значит относительно окна. Искали в памяти, значит относительно размеров скрина в памяти.
Методом проб и ошибок, пришли к выводу, что лишняя математика при наиболее часто используемых функциях будет слегка напрягать. Для реже используемых вопрос решается двумя строками кода.
Если у кого-то есть лучшее предложение, с удовольствием выслушаем.
Цитата
Длина строки в байтах зачем вообще ?
Обычному пользователю не нужна. Это если кто самостоятельно напрямую к данным обращаться будет, например из плагина.
Цитата
И да, ну почему нельзя выделить еще одну команду, например, memfind. Ну зачем все в тип поиска пихать ? К чему этот костыль вообще ? Это же безумие какое-то. Да, будет больше конструкций, но за то сразу понятно что и как нужно указывать и какой это результат дает.
Это не костыль, а дополнение. По-моему достаточно хорошо вписывается.
Если требуется, могу добавить команду memfind, с 99 процентами идентичного findimage кода.

Автор: Cockney 3.10.2016, 23:20

Цитата
Методом проб и ошибок, пришли к выводу, что лишняя математика при наиболее часто используемых функциях будет слегка напрягать. Для реже используемых вопрос решается двумя строками кода.
Если у кого-то есть лучшее предложение, с удовольствием выслушаем.


У себя в голове я не могу представить ситуацию, в которой юзер ищет в памяти (предположим окно игры) что-то, находит, и по координатам, которые вернулись (а координаты именно найденного объекта в памяти, а не в впривязанном окне), делает клик в привязанное окно. Я не догоняю, почему нельзя просто использовать findimage. Если можно, то развернутый пример.

Цитата
Это не костыль, а дополнение. По-моему достаточно хорошо вписывается.
Если требуется, могу добавить команду memfind, с 99 процентами идентичного findimage кода.


Вот именно, что костыль. Скриптовый язык и отличается от полновесного тем, что скрывает многие аспекты работы с чем-то. Конечному пользователю не важно сколько там повторяющегося кода и сколько ненужной фигни. Ему интересен результат. А конкретнее некий стандарт, о который он может опираться. Взглянул на вики, ага, тут тип поиска 1 или 2. Все просто. А как воспринимать нормально код, где в одном скрипте тип поиска 2, а в другом адрес памяти ? Это сложно визуально, а тем более при обучении. Лучше иметь 10-15 функций с разными параметрами, чем 2 с 3 параметрами по 10 вариаций.

Ни в коем случае не навязываю свое мнение. Я просто смотрю глазами pilot-новичка.

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


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

Автор: cirus 4.10.2016, 4:05

Цитата
Я не догоняю, почему нельзя просто использовать findimage. Если можно, то развернутый пример.

На счёт кликов примеров не приведу, но другой могу:
l2, надо проверить наличие 20 бафов и 10 денсов, итого 30 картинок. Если использовать обычный Findimage на это уйдёт 500мс. И это много, т . к. ещё есть другие проверки.
Теперь же получаем изображение экрана и ищём на нём 30 картинок. И работает это гораздо быстрее. Вместо 500мс потребовалось 50мс.

Автор: DarkMaster 4.10.2016, 9:42

Цитата
На счёт кликов примеров не приведу, но другой могу:
l2, надо проверить наличие 20 бафов и 10 денсов, итого 30 картинок. Если использовать обычный Findimage на это уйдёт 500мс. И это много, т . к. ещё есть другие проверки.
Теперь же получаем изображение экрана и ищём на нём 30 картинок. И работает это гораздо быстрее. Вместо 500мс потребовалось 50мс.

Заменим л2 на вов в котором не все баффы полезные и просто сделаем клик пкм по тому, который нужно снимать.

Автор: WKnight 4.10.2016, 12:52

night version, 04.10.2016 Build 025 181

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

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

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

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

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

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

Автор: Cockney 4.10.2016, 13:15

Не надо в справку добавлять чейндлог беток.

Добавь резервирование просто каким либо значением.

Автор: DarkMaster 4.10.2016, 13:42

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

А можно тоже самое внутри скрипта объявить?

Автор: WKnight 4.10.2016, 14:04

Пока нет. Еще не продумал механизм добавления\использования.

Автор: cirus 4.10.2016, 14:31

Lineage2 HiveFive.
Прикрепленное изображение

Автор: WKnight 4.10.2016, 14:40

А в более ранних бетах 2.38.1?

Автор: cirus 4.10.2016, 14:52

У меня есть только uopilot_b006 и в ней уже не работает. Если скинешь более ранние версии могу проверить. Но это только ночью, ухожу на работу скоро.

Автор: DarkMaster 4.10.2016, 16:02

Зарезервированные переменные не снизят скорость парсинга?

Автор: WKnight 4.10.2016, 16:27

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

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

Цитата
У меня есть только uopilot_b006 и в ней уже не работает.

Это самая ранняя.
В чтении памяти ничего не менялось с 2.38. Истина где-то не здесь.

Автор: DarkMaster 4.10.2016, 21:01

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

Просто помню ты там что-то оптимизировал по этому поводу и мы получили хороший прирост при переборе массивов с чистой математикой.

Автор: cirus 9.10.2016, 0:50

Цитата
В чтении памяти ничего не менялось с 2.38. Истина где-то не здесь.

Работает нормально когда пилот запущен от администратора.

Автор: DarkMaster 9.10.2016, 1:47

Цитата
Работает нормально когда пилот запущен от администратора.

В обоих случаях? Ну а вообще хотелось бы направить в полезные советы tongue.gif

Автор: cirus 9.10.2016, 10:24

Цитата
В обоих случаях?

В обоих. Тоже самое с Exec и частично с Save_array. Это на Win10 только.
Цитата
Ну а вообще хотелось бы направить в полезные советы

Допишу. Было бы проще, если галка 'Выполнять эту программу от имени администратора' стояла изначально.

Автор: DarkMaster 9.10.2016, 12:18

Цитата
Допишу. Было бы проще, если галка 'Выполнять эту программу от имени администратора' стояла изначально.

Ее разве можно поставить изначально? А ну хотя какой-то запрос вылазит помню... У меня просто уак отключен. Вообще я имел ввиду ту незаметную надпись в полезных советах)

Автор: cirus 9.10.2016, 12:42

Цитата
Ее разве можно поставить изначально?

А почему нет. Пилот же не надо устанавливать.

Автор: DarkMaster 9.10.2016, 17:38

Потому что это флаг который устанавливается для винды и вроде как на файле его и не существует.

Автор: WKnight 9.10.2016, 18:59

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

Автор: WKnight 16.10.2016, 20:34

night version, 16.10.2016 Build 026

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

Автор: DarkMaster 16.10.2016, 20:45

А его можно использовать только чтобы в нем искать или как искомое тоже?

Автор: WKnight 16.10.2016, 23:33

Пока только в нем, это промежуточный шаг на пути использования как искомое.

Автор: WKnight 17.10.2016, 1:19

night version, 17.10.2016 Build 027

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

Автор: cirus 17.10.2016, 11:18

Картинки в один массив не загрузить?
Получается каждая картинка в отдельном массиве. Т. е. чтобы перебрать картинки циклом придётся делать массив с именами массивов с картинками.

Автор: WKnight 17.10.2016, 11:28

Обычно достаточно только первого значения из возвращаемого массива.

Автор: cirus 17.10.2016, 11:42

Так получается:

Код
set %image1 LoadImage(C:\1.bmp)
set %image2 LoadImage(C:\2.bmp)
set %image3 LoadImage(C:\3.bmp)

Через size общее количество картинок не узнать.
Конструкции типа %image#i тоже не факт что сработают или через eval лепить.
Либо:
Код
set %a [1] "%image1 [1 1]"
set %a [2] "%image2 [1 1]"
set %a [3] "%image3 [1 1]"
    // Вот теперь можно узнать количество картинок и перебирать циклом:
for #i 1 size(%a)
    set #a findimage (0 0 1920 1080 (%a [#i]) %arr)
end_for


Что за новая кнопка начиная с uopilot_b025?
Прикрепленное изображение

Автор: cirus 17.10.2016, 12:06

Хотя %image#i [1 1] сработало в findimage. Только общее число картинок придётся в ручную указывать.

Автор: WKnight 17.10.2016, 21:58

Кнопка левая, функциональной нагрузки не несет. Скорее всего что-то тестировалось.

Автор: cirus 18.10.2016, 2:42

На счёт картинок, может всё-таки загружать их в один массив, это же удобнее.
Т. е. указывать строку, в которую записывать данные.

Код
set %image [1] LoadImage(C:\1.bmp)
set %image [2] LoadImage(C:\2.bmp)

Или так не сделать?

Автор: DarkMaster 18.10.2016, 3:05

Я считаю ерундой заниматься не надо с кучей массивов и должна быть нормальная возможность в начале скрипта загрузить в один/несколько массивов все картинки и уже никогда не трогать винт.
Т.е. имхо загрузка изображения должна происходить в элемент массива: %arr[1] и соответственно уже в %arr[1 1], %arr[1 2] ... будут содержаться данные.

Кнайт адрес получаемый - это ссылка на структуру или ссылка непосредственно на битовую маску после заголовка бмп?

Автор: WKnight 18.10.2016, 9:48

Цитата
Или так не сделать?
Пока еще пилот не умеет присваивать такую конструкцию конкретной строке массива.
Цитата
адрес получаемый - это ссылка
Непосредственно на битовую маску. Не особо интересовался, что происходит с заголовком.

Автор: cirus 18.10.2016, 11:21

Цитата
Пока еще пилот не умеет присваивать такую конструкцию конкретной строке массива.

Значит пока через костыль можно так сделать.
Код
set %a [1] C:\1.bmp
set %a [2] C:\2.bmp
set %a [3] C:\3.bmp

for #i 1 size(%a)
    set %arr LoadImage(%a [#i])
    init_arr %a (#i) %arr [1 1] %arr [1 2] %arr [1 3] %arr [1 4]
end_for
// в итоге %a [1] будет содержать данные о первой картинке
//         %a [2] второй картинки и т. д.
end_script

Автор: WKnight 18.10.2016, 11:58

Научил.
night version, 18.10.2016 Build 028

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

Автор: cirus 18.10.2016, 12:18

Спасибо. То что надо.

Автор: DarkMaster 18.10.2016, 16:10

Цитата
Непосредственно на битовую маску. Не особо интересовался, что происходит с заголовком.

В данном случае это более чем правильно.

Автор: Cockney 18.10.2016, 17:48

маска идет с выравниванием или без?

Автор: WKnight 18.10.2016, 17:58

С выравниванием. Именно для этого возвращается "длина строки в байтах".

Автор: Cockney 18.10.2016, 18:02

Убрать выравнивание. Возвращать длину именно данных без мусора. Проще же со счетами будет. Ширина *3 и все.

Автор: WKnight 18.10.2016, 18:13

Это не я выравниваю, это GDI.

Автор: Cockney 18.10.2016, 18:16

Ну а ты убери, сильно по скорости не просядет.

Автор: DarkMaster 18.10.2016, 21:04

Цитата
Ну а ты убери, сильно по скорости не просядет.

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

Автор: WKnight 18.10.2016, 21:15

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

Автор: Cockney 18.10.2016, 21:27

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

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

Детектор движения для блоков больше 100x100 ? На кой ?

Автор: WKnight 18.10.2016, 23:30

Если я правильно понял, то функции GDI не будут работать с изображением без выравнивания.

Автор: Cockney 19.10.2016, 0:08

сравнение идет же не через gdi ? как ты получаешь пиксель из сырой кучи ? так же небось обходишь выравнивание.

будут при ширине кратной 4-м.

где будет использоваться маска кроме findimage, findcolor ? если надо будет скидывать на винт, то да, проще оставить выравнивание, иначе убрать его для простоты.

Автор: WKnight 19.10.2016, 0:13

night version, 19.10.2016 Build 029

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

Автор: cirus 21.10.2016, 12:12

Кнайт, после 2.38 в сортировке массива что-то менялось?
В бетках сортировка массива выдаёт ошибку.

Автор: WKnight 21.10.2016, 13:14

night version, 21.10.2016 Build 030

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

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

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


Цитата
Кнайт, после 2.38 в сортировке массива что-то менялось?
В бетках сортировка массива выдаёт ошибку.
Нет.
Примерчик бы поковырять.

Автор: cirus 21.10.2016, 13:31

Цитата
Примерчик бы поковырять.

Код
set %arr [1] 15
set %arr [2] 25
set %arr [3] 5
sort_array %arr
End_script

Автор: veiron 21.10.2016, 13:33

Код
exec C:\Program Files\opera\opera.exe forum.uokit.com

В бета версии такое не работает, если не указывать сайт, то работает.

Автор: WKnight 21.10.2016, 19:27

night version, 21.10.2016 Build 031

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

Автор: WKnight 21.10.2016, 19:48

Цитата
exec C:\Program Files\opera\opera.exe forum.uokit.com

В бета версии такое не работает, если не указывать сайт, то работает.
Что пишет log errorlevel после выполнения команды exec в бете 032


Та и вообще что в логе?

Автор: veiron 21.10.2016, 20:10

Цитата(WKnight @ 21.10.2016, 19:48) *

Что пишет log errorlevel после выполнения команды exec в бете 032
Та и вообще что в логе?

Код
20:08:14 15 (autosaved_15.txt, 0):  log errorlevel
20:08:14 15 (autosaved_15.txt, 0): 0
20:08:16 15 (autosaved_15.txt, 1): exec "C:\Program Files (x86)\Comodo\Chromodo\chromodo.exe"(C:\Program Files (x86)\Comodo\Chromodo\chromodo.exe)  forum.uokit.com

бетa 028

Код
20:14:25 0 (autosaved_0.txt, 1): exec "C:\Program Files (x86)\Comodo\Chromodo\chromodo.exe"(C:\Program Files (x86)\Comodo\Chromodo\chromodo.exe)  forum.uokit.com
20:14:25 0 (autosaved_0.txt, 1): exec -  failed Неверно задано имя папки

бетa 032

Код
exec c:\Program Files\Opera x64\opera.exe forum.uokit.com

С этой папки работает

Автор: WKnight 23.10.2016, 21:39

night version, 23.10.2016 Build 033 577

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

Автор: DarkMaster 23.10.2016, 23:01

Вещь достаточно опасная в плане дальнейшей разблокировки. Остановка скриптов хоткеем тоже не сработает?

Автор: cirus 23.10.2016, 23:22

Можно добавить горячие клавиши для разблокировки?

Автор: WKnight 24.10.2016, 1:49

Цитата
Остановка скриптов хоткеем тоже не сработает?
Неа, оно довольно качественно блокирует. Закрытие процесса помогает smile.gif

Горячие клавиши для разблокировки мысль интересная.

Автор: DarkMaster 24.10.2016, 4:43

Цитата
Неа, оно довольно качественно блокирует. Закрытие процесса помогает

Особенно, когда у тебя нет клавиатуры и мышки.
Цитата
Горячие клавиши для разблокировки мысль интересная.

Неплохо бы при этом подхватить хоткеи остановки скрипта(ов).

Автор: WKnight 26.10.2016, 23:16

Кстати findimage понимает .png примерно с беты 028.

Автор: DarkMaster 27.10.2016, 0:58

Цитата
Кстати findimage понимает .png примерно с беты 028.

Ты возможно удивишься, но он понимал .png примерно лет 5 назад. Просто это было недокументированно и на уровне фичи. Каким образом происходит работа с пнг? Он предварительно разжимается в битовую маку бмп? Я не очень хорошо знаю структуру пнг.

Автор: WKnight 27.10.2016, 11:52

Про 5 лет ничего не скажу, я не помню когда в том месте что-то менялось.

Дополнительной обработки никакой нет. Оно грузится с помощью GDI, судя по доке, оно понимает BMP, GIF, JPEG, PNG, TIFF, Exif, WMF, EMF. И как я понимаю всё автоматически преобразуется в маску.

Автор: DarkMaster 27.10.2016, 21:22

Цитата
И как я понимаю всё автоматически преобразуется в маску.

Бмп и есть маска. Оно преобразовываться не должно.
Раньше грузилось иначе?

Автор: WKnight 27.10.2016, 22:59

А почему-бы одному из поддерживаемых форматов не совпадать с тем, во что преобразовывается? smile.gif
Но один момент я не проверял - разные цветности у БМП.
Совсем раньше грузилось в TBitmap, но в нем есть очень неприятный баг, и я долго и упорно от него избавлялся. Теоретически можно выяснить с какой версии, но врятли это существенно.

Автор: veiron 29.10.2016, 18:34

Версия b034, при записи в файл стало заменять в файле букву Я на квадратики.

Автор: WKnight 29.10.2016, 21:09

Цитата
Примерчик бы поковырять.

Автор: Cockney 29.10.2016, 22:33

Код
write testo.txt Я



файла вообще нет. ни в папке с пилотом, ни в scripts, ни где либо еще. Запускал от админа. Относительные пути вообще работают ?

Автор: veiron 29.10.2016, 22:40

А какой пример, просто сохраняя в файл русские буквы.

Код
   
    set %items[1 1] синяя
    save_array %items d:\BenSkai\images\остров\file\drop.txt

Вот этот код и буквы ЯЯ будут в файле квадратами.

Автор: cirus 29.10.2016, 22:43

А скобки где? Файл сохраняется в папке Scripts.

Код
write (testo.txt Я)

Цитата
А какой пример, просто сохраняя в файл русские буквы.

Взял твой пример, сохраняется нормально.

Автор: veiron 29.10.2016, 22:52

Цитата(cirus @ 29.10.2016, 22:43) *

А скобки где? Файл сохраняется в папке Scripts.

Нет, в папке d:\pilot\images\остров\file\drop.txt
Если сохраняю в папку Scripts, то все работает правильно. Но только если путь будет такой d:\pilot\Scripts\Backup\drop.txt то получу 3 буквы xDF вместо 1 буквы Я
Код
write (C:\123abc.txt hour min sec \r\n)
    //В файл C:\123abc.txt  запишутся текущие: час минуты и секунды
end_script

Что обозначают \r\n ?

Разобрался что значит \r\n

Автор: WKnight 30.10.2016, 8:14

xDF это и есть буква Я в кодировке 1251.

Автор: veiron 30.10.2016, 9:21

Цитата(WKnight @ 30.10.2016, 8:14) *

xDF это и есть буква Я в кодировке 1251.

xDF получается если я использую write. Если использовать save_array то получается квадратик. write работает правильно если только сохранять в папке Scripts, но что это получится, если у меня там лежит 1 скрипт к пилоту и 100 файлов с буквами, чтобы потом вставить скрипт в пилот это какой список получится. Раньше такого не было, указываешь любой путь и все правильно сохраняется.

Автор: WKnight 30.10.2016, 11:44

Код
set %items[1 1] Я
write (testo.txt %items[1 1])
save_array %items drop.txt
write (d:\BenSkai\images\остров\file\testo.txt %items[1 1])
save_array %items d:\BenSkai\images\остров\file\drop.txt
end_script
Во всех файлах xDF.
У квадратика код символа какой?

Автор: veiron 30.10.2016, 12:08

Цитата(WKnight @ 30.10.2016, 11:44) *

Код
set %items[1 1] Я
write (testo.txt %items[1 1])
save_array %items drop.txt
write (d:\BenSkai\images\остров\file\testo.txt %items[1 1])
save_array %items d:\BenSkai\images\остров\file\drop.txt
end_script
Во всех файлах xDF.
У квадратика код символа какой?

Код
    set %items[1 1] краяя
    save_array %items d:\pilot\file\drop.txt

Вот такой скрипт и такой результат как на скрине


Прикрепленные файлы
Прикрепленный файл  квадраты.bmp ( 21,12 килобайт ) Кол-во скачиваний: 147

Автор: WKnight 31.10.2016, 22:12

Версии 2.34 и 2.38.1 бета 034 сохраняют абсолютно одинаково и корректно. xDF большая буква "Я", xFF маленькая.

Автор: DarkMaster 1.11.2016, 4:34

Цитата
veiron

попробуй другой блокнот.

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

Автор: veiron 1.11.2016, 7:40

Цитата(DarkMaster @ 1.11.2016, 4:34) *

попробуй другой блокнот.

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

Открываю в нотепад. Похож с проблема с кодировкой. Потому что открыл в обычном и буквы Я на месте.

Автор: WKnight 3.11.2016, 19:49

night version, 03.11.2016 Build 036

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

Автор: DarkMaster 6.11.2016, 9:43

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

Вкладка виснет. Перезапуск вкладки не приводит к выполнению каких-либо действий.

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

fixed
night version, 06.11.2016 Build 037

Автор: cirus 8.11.2016, 12:41

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

Работает только для мыши. При заблокированной клавиатуре не срабатывает.
Лучше чтобы галка изначально стояла.

Автор: WKnight 12.11.2016, 0:09

night version, 11.11.2016 Build 038

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

Прикрутил корявенький поиск на форму Wiki. Всё, что мог выжать из tWebBrowser, без знания веба - выжал.

Автор: WKnight 13.11.2016, 20:09

Цитата
Работает только для мыши. При заблокированной клавиатуре не срабатывает.
Хоткей "home" в win 7 x64 и 10 x64 работает нормально. Вероятно нужны подробности происходящего.

Автор: cirus 13.11.2016, 20:20

Цитата
Хоткей "home" в win 7 x64 и 10 x64 работает нормально. Вероятно нужны подробности происходящего.

Похоже что с модификаторами не работает.

Автор: Cockney 14.11.2016, 13:58

При безрезультатном поиске на вики-вкладке, весь текст страницы окрашивается в красный на желтом фоне. Перезапуск вкладки или новый поиск не помогают. Помогает только смена страницы через лист-бокс.
------
post определяется как неопознанная команда. Как на вин 7, так и на ХР сп3. Она отключена ?
------
Какой аналог среди команд у твика UseNewClickMethod ?

Автор: WKnight 14.11.2016, 18:21

Цитата
Всё, что мог выжать из tWebBrowser, без знания веба - выжал.
---
Да, примерно с версии 2.33. Переделывал на принципиально новый способ. Работало на х32. Но достаточно давно работа над ней была приостановлена из-за отсутствия необходимых инструментов для х64. На прошлой неделе инструмент был найден, изучаю инструкцию, экспериментирую.
---
Аналогов нет, он уникален.
Слегка меняет наполнение команд "left" и "right". Для кого делал уже не помню.

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

Что-то планируется в плане работы с дробными числами ? Если да, тогда можно будет хоть что-то пощупать?

Автор: WKnight 16.11.2016, 17:56

Дробные числа уже были когда-то введены и выведены обратно по просьбам трудящихся. Подробности к сожалению не помню. Дело было 4-5 лет назад.

Автор: DarkMaster 16.11.2016, 23:06

Ими были заменены тотально целые числа, что привело бы неизбежно к проблемам, в частности в ифах, т.к. невозможно было бы сделать конструкцию:
set #a 2
set #b 4
set #c #a * 2
if #a = #b
.....
end_if

Дробные числа не пропустят подобное сравнение - оно будет ложным. На момент отмены была сразу же предложена альтернатива в виде отдельного оператора, но она так и не была реализована. Фактически нужно воткнуть аналог моего плагина и будет всем счастье. Так же нужно допилить if, чтобы он корректно сравнивал дробные числа. На данный момент он криво воспринимает дробную часть.

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

Код
set %a prompt (Один Два Три)
log   %a [1 1]
log   %a [1 2]
log   %a [1 3]
end_script

Работает.
Код
set %a prompt(Один Два Три)     // нет пробела перед скобкой
log   %a [1 1]
log   %a [1 2]
log   %a [1 3]
end_script

Результат записывается в первый столбец через пробел, а не по столбцам.

Автор: WKnight 20.11.2016, 13:30

fixed
night version, 20.11.2016 Build 039

Автор: cirus 21.11.2016, 3:00

Цитата
get scripts
get number
get word

При нажатии F1 не переходит на нужную страницу справки.

Автор: WKnight 21.11.2016, 11:15

scripts должен работать. Остальные дофиксил.

Автор: WKnight 21.11.2016, 11:42

Цитата
Хоткей "home" в win 7 x64 и 10 x64 работает нормально. Вероятно нужны подробности происходящего.

Похоже что с модификаторами не работает.
С модификаторами тоже работает.

Автор: cirus 6.12.2016, 0:01

Цитата
ожидать завершения запущенного скрипта в команде 'start_script <number> [wait]'

Код
start_script 1 5000

Запускает скрипт сразу. Не дожидаясь завершения работающего скрипта или истечения 5 секунд.

Автор: DarkMaster 9.12.2016, 11:44

Гадали с кнайтом вместе, что ты имел ввиду. Не отгадали =)

Автор: cirus 9.12.2016, 21:08

Цитата
Это из справки:
2.32
Добавил возможность ожидать завершения запущенного скрипта в команде 'start_script <number> [wait]'. Соответственно слегка изменился синтаксис.

В чём отличие?:
Код
start_script <number>
start_script <number> [wait]

Автор: cirus 13.12.2016, 20:32

Код
hint(24 clred 500 500 (text))      // нет пробела перед скобкой

Автор: cirus 18.12.2016, 18:22

Код
get windowpos <handle> [#X #Y [#width #height [#result]]]

Код ошибки возвращается в errorlevel, а не #result. Если так и должно быть, то можно убрать из синтаксиса в меню по ПКМ [#result].

Автор: WKnight 18.12.2016, 19:54

Цитата
start_script <number> [wait]
Не число, как ты указывал, а именно слово "wait". Теоретически должно приостанавливать работу текущего скрипта, до завершения запускаемого.

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

Теперь понятно.

Автор: WKnight 18.12.2016, 21:43

hint и windowpos починил. Теоретически #result можно убрать, он полностью дублирует errorlevel. Тут вопрос скорее в том, что errorlevel перезапишется следующей командой, а рузультов насобирать можно пачку.

Автор: cirus 18.12.2016, 22:04

Цитата
Теоретически #result можно убрать

В общем-то не мешает, это же не обязательный параметр.

Ещё на счёт хинта, сразу забыл дописать:
Код
hint (24 clred 500 500 (text))
wait 1000
hint text1   // примет параметры предыдущего хинта
end_script

Автор: WKnight 19.12.2016, 21:30

Я так понял, что только цвет и размер текста.
Починил.

Автор: cirus 20.12.2016, 20:27

Код
set %a [1 1] 1234567890                                         // строка
log Символов в строке: size(%a [1 1])   Строка:  %a [1 1]
set %a [1] insert (" " %a [1 1] 4)                              // вставить пробел в 4ю позицию
log Символов в строке: size(%a [1 1])   Строка:  %a [1 1]
end_script

Так работает.
Код
set %a [1 1] 1234567 890                                         // строка с пробелом
log Символов в строке: size(%a [1 1])   Строка:  %a [1 1]
set %a [1] insert (" " %a [1 1] 4)                               // вставить пробел в 4ю позицию
log Символов в строке: size(%a [1 1])   Строка:  %a [1 1]
end_script

А так нет. Если в строке уже присутствует пробел, то пробел вставится в конец строки, а не указанную позицию.
Это только с массивами, со строковыми работает нормально.

В первый пост добавьте ссылку на бетку.

Автор: cirus 30.12.2016, 20:10

Код
log clear
init_arr %aaa 8 9 ( )      // скобки не присвоятся
log %aaa [1]
log %aaa [2]
log %aaa [3]
log %aaa [4]
end_script

Работает только в таком виде:
Код
log clear
init_arr %aaa () 8 9 ( )      
log %aaa [1]
log %aaa [2]
log %aaa [3]
log %aaa [4]
end_script

Автор: cirus 13.1.2017, 0:34

Код
set #x 200
set #y 100

set $gipotenuza point_distance (0 0 #x #y)
set $ygol point_direction (0 0 #x #y)

set $x lengthdir_x ($gipotenuza $ygol)
set $y lengthdir_y ($gipotenuza $ygol)
log #x   #y         $x   $y
end_script

Или я торможу, или катеты перепутаны.

Автор: WKnight 13.1.2017, 8:31

Можно я выберу первое? smile.gif

Поменял местами.

Автор: cirus 15.1.2017, 2:05

SaveImage не сохраняет изображение из другой вкладки.

Код
// скрипт 1
set %a [1] loadimage (C:\1.bmp)
pause_script

Код
// скрипт 2
set %z [1 1] %a.1 [1 1]
set $bmp SaveImage (%z [1 1] C:\qwe.bmp)
end_script

Автор: cirus 30.1.2017, 15:07

Код
gosub Переход
end_script

:Переход
return

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

Автор: cirus 2.3.2017, 2:53

Код
set %aBc [1] 5
set %aBc [2] 6
set #a minx(%aBc)
hint #a
end_script

minx и maxx не понимают массивы, если в имени есть заглавные буквы.

Автор: WKnight 2.3.2017, 19:47

Цитата
minx и maxx
Fixed.

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

Цитата
gosub
Fixed.

Автор: cirus 5.3.2017, 22:08

Рестарт скрипта не совсем корректно работает. Перезапускает скрипт со второго раза. Как-то связано с привязкой, если её нет, то перезапускает нормально.
Запустить скрипт:

Код
// вкладка 1
set workwindow windowhandle
while 1 = 1
    log Скрипт работает
    wait 300
end_while

Из другой вкладки перезапустить скрипт:
Код
// вкладка 0
restart_script 1
end_script



Автор: cirus 5.3.2017, 22:53

Код
exec reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /v ComputerName /t REG_SZ /d "ABC123" /f
end_script

В 2.38 работает.
В бетке выдаёт:
Цитата
exec - failed Неверно задано имя папки

Автор: DarkMaster 7.3.2017, 3:59

Кнайт! Релизь хотя бы ночной версией нашу прелесть!

Автор: cirus 7.3.2017, 10:22

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

Автор: Cockney 7.3.2017, 11:07

Что там делать то ? Некоторые тикеты никак не помечаются (ход выполнения), а если и помечаются, то это не заметно, приходится заходить на страницу тикета ,что неудобно. Большинство багов попадает сюда, а не на трекер, ибо шанс, что кнайт увидит больше (я так думаю). Сам же кнайт пишет больше сюда, чем помечает в трекере. Двусторонняя неорганизованность. Либо запретить тут писать и направлять только на трекер(даже кнайту), либо так и будет такой кошмар.

Автор: cirus 7.3.2017, 11:41

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

Автор: WKnight 7.3.2017, 20:21

Честно говоря про трекер забыл пару месяцев как... Работа способствует... Да и сложное какое-то все там, тут проще,

Цитата
Если в названии метки используются русские заглавные буквы, то метка не находится.
minx и maxx не понимают массивы, если в имени есть заглавные буквы.
Пару строк кода поправил и готово smile.gif
Некоторые вещи с трекера в разработке, правда давно, некоторые пока не нашел способ реализовать.
Если не ошибаюсь, то релиз сейчас задерживает только перевод сделанного на английский, но он сопротивляется, бормочет что-то сквозь сон, а что - не разобрать...
туц

Добавил функцию загрузки изображения из файла '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', возникающую, если в названии метки используются заглавные не английские буквы.


Автор: DarkMaster 8.3.2017, 0:52

там еще с подписью драйвера были проблемы.

Автор: cirus 8.3.2017, 18:51

Для чего нужен Lua?

Автор: WKnight 8.3.2017, 19:41

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


Автор: DarkMaster 9.3.2017, 3:11

Кстати луа вроде может свободно прилинковывать другие дллки... Т.е. интерфейс плагинов возможно станет неактуален...
Для затравки:
--lua

local k
for i = 1, 1000000000 do
k = i
end

log (k)
log (os.clock())

время выполнения 251,27 секунд.

for #i 1 1000000
set #k #i
end_for
log #i
log timer
end_script

время выполенения 53,524 секунд.

Т.е. луа сделала за 251,27 секунд объем в 1000 раз больше, чем пилот за 53,524 секунд.
прирост производительности в 211 раз

Автор: DarkMaster 9.3.2017, 3:38

Цитата
Для чего нужен Lua?

Шикарная работа со строками. Очень простой и грамотно прописанный синтаксис. Уход от проблем с экранами. Возможность хранить любые типы данных и не заморачиваться, что в них: строки, целые числа, числа с плавающей точкой, битовые маски или закодированный блок данных. Деревья, многомерные массивы, ООП(не фанат, но все же). На самом деле это скорее всего будет принципиально новый этап развития пилота. Я работал с луа и уверяю ничего проще и удобнее не видел. При этом он полностью полноценен. Главное чтобы прижилось.
// Справедливости ради хочу сказать, что встроенный язык в пилоте очень прост и очень мне наравится. Он реально удобен. Но у него есть вековые проблемы, которые не решатся адекватными трудозатратами которые уже очень давно нужно решить.

Автор: Cockney 9.3.2017, 7:53

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


плагин есть плагин. он удобнее голой длл.


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

так луа кеширует скрипт. вот и х211 к скорости.

chaiscript тоже не плох,но он для связки с с++

Автор: DarkMaster 9.3.2017, 9:37

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

на данный момент параллельно. Хотя мне в целом кажется было бы логичным продолжать именно на луа, а не тратить время на допиливание костылей.
Цитата
так луа кеширует скрипт. вот и х211 к скорости.

так разве это плохо? сколько раз подобные идеи высказывались? кстати есть и компиляторы...
Цитата
chaiscript тоже не плох,но он для связки с с++

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

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

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

Автор: Cockney 9.3.2017, 10:54

Цитата
так разве это плохо? сколько раз подобные идеи высказывались? кстати есть и компиляторы...


Да не плохо это, просто сравниваются костыльный интерпретатор и байт код.

Цитата
луа прекрасно сочетается с с/с++ и вроде даже спокойно жрет дллки.


Не, я про другое. chaiscript наследует упрощенный си-синтаксис, т.е. код компактный. А луа немного "жирноват" в этом плане.

chaiscript
Код
if (5 > 2) {
  print("Yup, 5 > 2");
} else if (2 > 5) {
  // never gonna happen
} else {
  // really not going to happen
}

var x = true;

while (x)
{
  print("x was true")
  x = false;
}

for (var i = 1; i < 10; ++i)
{
  print(i); // prints 1 through 9
}


// function definition

def myFunc(x) {
  print(x);
}


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


Я не про то. Я про ошибки вида :

Цитата
Если в названии метки используются русские заглавные буквы, то метка не находится.

Цитата
minx и maxx не понимают массивы, если в имени есть заглавные буквы.


Т.е. это обычные корректные конструкции, которые пилот не в силах разобрать. Но они если и не прострелят ноги, то как минимум одну сломают. И без nil'ов тут достаточно.

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


Принципиально никакого, чисто удобство. Весь менеджмент плагина на себя берет хост. Разработчику не нужно знать какие параметры (и сколько на самом деле) нужно передавать в плагин. Его задача корректно организовывать обмен данными и как между хост-плагин, так и плагин-плагин. Как пример, нынешняя реализация в пилоте. Вызываем со скольки угодно параметрами, а в плагин идет только структура. Ну и опять же, на сколько я знаю, плагины можно удобно изолировать от хоста.

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

Автор: cirus 9.3.2017, 12:19

Цитата
Главное чтобы прижилось.

Без наличия примеров как-то мало верится. Причем, не только абстрактных примеров, чтобы понять синтаксис Lua, а конкретных, где его использование действительно имеет смысл.
Возможно ли из Lua вернуть результат вычислений в пилот? Или это также костыль в виде буфера или файла?



Автор: Cockney 9.3.2017, 12:23

Ну если будет нормальная реализация, то текущий скриптовый движок будет заменен на новый. Полностью. Без костылей из буфера.


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

Автор: cirus 9.3.2017, 12:37

Цитата
Луа может все

Findimage/Findcolor тоже?

Автор: Cockney 9.3.2017, 12:45

ну в новом исполнении это будет так :

Код
n = findimage(//////)
if n == 0 then
   log("not found")
else
   log("found")
end



основное отличие - неиспользуемые параметры придется помечать 0 или nil, может и не надо, я просто не особо в нем шарю.

функционал привязывается к языку.

Автор: cirus 9.3.2017, 13:15

Теперь дошло зачем он нужен. Сначала не так понял.

Автор: Cockney 9.3.2017, 18:21

а бетки с луа нет ?

Автор: Mylenef 3.12.2017, 21:27

Что за дела, программа через какое то время перестаёт работать
Запускаю по инструкции(https://www.youtube.com/watch?v=G5gZ6-k2n3E),программа запускается,но через какое то время перестаёт "нажиматься" нужная кнопка
Что делаю не так?
Сервер Asterios.tm
Ещё заметил,пилота хватает на 20 кликов,после чего перестаёт работать

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