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
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
Класс. Спасибо cirus.
А как картинки пилот будет быстрее находить: с диска или с загруженных в массив?
Загруженные в память.
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)
left %mob [1 1] %mob [1 2] 5 5 -5 -5 // клик будет в координаты ±5 пикселей
wait #loadisland + random(200)
wait 200 + random(100)
не нападает, пробовал менять картинку "напасть", но все равно не нападает. Может не различает картинку и ее цвета?
set #a findimage (0 0 1920 1080 (искомая_картинка) %a)
hint #a
// если 0, то картинка не находится, если число больше 0 значит картинка нашлась
set #a findimage (0 0 1920 1080 (искомая_картинка) %a)
hint #a
// если 0, то картинка не находится, если число больше 0 значит картинка нашлась
set #c findimage (#startX #startY #endX #endY (%image1[2 1]) %a)
Добавил скрипт для сбора дропа с мобов.
Обновил скрипт для поиска моба.
Добрый день. Работает наполовину скрипт у меня)
картинки сделала свои - запускается - вылетает моб найден и ошибка....
На какой строке ошибка и что пишет.
P.S. Ушел на работу. Буду ночью.
Добрый день! Я правильно понял скрипт только находит монстра и останавливается, в скрипте бой не прописан?
еще вопрос)) Скрипты на поиск моба, бой и дроп можно обьединить в один или работать не будет?
Можно и в один, но по отдельности проще настраивать. Так что сначала лучше в разных скриптах.
Например, скрипт0 - поиск моба, скрипт1 - бой, скрипт2 - дроп. В них нужно дописать stop_script, когда моб найден, убит, дроп собран. Скрипт3 - управляет остальными.
// скрипт 3
// не забыть сделать привязку для всех скриптов
start_script 0 wait // запустить скрипт 0, ждать когда он завершит работу, т. е. моб найден.
start_script 1 wait // запустить скрипт1, ждать когда он завершит работу, т. е. моб убит
start_script 2 wait // запустить скрипт2, ждать когда он завершит работу, т. е. дроп собран
// дальше всё начнётся сначала
У кого нибудь может остались картинки с мобами и шмотом? поделитесь пожалуйста.
И подскажите где подправить чтобы нажимал выход если дропа нет. Интерфейс немного поменялся.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)