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

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

UoKit.com Форумы _ UO Pilot в Lineage II _ Проблемы с кликером на фарм

Автор: VALHALLA 23.12.2017, 13:31

Здравствуйте,я только вчера узнал за программу и начал разбираться в ней,за основу я взял скрипт для кача
https://forum.uokit.com/index.php?showtopic=21166 и собственно всё работает,но есть пару проблем которые я не могу решить(наброски есть):
1) Скрипт не работает,если игру перекрывает другая программа(любой браузер и т.д.) как это можно решить?
2) Бывает такое что берёт в таргет дальнего моба,хотя есть мобы и ближе ко мне. Можно ли перед тем как атаковать,проверять расстояние до цели по всем макросам и атаковать кто ко мне ближе?желательно пример привести
3) Можно ли исключить из таргета определённого моба по нику,берётся в таргет через /targetnext(опыта с него нет,а затраты на его убийство большие).
Интересует больше всего 1 и 2 вопрос

Код

// Кнопка с макросом /targetnext
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7

// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

:start
while_not #xMobHP, #yMobHP #mobColorHP  // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500
    wait random (1000)
end_while

set #nMob 1

while #xMobHP, #yMobHP #mobColorHP // Пока видим хп - лупим
    send %attack [#nAttack]
    if #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500
    wait random (1000)
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start

Автор: cirus 23.12.2017, 22:09

1. Можно. Запустить код, чтобы узнать смещение координат:

код
Код
// Сделать привязку к окну Ctrl + A
// Указать цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Указать координаты крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #marker 0
for #i 0 20
   for #j 0 40
       set #x #xMobHP + #i
       set #y #yMobHP + #j
       get color #color2 #x #y workwindow
       if #color2 = #mobColorHP
          log Смещение по X = #i   по Y = #j
          set #marker 1
       end_if
   end_for
end_for
if #marker = 0
    log Смещение не найдено
end_if
end_script

В скрипте исправить:
Код
set #xMobHP 536 + 8  // + смещение по X, может быть другим
set #yMobHP 49 + 31 // + смещение по Y, может быть другим

Код
while_not #xMobHP, #yMobHP #mobColorHP workwindow  // дописать workwindow
while #xMobHP, #yMobHP #mobColorHP workwindow  // дописать workwindow

2. Проверить расстояние можно по точке на радаре, а вот как вернуться к тому же мобу это хз.
3. Сделать картинку с именем ненужного моба. После нажатия NextTarget через http://uopilot.tati.pro/index.php?title=Findimage искать эту картинку, если найдена, значит выделен ненужный моб, снова жмём NextTarget.
Пример картинки: Прикрепленный файл  1.bmp ( 2,34 килобайт ) Кол-во скачиваний: 433

Левый верхний пиксель и весь фон нужно закрасить в любой цвет.

Автор: VALHALLA 23.12.2017, 22:54

хм,вставил твой код как отдельный скрипт,действие прерывается на выделенной части и перескакивает вниз и так заново
// Сделать привязку к окну Ctrl + A
// Указать цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Указать координаты крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #marker 0
for #i 0 20
for #j 0 40
set #x #xMobHP + #i
set #y #yMobHP + #j
get color #color2 #x #y workwindow
if #color2 = #mobColorHP
log Смещение по X = #i по Y = #j
set #marker 1
end_if
end_for
end_for
if #marker = 0
log Смещение не найдено
end_if
end_script

Автор: VALHALLA 23.12.2017, 23:09

Цитата(cirus @ 23.12.2017, 23:09) *

1. Можно. Запустить код, чтобы узнать смещение координат:
код
Код
// Сделать привязку к окну Ctrl + A
// Указать цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Указать координаты крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #marker 0
for #i 0 20
   for #j 0 40
       set #x #xMobHP + #i
       set #y #yMobHP + #j
       get color #color2 #x #y workwindow
       if #color2 = #mobColorHP
          log Смещение по X = #i   по Y = #j
          set #marker 1
       end_if
   end_for
end_for
if #marker = 0
    log Смещение не найдено
end_if
end_script

В скрипте исправить:
Код
set #xMobHP 536 + 8  // + смещение по X, может быть другим
set #yMobHP 49 + 31 // + смещение по Y, может быть другим

Код
while_not #xMobHP, #yMobHP #mobColorHP workwindow  // дописать workwindow
while #xMobHP, #yMobHP #mobColorHP workwindow  // дописать workwindow

2. Проверить расстояние можно по точке на радаре, а вот как вернуться к тому же мобу это хз.
3. Сделать картинку с именем ненужного моба. После нажатия NextTarget через http://uopilot.tati.pro/index.php?title=Findimage искать эту картинку, если найдена, значит выделен ненужный моб, снова жмём NextTarget.
Пример картинки: Прикрепленный файл  1.bmp ( 2,34 килобайт ) Кол-во скачиваний: 433

Левый верхний пиксель и весь фон нужно закрасить в любой цвет.

убрал workwindows и заработало,в логи пришло вот такое
Код
22:05:12 2 (autosaved_2.txt, 14): Смещение по X = 0   по Y = 0
22:05:36 2 (autosaved_2.txt, 14): Смещение по X = 1   по Y = 0

Автор: cirus 23.12.2017, 23:29

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

Так и должно быть. Отключить слежение за ходом скрипта, задержку между строк 0. Дождаться когда скрипт становится.

Автор: VALHALLA 23.12.2017, 23:40

Цитата(cirus @ 24.12.2017, 0:29) *

Так и должно быть. Отключить слежение за ходом скрипта, задержку между строк 0. Дождаться когда скрипт становится.

в общем если оставить как ты написал,ничего не происходит,как только я убираю workwindow сразу же начинается процесс
Код
22:30:54 1 (autosaved_2.txt, 14): Смещение по X = 0   по Y = 0
22:30:56 1 (autosaved_2.txt, 14): Смещение по X = 1   по Y = 0
22:30:57 1 (autosaved_2.txt, 14): Смещение по X = 2   по Y = 0
22:30:58 1 (autosaved_2.txt, 14): Смещение по X = 3   по Y = 0
22:31:00 1 (autosaved_2.txt, 14): Смещение по X = 4   по Y = 0
22:31:01 1 (autosaved_2.txt, 14): Смещение по X = 5   по Y = 0
22:31:03 1 (autosaved_2.txt, 14): Смещение по X = 6   по Y = 0
22:31:04 1 (autosaved_2.txt, 14): Смещение по X = 7   по Y = 0
22:31:06 1 (autosaved_2.txt, 14): Смещение по X = 8   по Y = 0
22:31:07 1 (autosaved_2.txt, 14): Смещение по X = 9   по Y = 0
22:31:09 1 (autosaved_2.txt, 14): Смещение по X = 10   по Y = 0
22:31:10 1 (autosaved_2.txt, 14): Смещение по X = 11   по Y = 0
22:31:12 1 (autosaved_2.txt, 14): Смещение по X = 12   по Y = 0
22:31:13 1 (autosaved_2.txt, 14): Смещение по X = 13   по Y = 0
22:31:14 1 (autosaved_2.txt, 14): Смещение по X = 14   по Y = 0
22:31:16 1 (autosaved_2.txt, 14): Смещение по X = 15   по Y = 0
22:31:17 1 (autosaved_2.txt, 14): Смещение по X = 16   по Y = 0
22:31:19 1 (autosaved_2.txt, 14): Смещение по X = 17   по Y = 0
22:31:20 1 (autosaved_2.txt, 14): Смещение по X = 18   по Y = 0
22:31:22 1 (autosaved_2.txt, 14): Смещение по X = 19   по Y = 0
22:31:23 1 (autosaved_2.txt, 14): Смещение по X = 20   по Y = 0

делать я так понял нужно по последним значениям,в моём случае вышло вот так
set #xMobHP 536 + 20
set #yMobHP 49 + 0
но ничего не поменялось,если поставить workwindow то вообще не работает,указываю окно с помощью ctrl+a

Автор: cirus 23.12.2017, 23:51

Цитата
ничего не происходит

Так трудно дождаться окончания работы скрипта?
Либо напишет смещение, либо что смещение не найдено.
Не надо трогать workwindow. Убирая его вы делаете бессмысленным скрипт.

Автор: VALHALLA 24.12.2017, 0:03

Цитата(cirus @ 24.12.2017, 0:51) *

Так трудно дождаться окончания работы скрипта?
Либо напишет смещение, либо что смещение не найдено.
Не надо трогать workwindow. Убирая его вы делаете бессмысленным скрипт.

вот что вышло в итоге
22:54:56 1 (autosaved_2.txt, 14): Смещение по X = 20 по Y = 30
переделав уже основной скрипт
Код
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7

// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536 + 20
set #yMobHP 49 + 30

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

:start
while_not #xMobHP, #yMobHP #mobColorHP workwindow // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500
    wait random (1000)
end_while

set #nMob 1

while #xMobHP, #yMobHP #mobColorHP workwindow // Пока видим хп - лупим
    send %attack [#nAttack]
    if #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500
    wait random (1000)
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start

запустив его доходит до перебора макросов и на этом всё заканчивается,что в открытом и также если сверху будет браузер

Автор: cirus 24.12.2017, 0:11

Цитата
Смещение по X = 20 по Y = 30

Это всё что было в логе? Или это последнее значение? Нужно какое-то из первых. Также смещение можно проверить на какой-то другой точке. На хп, мп персонажа или ещё чём-то.
Если было X = 8, Y = 31, то пробуйте его в основном скрипте.

Автор: VALHALLA 24.12.2017, 0:13

Цитата(cirus @ 24.12.2017, 1:11) *

Это всё что было в логе? Или это последнее значение? Нужно какое-то из первых. Также смещение можно проверить на какой-то другой точке. На хп, мп персонажа или ещё чём-то.
Если было X = 8, Y = 31, то пробуйте его в основном скрипте.

Код
22:54:09 1 (autosaved_2.txt, 14): Смещение по X = 0   по Y = 30
22:54:10 1 (autosaved_2.txt, 14): Смещение по X = 1   по Y = 30
22:54:12 1 (autosaved_2.txt, 14): Смещение по X = 2   по Y = 30
22:54:13 1 (autosaved_2.txt, 14): Смещение по X = 3   по Y = 30
22:54:14 1 (autosaved_2.txt, 14): Смещение по X = 4   по Y = 30
22:54:16 1 (autosaved_2.txt, 14): Смещение по X = 5   по Y = 30
22:54:17 1 (autosaved_2.txt, 14): Смещение по X = 6   по Y = 30
22:54:27 1 (autosaved_2.txt, 14): Смещение по X = 7   по Y = 30
22:54:39 1 (autosaved_2.txt, 14): Смещение по X = 8   по Y = 30
22:54:40 1 (autosaved_2.txt, 14): Смещение по X = 9   по Y = 30
22:54:42 1 (autosaved_2.txt, 14): Смещение по X = 10   по Y = 30
22:54:43 1 (autosaved_2.txt, 14): Смещение по X = 11   по Y = 30
22:54:44 1 (autosaved_2.txt, 14): Смещение по X = 12   по Y = 30
22:54:46 1 (autosaved_2.txt, 14): Смещение по X = 13   по Y = 30
22:54:47 1 (autosaved_2.txt, 14): Смещение по X = 14   по Y = 30
22:54:49 1 (autosaved_2.txt, 14): Смещение по X = 15   по Y = 30
22:54:50 1 (autosaved_2.txt, 14): Смещение по X = 16   по Y = 30
22:54:52 1 (autosaved_2.txt, 14): Смещение по X = 17   по Y = 30
22:54:53 1 (autosaved_2.txt, 14): Смещение по X = 18   по Y = 30
22:54:55 1 (autosaved_2.txt, 14): Смещение по X = 19   по Y = 30
22:54:56 1 (autosaved_2.txt, 14): Смещение по X = 20   по Y = 30

вот все логи,какие брать?остальное попробую завтра



Автор: cirus 24.12.2017, 0:19

Ну с Y понятно 30. Попробуйте ещё не на полоске хп, на чём-то другом, чтобы с X определиться.

Автор: VALHALLA 24.12.2017, 11:04

Цитата(cirus @ 24.12.2017, 1:19) *

Ну с Y понятно 30. Попробуйте ещё не на полоске хп, на чём-то другом, чтобы с X определиться.

вот первый тест,проверял на полоске мп в своём таргете
Код
9:57:36 1 (autosaved_2.txt, 14): Смещение по X = 6   по Y = 31
9:57:57 1 (autosaved_2.txt, 14): Смещение по X = 17   по Y = 31
9:57:58 1 (autosaved_2.txt, 14): Смещение по X = 18   по Y = 31
9:57:59 1 (autosaved_2.txt, 14): Смещение по X = 19   по Y = 31
9:58:00 1 (autosaved_2.txt, 14): Смещение по X = 20   по Y = 31


а вот второй тест,где я проверял мп уже в окошке в левом углу

Код
9:59:15 1 (autosaved_2.txt, 14): Смещение по X = 0   по Y = 30
9:59:17 1 (autosaved_2.txt, 14): Смещение по X = 1   по Y = 30
9:59:18 1 (autosaved_2.txt, 14): Смещение по X = 2   по Y = 30
9:59:20 1 (autosaved_2.txt, 14): Смещение по X = 3   по Y = 30
9:59:21 1 (autosaved_2.txt, 14): Смещение по X = 4   по Y = 30
9:59:43 1 (autosaved_2.txt, 14): Смещение по X = 5   по Y = 30
9:59:45 1 (autosaved_2.txt, 14): Смещение по X = 6   по Y = 30
10:00:11 1 (autosaved_2.txt, 14): Смещение по X = 7   по Y = 30
10:00:13 1 (autosaved_2.txt, 14): Смещение по X = 8   по Y = 30
10:00:14 1 (autosaved_2.txt, 14): Смещение по X = 9   по Y = 30
10:00:15 1 (autosaved_2.txt, 14): Смещение по X = 10   по Y = 30
10:00:17 1 (autosaved_2.txt, 14): Смещение по X = 11   по Y = 30
10:00:18 1 (autosaved_2.txt, 14): Смещение по X = 12   по Y = 30
10:00:20 1 (autosaved_2.txt, 14): Смещение по X = 13   по Y = 30
10:00:32 1 (autosaved_2.txt, 14): Смещение по X = 14   по Y = 30
10:00:34 1 (autosaved_2.txt, 14): Смещение по X = 15   по Y = 30
10:00:35 1 (autosaved_2.txt, 14): Смещение по X = 16   по Y = 30
10:00:37 1 (autosaved_2.txt, 14): Смещение по X = 17   по Y = 30
10:00:39 1 (autosaved_2.txt, 14): Смещение по X = 18   по Y = 30
10:00:41 1 (autosaved_2.txt, 14): Смещение по X = 19   по Y = 30
10:00:43 1 (autosaved_2.txt, 14): Смещение по X = 20   по Y = 30


какие надо?

Автор: cirus 24.12.2017, 11:39

Проверяйте не на полосках. На вещах в инвентаре или скилах. Посмотрите какое чаще всего встречается. Скорее всего что-то близко к этому: Смещение по X = 6 по Y = 31.

Автор: VALHALLA 25.12.2017, 12:17

Цитата(cirus @ 24.12.2017, 12:39) *

Проверяйте не на полосках. На вещах в инвентаре или скилах. Посмотрите какое чаще всего встречается. Скорее всего что-то близко к этому: Смещение по X = 6 по Y = 31.

проверял множество положений 6.31\6.30\0....10.30-31 все равно если браузер будет сверху игры,ничего не происходит. Еще заметил что при добавлении workwindow в проверку хп и атаку скрипт перестаёт работать даже без смещений sad.gif

Автор: cirus 25.12.2017, 12:46

А так:

код
Код
// Кнопка с макросом /targetnext
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7

// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

set #endX #xMobHP + 10
set #endY #yMobHP + 35

:start
set #hp 0
while #hp = 0  // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if  #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY #mobColorHP %arrHP workwindow 1)
end_while

set #nMob 1

while #hp > 0 // Пока видим хп - лупим
    send %attack [#nAttack]
    if  #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY #mobColorHP %arrHP workwindow 1)
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start

Автор: VALHALLA 25.12.2017, 13:14

Цитата(cirus @ 25.12.2017, 13:46) *

А так:
код
Код
// Кнопка с макросом /targetnext
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7
// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

set #endX #xMobHP + 10
set #endY #yMobHP + 35

:start
set #hp 0
while #hp = 0  // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if  #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY #mobColorHP %arrHP workwindow 1)
end_while

set #nMob 1

while #hp > 0 // Пока видим хп - лупим
    send %attack [#nAttack]
    if  #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY #mobColorHP %arrHP workwindow 1)
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start



хм,так заработало,спасибо. Осталось что-то с радаром пошаманить и попробовать убрать из списка ненужного моба

Автор: VALHALLA 25.12.2017, 13:48

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

Код
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr 2)//узнавать координаты открыв картинку и задав через ctrl+a?
if  #a > 0
    send escape
    end_if

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

Автор: cirus 25.12.2017, 14:15

Цитата
//узнавать координаты открыв картинку и задав через ctrl+a?

Да.
Цитата
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr 2)

Для перекрытого окна:
Код
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr workwindow 80 1 5)

Т. е. вместо 2 указать workwindow.
80 - это точность поиска.
1- количество картинок для поиска.
5 - % погрешности в цвете, возможно надо ставить больше, т. к. окно с именем моба прозрачное цвет букв может меняться на разном фоне.
Прежде чем в основной код добавлять потестите отдельно поиск. Чтобы точно находилась картинка.
Код
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr workwindow 80 1 5)  // указать координаты
log #a   // результат поиска, показывает точность, с которой найдена картинка, или 0, если не найдена
if  #a > 0
    send escape
end_if
wait 300

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

Код
send %mob [#nMob]
wait 500 // пауза чтоб моб успел выделиться
set #a findimage...



Автор: VALHALLA 26.12.2017, 15:25

Цитата(cirus @ 25.12.2017, 15:15) *

Да.

Для перекрытого окна:
Код
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr workwindow 80 1 5)

Т. е. вместо 2 указать workwindow.
80 - это точность поиска.
1- количество картинок для поиска.
5 - % погрешности в цвете, возможно надо ставить больше, т. к. окно с именем моба прозрачное цвет букв может меняться на разном фоне.
Прежде чем в основной код добавлять потестите отдельно поиск. Чтобы точно находилась картинка.
Код
set #a findimage (#startX #startY #endX #endY (D:\папка\картинка.bmp) %arr workwindow 80 1 5)  // указать координаты
log #a   // результат поиска, показывает точность, с которой найдена картинка, или 0, если не найдена
if  #a > 0
    send escape
end_if
wait 300

Код
send %mob [#nMob]
wait 500 // пауза чтоб моб успел выделиться
set #a findimage...


собственно,первый блин комом sad.gif в логи показывает 0
я взял моба в таргет,сделал скриншот,в фотошопе закрасил все ненужное(скорее всего скриншот прикреплю) и сохранил. Потом открыл картинку и снял координаты max XY и min XY, указал их в коде. Вроде бы всё правильно сделал. http://i.piccy.info/i9/cf8c7472935851d79aab9188b81cb2db/1514290842/2134/1205286/nokill2.jpg
Еще интересует отмена цели если застрял,как это реализовать в твоей доработке?взял код с форума
Код
set #detected 0

start
if (последняя точка хп моба)// что должно быть тут?
    if #detected = 1 // Велось ли наблюдение за данным мобом уже(таргет не сбрасывался)
        if #targetTime < timer // Время на первый удар по мобу вышло
            set #detected 0
            send escape
            msg Застрял
        end_if
    else
       set #targetTime timer + 25000
       set #detected 1
    end_if
else
    set #detected 0
end_if
goto start

Автор: cirus 26.12.2017, 16:14

Скиньте код, которым ищете картинку. И скрин в bmp формате, где ищется картинка и искомую картинку тоже в bmp.

Автор: VALHALLA 26.12.2017, 16:27

Цитата(cirus @ 26.12.2017, 17:14) *

Скиньте код, которым ищете картинку. И скрин в bmp формате, где ищется картинка и искомую картинку тоже в bmp.


Код
set #a findimage (571 429 707 445 (D:\Games\nokill2.bmp) %arr workwindow 80 1 70)  // указать координаты
log #a   // результат поиска, показывает точность, с которой найдена картинка, или 0, если не найдена
if  #a > 0
    send escape
end_if
wait 300

http://rgho.st/8DgjYWW77

Автор: cirus 26.12.2017, 17:41

Картинки вообще разные. На nokill2.bmp буква 'П' высотой 9 пикселей, на Shot00004.bmp 8 пикселей. Надписи даже по длине отличаются.

Автор: VALHALLA 26.12.2017, 17:45

Цитата(cirus @ 26.12.2017, 18:41) *

Картинки вообще разные. На nokill2.bmp буква 'П' высотой 9 пикселей, на Shot00004.bmp 8 пикселей. Надписи даже по длине отличаются.

похоже я случайно растянул надпись,попробую еще раз. А что насчёт застревания?

Автор: VALHALLA 26.12.2017, 18:13

http://rgho.st/7KhDvnZBF вот переделал,тоже самое(ничего не растягивал,просто вырезал на новую вкладку и закрасил)

Автор: cirus 26.12.2017, 18:56

Теперь нормально.
Для начала координаты укажите 0 0 1920 1080.

Код
// не забываем сделать привязку Ctrl + A
set #a findimage (0 0 1920 1080 (D:\Games\nokill2.bmp) %arr workwindow 80 1 10)  
log #a   // результат поиска, показывает точность, с которой найдена картинка, или 0, если не найдена
if  #a > 0
    send escape
end_if
wait 300

Если будет нормально, скорее всего, надо будет конечные координаты по Y указывать больше, где-то + 30.
Цитата
571 429 707 445

Код
571 429 707 475

Цитата
А что насчёт застревания?

Сначала с картинкой разберёмся.

Автор: VALHALLA 26.12.2017, 19:29

Цитата(cirus @ 26.12.2017, 19:56) *

Теперь нормально.
Для начала координаты укажите 0 0 1920 1080.
Код
// не забываем сделать привязку Ctrl + A
set #a findimage (0 0 1920 1080 (D:\Games\nokill2.bmp) %arr workwindow 80 1 10)  
log #a   // результат поиска, показывает точность, с которой найдена картинка, или 0, если не найдена
if  #a > 0
    send escape
end_if
wait 300

Если будет нормально, скорее всего, надо будет конечные координаты по Y указывать больше, где-то + 30.

Код
571 429 707 475


Сначала с картинкой разберёмся.

если сделать с координатами 0 0 1920 1080 то в логи пишет 100 и сбрасывает цель,а если меняю на координаты со смещением,то в логи 0. Может оставить 0 0 1920 1080? на другие таргеты вроде бы не сбрасывает

Автор: cirus 26.12.2017, 20:05

Можно и оставить конечно. В окне пилота есть кнопка F. В окне отображается что видит пилот при поиске. Можно подобрать нужные координаты.
На счёт отмены цели можно так попробовать:

код
Код
// Кнопка с макросом /targetnext
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7

// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

set #endX #xMobHP + 10
set #endY #yMobHP + 35

set #detected 0

:start
set #hp 0
while #hp = 0  // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if  #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY (#mobColorHP) %arrHP workwindow -1 1)
end_while

set #nMob 1
set #maxHPmob %arrHP[size(%arrHP) 1]

while #hp > 0 // Пока видим хп - лупим
    set #HPmob %arrHP[size(%arrHP) 1]
    send %attack [#nAttack]
    if  #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY (#mobColorHP) %arrHP workwindow -1 1)
    gosub detect    // переход к метке
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start


:detect
    if  #maxHPmob = #HPmob  // если у моба полное хп
        if  #detected = 1 // Велось ли наблюдение за данным мобом уже(таргет не сбрасывался)
            if  #targetTime < timer // Время на первый удар по мобу вышло?
                set #detected 0
                //СЮДА ПИШЕМ ЧТО СДЕЛАТЬ ПРИ ЗАСТРЕВАНИИ.
                alarm // Будет пищать в колонки

                // отменяем таргет и берём в таргет следующего моба
                send escape

                if  #nMob < #mobsize
                    set #nMob #nMob + 1
                else
                    set #nMob 1
                end_if
                send %mob [#nMob]
                wait 500 + random (1000)
                //////////////////

            end_if
        else
            set #targetTime timer + 15000 // Сколько времени без дамага по мобу скажет о застревании. 15 секунд
            set #detected 1
        end_if
    else // Хп моба не видно
        set #detected 0 // Таргет был сброшен либо моба начали бить.
    end_if
return

Если моба не бьёт 15 секунд, то выделяет следующего. Особо не тестил.

Автор: VALHALLA 26.12.2017, 21:52

Цитата(cirus @ 26.12.2017, 21:05) *

Можно и оставить конечно. В окне пилота есть кнопка F. В окне отображается что видит пилот при поиске. Можно подобрать нужные координаты.
На счёт отмены цели можно так попробовать:
код
Код
// Кнопка с макросом /targetnext
set %mob [1] F1
// Кнопки с макросами на таргет мобов.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// таргетов - лишние убрать!
set %mob [2] F2
set %mob [3] F3
set %mob [4] F4
set %mob [5] F5

// Кнопки со скилами атаки.
// При необходимости можно добавлять неограниченное количество.
// Пустые кнопки не оставлять! Если не нужно большое количество
// скилов - лишние убрать!
set %attack [1] F6
set %attack [2] F7

// Кнопка с подбором лута.
set $pickup F8

// Сколько выпавших итемов будет подбирать.
// Если упадет меньше, то все равно будет стоять и тыкать.
set #pickup 4

// Цвет крайней левой точки полоски хп моба.
set #mobColorHP 1121401
// Координата крайней левой точки полоски хп моба.
set #xMobHP 536
set #yMobHP 49

set #mobsize size (%mob)
set #attacksize size (%attack)
set #nMob 1
set #nAttack 1

set #endX #xMobHP + 10
set #endY #yMobHP + 35

set #detected 0

:start
set #hp 0
while #hp = 0  // Пока не увидим хп, ищем моба
    send %mob [#nMob]
    if  #nMob < #mobsize
        set #nMob #nMob + 1
    else
        set #nMob 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY (#mobColorHP) %arrHP workwindow -1 1)
end_while

set #nMob 1
set #maxHPmob %arrHP[size(%arrHP) 1]

while #hp > 0 // Пока видим хп - лупим
    set #HPmob %arrHP[size(%arrHP) 1]
    send %attack [#nAttack]
    if  #nAttack < #Attacksize
        set #nAttack #nAttack + 1
    else
        set #nAttack 1
    end_if
    wait 500 + random (1000)
    set #hp findcolor(#xMobHP #yMobHP #endX #endY (#mobColorHP) %arrHP workwindow -1 1)
    gosub detect    // переход к метке
end_while

repeat #pickup // Собираем дроп.
    send $pickup
    wait 200
    wait random (500)
end_repeat

goto start
:detect
    if  #maxHPmob = #HPmob  // если у моба полное хп
        if  #detected = 1 // Велось ли наблюдение за данным мобом уже(таргет не сбрасывался)
            if  #targetTime < timer // Время на первый удар по мобу вышло?
                set #detected 0
                //СЮДА ПИШЕМ ЧТО СДЕЛАТЬ ПРИ ЗАСТРЕВАНИИ.
                alarm // Будет пищать в колонки

                // отменяем таргет и берём в таргет следующего моба
                send escape

                if  #nMob < #mobsize
                    set #nMob #nMob + 1
                else
                    set #nMob 1
                end_if
                send %mob [#nMob]
                wait 500 + random (1000)
                //////////////////

            end_if
        else
            set #targetTime timer + 15000 // Сколько времени без дамага по мобу скажет о застревании. 15 секунд
            set #detected 1
        end_if
    else // Хп моба не видно
        set #detected 0 // Таргет был сброшен либо моба начали бить.
    end_if
return

Если моба не бьёт 15 секунд, то выделяет следующего. Особо не тестил.

пикает даже если моба бью,скорее всего с полным хп неправильно что-то,может стоит вручную настроить как и минимальное хп?

Автор: cirus 26.12.2017, 22:43

Цитата
скорее всего с полным хп неправильно что-то

Исправить:
Код
set #endX #xMobHP + 10

На:
Код
set #endX #xMobHP + 400

Автор: VALHALLA 26.12.2017, 22:52

Цитата(cirus @ 26.12.2017, 23:43) *

Исправить:
Код
set #endX #xMobHP + 10

На:
Код
set #endX #xMobHP + 400


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

Автор: VALHALLA 26.12.2017, 23:04

Цитата(cirus @ 26.12.2017, 23:43) *

Исправить:
Код
set #endX #xMobHP + 10

На:
Код
set #endX #xMobHP + 400


всё,вроде бы работает,спасибо большое, с радарами и прочим повременим,рано еще,есть что изучать smile.gif

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