Что нового

Нахождение стрелочки HUD путем вычисления

hikki

Продвинутый
Сообщения
233
Репутация
99
Искал способ нахождения координат щита, брони, модулей ф1, ф2 и тд. чтоб координаты не зависели от разрешения окна игры, пока не догадался как это делать все было привязано к стрелочке HUD, а координата стрелочки была жестко вбита, что само собой неправильно. Оказалось все просто, можно взять HUD за центр, там где желтым показана капа и перетянуть максимально вправо, теперь координаты находятся простейшим вычислением.
Код:
$WinPos = WinGetPos("EVE")
$X=$WinPos[2]-458; координата верхнего конца стрелочки по Х
$Y=$WinPos[3]-45; координата верхнего конца стрелочки поY
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Собсно так же работает WinGetHP, сначала там ищется стрелка HUD, а потом исходя из нее вычисляется центр HUDa, ибо оно имеет свойство гулять в разные стороны на пару пикселей, но гуляет только по оси X, а поскольку стрелка жестко привязана к HUDу то найдя ее найдем всю панель.
Код:
$WinSearchHUD = PixelSearch($WinSearchHealth[1]-10, $WinSearchHealth[2], $WinSearchHealth[1]+10,$WinSearchHealth[2], $WinSearchHealth[3], $WinSearchHealth[4]) ;Ищем треугольник справа от худа
			If @error Then 
				Return "Немогу найти треугольник HUDa" 
			Else
				$WinGetHealth[1] = $WinSearchHUD[0] - 58 ;Если нашли тругольник то определяем где находится центр худа
				$WinGetHealth[2] = $WinSearchHUD[1] - 66
 
Автор
H

hikki

Продвинутый
Сообщения
233
Репутация
99
да, но в моем способе нет пиксельсерча :smile: и хотя стрелочка будет искаться всего один раз, но все равно приятно
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
А я в твоем способе вижу лишь вычисление исходя из позиции окна, где там поиск?
 
Автор
H

hikki

Продвинутый
Сообщения
233
Репутация
99
Да, там вычисление, незнаю, я просто сильно рад что не надо искать этот проклятый треугольник, и также теперь мне не надо будет искать координаты если случайно получится сдвинуть в сторону HUD (а это случалось часто), а также если захочу перенести бота на другой комп.

ЗЫ наверное мы идем немного разными путями)) но это и хорошо, в своем коде я пытаюсь уменьшить количество изменяемых параметров, так чтобы настроить бота можно было без использования AutoIt Window Info или подобной утилиты для точного нахождения цвета и координат. В данный момент ищу способ простого нахождения окна с дронами, если найду то смогу быть довольным собой :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 566
Репутация
933
Мы исходим из теории относительности и наш бот примерно ищет расположения нужных окон если даже их чуть чуть подвинуть опираясь именно на их ключевые элементы интерфейса :smile:
 

Archy26

EVE DEVE eve bot development group
Сообщения
60
Репутация
42
Belfigor сказал(а):
Мы исходим из теории относительности и наш бот примерно ищет расположения нужных окон если даже их чуть чуть подвинуть опираясь именно на их ключевые элементы интерфейса :smile:
Оооо ДА! Стоило спорить неделями с Бельфигором, чтобы потом увидеть как он защищает эту точку зрения. ;D
2Hikki, Дело в чём, Hikki, проблема была именно в этом, в еве весь интерфейс постоянно "едет" куда-то и "съезжает" относительно абсолютных координат клиентской части окна. Я не буду приводить все доводы в пользу нашей с Белфигором точки зрения, скажу лишь, что твой способ, не оставляет тебе выбора. Если ты не хочешь использовать пиксельсерч (а зря, кстати Вот Бельфигор, например, два месяца назад убедил меня что его использование даёт много преимуществ, и сразу же вслед за этим, была реализована концепция "теории относительности"), ты навязываешь себе постоянные правки координат всего на свете. Функция простая и очень удобная при правильном использовании. При некоторых ограничения в использовании, нами при помощи неё были горы свёрнуты.
ну и концептик:
Переключаясь на окно евы, мы находим все координаты, которые только можно найти, присваиваем их соответствующим переменным, и в этой конкретной сессии контроля, больше не имеем проблем с нахождением тех или иных элементов интерфейса евы. Плюс данного способа в том, что куда бы не сместились элементы (хоть на пол экрана) мы всегда их найдём и сможем с ними взаимодействовать. Вот так.

Впрочем дело твоё, смотри сам.
 
Автор
H

hikki

Продвинутый
Сообщения
233
Репутация
99
почитал, подумал, еще подумал, сильно подумал :shok:
в результате получился код похожий на кусок из модуля WinGetHP
тоесть идет поиск пикселя на полоске толщиной в 1 пиксель, правда в WinGetHP область поиска задана жестко, у меня эта область вычисляется автоматом, диапазон поиска в моем случае больше получается, потому что берется весь возможный диапазон нахождения а не 20 пикселей где предположительно может быть стрелочка, но зато никаких телодвижений при переносе на другой комп.

Код:
$WinPos = WinGetPos("EVE")
Func find_angle_HUD()
;диапазон поиска координат HUD
$HUD_X=$WinPos[0]+240
$HUD_Y=$WinPos[3]-45
$HUD_X1=$WinPos[2]-458
$HUD_Y1=$WinPos[3]-45
$angle_HUD=PixelSearch($HUD_X, $HUD_Y, $HUD_X1, $HUD_Y1, 15132390, 3)
		If Not @error Then
		TT("найден HUD" &$angle_HUD[0] &"," &$angle_HUD[1])
		MouseMove($angle_HUD[0], $angle_HUD[1])
		Sleep(3000)
		EndIf
If @error Then
	MsgBox(4096, "Ошибка", "Возможно нет HUD на экране, скрипт будет закрыт через 10 секунд", 10)
	Exit
EndIf
EndFunc
 

Archy26

EVE DEVE eve bot development group
Сообщения
60
Репутация
42
2 Hikki: пятёрка с плюсом.
Одно сомнение меня берёт. мы всё таки исходили из того, что худ должен быть где-то немношка пасеридинке. Плюс-минус 50-100 пикселей вправо-влево. Проверка на положение худа, всего одна в очереди.

Вообще, ещё на самой заре нашего с белфигором сотрудничества, я ему предлагал написать скрипт, который будет настраивать всеь интерфейс под бота, ДО начала работы бота.
Т.е. поиск - не найдено - ищем шире, нашли! тащим туда - куда надо.
И т.д. Но Бельфигор тогда сказал - "пока будем руками настраивать. А расположение удобное для нас может ещё поменяться." Тогда-то, он был конечно, прав, но сейчас...

Напишу в список "хотелок".
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Ага, ага... Я тоже уже задумываюсь над тем, чтобы сделать определение всех тех переменных, что заданы в options. Для удобства. А то шаг вправо, шаг влево, чуть протащил случайно что-то куда-то и всё, ищи и переопределяй ручками...
 
Автор
H

hikki

Продвинутый
Сообщения
233
Репутация
99
Чтото вспомнил про эту тему. Как выяснилось, выше выложеный код не дает 100%, в принципе об это было известно сразу поэтому то там и было
Код:
MouseMove($angle_HUD[0], $angle_HUD[1])

чтоб глазами проверять при старте. Иногда при определенном освещении, и ракурсе, на нижней части индикатора появлялся блик и ложное срабатывание, код был допилен и забыт))
Код:
$WinPos = WinGetPos("EVE - ")
Func find_angle_HUD(); внизу, кнопки F1 итд
	;диапазон поиска координат HUD
	$HUD_X = $WinPos[0] + 240
	$HUD_Y = $WinPos[3] - 45
	$HUD_X1 = $WinPos[2] - 458
	$HUD_Y1 = $WinPos[3] - 45
	$angle_HUD = PixelSearch($HUD_X, $HUD_Y, $HUD_X1, $HUD_Y1, 15132390, 1)
	If Not @error Then;
		$HUD_X=$angle_HUD[0]+1; в этом диапазоне есть возможность ложного срабатывания, поэтому второй прогон
		$angle_HUD_t = PixelSearch($HUD_X, $HUD_Y, $HUD_X1, $HUD_Y1, 15132390, 1)
			If Not @error Then
			$angle_HUD=$angle_HUD_t
			TT("найден HUD" & $angle_HUD[0] & "," & $angle_HUD[1])
			Sleep(300)
			EndIf
		MouseMove($angle_HUD[0], $angle_HUD[1])
	EndIf
	If @error Then
		MsgBox(4096, "Ошибка", "Возможно нет HUD на экране, скрипт будет закрыт через 10 секунд", 10)
		Exit
	EndIf
EndFunc
 
Верх