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

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

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

Автор: respectman 21.1.2018, 1:23

Здравствуйте!
Когда-то давно учился писать скрипты на пилот и выходило неплохо. Однако, время прошло и я многое забыл, т.к. давно не пользовался. Появилась необходимость снова прибегнуть к программе.
Мне нужен скрипт с действиями:
1 - нажать в точку лкм
2 - выполнить условие: если в точке цвет не зеленый (образно), то нажать в другое место лкм, если зеленый то проверять цвет пока зеленого не станет.
3 - после этого нажать лкм в другое место
4 - опять выполнить 2 пункт
ну и т.д.
Раньше играл в Ботва Онлайн и мне пилот там очень помогал, скрипты писал для игры сам и все замечательно работало. Сейчас забыл команды, переменные и т.п.
Помогите вспомнить и желательно на пальцах разъясните какая команда что делает. Буду очень признателен. Спасибо.

Автор: cirus 21.1.2018, 1:38

Примеры и описание команд можно посмотреть тут: http://uopilot.tati.pro/index.php?title=Список_функций

Цитата
Мне нужен скрипт с действиями:
1 - нажать в точку лкм
2 - выполнить условие: если в точке цвет не зеленый (образно), то нажать в другое место лкм, если зеленый то проверять цвет пока зеленого не станет.
3 - после этого нажать лкм в другое место
4 - опять выполнить 2 пункт

Примерно так:
Код
kleft 100 200    // или left, клик в координаты 100 200
wait 500             // ждать 0.5 секунды, можно убрать если не надо
while 1 = 1      // бесконечный цикл
    while 201, 223 5353004     // пока цвет в указанных координатах зелёный
        wait 100
    end_while
    kleft 500 600  // клик в другое место
    wait 500
end_while

Автор: respectman 6.3.2018, 21:04

Еще задался вопросом, как заставить пилот считывать текст/цифру в игре.

Допустим, игра в "21". Мой скрипт:

в этой строке возможно надо вписать команду N
if_not 384, 420 15116953 // ищу игру по цвету
left 384, 420 // нажимаю играть
wait 3s // джу начало игры
в этой строке возможно надо вписать команду else goto N (если я правильно понимаю, чтобы он просматривал цвет в координатах пока не появится нужный цвет)
end_if
if 400, 384 65605 // здесь по цвету координаты определяю ставку
left 400, 384 // нажимаю ставку
wait 3s // жду начало игры
end_if
-------------на этом этапе нужно определить какое кол-во очков выпало и соответственно после определения добрать карту или передать ход противнику. Цифры пишутся просто в тексте они не в картинке (если это важно конечно).
left 483, 342 // просто жму "передать ход"
wait 3s // жду окончания игры
left 803, 308 // нажимаю кнопку закрыть игру
wait 3s // жду и начинаю скрипт заново


Помогите доделать скрипт, чтобы работал как часы. Заранее благодарен!

Автор: cirus 7.3.2018, 7:14

Цифры можно выделить чтобы скопировать их в буфер?

Автор: respectman 7.3.2018, 16:58

Цитата(cirus @ 7.3.2018, 7:14) *

Цифры можно выделить чтобы скопировать их в буфер?


Совершенно верно! Цифры выделяются и копируются, они не картинка, а текст. Еще вопрос, как заставить пилот искать в определенном окне (не все окно, а лишь часть его) необходимый цвет, после его нахождения совершать какие-либо действия, но пока цвет не найден продолжать его искать?

Автор: cirus 7.3.2018, 17:56

Цитата
Цифры выделяются и копируются, они не картинка, а текст.

Код
showwindow windowhandle minimize     // свернуть пилот
wait 1000
double_left 385, 305    // двойной клик, чтобы выделить текст
wait 300
sendex ^c               // Ctrl + C (скопировать текст в буфер)
wait 200
get clipboard $a        // получить содержимое буера в переменную
log $a
// дальше сравнивать переменную
if $a > 10
    // что делать если $a больше 10
end_if
end_script

Цитата
искать в определенном окне (не все окно, а лишь часть его) необходимый цвет, после его нахождения совершать какие-либо действия, но пока цвет не найден продолжать его искать?

http://uopilot.tati.pro/index.php?title=Findcolor
Код
set #a 0
while #a = 0    // пока цвет не найден
    set #a findcolor (300 300 500 500 (5515776) %arr)
    wait 10
    hint #a  // можно убрать
end_while
// 300 300 500 500 - область поиска
log #a   цвет найден
end_script

Автор: respectman 7.3.2018, 18:55

Вот что у меня получилось:

showwindow windowhandle minimize
:start
if_not 384, 420 15116953
left 384, 420
wait 1s
else goto start
end_if
:A
if 400, 384 65605
left 400, 384
wait 1s
else goto A
end_if
:C
double_kleft 560, 264
wait 300
sendex ^c
wait 200
get clipboard $a
if $a > 10
left 483, 342
wait 1s
else
if $a < 10
left 464, 302
wait 300
left 502, 455
goto C
end_if
end_if
:B
if 781, 303 65944
left 803, 308
wait 1s
else goto B
end_if

Однако, скрипт читает цифру сравнивает ее с 10 и пропускает ход и не выполняет условие под else. Мне нужно, чтобы он сравнивал. Например: Сейчас выделеное число 12, пропустить ход. Следующая игра число 9, оно меньше 10 значит нужно добрать карты выполнив клики, после чего проверить опять получившееся число и снова определить оно больше 10 или меньше. Если меньше то добираем еще, если больше то пропускаем.
Помоги подредактировать, я чую на правильном пути, только не правильно условия ставлю.

Автор: respectman 7.3.2018, 19:14

showwindow windowhandle minimize
:start
if_not 384, 420 15116953
left 384, 420
wait 1s
else goto start
end_if
:A
if 400, 384 65605
left 400, 384
wait 1s
else goto A
end_if
:C
double_kleft 560, 264
wait 300
sendex ^c
wait 200
get clipboard $a
log $a
if $a > 10
left 483, 342
wait 1s
end_if
log $a
if $a < 10
left 464, 302
wait 3s
left 502, 455
wait 3s
else goto C
end_if
:B
if 781, 303 65944
left 803, 308
wait 1s
else goto B
end_if

Вроде нашел ошибку. Работает условия выполняет. Правда не могу понять, он будет перескакивать на :В, если нужно будет еще добрать или он по новой крутит скрипт сначала, а как дойдет до проверки числа, так и выберет. Скорость работы снижается. Буду тестить.

Автор: cirus 7.3.2018, 19:14

Цитата
else goto B

Это 2 строки должно быть:
Код
else
goto B

Код
hint $a    
if  $a > 10         // если больше 10
    left 483, 342
    wait 1s
else                // иначе, т. е. меньше или равно 10
    left 464, 302
    wait 300
    left 502, 455
    goto C
end_if


Автор: respectman 7.3.2018, 20:02

showwindow windowhandle minimize
:start
if_not 384, 420 15116953
left 384, 420
wait 1s
else
goto start
end_if
:A
if 400, 384 65605
left 400, 384
wait 1s
else
goto A
end_if
wait 1s
:C
double_kleft 560, 264
wait 1s
sendex ^c
wait 500
get clipboard $a
log $a
if $a > 10
left 483, 342
wait 1s
else
left 464, 302
wait 1s
left 502, 455
wait 1s
goto C
end_if
:B
if 781, 303 65944
left 803, 308
wait 1s
else
goto B
end_if

Поменял на это, все равно порой проскакивает и вместо добора пропускает ход, не пойму почему.

Автор: cirus 7.3.2018, 20:17

Значит $a больше 10.

Автор: respectman 7.3.2018, 20:20

Цитата(cirus @ 7.3.2018, 20:17) *

Значит $a больше 10.


Как сделать, чтобы он более точно определял? Может $a >= 10 и выполняем действие, а иначе выполняем другие действия?

Автор: cirus 7.3.2018, 20:23

Цитата
Может $a >= 10

Можно и так.

Автор: respectman 7.3.2018, 21:12

Кажется я понял проблему.
При выделении двойным кликом он выделяет число с пробелом, например 9_ он выделил и не добрал карту. Очень редко он добирает, но видимо потому, что он выделяет только число без пробела.
Как выделять именно зажатым курсором, типа как рукой?
Поставил точку начальную, повел влево, закончил и прочитал выделение и сделал действие?

Автор: cirus 7.3.2018, 21:37

Цитата
например 9_ он выделил и не добрал карту.

http://uopilot.tati.pro/index.php?title=Trim - удаляет лишние пробелы вначале и в конце строки.
Код
if trim($a) >= 10

Автор: respectman 8.3.2018, 4:26

Создал скрипт для игры, но он очень долго (не точно - моб на карте есть, а он не нападает, думаю связано с цветом он его не видит) ищет моба, как его ускорить и сделать поиск быстрее и точнее?
Еще бы скроллил карту, цены ему не было.

// Запад
:W
left 660, 13 // Жму кнопку охота
wait 5s
left 1094, 350 // Жму кнопку Запад
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10455719 11835541 8812667 10389382 9400502) %arr 1) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto N // Следующий значек на компасе
end_if
// Север
:N
left 1112, 332 // Жму кнопку Север
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10455719 11835541 8812667 10389382 9400502) %arr 1) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto E // Следующий значек на компасе
end_if
// Восток
:E
left 1135, 354 // Жму кнопку Восток
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10455719 11835541 8812667 10389382 9400502) %arr 1) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto S // Следующий значек на компасе
end_if
// Юг
:S
left 1111, 368 // Жму кнопку Юг
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10455719 11835541 8812667 10389382 9400502) %arr 1) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2]
goto Battle
else
goto W // Возвращаюсь к началу охоты
end_if
// Бой
:Battle
if_not 112, 201 14543521
left 112, 201
else
goto EXIT
end_if
// Выход
:EXIT
if_not 378, 366 15459022
goto Battle
else
goto W
end_if

Автор: dron4938 8.3.2018, 10:37

Интересно посмотреть на скриншоты с мобиками)

Автор: cirus 8.3.2018, 11:11

Что за игра?

Цитата
set #a findcolor (305, 121 1039, 442 1 1 (10455719 11835541 8812667 10389382 9400502) %arr 1)

Убрать 1 в конце.



Автор: respectman 8.3.2018, 16:16

Игра COSMICS: Галактические войны

По суте тот же двар, только в футуристичном стиле.

Нужно придумать сюда хороший скрипт на охоту и собирательство. Однако, у игры есть антибот - после охоты или сбора ресов тебе в мешок дают вещь "антибот" юзаешь ее и снова можешь копать и бить мобов. Насчет антибота пока ничего не предумал, т.к. чтобы использовать его в мешке надо навести на нее курсор и в правом верхнем углу вещи появится значок использования (так все вещи используются). Плюс когда антибот в мешке то нажимая охоту выскакивает окно с сообщением о необходимости зайти в мешок и использовать антибот.

Скрипт желательно нужен с отслеживанием хп и ожиданием его восстановления. Сложность в отслеживании хп - если после боя нажимать "охота", то полоска не заполняется, нужно обязательно заходить в мешок, потом в охоту снова и уже отслеживать (думаю трабл браузера). С этим поконопатиться и решить не трудно.

Трудность в выборе моба, они перемещаются и для каждого нужно искать цвета. Как я понял чем больше цветов, тем выше шанс найти его на карте, но тем больше времени он тратит на это. Может есть функция искать цвет не только под курсором в точке, а немножко в большей области, например в окружности?

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


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

Автор: cirus 8.3.2018, 16:40

Цитата
но тем больше времени он тратит на это.

Времени тратится мало, если не искать белый цвет на белом фоне.
Искать надо не моба, а его имя. Или вообще квадратную скобку, в которой лвл написан. С помощью http://uopilot.tati.pro/index.php?title=Findimage.
Весь фон и левый верхний пиксель надо закрасить в один и тот же цвет (любой).
Примерно так: Прикрепленный файл  1.bmp ( 1,88 килобайт ) Кол-во скачиваний: 197

Код
set #a findimage(0 0 1920 1080 (C:\Users\abc\Desktop\1.bmp) %arr 2 70 -1 10)
hint size(%arr)  // найдено картинок
if size(%arr) > 0
    move %arr[1 1] %arr [1 2]   // первая найденная картинка
end_if
end_script

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

Автор: respectman 8.3.2018, 16:52

Цитата(cirus @ 8.3.2018, 16:40) *

Времени тратится мало, если не искать белый цвет на белом фоне.
Искать надо не моба, а его имя. Или вообще квадратную скобку, в которой лвл написан. С помощью http://uopilot.tati.pro/index.php?title=Findimage.
Весь фон и левый верхний пиксель надо закрасить в один и тот же цвет (любой).
Примерно так: Прикрепленный файл  1.bmp ( 1,88 килобайт ) Кол-во скачиваний: 197

Код
set #a findimage(0 0 1920 1080 (C:\Users\abc\Desktop\1.bmp) %arr 2 70 -1 10)
hint size(%arr)  // найдено картинок
if size(%arr) > 0
    move %arr[1 1] %arr [1 2]   // первая найденная картинка
end_if
end_script

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


Мне это еще трудно для понимания. Суть я понял, а как изобразить в коде не очень. Каким образом он найдет мне моба, если картинки будут отличиться. Т.е. моя картинка, которую он ищет будет другим цветом, что на экране. Он ничего не найдет тогда.

Как я понимаю твой код: ты задал параметры поиска с координатами, ищем твою картинку, если находим, то наводим на нее курсор. Ну и далее дописать действие.

Автор: dron4938 8.3.2018, 17:08

Там мобы не 3d , а в виде картинок, полагаю 6 шт, для разных поворотов. Можно забацать их все и прогнать через скрипт поиска идентичных пикселей.
А в именах прозрачность большая

Автор: respectman 9.3.2018, 3:04

Первая картинка - на ней нужно нажать зеленую кнопку. Нужно в скрипт прописать, чтобы пилот ее определял и выполнил действие к следующей картинке. Но только чтобы пилот проверял наличие окна каждый раз после боя, т.к. окно перекрывает все и в охоту не пустит.

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

Помогите изобразить это в скрипте. Пожалуйста!

// Запад
:W
left 660, 13 // Жму кнопку охота
wait 5s
left 1094, 350 // Жму кнопку Запад
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10390930 11441815 11971740 11177357 13744818 15325919) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto N // Следующий значек на компасе
end_if
// Север
:N
left 1112, 332 // Жму кнопку Север
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10390930 11441815 11971740 11177357 13744818 15325919) %arr) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto E // Следующий значек на компасе
end_if
// Восток
:E
left 1135, 354 // Жму кнопку Восток
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10390930 11441815 11971740 11177357 13744818 15325919) %arr) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
else
goto S // Следующий значек на компасе
end_if
// Юг
:S
left 1111, 368 // Жму кнопку Юг
wait 1s
set #a findcolor (305, 121 1039, 442 1 1 (10390930 11441815 11971740 11177357 13744818 15325919) %arr) // Ищу того же моба на карте
if #a > 0
double_left %arr [1 1], %arr [1 2]
goto Battle
else
goto W // Возвращаюсь к началу охоты
end_if
// Бой
:Battle
if_not 112, 201 14543521
left 112, 201
else
goto EXIT
end_if
// Выход
:EXIT
if_not 378, 366 15459022
goto Battle
else
goto W
end_if


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

Автор: dron4938 9.3.2018, 11:33

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

На какую кнопку заходит в рюкзак?
Кнопку "вещи" нужно скрин не нажатой
Картинка антибота в рюкзаке переливается цветами?
Картинка антибота в рюкзаке ищезает после использования?

Код
:Battle
if_not 112, 201 14543521
left 112, 201
gosub PoiskAntibot // наверное сюда
else
goto EXIT
end_if


Код
gosub PoiskAntibot // команда вызова. Куда-нибудь в скрипт

//========================в конец скрипта======================================
:PoiskAntibot
    set %adres[1] "C:\Users\Andrey\Desktop"  // заменить на свой адрес где лежат картинки
    set #b findimage(305 121 1039 442 (%adres[1]\b.bmp) %arb 2 80 1 10)
    set #c findimage(305 121 1039 442 (%adres[1]\c.bmp) %arc 2 80 1 10)
    set #d findimage(305 121 1039 442 (%adres[1]\d.bmp) %ard 2 80 1 10)
    set #e findimage(305 121 1039 442 (%adres[1]\e.bmp) %are 2 80 1 10)
    hint size(%arb) size(%arc) size(%ard) size(%are)

    if  #d > 0 and #e > 0 //если найдено сообщение с антиботом
        move %are[1 1] %are [1 2]
        left %are[1 1] %are [1 2] 2 2 //кликаем на закрыть
        wait 20
        send i //нажать кнопку i открытие рюкзака ????????????????????????????
        wait 100
        set #f findimage(305 121 1039 442 (%adres[1]\f.bmp) %arf 2 80 1 10)
        if  #f > 0 //если найдена кнопка "вещи"
            move %arf[1 1] %arf[1 2]
            left %arf[1 1] %arf[1 2] 5 3 //кликаем на "вещи"
        end_if
        goto PoiskAntibot
    end_if

    if  #c > 0 //если найдено сообщение "я не бот"
        move %arc[1 1] %arc [1 2]
        left %arc[1 1] %arc [1 2] 2 2 //кликаем на выполнить
        goto PoiskAntibot
    end_if

    if  #b > 0 // если найдена картинка антибота в рюкзаке
        move %arb[1 1] %arb [1 2] 55 10 //переместить курсор на найденную картинку со смещением 55 пикселей вправо и 10 пикселей вниз
        left %arb[1 1] %arb [1 2] 55 10 //кликнуть по найденной картинке со смещением 55 пикселей вправо и 10 пикселей вниз
        goto PoiskAntibot
    end_if
return
//=============================================================================

// b -картинка антибота
// c -кнопка выполнить
// d -сообщение антибот
// e -кнопка закрыть
// f -картинка вещи



Прикрепленные файлы
Прикрепленный файл  b.bmp ( 124 байт ) Кол-во скачиваний: 85
Прикрепленный файл  c.bmp ( 164 байт ) Кол-во скачиваний: 94
Прикрепленный файл  d.bmp ( 288 байт ) Кол-во скачиваний: 101
Прикрепленный файл  e.bmp ( 140 байт ) Кол-во скачиваний: 95
Прикрепленный файл  f.bmp ( 248 байт ) Кол-во скачиваний: 90

Автор: respectman 10.3.2018, 21:03

Скрипт боя. Мне нужно чтобы заходя в бой пилот нажимал кнопки ударов в нужном мне порядке. Например удар Ногой в середину, Ногой в середину, Ногой вниз, Ногой в середину. После каждого удара проверял наличие окна о завершении боя и наличие самого удара. Так как есть мобы по которым удар Ногой вниз не работает (летающие мобы) и на него нажать нельзя.

Я прибегнул к команде while чтобы зациклить выполнение удара, пока не появится нужный цвет в окошке (скрин внизу). Но при завершении комбо на последнем окошке этот цвет (зеленый) не отображается, т.е. комбо сбрасывает цвета к изначальному. Мудрил мудрил и написал это:

// Запад
:W
left 660, 13 // Жму кнопку охота
wait 5s
left 1094, 350 // Жму кнопку Запад
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1054, 145 1056, 335
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto N // Следующий значек на компасе
// Север
:N
left 1112, 332 // Жму кнопку Север
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1053, 410 1055, 230
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto E // Следующий значек на компасе
// Восток
:E
left 1135, 354 // Жму кнопку Восток
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1053, 410 1055, 230
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto S // Следующий значек на компасе
// Юг
:S
left 1111, 370 // Жму кнопку Юг
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1054, 145 1056, 335
wait 500
set #a findcolor (303, 105 1046, 431 1 1 (3218822 3619943 8543389 10781183 8630648 3968383 8942523 5886340) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto W // Возврат на начало скрипта
// Бой
:Battle
if 107, 235 3740699
left 115, 349 // Ногой в середину
wait 1s
end_if
while_not 107, 352 15001511
left 115, 349 // Ногой в середину
wait 1s
else
if 378, 366 16645113
goto W
end_if
end_while
if 107, 235 3740699
left 115, 349 // Ногой в середину
wait 1s
end_if
while_not 310, 427 6414376
left 115, 349 // Ногой в середину
wait 1s
end_while
if 378, 366 16645113
goto W
end_if
if 107, 235 3740699
left 115, 349 // Ногой в середину
wait 1s
end_if
while_not 348, 429 6414376
left 109, 391 // Ногой в низ
wait 1s
end_while
if 378, 366 16645113
goto W
end_if
if 107, 235 3740699
left 115, 349 // Ногой в середину
wait 1s
end_if
if 385, 429 10542847
left 115, 349 // Ногой в середину
wait 1s
end_if
if 378, 366 16645113
goto W
else
goto Battle
end_if

Но часто скрипт зацикливается на каком нибудь ударе и не выходит из боя и не продолжает свою работу. Может есть более простой способ все это изобразить?


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

Автор: cirus 10.3.2018, 21:30

Цитата
После каждого удара проверял наличие окна о завершении боя.

Код
set #a 0
while #a = 0   // пока не найдена картинка бой окончен
    // тут действия для боя
    set #a findimage(0 0 1920 1080 (C:\Бой_окончен.bmp) %arr 2 80 1 3)  // ищем картинку бой окночен
end_while
// т. е. выйдет из цикла только когда бой будет окончен
end_script

Цитата
и наличие самого удара.

Делайте картинки скилов для удара и проверяйте доступны они или нет.

Автор: respectman 13.3.2018, 2:52

Цитата(cirus @ 10.3.2018, 21:30) *

Код
set #a 0
while #a = 0   // пока не найдена картинка бой окончен
    // тут действия для боя
    set #a findimage(0 0 1920 1080 (C:\Бой_окончен.bmp) %arr 2 80 1 3)  // ищем картинку бой окночен
end_while
// т. е. выйдет из цикла только когда бой будет окончен
end_script


Делайте картинки скилов для удара и проверяйте доступны они или нет.


Несовсем понимаю. Мне нужно чтобы проверялось и наличие удара и окно завершения боя. В моем скрипте бой циклится в поиске цвета удара, когда это уже не нужно, т.к. уже бой выигран и висит окно завершения боя. Он не дает считать цвет окна или картинку окна, ведь он зациклен и не выходит из него пока не найдет что ищет.
Вот кусок моего скрипта:

set $w findcolor (334, 356, 425, 369 1 1 16645113 %arr) // Уже хз что делать и решил сюда поиск окна влепить, т.е. и до и после цикла поиска удара.
if $w > 1
wait 2s
goto W // Иду в начало скрипта
end_if
wait 1s
set $b 0
while $b < 1
set $b findcolor (93, 374 133, 413 7094786 %arr 2) // Собственно ищу в координатах цвет удара
wait 100
end_while
wait 1s
if 347, 429 10542847 // Если цвет на комбо полоске серый (т.е. удар еще не бил), то жму этот удар.
left %arr [1 1], %arr [1 2]
wait 1s
end_if
set $w findcolor (334, 356, 425, 369 1 1 16645113 %arr) // Опять же ищу окно завершения боя.
if $w > 1
wait 2s
goto W
end_if
// Далее следуют другие удары, код такой же

Так вот циклится скрипт и не ищет окна завершения боя, т.к. ищет цвет удара. И как его заставить проверять еще и окно (в самом цикле - чтобы постоянно проверял, не нашел цвет удара, ищи цвет окна, не нашел окна, ищи удара). А как нашел что либо одно, то выполнил действие выполнять код дальше (для выполненого удара) или вернуться на начало скрипта (если увидел окно).
Пробовал ваш метод, так как по мне он даже картинку не ищет, что то не так делаю видимо.

Автор: cirus 13.3.2018, 3:24

Код
set #a 0
while #a = 0   // пока не найдено бой окончен
    // тут действия для боя
    set #b 0
    while #b < 1
        set #b findcolor (93, 374 133, 413 7094786 %arr 2) // ищу в координатах цвет удара
        wait 100
    end_while
    if  347, 429 10542847 // Если цвет на комбо полоске серый (т.е. удар еще не бил), то жму этот удар.
        left %arr [1 1], %arr [1 2]
        wait 1s
    end_if
    wait 2000  // пауза, чтобы успело появится окно бой окончен

    set #a findcolor (334, 356, 425, 369 1 1 16645113 %arr) // ищу окно завершения боя.
   // если окно найдется, то выйдет из цикла
end_while
end_script

Код
// в цикле проверяется 2 findcolor, как только какой-то цвет найден из цикла выйдет
set #a 0
set #b 0
while #a = 0 and #b = 0
    set #a findcolor (334, 356, 425, 369 1 1 16645113 %arr1) // ищу окно завершения боя.
    set #b findcolor (93, 374 133, 413 7094786 %arr 2) // ищу в координатах цвет удара
    wait 100
end_while
if #a > 0
    log Найдено завершение боя
else
    log Найден удар
end_if

Автор: respectman 13.3.2018, 19:25

Разобрался, сделал, потестил - работает!
Теперь осталось понять, как работает findimage и сделать чтобы пилот искал окно бота, как нашел заходил в рюкзак, искал вещь, использовал ее и продолжал свою работу.
Например: бот нашел окно, закрыл его и нажал рюкзак. После выбрал в рюкзаке вкладку вещи, нажал ее, нашел из списка вещей картинку бота (картинки бота всегда разные), навел на нее мышку и нажал в правый верхний угол этой картинки. Затем в появившемся окошке нажал кнопку подтвердить использование вещи. Подтвердив использование закрывал это окошко и возвращался к работе.

Мой скрипт:

// Запад
:W
left 660, 13 // Жму кнопку охота
wait 5s
set #s findcolor (599, 270, 757, 306 8040290 %arr 2) // Ищу окошко антибота, когда нашел подаю сигнал
if #s > 0
alarm
end_if
left 1094, 350 // Жму кнопку Запад
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1054, 145 1056, 335 //Перемещаю ползунок на карте, чтобы проверить другую ее часть
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto N // Следующий значек на компасе
// Север
:N
left 1112, 332 // Жму кнопку Север
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1053, 410 1055, 230 //Перемещаю ползунок на карте, чтобы проверить другую ее часть
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto E // Следующий значек на компасе
// Восток
:E
left 1135, 354 // Жму кнопку Восток
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1053, 410 1055, 230 //Перемещаю ползунок на карте, чтобы проверить другую ее часть
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto S // Следующий значек на компасе
// Юг
:S
left 1111, 370 // Жму кнопку Юг
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
drag 1054, 145 1056, 335 //Перемещаю ползунок на карте, чтобы проверить другую ее часть
wait 1s
set #a findcolor (303, 105 1046, 431 1 1 (354 13615284 13744336 2432022) %arr) // Ищу цвет моба (несколько оттенков соответствующий ему, т.к. он перемещается)
if #a > 0
double_left %arr [1 1], %arr [1 2] // Когда нашел его по цветам, атакую
goto Battle // Бой
end_if
goto W // Возврат на начало скрипта
// Бой
:Battle
//Окно окончания боя

//Первый удар
set #b 0
set #w 0
while #b = 0 and #w = 0
set #b findcolor (94, 337, 141, 379 15700579 %arr 2) // Ищу цвет удара
set #w findcolor (334, 356, 425, 369 16645113 %arr 2) // Ищу цвет окна окончания боя
wait 10
end_while
if #w > 0 // Если нашел окно, иду на менту
goto H
else
if 271, 429 10542847 // Если нашел цвет удара, выполняю условие, чтобы ударить
left 111, 353
wait 500
end_if
end_if
//Второй удар
set #b 0
set #w 0
while #b = 0 and #w = 0
set #b findcolor (94, 337, 141, 379 15700579 %arr 2) // Ищу цвет удара
set #w findcolor (334, 356, 425, 369 16645113 %arr 2) // Ищу цвет окна окончания боя
wait 10
end_while
if #w > 0 // Если нашел окно, иду на менту
goto H
else
if 309, 430 10542847 // Если нашел цвет удара, выполняю условие, чтобы ударить
left 111, 353
wait 500
end_if
end_if
//Третий удар
set #b 0
set #w 0
while #b = 0 and #w = 0
set #b findcolor (93, 374 133, 413 7094786 %arr 2) // Ищу цвет удара
set #w findcolor (334, 356, 425, 369 16645113 %arr 2) // Ищу цвет окна окончания боя
wait 10
end_while
if #w > 0 // Если нашел окно, иду на менту
goto H
else
if 347, 429 10542847 // Если нашел цвет удара, выполняю условие, чтобы ударить
left 114, 395
wait 500
end_if
end_if
//Четвертый удар
set #b 0
set #w 0
while #b = 0 and #w = 0
set #b findcolor (94, 337, 141, 379 15700579 %arr 2) // Ищу цвет удара
set #w findcolor (334, 356, 425, 369 16645113 %arr 2) // Ищу цвет окна окончания боя
wait 10
end_while // Если нашел окно, иду на менту
if #w > 0
goto H
else
if 386, 429 10542847 // Если нашел цвет удара, выполняю условие, чтобы ударить
left 111, 353
wait 500
end_if
end_if
goto Battle
:H
if 237, 105 854561 // Если после боя жизней мало, ждет 10сек и возвращается к началу скрипта
wait 10s
else
goto W
end_if

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

Цитата
Теперь осталось понять, как работает findimage

Также как findcolor, только ищет картинку, а не цвет.

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