Что нового

[Автоматизация] Поиск слова в заданой области экрана используя Pixelsearch

x0ma

Новичок
Сообщения
4
Репутация
0
имеем такое окно 1920х1080
123cpl.jpg

в правой части экрана открыто окно где видно варианты выбора миссий, мне нужно выбирать миссию в которой встречается слово Lockboxes. Желтым я отметил зону где ведется поиск, красным точки которые должен найти пиксельсерч. Изменить зону поиска пикселей не получится так как длина описания миссий изменяется. Проблема в том что поиск идет слишком долго и часто вообще ничего не находит. Подскажите как это можно исправить.
вот код:
Код:
local $coord = PixelSearch (1583, 354, 1583, 354, 0x106f9c, 255)
   For $i = 1564 To 1650 Step 1 ;ищем lockboxes
	For $j = 386 To 735 Step 1
SetError(1)
	PixelSearch ($i, $j, $i, $j, 0x78C1DF)
    If Not @error Then
        PixelSearch ($i+24,$j,$i+24,j,0x87D3F0)
		If Not @error Then
			PixelSearch ($i+32,$j,$i+32,$j,0x83CEEC)
			If Not @error Then
				$coord = PixelSearch ($i+66,$j+10,$i+66,$j+10,0x92DEFB)
			EndIf
		EndIf			
    EndIf
	Next
Next
   MouseClick ( 'right', $coord[0], $coord[1])
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Автоматизация] SWToR крафт используя Pixelsearch

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] SWToR крафт используя Pixelsearch" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.
 

running-frag

why me?
Сообщения
441
Репутация
60
возможно ли избежать "градиент" бэкграунда игровыми способами?
ну там чёрный либо другой статический цвет (типо изменить подложку окна, либо подложить другое окно)

ps: честно говоря я вообще удивлён что у тебя что то находит
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
x0ma,
мало данных, но из того что я вижу


как бы искал я:

Шаг 1. В зелёной зоне снизу вверх ищем зелёный пиксель (надпись "Cost: ...")

Шаг 2. От найденной точки делаем смещение вверх - в этом месте конец предыдущего задания.

Шаг 3. Проверяем чтобы в красной зоне не было синих пикселей.
Есть синие пиксели - сдвигаем нижнюю границу зелёной зоны до верха проверенной в Шаге 2 красной зоны и снова идём на Шаг 1.
Нету синих пикселей - это и есть Lockboxes
 
Автор
X

x0ma

Новичок
Сообщения
4
Репутация
0
C2H5OH, спасибо ваша идея очень помогла
 
Автор
X

x0ma

Новичок
Сообщения
4
Репутация
0
получился такой код:
Код:
local $mini=1750
local $maxi=1770
local $minj=400
local $maxj=745
Local $x=1623
Local $y=354
while 1 
	SetError(1)
local $coord = PixelSearch ($mini, $minj, $maxi, $maxj, 0x5eed73, 30) ;ищем кост
	If Not @error Then
		$minj=$coord[1]+ 50
		SetError(1)
		local $coords = PixelSearch ($coord[0] - 20, $coord[1] - 28, $coord[0] - 120, $coord[1] - 28, 0x92dffb, 30) ;ищем первую попавшуюся синюю букву
		 If Not @error Then
			 SetError(1)
			local $coordb = PixelSearch ($coords[0] - 8, $coords[1] - 8, $coords[0] - 8, $coords[1] - 8, 0x01416c, 10) ; проверяем нет ли буквы t сразу после s
			 If Not @error Then 
				 $x=$coordb[0]
				 $y=$coordb[1]
				 ExitLoop
			EndIf	 
		EndIf
	Else
		ExitLoop
	Endif
if $minj>$maxj Then ExitLoop
WEnd
MouseClick ('right', $x, $y)

Меня все устраивает, но хотел бы услышать ваши мнения как его можно улучшить

running-frag, избавиться от градиента не получилось, но изменения цвета там минимальны
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
И че работает??
Мы же говорили о том что искать Cost надо снизу вверх, то есть по идее вот так должно быть
Код:
local $coord = PixelSearch ($maxi, $minj, $mini, $maxj, 0x5eed73, 30) ;ищем кост

Ну и алгоритм получился всё таки смешанный. Я предложил искать пустоту, а ты всё таки ещёшь буквы. ;D
 

Asshaker

Знающий
Сообщения
150
Репутация
17
попробуй использовать http://autoit-script.ru/index.php/topic,62.0.html
Когда бота для Евы писал, CheckPixel очень помог с прозрачными объектами.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
x0ma,
а если будет 10 Lockboxes, ты как выкрутишься с проверкой букв? ;D
 

running-frag

why me?
Сообщения
441
Репутация
60
я бы искал от "Cost" (зелёной надписи) вниз, это даст логическое преимущество "блока" сообщения (если надумаешь развивать бота это даст преимущество) + если последняя надпись ("Cost") ушла вниз (за видимую чать), ты не сможешь поймать строку в последнем ряде блока
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
:shok: Фраг! Даже не верится что это ты написал!!! :-\
Вниз искать не получится так как "длина описания миссий изменяется".
Ты теряешь постоянную привязку между надписью Cost и местом где описан бонус за выполнение задания. :scratch:
Вот где самая главная изюминка
[box]Шаг 2. От найденной точки делаем смещение вверх - в этом месте конец предыдущего задания.[/box]
 

running-frag

why me?
Сообщения
441
Репутация
60
C2H5OH [?]
Вниз искать не получится так как "длина описания миссий изменяется".Ты теряешь постоянную привязку между надписью Cost и местом где описан бонус за выполнение задания.
высота меняется? ну и пусть меняется, большая проблема? мы ж говорим о PixelSearch () а не о PixelGetColor ()
Упускаешь одно, последнее задание в твоём вариаента никогда не увидит (независимо от того видим мы его или оно ушло за размеры окна)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Упускаешь одно, последнее задание в твоём вариаента никогда не увидит (независимо от того видим мы его или оно ушло за размеры окна)
:rofl:
А мне не нужно найти ВСЕ задания. ;D
Мне нужно найти первое подходяще и ути его выполнять. :ok:
Вот попробуй оценить вероятность что в видимой части списка заданий нет ни одного с Lockboxes. :scratch:
И, кстати, твой алгоритм тоже не обработает последнее задание. Увидит, но не обработает. :blum:
 

running-frag

why me?
Сообщения
441
Репутация
60
OffTopic:
ну я высказал свою точку зрения, просто вы начинаете скрипт писать, и уже через одно место получается - с конца %), в общем тем кто играет в эту игру думаю виднее

зы: я бы не говорил о вещах которых не могу сам реализовать, но писать другим бота ненамерен, подсказать механику - ради бога, писать - нет
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Список ведь прокручиваемый, с помощью PixelSearch можно найти прямоугольную рамку каждого задания, далее уже зная координаты углов рамки, проверять в ней всё что угодно. Если не подошло, прокручивать вниз и искать новую полноценную рамку и проверять ее.
 

running-frag

why me?
Сообщения
441
Репутация
60
к вышесказанному можно так же вернуться к одиночному поиску слова, там куча вариантов :smile: лично я вижу одну проблему - градиент на БГ
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
В моём алгоритме суть в двух вещах:
1) место, где указывается количество Lockboxes, всегда находится на одинаковом расстоянии от места где указана цена СЛЕДУЮЩЕГО задания (Cost)
2) сообщение с количеством Lockboxes короче чем другие сообщения. Поэтому нужно не искать где находятся пиксели букв, а проверить чтобы после сообщения было большое пустое пространство (без пикселей текста).

Что из этих фишек использовать, как это реализовать, что дополнително дописывать - это уже дело ТС, который, собственно, и пишет бота.
 

running-frag

why me?
Сообщения
441
Репутация
60
прям какой то эпик :smile: а что ТС надумал? или он уже забил и гамает без скриптов? :rofl:
 
Верх