В связи с тем, что гугл с какого-то перепугу прикрывал мой https://sites.google.com/site/leaxplace/ за нарушение условий использования (х.з. каких) то я на всякий случай выложил ссылки на свои файлы и на этот форум (файлы лежат на серверах iFolder)
избегаем диапазонов с помощью поиска статичных точек
https://forum.uokit.com/index.php?showtopic=27054&hl=%F1%F2%E0%F2%E8%F7
https://forum.uokit.com/index.php?act=Attach&type=post&id=1354 (рекомендуется)
Таблица Excel для разложения десятичного цвета (DecColor) на RGB-каналы
Позволит быстро определить диапазон цветов, который необходимо задать для проверок (поиска).
http://ifolder.ru/25284661
Импортирует текстовый файл с десятичными значениями цветов, затем экспортирует эти же значения, но уже в шестнадцатеричном формате RGB и отсортированные в порядке возрастания. Для работы требует установленную библиотеку .Net FrameWork 3.5
Для обработки вам необходимо будет создать файлик, в котором будут содержаться возможные цвета. Сделать его можно следующим скриптом:
// Автор скрипта DarkMaster
wait 5s // Делаем паузу, чтобы развернуть нужное приложение и навести мышь на нужную точку.
set timer
set #n 1
get mouse_pos #x #y
while timer < 20000 // Собираем все цвета в выбранной точке на протяжении 20 секунд.
get color #colorForArr #x, #y
set %colorArr [#n] #colorForArr // Напрямую массив использовать нельзя.
set #n #n + 1
end_while
save_array %colorArr d:\color.txt
alarm // Подаем звуковой сигнал об окончании работы скрипта.
stop_script
Можно ли к этому скрипту добавить чтоб он ещё координату точки отмечал?
всмысле? Там везде одна и та же точка будет. Координата снимается один раз перед началом сбора цветов.
Можно закончить скрипт вот так:
set %colorArr [#n 1 ] #x
set %colorArr [#n 2 ] #y
save_array %colorArr d:\color.txt
alarm // Подаем звуковой сигнал об окончании работы скрипта.
В конце текстового файла будут координаты.
Dec2RGB v.2.2
- исправил опечатку в формуле в одной ячейке (B4);
- добавил ячейки с отображением минимального и максимального цветов в десятичном виде (собранные из крайних значений отдельных каналов).
Дайте пожалуйста формулы (желательно в пилото-понимаемом виде) для вычисления
R =
G =
B =
каналов десятичного цвета. Я пытался понять ее из таблицы екселя, но не шарю в синтаксисе написания экселевских формул.
Просто возникла необходимость в скрипте гет-колорить цвет пиксела (гет-колор в RGB то сразу не может), а потом файнд-колорить участок на наличие "похожих" пикселов (я планирую выставить диапазоны в RGB, добавив +-5 к значению каждого или какого-то одного канала).
R=rgbdec-rgbDec/256*256
G=(rgbDec-rgbDec/256/256*256*256)/256
B=rgbDec/256/256
Отдельно хочу заметить, что в пилоте десятичный цвет в формате BGR, а не RGB.
Спасибо.
Только G-канал не верно считает, остальные верно.
например для цвета 6956042
set #rgbdec 6956042
set #R #rgbdec - #rgbdec / 256 * 256
set #G #rgbdec - #rgbdec / 256 / 256 * 256 * 256
set #B #rgbdec / 256 / 256
msg R#R G#G B#B
end_script
раздели на 256
да спасибо, уже допер, посчитал методом тыка
set #G (#rgbdec - #rgbdec / 256 / 256 * 256 * 256) / 256
правильно ли я высчитал RGB?
set #rgbdec 16713215
set #R #rgbdec - #rgbdec / 256 * 256
set #G (#rgbdec - #rgbdec / 256 / 256 * 256 * 256) / 256
set #B #rgbdec / 256 / 256
msg R#R G#G B#B
end_script
R-255 G-5 B-255
да
Используя описанный метот:
Добавил в 'findcolor' погрешность оттенка. Указывается в %. Слегка изменился синтаксис команды.
пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
Задаю к своему R-255 G-5 B-255 погрешность в 3% получаю следующий диапозон, с учетом того, что 256 - это верхняя планка:
(248 0 248)-(256 12 256)
Добавляю в свой макрос, получаю:
:start
set $a 0
set $a findcolor (1807 79 1835 103 1 1 ((248 0 248)-(256 12 256)) %ResultArray 2 1)
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
Правильно ли?
Нет. Нарушен синтаксис.
Внутри скобок должно быть примерно так:
Примеры задания 'RequiredColor':
'84235' - точный цвет
'84235-86027' - диапазон цветов
'R(11)' - значение красного канала = 11, остальные не проверяются
'G(73-80)' - диапазон значений зеленого канала, остальные не проверяются
'R(11)+G(73-80)+B(1)' - заданы значения по всем каналам
'84235, R(0), R(11)+G(73-80)+B(1)' - комбинированное указание искомых цветов
http://uopilot.tati.pro/index.php?title=Findcolor
т.е. диапозон я посчитал правильно (248 0 248)-(256 12 256), но не правильно записал в макрос?
Я прочитал несколько раз, но понимание не пришло. Прошу расстолкуйте как найденный диапозон правильно записать в макрос, что бы прога поняла его. Именно на этом примере.
при всем уважении и понимании, что я в ваших глазах ламер и мало что понимаю.
Прошу написать: "вы посчитали диапозон правильно (или не правильно) в вашем случае нужно было посчитать так то, написать так то ..... ; потому что ..... ".
(R(248-256)+G(0-12)+B(248-256))
ну потому, что синтаксис такой... ну вот так оно задеатся... честно я не знаю как это объяснить. я приводил выше несколько примеров способов задания цвета, они могут комбинироваться. Только значения подставляй и все. Кроме как медитировать на строчки из вики я не могу вам ничего предложить и пояснить. Просто нечего пояснять... Надо понять то, что там написано, а понять за вас я не могу. Если что-то не ясно в примерах указывайте точное место, спрашивайте, а так я просто не понимаю, что вам объяснять.
Такого пояснения достаточно.
Вставил в макрос, получилось:
:start
set $a 0
set $a findcolor (1164 73 1192 104 1 1 (R(248-256)+G(0-12)+B(248-256)) %ResultArray 2 1)
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
Все равно жмакает эскейп, т.е. цвет не находит. Что еще я мог не правильно посчитать или записать?
в 2.32 расширился синтаксис(на вике висит еще старый)
'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs])'
теперь можно делать еще проще:
set $a findcolor (1164 73 1192 104 1 1 (16713215) %ResultArray 2 1 10)
10 - % оттенка.
Я вас послал сюда, чтобы вы собрали побольше оттенков точки скриптом из шапки и могли потом обработать эти данные скриптом или таблицами. Чтобы вы смогли узнать как вообще выглядит эта точка в ргб и как она изменяется, а не в слепую перебирали варианты. Но мысль ваша свернула не туда, а я чет только сейчас вспомнил с чего все началось.
Вставил в макрос, получилось:
:start
set $a 0
set $a findcolor (1167 78 1195 105 1 1 (16713215) %ResultArray 2 1 10)
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
Сбрасывает таргет всё равно. Пробовал задать и 30%, 50% и 100, сбрасывает. Область указал верно (координаты левой верхней и правой нижней).
А задача банальна, что бы чар сбрасывал таргеты находящиеся за пределами указанной области, и оставлял таргет, если он находится в её границах.
А окно привязываете? При 100 ну никак не должно сбрасывать. Сделайте log $a. Он походу ошибку возвращает.
Запуск от админа?
Окно привязываю (и контрлА жмакаю, и в разделе W выбираю линейку)
Запускал от админа
Макрос
:start
set $a 0
set $a findcolor (1167 78 1195 105 1 1 (16713215) %ResultArray 2 1 100)
log $a
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
1:00:20 5 (Сброс таргета.txt, 4): 0
1:00:21 5 (Сброс таргета.txt, 4): 0
1:00:21 5 (Сброс таргета.txt, 4): 0
1:00:22 5 (Сброс таргета.txt, 4): 0
1:00:23 5 (Сброс таргета.txt, 4): 0
1:00:24 5 (Сброс таргета.txt, 4): 0
1:00:25 5 (Сброс таргета.txt, 4): 0
1:00:25 5 (Сброс таргета.txt, 4): 0
1:00:26 5 (Сброс таргета.txt, 4): 0
1:00:27 5 (Сброс таргета.txt, 4): 0
1:00:28 5 (Сброс таргета.txt, 4): 0
1:00:28 5 (Сброс таргета.txt, 4): 0
1:00:29 5 (Сброс таргета.txt, 4): 0
1:00:30 5 (Сброс таргета.txt, 4): 0
1:00:31 5 (Сброс таргета.txt, 4): 0
1:00:31 5 (Сброс таргета.txt, 4): 0
1:00:32 5 (Сброс таргета.txt, 4): 0
1:00:33 5 (Сброс таргета.txt, 4): 0
1:00:34 5 (Сброс таргета.txt, 4): 0
1:00:35 5 (Сброс таргета.txt, 4): 0
1:00:35 5 (Сброс таргета.txt, 4): 0
1:00:36 5 (Сброс таргета.txt, 4): 0
1:00:37 5 (Сброс таргета.txt, 4): 0
1:00:38 5 (Сброс таргета.txt, 4): 0
1:00:38 5 (Сброс таргета.txt, 4): 0
1:00:39 5 (Сброс таргета.txt, 4): 0
1:00:40 5 (Сброс таргета.txt, 4): 0
1:00:41 5 (Сброс таргета.txt, 4): 0
чет я прикола не пойму. у меня вообще ничего не ищет... завтра буду разбираться. сейчас спать. попробуй версию постарше, может что-то отломали. На 2.31 и 2.32 завести не смог. Либо я сильно туплю и тут правда есть ошибка.
set $a 0
set $a findcolor (187, 19 341, 110 1 1 (16777215) %arr 2 1)
log $a
работает. ваш код не работает. ниче не понимаю. Но % отклонения так и не смог завести. Попробуйте диапазоны с разложением на каналы, как я писал. Но сам код с нуля напишите. Может где-то букву русскую пробили или еще что-нибудь подобное.
А все довольно просто: похоже deviation в findcolor не работает...
Погонял у себя - ноль реакции. Что со значком процента (когда оно просто игнорится), что без. Так что нужно указывать в виде диапазона
Дык я в его код вставлял белый цвет, искал в окне пилота - не находит, даже если убрать deviation.
- Попробуйте диапазоны с разложением на каналы, как я писал.
С разложением макрос
:start
set $a 0
set $a findcolor (1157 65 1203 112 1 1 (R(180-255)+G(0-120)+B(180-255)) %ResultArray 2 1)
log $a
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
Работает. Диапозон задавал методом подбора, исходя из вычесленного ранее R-255 G-5 B-255, т.е. постепенно увеличивал диапозон по этим трем показателям. Единственная обнаруженная трабла заключается в том, что на радаре Ла2 есть перекрестие, которое закрывает розовую точку моба, если он находится на нём (есть предположения как это обойти? пробовал задавать более широкий диапозон, не помогло). Во всех остальных случаях работает корректно.
Финколор с процентами по прежнему не работает (набрал макрос заново ручками).
:start
set $a 0
set $a findcolor (1157 65 1203 112 1 1 (16713215) %ResultArray 2 1 100)
log $a
if $a > 0
send 3 //(стоит скилл атаки)
else
send escape
end_if
goto start
Смею предположить, почему
set $a findcolor (1157 65 1203 112 1 1 (16713215) %ResultArray 2 1 10)
не работает.
В данном случае R-255 G-5 B-255, когда система начинает считать -/+10%, а это примерно 25, то получается R(230-280) G(-20-30) B(230-280). А если я правильно начитался, то диапозон может быть только от 0-255, и когда система видет цифры типо 280 или (-20), то работает не корректно. Я пробовал задавать диапозон более 255 на работающем макросе, он сразу переставал работать корректно, всегда выдавал "0"
Именно так я и задаю диапозон - играя с его размером в каналах. На это нужно много времени, так что займусь вечером.
Обновил версию Excel-файла- поправил ссылки, оформление
Функция погрешности в % работает. Проверил на v2.35.
set $a findcolor (513 642 513 642 1 1 (11599871) %ResultArray 2 1 5)
Это формула для экселя в 1м посту для определения среднего значения в 10 значном цвете.
=$A$2-($A$2-$A$1)/2
Здравствуйте, подскажите, как написать скрипт чтобы пилот определял диапазон цвета, например зеленый, он постоянно разный, нужно задать диапазон. Как переписать данный скрипт который находит только четко заданный цвет, чтобы он находил диапазон зеленого цвета?
set #xcentr 843
set #ycentr 141
//искомый диапазон цвета(зеленый)
set #color1 47367
set #color2 37888
// радиус к которому должен принадлежать таргет
set #r 9
set #r2 #r * 2
set #x #xcentr - #r //начальная координата Х
set #y #ycentr - #r //начальная координата Y
set #xmax #xcentr + #r //конечная координата x
set #ymax #ycentr + #r //конечная координата
set #a findcolor (#x, #y #xmax, #ymax 1 1 (#color1-#color2) %arr 2 )
if #a > 0
set #a findcolor (#x, #y #xmax, #ymax 1 1 (#color1-#color2) %arr 2 )
goto ddnedaleko
else
set #x 811 + random(100)
set #y 619 + random(240)
(нажатие мыши)
wait 300 + random (2000)
(действие)
wait 4800 + random (2000)
hint (15 ( сообщение #a ))
end_if
http://uopilot.tati.pro/index.php?title=Findcolor
Читайте про deviation, смотрите пример 5.
Оставляете ваш код как есть, указываете в findcolor погрешность оттенка.
set #a findcolor (#x, #y #xmax, #ymax 1 1 (#color1-#color2) %arr 2 -1 3)
Я хочу чтобы по радару именно в ограниченном по пикселям квадрате находился определенный цвет и чтобы после обнаружения этого оттенка я мог выбрать любое действие. Вообщем я хочу чтобы ориентируясь по игровому радару, пилот нашел цвет в определенной области например стена, понятно что туда идти персонажу нет смысла где есть препятствие, пилот увидел цвет этого препятствия и развернул персонажа.
set #a findcolor (#x, #y #xmax, #ymax 1 1 (#color1-#color2) %arr 2 -1 3)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)