|
|
  |
Пожелания, Предложения по развитию сюда |
|
|
Zeleax |
26.11.2012, 8:41
|
        
ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010 Группа: Пользователи Наличность: 0 Из: Киев
Пользователь №: 13.093

|
Есть такая замечательная команда findimage, а мне вдруг придумалось каким замечательным образом можно её улучшить. (IMG: style_emoticons/default/smile.gif) Кратко: добавляем возможность искать картинку, по данным содержащимся в массиве типа x1 y1 color1 x2 y2 color2 ... xn yn colorn Подробнее: Фактически мы ищем картинку, проверяя отдельные точки на экране на цвет и их взаимное расположение. Но зачем для этого держать на диске отдельный файл с картинкой и проверять множество точек, если в 99% случаев достаточно проверить относительное взаимное расположение и цвета 2-5 точек изображения! Пример использования:// Здесь цвет 111111 указан как прозрачный, т.к. координаты пикселя = (1, 1) // Здесь по 3 точкам ищем картинку размером 5x6 пикселей! точка (1, 1) только задает прозрачный цвет, не более! init_arr %img (1 3) 1 1 111111, 101 101 123456, 105 106 6478736, 101 106 6688732 set $check FindImage ($startX $startY $endX $endY ( %img) %crds 2 80 20 5) Если в %img хранится не имя файла с расширением, то полагаем, что там находятся относительные координаты и цвет отдельных точек изображения. Первый вариант реализации:В этом случае сразу проверяем [1,1] элемент массива - задан ли в нём пиксель с координатами (1, 1), содержащий "прозрачный" цвет. Если задан, то учитываем это в дальнейшем анализе. Далее ищем в указанной области экрана пиксел цветом подходящим под первый значимый элемент массива %img (но не [1 1]). Если такой пиксел найден, то последовательно проверям цвета точек экрана для остальных значимых элементов массива %img с учетом их относительного расположения. При этом нужно учитывать такие параметры команды, как deviation и прочее. Другой вариант реализации моего предложения- по данным массива построить "виртуальную" картинку, и все пустые элементы массива %img заполнить "прозрачным" цветом = значению %img[1 1]. Возможно, так будет проще в реализации, но несколько дольше в поиске. В любом случае мы избавляемся от хранения лишних файлов на диске и постоянного обращения к диску в процессе работы скрипта. Обязательно нужно выдавать предупреждающие сообщения и сообщения в лог, если массив %img не содержит необходимой информации (координаты+цвет), а также указывать что именно и в каком элементе массива %img находилось, из-за чего возникла ошибка и прерывание работы скрипта! Такая же ошибка должна генерироваться (что не так + где именно!), если указаны неверные данные в команде findimage и findcolor - иначе это затрудняет разработку!Сообщение отредактировал Zeleax - 26.11.2012, 9:22
--------------------
|
|
|
|
WKnight |
26.11.2012, 12:28
|
       
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688

|
Там сейчас должно быть нечто среднее между предложенными двумя вариантами. Не уверен, что нужна заморочка с %img[1 1]. Про регэкспы: Цитата "С поддежкой модификаторов, т.е. чтобы сожрало, например, /myregexp/isu." Это что такое? Я в них не особо понимаю, вот такая например конструкция работает "\b(?:\d{1,3}\.){3}\d{1,3}\b" kleft после 217 по каким координатам не работает, абсолютным, относительным или вообще? Цитата Zeleax Сообщение #536| Цитата(WKnight @ 4.11.2012, 19:16) А что он сообщает сейчас? По идее должно не сильно отличаться от обычного скрипта.
(10): Символ не распознан (pos:21) (Не была инициализирована переменная в процедуре) и делай с этим что хочешь, особенно если ошибка возникла в случае вложенного вызова второй процедуры )) Сделал, что при выводе сообщений в лог из процедур, номер строки отображается относительно основного скрипта, а не тела процедуры. после 'pos:21' добавил вывод чего именно не распознано, правда только в команде 'set', хз где оно еще выводится. Цитата Кстати, сейчас даже при параметрах вывода в лог "по-умолчанию" там вообще всё порезано, если вызывать логирование из процедуры (proc). У меня только имя скрипта не выводится, ибо его нет у процедуры. Мне бы примерчик, как есть и как и чего хочется. Цитата zavas Сообщение #360| Очень хочется видеть в окне "параметры чара" отображение массивов. Идейку бы в каком виде... Цитата DarkMaster Сообщение #85| Ну и заодно хотелось бы избавиться от абсолютного адреса при сохранении скринов. Дык оно и командой и так понимает относительные пути.
|
|
|
|
Zeleax |
26.11.2012, 12:37
|
        
ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010 Группа: Пользователи Наличность: 0 Из: Киев
Пользователь №: 13.093

|
Цитата(WKnight @ 26.11.2012, 12:24)  Там сейчас должно быть нечто среднее между предложенными двумя вариантами. Не уверен, что нужна заморочка с %img[1 1].
Я тоже думаю, что эта заморочка не обязательна. Предложил только для обратной совместимости на всякий случай. Важный момент в предложении по findimage- то что координаты пикселов в массиве для поиска задаются относительными. Т.е. роль играет только то насколько координаты смещены друг относительно друга. Например задать в массиве для поиска: init_arr %img (1, 3) 100 100 12345, 105 106 54321 абсолютно равнозначно для findimage следующему: init_arr %img (1, 3) 0 0 12345, 5 6 54321 И еще - желательно проверять точки в порядке, в котором они следуют в массиве %img, тогда можно оптимизировать поиск вручную, задав в начале массива наиболее редкие цвета для проверки. Картинку можно будет задавать просто взяв с неё 2-5 различных точек по Ctrl+A и записав эти данные в команде init_arr, что значительно облегчит написание скриптов (и не нужно будет возиться с файлами картинок). Сообщение отредактировал Zeleax - 26.11.2012, 16:09
--------------------
|
|
|
|
DarkMaster |
27.11.2012, 19:00
|
          
Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29718
Пользователь №: 11.279

|
3 кнопки: 1) Вкл/выкл слежения за скриптом. Жрет много ресурса, но надо бывает включить, чтобы понять что заглючило. Лезть далеко не хочется. 2) Кнопка активирующая set logging commands для текущего скрипта. 3) Кнопка Log, которая, как не удивительно, открывает/закрывает лог. Нечего делать ей в "?".
Прямо кнопки, прямо на интерфейсе пилота.
Сообщение отредактировал DarkMaster - 27.11.2012, 19:07
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
  |
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0
|
|