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

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

UoKit.com Форумы _ UO Pilot _ Помогите разобраться с командой для скрипта

Автор: Alessandrinho 16.8.2018, 11:13

Вопрос такой после каждого клика левой в заданые координаты нужно проверить цвет, если цвет 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

Автор: cirus 16.8.2018, 11:51

Код
left 350,125    // клик
wait 500        // пауза после клика
if 350,125 1340143  // проверяем цвет в координатах
    log ++          // какие-то действия, если цвет нужный
end_if
end_script

Цитата
если цвет 1644825(цифра цвета взята с uopilot), то ждем

Непонятно чего ждать.

Автор: Alessandrinho 16.8.2018, 12:06

там может проскакивать заставка длинною секунд 3-5, заставка закрывает собою окно куда нужно кликать и соответсвенно сбивает этим последующий алгоритм. А когда заставка прошла то открывается окно в котором нужно кликать. Заставка появляется рандомно, и вычислить ее невозможно, пеоэтому нжна проверка по цвету.

if 350,125 1340143 // проверяем цвет в координатах
log ++ // какие-то действия, если цвет нужный
Оно проверило цвет, если вдруг цвет не тот, то оно все равно сразу клацнет в координату, или будет ждать пока цвет не станет нужным???

Автор: cirus 16.8.2018, 12:10

Код
while_not 350,125 1340143  // пока цвет не станет нужным
    // какие-то действия если надо
    wait 1
end_while
end_script

Автор: Alessandrinho 16.8.2018, 12:16

while_not 350,125 1340143 // пока цвет не станет нужным
// какие-то действия если надо
wait 1
end_while
end_script

wait 1 это ждать 1 секунду? Обязательно или нет?
аесли прописать так:

while_not 350,125 1340143 // пока цвет не станет нужным
// какие-то действия если надо
end_while

Автор: cirus 16.8.2018, 12:36

Цитата
wait 1 это ждать 1 секунду?

1 мсек. Т. е. 1/1000 секунды.
Цитата
Обязательно или нет?

Необязательно. Откройте диспетчер и посмотрите загрузку процессора запустив код:
Код
while 1 = 1
end_while

И так:
Код
while 1 = 1
    wait 1
end_while

Автор: Alessandrinho 16.8.2018, 12:47

while_not 350,125 1340143 //ждем указанный цвет
left 350,125// когда цвет стал таким как надо клацаем
end_while

Правильно я понял???

Автор: DarkMaster 16.8.2018, 12:55

Цитата
Правильно я понял???

Да, но wait я настоятельно рекомендую вставить. В противном случае будет очень большая нагрузка на процессор и дикое количество кликов.

Автор: Alessandrinho 16.8.2018, 13:13

я до этого не прописывал wait
у меня например сейчас идет 50 точек на которые каждые 30 мсек идет клик мышкой? и так на протяжениее 10 часов... это плохо для проца?
надо после каждого клика прописать команду wait 50????
или и так сойдет?


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

Автор: DarkMaster 16.8.2018, 13:15

тут вопрос целесообразности. Вы получаете большую нагрузку на камень, если не мешает, то какая разница. Так же от большого количества кликов в секунду приложение может начать лагать до полного зависания, если подобных проблем нет, то опять же какая разница? Тем не менее будет ли реальная разница в результате, если кликов будет не 33 в секунду, а 10? Я обычно ставлю вейты в подобных циклах 50-200 мс.

Автор: cirus 16.8.2018, 13:32

Код
left 100 100
if 100 100 255  // нет смысла проверять, т. к. приложение не успеет среагировать клик
   // какие-то действия
end_if

Т. е. нужна пауза после клика.

Автор: Alessandrinho 16.8.2018, 14:11

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 раз. Когда кнопка нажалась она поменяла цвет на белый. Я так понял что алгоритм видит что кнопка не оранжевого цвета, ждет когда она снова станет оранжевой и потом клацает, при этом почему то не переходит на остальные кнопки....

Автор: DarkMaster 16.8.2018, 14:55

Никто не говорил, что там куча кнопок =) В таком случае лучше сделать наоброт.

Код
if x1 y1 цвет_кнопки1
    left x1 y1
    wait 100
end
if x2 y2 цвет_кнопки2
    left x2 y2
    wait 100
end

Автор: Alessandrinho 16.8.2018, 15:04

Цитата(DarkMaster @ 16.8.2018, 14:55) *

Никто не говорил, что там куча кнопок =) В таком случае лучше сделать наоброт.
Код
if x1 y1 цвет_кнопки1
    left x1 y1
    wait 100
end
if x2 y2 цвет_кнопки2
    left x2 y2
    wait 100
end



а если на данный момент цвет кнопки не тот что надо... оно будет ждать пока цвет кнопки станет тот что надо? или просто дальше по списку будет кликать? и получится:

left x1 y1
left x2 y2
left x3 y3
?????????????

Автор: DarkMaster 16.8.2018, 21:03

подставьте цвет по которому нужно кликать

Автор: Fors1k 17.8.2018, 0:50

Цитата(Alessandrinho @ 16.8.2018, 11:13) *

Вопрос такой после каждого клика левой в заданые координаты нужно проверить цвет, если цвет 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


Если я правильно понял, задача такая:
1. Нужно делать клики в окно
2. Если вылезла заставка и закрыла собой окно, куда кликать, то нужно остановиться.
3. Дождаться её ухода.
4. Продолжить кликать.

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

Скрипт 1 :

Код
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


Скрипт 2 :

Код
if 350,125 1644825 //  скрипт 2 увидел мешающую заставку
pause_script allex   //  остановил скрипт который кликает
else                       //  увидел, что заставка ушла, можно продолжить кликать
resume_script all    //  возобновляем скрипт, который кликает

Автор: cirus 17.8.2018, 1:31

Alessandrinho, опишите нормально что нужно сделать.

Автор: Alessandrinho 17.8.2018, 8:47

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 // возобновляем скрипт, который кликает

Автор: Fors1k 17.8.2018, 10:34

Цитата(Alessandrinho @ 17.8.2018, 8:47) *

Цитата
1. Нужно делать клики в окно
2. Если вылезла заставка и закрыла собой окно, куда кликать, то нужно остановиться.
3. Дождаться её ухода.
4. Продолжить кликать.

Все верно, так и нужно.

куда и как вставить проверку, которую тут предложили, у меня просто идет все одним куском:


Смотри скрин. Откроется окно для запуска второго скрипта.


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

Автор: cirus 17.8.2018, 11:19

Про 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

Автор: Alessandrinho 17.8.2018, 11:39

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

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

Автор: cirus 17.8.2018, 12:30

Код
:find
    while 350,125 1340143      // пока присутствует цвет
        wait 10
    end_while
return

Автор: Alessandrinho 17.8.2018, 13:07

а можно делать например много разных FIND и каждому присвоить свой цвет?

например
gosub Find1
:find
gosub Find2
:Find2
gosub Find3
:Find 3

Автор: cirus 17.8.2018, 14:10

Код
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

Автор: Alessandrinho 17.8.2018, 16:43

Цитата(cirus @ 17.8.2018, 14:10) *

Код
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 тут указывать тот цвет при котором разрешено нажатие

proc find #x #y #color а тут указывать какой-то цвет или нет? или прога проверяет просто цвет совпадает или нет?
while #x #y #color


Автор: cirus 17.8.2018, 20:08

Цитата
proc find #x #y #color а тут указывать какой-то цвет или нет?

Тут не надо ничего указывать, это процедура, которая принимает параметры.
Код
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

Автор: Alessandrinho 18.8.2018, 0:00

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

Автор: cirus 18.8.2018, 0:24

В одном координаты выводятся в лог.
Во втором ожидание пока цвет в указанных координатах присутствует.

Автор: Alessandrinho 18.8.2018, 8:09

Цитата(cirus @ 18.8.2018, 0:24) *

Во втором ожидание пока цвет в указанных координатах присутствует.

А когда заданный цвет отсутствует,то продолжаем кликать дальше, правильно?

Автор: Alessandrinho 18.8.2018, 9:29

Написал так, выдает 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

Автор: DarkMaster 18.8.2018, 9:58

на сообщение можно просто забить либо скачать свежую версию, можно стабильную ночную.

Автор: Alessandrinho 18.8.2018, 10:00

Так прога останавливается и дальше не кликает. Версия uopilot 2.40

Автор: cirus 18.8.2018, 10:05

Lua 5.1 скачайте и закиньте рядом с exe пилота.
Кроме этого не хватает end_while.

Автор: Alessandrinho 18.8.2018, 10:31

lua.dll скачал и лежит рядом с uopilot.exe, while_end прописано, а окно выскакивает вот скрин.
https://savepice.ru/full/2018/8/18/47b41db941e059a592d300d21eb56742-full.jpg.html

Автор: DarkMaster 18.8.2018, 10:45

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

Автор: Alessandrinho 18.8.2018, 11:13

Стабильнаяночная версия это какая?

Автор: cirus 18.8.2018, 11:23

http://uopilot.uokit.com

Автор: Alessandrinho 18.8.2018, 11:33

СПАСИБО!!!!!! СУПЕРРРРРР!!!! РАБОТАЕТ!!!!!! РЕБЯТА ВЫ НЕ ПРЕДСТАВЛЯЕТЕ КАК ВЫ ТОЛЬКО ЧТО ОБЛЕГЧИЛИ ЖИЗНЬ))) УРАААААААААААААААААААА!!!!

Автор: Alessandrinho 18.8.2018, 13:05

народ а как можно сделать чтоб работало
repeat 10000
repeat 100 //
.....// пошли команды
end_repeat // закрыли цикл 100 повторов
.....//пошли команды
end repeat // закрыли цикл 10000 повторов

Автор: cirus 18.8.2018, 14:08

Код
for #i 1 10
    for #j 1 5
        log #i #j
        wait 10
    end_for
end_for
end_script

Автор: DarkMaster 18.8.2018, 14:25

Цитата
народ а как можно сделать чтоб работало
repeat 10000
repeat 100 //
.....// пошли команды
end_repeat // закрыли цикл 100 повторов
.....//пошли команды
end repeat // закрыли цикл 10000 повторов

В последней строке опечатка. Между end и repeat отсутствует подчеркивание.

Автор: Alessandrinho 18.8.2018, 15:38

Цитата(cirus @ 18.8.2018, 14:08) *

Код
for #i 1 10
    for #j 1 5
        log #i #j
        wait 10
    end_for
end_for
end_script



это типа i присвоили 100 циклов
а j присвоили 10000 циклов
????

Автор: DarkMaster 18.8.2018, 15:51

на цифры обратите внимание, так же рекомендую скорпировать в пилот и выполнить скрипт, чтобы понять, как он работает. По сути тут 10 раз выполняется цикл из 5 витков. Переменные #i и #j соответственно содержат номера витков.

Автор: Драго 24.9.2018, 17:57

Прошу подсказать возможно ли задать диапазон координат в команде while_not ?

Автор: DarkMaster 24.9.2018, 18:38

Цитата
Прошу подсказать возможно ли задать диапазон координат в команде while_not ?

Нет. Можно задать несколько точек, но поуму нужно использовать findcolor.

Автор: Драго 24.9.2018, 20:59

применил 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

Автор: cirus 25.9.2018, 1:36

Что требуется сделать?

Автор: DarkMaster 25.9.2018, 4:21

Код
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

Как-то так. С for перемудрили.

Автор: Драго 25.9.2018, 16:32

Большое спасибо , работает . Осталось понять почему , когда все условия поиска цвета выполнены , команда на финальное нажатие клавиши отрабатывает , но с опозданием , когда последнее условие поиска цвета становится уже не верно
...
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}

Автор: DarkMaster 26.9.2018, 4:13

Область поиска большая? Возможно просто не успевает обработать. Хотя финдколор не должен настолько тормознуть... Каковы допустимые временные ограничения? Так же на вкладке "еще" можно понизить задержку в sendex (не уверен влияет ли на down/up).

Автор: Драго 28.9.2018, 19:53

вроде нашел в чем заморочка - нужно "поймать" правильный цвет , перемещающегося изображения , в ранее найденных координатах :
...
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

но как это сделать не совсем понятно

Автор: DarkMaster 29.9.2018, 3:30

https://forum.uokit.com/index.php?showtopic=22116

Автор: Драго 30.9.2018, 21:08

.....

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 закреплен прыжок и переназначить клавишу нельзя
как то можно повысить успешную "подсечку" ?

Автор: DarkMaster 1.10.2018, 15:55

Другой способ эмуляции? send? send217?
Поменять sendEx задержку во вкладке "еще".

Автор: Драго 1.10.2018, 20:17

Цитата(DarkMaster @ 1.10.2018, 17:55) *

Другой способ эмуляции? send? send217?
Поменять sendEx задержку во вкладке "еще".

с send и send217 не срабатывает , но вроде нашел кое что изменить ... пока "полевые испытания" , а далее поглядим , что получится

Автор: Драго 3.10.2018, 4:24

удалось повысить % верного срабатывания , но всё же пока нет 100 %
как правильно извлечь результат найденного цвета в лог из :

set #a 0
while #a < 1
set #a findcolor (#Xstart #Ystart #Xend #Yend 1 1 (1156561-3205000) %arr 2 1 15)

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

Автор: DarkMaster 3.10.2018, 8:44

Код
set #asize size(%a)
for #ai 1 #asize 1
    log ai #ai = %a[#ai 3]
end_for

Автор: cirus 3.10.2018, 11:15

Цитата
size(%a)

Имя массива arr.
Код
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

Автор: Драго 7.10.2018, 20:54

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

Автор: sutra 19.10.2018, 16:29

Отловить ВСЕ пиксели и детально их проанализировать можно так.

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)