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

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

UoKit.com Форумы _ UO Pilot в онлайн играх _ Небеса, поиск мобов на островах

Автор: cirus 2.2.2017, 2:50

Скрипт поиска мобов
Код
gosub start          // начало скрипта, переменные и загрузка картинок в память
gosub поиск_моба
// тут дописывать нужные действия, если надо
end_script

:start
    set linedelay 0                      // задержка между строк
    set %path [1] "C:\КартинкиНебеса"    // путь к картинкам
    init_arr %ostrov (1) 1247, 376                   // координаты острова
    init_arr %mob (1) 659, 630                       // координаты моба
    init_arr %xy (1) 586, 288 1106, 696              // область поиска всех надписей
    set #loadisland 1500                     // время загрузки острова
    set #alarm 1                             // 1 - звуковой сигнал когда моб найден, 0 - без звука
    set #hint 1                              // выводить сообщение что моб найден, 0 - не выводить
    set #attack 1                            // 1 - нападать на моба, 0 - нет
    set #prompt 1     // 1 - выводить окно выбора мобов, 0 - не выводить (будут искаться мобы, которые были выбраны в прошлый раз)

    // имена картинок с мобами, эти можно заменить
    // имена должны быть без пробелов
    set %picture [1 1] Багесса
    set %picture [1 2] ДядяМороз
    set %picture [1 3] Лагга
    set %picture [1 4] Лаг
    set %picture [1 5] НебесныйВасилиск
    //set %picture [1 6] сюда дописывать других мобов
    //set %picture [1 7]

    // имена других картинок
    set %picture1 [1 1] Сложность
    set %picture1 [1 2] Напасть


    ///// всё что ниже менять не нужно /////
    if workwindow = 0
        log Не указано рабочее окно
        log Скрипт остановлен
        stop_script
    end_if
    set #startX %xy [1 1]
    set #startY %xy [1 2]
    set #endX %xy [1 3]
    set #endY %xy [1 4]
    set #endXGet #endX - #startX
    set #endYGet #endY - #startY

    set %bmp [1] ".bmp"
    if  #prompt = 1
        set delimiter ' '
        set $a %picture[1]
        set $b "prompt ($a ())"
        set %b [1] "%a"
        eval (set %b[1] $b)
        set delimiter
    else
        load_array %a ArrayMob.txt
    end_if
    for #i 1 size(%a [1])
        set %ArrayMob [1 #i] %a [1 #i]
        if  %a [1 #i] = 1
            set #z #z + 1
            set %image [#z] LoadImage (%path[1]\%picture[1 #i]%bmp[1])
        end_if
    end_for
    save_array %ArrayMob ArrayMob.txt

    for #i 1 size(%picture1 [1])
        set #z1 #z1 + 1
        set %image1 [#z1] LoadImage (%path[1]\%picture1[1 #i]%bmp[1])
    end_for
return

:поиск_моба
    set #a 0
    set #b 0
    set #c 0
    while #c = 0
        while #b = 0
            set #timeout timer + 1000
            while #a = 0 and #timeout > timer
                move %mob [1 1] %mob [1 2] 1 1 -1 -1
                set #timeout timer + 1000
                while #a = 0 and #timeout > timer
                    set #a findimage (#startX #startY #endX #endY  (%image1[1 1]) %a 2 80 1 3)
                    wait 5
                end_while
            end_while
            set %Get GetImage (#startX #startY #endX #endY)
            for #i 1 size(%image)
                set #b findimage (0 0 #endXGet #endYGet (%image[#i 1]) %a %Get [1 1])
                if  #b > 0
                    if  #attack != 0
                        left %mob [1 1] %mob [1 2]
                    end_if
                    break 2
                else
                    if  #i = size(%image)
                        set #a 0
                        move 1920 1080
                        left %ostrov [1 1]  %ostrov %[1 2]
                        wait #loadisland
                    end_if
                end_if
            end_for
            set $b DeleteImage (%Get [1 1])
        end_while
        if  #attack = 0
            break
        end_if
        set #c findimage (#startX #startY #endX #endY (%image1[2 1]) %a)
        while #c > 0
            left %a [1 1] %a [1 2]
            wait 200
            set #c findimage (#startX #startY #endX #endY (%image1[2 1]) %a)
            if  #c = 0
                break 2
            end_if
            wait 10
        end_while
    end_while
    if  #alarm = 1
        alarm
    end_if
    if  #hint = 1
        hint (20 clred 500 500 (Моб найден))
        wait 1000
        hint (10 clblack 1920 1080 (1))
    end_if
return

Минимальная версия пилота 2.39. Запускать от администратора.
Пример работы скрипта: https://youtu.be/JGaj0jYYIXY
Картинки, которые использовались: Прикрепленный файл  КартинкиНебеса.zip ( 19,41 килобайт ) Кол-во скачиваний: 556

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

Обновление 1
Теперь скрипт не дергает курсор.
Может работать в перекрытом окне. Проверял только в браузере Maxthon.
Координаты моба и время прогрузки острова указывать не нужно.
Для работы скрипта в настройках игры отключить анимацию.
Прикрепленное изображение
В архиве скрипт, папка с картинками мобов и скрипт для получения смещения между родительским и дочерним окном: Прикрепленный файл  ПоискМобов2.zip ( 29,2 килобайт ) Кол-во скачиваний: 524



Сбор дропа с мобов
Код
gosub start1   // начало скрипта, переменные и загрузка картинок в память
while 1 = 1
    gosub drop    // сбор дропа
    hint #item    // количество разобранных и забранных в инвентарь итемов
end_while
end_script

:start1
    log mode compact
    log open 1 1 400 300
    set linedelay 0                      // задержка между строк
    set %path [1] "C:\КартинкиНебеса1"      // путь к картинкам
    init_arr %xy1 (1) 818, 342 1295, 561    // область поиска предметов, кнопок и надписи Побеждён

    // итемы, которые в сундук, имена не должны содержать пробелов
    set %picture2 [1 1] Изумруд
    set %picture2 [1 2] Циркон
    set %picture2 [1 3] ТопорВойны
    //set %picture2 [1 4]

    // итемы, которые разбирать, имена не должны содержать пробелов
    set %picture3 [1 1] ПерстеньМага
    set %picture3 [1 2] ПрахЕдинорога
    set %picture3 [1 3] РобаМага
    set %picture3 [1 4] КольцоПобедителя
    //set %picture3 [1 5]

    // другие картинки
    set %picture4 [1 1] РазобратьПредмет
    set %picture4 [1 2] Выйти
    set %picture4 [1 3] ПродатьВсё
    set %picture4 [1 4] Забрать
    set %picture4 [1 5] Побеждён
    set %picture4 [1 6] Продать
    set %picture4 [1 7] Разобрать
    set %picture4 [1 8] Ожидание


    ///// всё что ниже менять не нужно /////
    if  workwindow = 0
        log Не указано рабочее окно
        log Скрипт остановлен
        stop_script
    end_if
    set #startX1 %xy1 [1 1]
    set #startY1 %xy1 [1 2]
    set #endX1 %xy1 [1 3]
    set #endY1 %xy1 [1 4]
    set %bmp [1] ".bmp"
    if  size(%picture2) > 0
        for #i 1 size(%picture2 [1])
            set #z2 #z2 + 1
            set %item [#z2] LoadImage (%path[1]\%picture2[1 #i]%bmp[1])
        end_for
    end_if
    if  size(%picture3) > 0
        for #i 1 size(%picture3 [1])
            set #z3 #z3 + 1
            set %item1 [#z3] LoadImage (%path[1]\%picture3[1 #i]%bmp[1])
        end_for
    end_if
    for #i 1 size(%picture4 [1])
        set #z4 #z4 + 1
        set %item2 [#z4] LoadImage (%path[1]\%picture4[1 #i]%bmp[1])
    end_for
return

:drop
    set #pobeda 0
    while #pobeda = 0
        set #pobeda FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [5 1]) %a)
        wait 10
    end_while
    move %xy1 [1 3] %xy1 [1 4]

    set #ozhidanie FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [8 1]) %a)
    while #ozhidanie > 0
        set #ozhidanie FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [8 1]) %a)
        wait 10
    end_while
    set #prodat 0
    while #prodat = 0
        set #prodat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [3 1]) %a)
        wait 10
    end_while
    wait 500
    set %Get GetImage (#startX1 #startY1 #endX1 #endY1)
    //set $bmp saveimage(%Get [1 1] C:\GetImage.bmp)
    set #flag 0

    if  size(%picture2) > 0
        for #i 1 size(%item)
            set #a findimage (0 0 %Get [1 2] %Get [1 3] (%item[#i 1]) %sunduk %Get [1 1])
            if  #a > 0
                set #flag 1
                set $item1 %picture2[1 #i]
                break
            end_if
        end_for
    end_if
    if  size(%picture3) > 0
        for #i 1 size(%item1)
            set #a findimage (0 0 %Get [1 2] %Get [1 3] (%item1[#i 1]) %razbor %Get [1 1])
            if  #a > 0
                set #flag 2
                set $item2 %picture3[1 #i]
                break
            end_if
        end_for
    end_if
    set #del DeleteImage  (%Get [1 1])
    if  #flag = 0
        log Предмет продан
        set #prodat 0
        while #prodat = 0
            set #prodat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [3 1]) %a)
            wait 10
        end_while
        left %a [1 1] %a [1 2]
        wait 200
        while #prodat > 0
            set #prodat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [3 1]) %a)
            if  #prodat > 0
                left %a [1 1] %a [1 2]
                wait 200
            end_if
        end_while
        set #prodat 0
        while #prodat = 0
            set #prodat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [6 1]) %a)
            wait 10
        end_while
        left %a [1 1] %a [1 2]
        wait 200
        while #prodat > 0
            set #prodat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [6 1]) %a)
            if  #prodat > 0
                left %a [1 1] %a [1 2]
                wait 200
            end_if
        end_while
        set #exit 0
        while #exit = 0
            set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
            wait 10
        end_while
        left %a [1 1] %a [1 2]
        wait 200
        while #exit > 0
            set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
            if  #exit > 0
                left %a [1 1] %a [1 2]
                wait 200
            end_if
        end_while
    else
        if  #flag = 1
            log Предмет $item1 в сундуке
            set #item #item + 1
            left %sunduk [1 1] %sunduk [1 2]
            wait 200
            set findoffsetx 30
            set findoffsety 10
            set #zabrat 0
            while #zabrat = 0
                set #zabrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [4 1]) %a)
                if  #zabrat = 0
                    left %sunduk [1 1] %sunduk [1 2]
                    wait 200
                end_if
                wait 10
            end_while
            left %a [1 1] %a [1 2]
            wait 200
            while #zabrat > 0
                set #zabrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [1 1]) %a)
                if  #zabrat > 0
                    left %a [1 1] %a [1 2]
                    wait 200
                end_if
            end_while
            set findoffsetx 0
            set findoffsety 0
            wait 200
            set #exit 0
            while #exit = 0
                set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
                wait 10
            end_while
            left %a [1 1] %a [1 2]
            wait 200
            while #exit > 0
                set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
                if  #exit > 0
                    left %a [1 1] %a [1 2]
                    wait 200
                end_if
            end_while
        else
            log Предмет $item2 разобран
            set #item #item + 1
            left %razbor [1 1] %razbor [1 2]
            wait 200
            set findoffsetx 30
            set findoffsety 10
            set #razobrat 0
            while #razobrat = 0
                set #razobrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [1 1]) %a)
                if  #razobrat = 0
                    left %razbor [1 1] %razbor [1 2]
                    wait 200
                end_if
                wait 10
            end_while
            left %a [1 1] %a [1 2]
            wait 200
            while #razobrat > 0
                set #razobrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [1 1]) %a)
                if  #razobrat > 0
                    left %a [1 1] %a [1 2]
                    wait 200
                end_if
            end_while
            set findoffsetx 0
            set findoffsety 0
            set #razobrat 0
            while #razobrat = 0
                set #razobrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [7 1]) %a)
                wait 10
            end_while
            left %a [1 1] %a [1 2]
            wait 200
            while #razobrat > 0
                set #razobrat FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [7 1]) %a)
                if  #razobrat > 0
                    left %a [1 1] %a [1 2]
                    wait 200
                end_if
            end_while
            set #razobrali 1
            while #razobrali = 1
                set #razobrali 0
                set %Get GetImage (#startX1 #startY1 #endX1 #endY1)
                for #i 1 size(%item1)
                    set #a findimage (0 0 %Get [1 2] %Get [1 3] (%item1[#i 1]) %razbor %Get [1 1])
                    if  #a > 0
                        set #razobrali 1
                        break
                    end_if
                end_for
            end_while
            set #del DeleteImage  (%Get [1 1])
            set #exit 0
            while #exit = 0
                set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
                wait 10
            end_while
            left %a [1 1] %a [1 2]
            wait 200
            while #exit > 0
                set #exit FindImage (%xy1 [1 1] %xy1 [1 2] %xy1 [1 3] %xy1 [1 4] (%item2 [2 1]) %a)
                if  #exit > 0
                    left %a [1 1] %a [1 2]
                    wait 200
                end_if
            end_while
        end_if
    end_if
return

Минимальная версия пилота 2.39. Запускать от администратора.
Скрипт позволяет забирать, разбивать и продавать предметы с мобов.
Предметы указанные в массиве %picture2 забираются.
Предметы указанные в массиве %picture3 разбиваются.
Всё остальное продаётся.
Если массивы %picture2 и %picture3 не указаны все предметы будут продаваться.
Пример работы скрипта: https://youtu.be/coXoVCYw-Pw
Картинки, которые использовались: Прикрепленный файл  КартинкиНебеса1.zip ( 29,58 килобайт ) Кол-во скачиваний: 470

Картинки кнопок сделаны скриптом для поиска статичных точек: https://forum.uokit.com/index.php?showtopic=30118. Чтобы кнопки находились даже если на них наведён курсор.
Картинки итемов также можно делать скриптом для создания картинки.

Автор: veiron 2.2.2017, 8:20

Класс. Спасибо cirus.

Автор: veiron 2.2.2017, 19:20

А как картинки пилот будет быстрее находить: с диска или с загруженных в массив?

Автор: cirus 2.2.2017, 19:33

Загруженные в память.

Автор: veiron 3.2.2017, 21:07

Код
set #a1 findimage (#startX #startY #endX #endY  (%image1[1 1]) %a1 2 80 1 3)
set #a2 findimage (#startX #startY #endX #endY  (%image1[2 1]) %a2 2 80 1 3)
set #a3 findimage (#startX #startY #endX #endY  (%image1[3 1]) %a3 2 80 1 3)

В данных координатах есть изображение #a3 в лог выводит 100, а #a1 и #a2 выводит -4, а не 0. Так и должно быть или я что-то не правильно делаю? В массив эти изображения загружены.

P.S Разобрался, я не так делал

Автор: Jpr 7.2.2017, 11:03

Цитата(cirus @ 2.2.2017, 19:33) *

Загруженные в память.

Прошу прощения за такие вопросы, но память где расположена?

Второй вопрос, как добавить в скрипт рандомные временные паузы и нажатия по разным координатам для скрытности от админов игры, либо это уже есть в скрипте?

Третий вопрос - не нападает, пробовал менять картинку "напасть", но все равно не нападает. Может не различает картинку и ее цвета?

Автор: veiron 7.2.2017, 11:16

Цитата(Jpr @ 7.2.2017, 11:03) *

Второй вопрос, как добавить в скрипт рандомные временные паузы и нажатия по разным координатам для скрытности от админов игры, либо это уже есть в скрипте?

set #wait random(3000) + 3000 // рандомная временная пауза

left 100 100 20 20 // рандомный клик

Автор: Jpr 7.2.2017, 11:49

Цитата(veiron @ 7.2.2017, 11:16) *

set #wait random(3000) + 3000 // рандомная временная пауза

left 100 100 20 20 // рандомный клик

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

Автор: cirus 9.2.2017, 2:17

Цитата
как добавить в скрипт рандомные временные паузы и нажатия по разным координатам для скрытности от админов игры, либо это уже есть в скрипте?

Копируем скрипт в пилот, нажимаем Ctrl + F, ищем слова left, дописываем нужные числа для рандома. Например:
Код
left %mob [1 1] %mob [1 2] 5 5 -5 -5    // клик будет в координаты ±5 пикселей

Ищем слова wait, добавляем нужный рандом. Например:
Код
wait #loadisland + random(200)
wait 200 + random(100)

Код
не нападает, пробовал менять картинку "напасть", но все равно не нападает. Может не различает картинку и ее цвета?

Переменная #attack должна быть 1.
Проверить находится ли вообще картинка:
Код
set #a findimage (0 0 1920 1080 (искомая_картинка) %a)
hint #a
// если 0, то картинка не находится, если число больше 0 значит картинка нашлась

Автор: Jpr 9.2.2017, 13:33

Цитата(cirus @ 9.2.2017, 2:17) *

Переменная #attack должна быть 1.
Проверить находится ли вообще картинка:
Код
set #a findimage (0 0 1920 1080 (искомая_картинка) %a)
hint #a
// если 0, то картинка не находится, если число больше 0 значит картинка нашлась


В моем случае при #attack 0 находит монстра и останавливается, при #attack 1 нажимает на монстра и останавливается. Возможно я не верно понял и так и должно быть. Просто я думал, что в скрипте есть нажатие кнопки "напасть" и только потом скрипт останавливается для ведения боя.

Автор: cirus 9.2.2017, 15:24

Код
set #c findimage (#startX #startY #endX #endY (%image1[2 1]) %a)

Это поиск картинки Напасть. После этой строки добавьте log #c. Что будет в логе?
Ушёл, буду ночью.

Автор: cirus 18.2.2017, 3:04

Добавил скрипт для сбора дропа с мобов.

Автор: veiron 18.2.2017, 17:00

Цитата(cirus @ 18.2.2017, 3:04) *

Добавил скрипт для сбора дропа с мобов.

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

Автор: cirus 18.2.2017, 18:59

Цитата
Но дроп который продавать лучше не указывать

Предметы указанные в массиве %picture2 забираются.
Предметы указанные в массиве %picture3 разбиваются.
Всё остальное продаётся.

Автор: cirus 6.3.2017, 1:20

Обновил скрипт для поиска моба.

Автор: Rey92 29.9.2017, 15:21

Добрый день. Работает наполовину скрипт у меня)
картинки сделала свои - запускается - вылетает моб найден и ошибка....

Автор: cirus 29.9.2017, 15:33

На какой строке ошибка и что пишет.

P.S. Ушел на работу. Буду ночью.

Автор: Roma777 28.11.2017, 20:40

Добрый день! Я правильно понял скрипт только находит монстра и останавливается, в скрипте бой не прописан?

Автор: cirus 29.11.2017, 2:00

Цитата
только находит монстра и останавливается, в скрипте бой не прописан?

Да.
Бой в другом скрипте: https://forum.uokit.com/index.php?showtopic=29738

Автор: Roma777 29.11.2017, 20:03

еще вопрос)) Скрипты на поиск моба, бой и дроп можно обьединить в один или работать не будет?

Автор: cirus 30.11.2017, 2:04

Можно и в один, но по отдельности проще настраивать. Так что сначала лучше в разных скриптах.
Например, скрипт0 - поиск моба, скрипт1 - бой, скрипт2 - дроп. В них нужно дописать stop_script, когда моб найден, убит, дроп собран. Скрипт3 - управляет остальными.

Код
// скрипт 3
// не забыть сделать привязку для всех скриптов
start_script 0 wait  // запустить скрипт 0, ждать когда он завершит работу, т. е. моб найден.
start_script 1 wait  // запустить скрипт1, ждать когда он завершит работу, т. е. моб убит
start_script 2 wait  // запустить скрипт2, ждать когда он завершит работу, т. е. дроп собран
// дальше всё начнётся сначала



Автор: ykyp24rus 8.2.2019, 5:45

У кого нибудь может остались картинки с мобами и шмотом? поделитесь пожалуйста.

И подскажите где подправить чтобы нажимал выход если дропа нет. Интерфейс немного поменялся.

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