Вопрос такой после каждого клика левой в заданые координаты нужно проверить цвет, если цвет 1644825(цифра цвета взята с uopilot), то ждем, если цвет будет 1340143(цифра цвета взята с uopilot) то кликаем дальше.
left 350,125
left 350,195
left 350,265
left 350,325
left 350,395
left 350,455
left 350,525
left 350,590
left 350,660
left 350,125 // клик
wait 500 // пауза после клика
if 350,125 1340143 // проверяем цвет в координатах
log ++ // какие-то действия, если цвет нужный
end_if
end_script
там может проскакивать заставка длинною секунд 3-5, заставка закрывает собою окно куда нужно кликать и соответсвенно сбивает этим последующий алгоритм. А когда заставка прошла то открывается окно в котором нужно кликать. Заставка появляется рандомно, и вычислить ее невозможно, пеоэтому нжна проверка по цвету.
if 350,125 1340143 // проверяем цвет в координатах
log ++ // какие-то действия, если цвет нужный
Оно проверило цвет, если вдруг цвет не тот, то оно все равно сразу клацнет в координату, или будет ждать пока цвет не станет нужным???
while_not 350,125 1340143 // пока цвет не станет нужным
// какие-то действия если надо
wait 1
end_while
end_script
while_not 350,125 1340143 // пока цвет не станет нужным
// какие-то действия если надо
wait 1
end_while
end_script
wait 1 это ждать 1 секунду? Обязательно или нет?
аесли прописать так:
while_not 350,125 1340143 // пока цвет не станет нужным
// какие-то действия если надо
end_while
while 1 = 1
end_while
while 1 = 1
wait 1
end_while
while_not 350,125 1340143 //ждем указанный цвет
left 350,125// когда цвет стал таким как надо клацаем
end_while
Правильно я понял???
я до этого не прописывал wait
у меня например сейчас идет 50 точек на которые каждые 30 мсек идет клик мышкой? и так на протяжениее 10 часов... это плохо для проца?
надо после каждого клика прописать команду wait 50????
или и так сойдет?
или просто увеличить паузу между исполнениями команд, у меня сейчас стоит 30мсек. если поставить 100мсек то тогда как то долговато будет кликаться.
тут вопрос целесообразности. Вы получаете большую нагрузку на камень, если не мешает, то какая разница. Так же от большого количества кликов в секунду приложение может начать лагать до полного зависания, если подобных проблем нет, то опять же какая разница? Тем не менее будет ли реальная разница в результате, если кликов будет не 33 в секунду, а 10? Я обычно ставлю вейты в подобных циклах 50-200 мс.
left 100 100
if 100 100 255 // нет смысла проверять, т. к. приложение не успеет среагировать клик
// какие-то действия
end_if
while_not 350,125 1340143
left 350,125
end_while
while_not 350,195 1340143
left 350,195
end_while
while_not 350,265 1340143
left 350,265
end_while
while_not 350,325 1340143
left 350,325
end_while
while_not 350,395 1340143
left 350,395
end_while
while_not 350,455 1340143
left 350,455
end_while
while_not 350,525 1340143
left 350,525
end_while
while_not 350,590 1340143
left 350,590
end_while
while_not 350,660
left 350,660
end_while
Написал как говорили.... кликает по первой координате и все, дальше координаты не кликает
Т.е. все время клацает в первую координату.
Просто ньюанс там например оранжевая кнопка, если она оранжевая то ее надо нажать 1 раз. Когда кнопка нажалась она поменяла цвет на белый. Я так понял что алгоритм видит что кнопка не оранжевого цвета, ждет когда она снова станет оранжевой и потом клацает, при этом почему то не переходит на остальные кнопки....
Никто не говорил, что там куча кнопок =) В таком случае лучше сделать наоброт.
if x1 y1 цвет_кнопки1
left x1 y1
wait 100
end
if x2 y2 цвет_кнопки2
left x2 y2
wait 100
end
if x1 y1 цвет_кнопки1
left x1 y1
wait 100
end
if x2 y2 цвет_кнопки2
left x2 y2
wait 100
end
подставьте цвет по которому нужно кликать
left 350,125
left 350,195
left 350,265
left 350,325
left 350,395
left 350,455
left 350,525
left 350,590
left 350,660
if 350,125 1644825 // скрипт 2 увидел мешающую заставку
pause_script allex // остановил скрипт который кликает
else // увидел, что заставка ушла, можно продолжить кликать
resume_script all // возобновляем скрипт, который кликает
Alessandrinho, опишите нормально что нужно сделать.
1. Нужно делать клики в окно
2. Если вылезла заставка и закрыла собой окно, куда кликать, то нужно остановиться.
3. Дождаться её ухода.
4. Продолжить кликать.
Все верно, так и нужно.
Вот весь мой алгоритм полность
left 10,173
left 50,250
left 90,370
left 120,385
left 311,187
left 347,135
left 380,99
left 420,135
left 180,587
left 257,365
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
left 350,195
left 350,265
left 350,325
left 350,395
left 350,455
left 350,525
left 350,590
left 350,660
куда и как вставить проверку, которую тут предложили, у меня просто идет все одним куском:
if 350,125 1644825 // скрипт 2 увидел мешающую заставку
pause_script allex // остановил скрипт который кликает
else // увидел, что заставка ушла, можно продолжить кликать
resume_script all // возобновляем скрипт, который кликает
Про 2 скрипта лучше сразу забыть, это тут не нужно.
Используйте findimage для поиска заставки. http://uopilot.tati.pro/index.php?title=Findimage Если заставка всегда в одном и том же месте появляется, то можно и цвет проверять, вместо findimage.
left 420,135
left 180,587
left 257,365
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
gosub find // переход в подпрограмму поиска заставки
left 350,195
gosub find
left 350,265
end_script
:find
set #a 1
while #a > 0 // пока картинка найдена или вместо findimage цвет тут проверять
set #a findimage(0 0 1920 1080 (C:\image.bmp) %arr) // поиска изображения заставки
wait 10
end_while
return
Лучше по цвету, т.к. много разных заставок, но цвет в той части одинаковый у всех заставок, если проверка по цвету то скрипт выглядеть будет так
left 420,135
left 180,587
left 257,365
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
gosub find // переход в подпрограмму поиска заставки
left 350,195
gosub find
left 350,265
end_script
:find
set #a 1
while #a > 0 // пока картинка найдена или вместо findimage цвет тут проверять
set #a 1644825 // поиска цвета засавки и если цвет совпадает то прога ждет пока цвет не станет другим и можно клацать?
wait 10
end_while
return
:find
while 350,125 1340143 // пока присутствует цвет
wait 10
end_while
return
а можно делать например много разных FIND и каждому присвоить свой цвет?
например
gosub Find1
:find
gosub Find2
:Find2
gosub Find3
:Find 3
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
call find 350 125 1340143 // передаём координаты и цвет
left 350,195
call find 350 195 4793601 // передаём координаты и цвет
left 350,265
end_script
// процедура принимает координаты X, Y и цвет
proc find #x #y #color
while #x #y #color // // пока присутствует цвет
wait 10
end_while
end_proc
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
call find 350 125 1340143 // передаём координаты и цвет
left 350,195
call find 350 195 4793601 // передаём координаты и цвет
left 350,265
end_script
// процедура принимает координаты X, Y и цвет
proc find #x #y #color
while #x #y #color // // пока присутствует цвет
wait 10
end_while
end_proc
call find 350 125 1340143 // передаём координаты и цвет
call find 111 222 16777215 // передаём координаты и цвет
end_script
// процедура принимает координаты X, Y и цвет
proc find #x #y #color
log #x #y #color
// нужные действия с принятыми координатами
end_proc
CIRUS вы мне скинули два скрипта вот первый
call find 350 125 1340143 // передаём координаты и цвет
call find 111 222 16777215 // передаём координаты и цвет
end_script
// процедура принимает координаты X, Y и цвет
proc find #x #y #color
log #x #y #color
// нужные действия с принятыми координатами
end_proc
И вот второй скрипт. КАКОЙ ИСПОЛЬЗОВАТЬ??? В чем разница
left 350,125 // все клики что ниже нужно проверить не выскочила ли заставка
call find 350 125 1340143 // передаём координаты и цвет
left 350,195
call find 350 195 4793601 // передаём координаты и цвет
left 350,265
end_script
// процедура принимает координаты X, Y и цвет
proc find #x #y #color
while #x #y #color // // пока присутствует цвет
wait 10
end_while
end_proc
В одном координаты выводятся в лог.
Во втором ожидание пока цвет в указанных координатах присутствует.
Написал так, выдает ERROR WHILE CREATING LUA VIRTUAL MASHINE
repeat 20
left 180,587
left 165,385
end_repeat
call find 104 734 1644825
left 104,734
call find 350 195 1644825
left 350,195
call find 350 265 1644825
left 350,265
call find 350,325 1644825
left 350,325
call find 350,395 1644825
left 350,395
call find 350,455 1644825
left 350,455
call find 350,525 1644825
left 350,525
call find 350,590 1644825
left 350,590
call find 350,660 1644825
left 350,660
call find 392,10 1644825
left 392,10
proc find #x #y #color
while #x #y #color // // пока присутствует цвет
wait 10
end_proc
на сообщение можно просто забить либо скачать свежую версию, можно стабильную ночную.
Так прога останавливается и дальше не кликает. Версия uopilot 2.40
Lua 5.1 скачайте и закиньте рядом с exe пилота.
Кроме этого не хватает end_while.
lua.dll скачал и лежит рядом с uopilot.exe, while_end прописано, а окно выскакивает вот скрин.
https://savepice.ru/full/2018/8/18/47b41db941e059a592d300d21eb56742-full.jpg.html
попробуйте просто перезапустить пилот. скорее всего это связано с багом изменяющим пути после сохранения скриптов. Либо просто обновите пилот до стабильной ночной версии.
Стабильнаяночная версия это какая?
http://uopilot.uokit.com
СПАСИБО!!!!!! СУПЕРРРРРР!!!! РАБОТАЕТ!!!!!! РЕБЯТА ВЫ НЕ ПРЕДСТАВЛЯЕТЕ КАК ВЫ ТОЛЬКО ЧТО ОБЛЕГЧИЛИ ЖИЗНЬ))) УРАААААААААААААААААААА!!!!
народ а как можно сделать чтоб работало
repeat 10000
repeat 100 //
.....// пошли команды
end_repeat // закрыли цикл 100 повторов
.....//пошли команды
end repeat // закрыли цикл 10000 повторов
for #i 1 10
for #j 1 5
log #i #j
wait 10
end_for
end_for
end_script
for #i 1 10
for #j 1 5
log #i #j
wait 10
end_for
end_for
end_script
на цифры обратите внимание, так же рекомендую скорпировать в пилот и выполнить скрипт, чтобы понять, как он работает. По сути тут 10 раз выполняется цикл из 5 витков. Переменные #i и #j соответственно содержат номера витков.
Прошу подсказать возможно ли задать диапазон координат в команде while_not ?
применил findcolor , но не хватает ума как правильно ввести полученные координаты от выше стоящего findcolor в ниже стоящий :
send F
wait 1500
move 1013, 438
wait 500
left_down 1013, 439
wait 50
left_up 1013, 439
for #a 1 1
set #a findcolor (756, 313 996, 423 1 1 (1724148 16579999) %arr 2 1)
if #a > 0
break
end_if
if #a < 1
continue
end_for
end_if
for #b 1 1
set #b findcolor (%arr [1 1], %arr [1 2] 1 1 (8710872 10612963) %arr 2 1) //???
if #b > 0
break
end_if
if #b < 1
continue
end_for
end_if
Что требуется сделать?
set #a 0
while #a < 1
set #a findcolor ... %arr ...
wait 2
end_while
set #Xstart %arr[1 1] - 5
set #Xend %arr[1 1] + 10
set #Ystart %arr[1 2] - 5
set #Yend %arr[1 2] + 10
set #a 0
while #a < 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (color) %arr 2 1)
wait 2
end_while
Большое спасибо , работает . Осталось понять почему , когда все условия поиска цвета выполнены , команда на финальное нажатие клавиши отрабатывает , но с опозданием , когда последнее условие поиска цвета становится уже не верно
...
set #a 0
while #a < 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (1053171-4545536) %arr 2 1)
wait 2
end_while
sendex_down {Spacebar}
wait 65
sendex_up {Spacebar}
Область поиска большая? Возможно просто не успевает обработать. Хотя финдколор не должен настолько тормознуть... Каковы допустимые временные ограничения? Так же на вкладке "еще" можно понизить задержку в sendex (не уверен влияет ли на down/up).
вроде нашел в чем заморочка - нужно "поймать" правильный цвет , перемещающегося изображения , в ранее найденных координатах :
...
set #a 0
while #a < 1
set #a findcolor (800 700 1300 745 1 1 16318365 %arr 2 1)
wait 2
end_while
set #Xstart %arr[1 1]
set #Xend %arr[1 1]
set #Ystart %arr[1 2]
set #Yend %arr[1 2]
set #a 1
while #a < 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1(0-10318365) %arr 2 1)
wait 2
end_while
но как это сделать не совсем понятно
https://forum.uokit.com/index.php?showtopic=22116
.....
set #Xstart %arr[1 1]
set #Xend %arr[1 1]
set #Ystart %arr[1 2]
set #Yend %arr[1 2]
set #a 0
while #a < 1
wait 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (18806-4302534) %arr 2 1 25)
end_while
wait 1
sendex {Spacebar}
команда на "подсечку" (Spacebar) не всегда отрабатывает правильно , временами , не смотря на выполненные условия поиска цвета , "подсечка" не происходит , а происходит просто прыжок на месте , т.к. в настройках клавиш за Spacebar закреплен прыжок и переназначить клавишу нельзя
как то можно повысить успешную "подсечку" ?
Другой способ эмуляции? send? send217?
Поменять sendEx задержку во вкладке "еще".
удалось повысить % верного срабатывания , но всё же пока нет 100 %
как правильно извлечь результат найденного цвета в лог из :
set #a 0
while #a < 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (1156561-3205000) %arr 2 1 15)
возможно отказавшись от поиска в диапазоне и допустимой погрешности цвета , и указав точный код цвета , при котором происходят удачные завершения скрипта , получится увеличить % верного срабатывания или даже добиться 100 % ...
set #asize size(%a)
for #ai 1 #asize 1
log ai #ai = %a[#ai 3]
end_for
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (1156561-3205000) %arr 2 1 15)
if #a > 0
set #asize size(%arr)
for #ai 1 #asize 1
log ai #ai = %arr[#ai 3]
end_for
end_script
end_if
все дополнения к скрипту не принесли улучшения , но удалось добиться 99,99% верного срабатывания скрипта при переходе на полноэкранный режим в самой игре . Большое спасибо Всем кто помогал
Отловить ВСЕ пиксели и детально их проанализировать можно так.
set #res findcolor (#x1 #y1 #x2 #y2 1 1 (R(0-255)) %res)
Можно организовать всё это в цикл и записать данные в файл.
Лучше в цикле разложить на RGB и записать в файл реальные цвета. В дальнейшем использовать конструкцию такого типа
set #res findcolor (#x1 #y1 #x2 #y2 1 1 (R(#r1 - #r2)+G(#g1 - #g2)) %res 2 1 1)
Не надо использовать такой "дикий" deviation - это ничего не даст, лучше правильно задать диапазон. Не надо делать задержки, Файнд - это супертормоз, он сам является задержкой. Удачи.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)