1 (изменено: romzes96, 2019-01-20 00:19:43)

Тема: Визуальное понимание полоски HP в (!)любой игре(!)

Здравствуйте хотел написать некий скрипт который будет следить за полоской HP персонажа опираясь на визуально полученные данные, а не на значения из памяти игры ArtMoney и Cheat Engine. Но в процессе реализации столкнулся с непонятной мне проблемой. Пробую описать ниже после кода скрипта.
Код:

+ открыть спойлер
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
SetBatchLines, -1
SetMouseDelay, -1
SetKeyDelay, -1
CoordMode, Pixel, Window
CoordMode, Window, Window
#MaxMem 999999999
;x100 y873 x120 y1070
SeaerchArea:= [100, 873 ,120 ,1070]
CenterArea:= [(SeaerchArea[3]-SeaerchArea[1])//2, SeaerchArea[2], (SeaerchArea[3]-SeaerchArea[1])//2, SeaerchArea[4]]
CenterDifferenceY:= SeaerchArea[4]-SeaerchArea[2]
;MsgBox, SeaerchArea = %SeaerchArea%`nCenterArea = %CenterArea%`nCenterDifferenceY = %CenterDifferenceY%

getCenterPixS()
{
	global
	CenterPixels:= []
	Loop, %CenterDifferenceY%
	{
		PixelGetColor, CenterPixel, CenterArea[1], CenterArea[2]
		CenterPixels.Push(CenterPixel)
		CenterArea[2]:= CenterArea[2]+1
	}
	Return, CenterPixels
}

getCenterPixS2()
{
	global
	CenterPixels2:= []
	Loop, %CenterDifferenceY%
	{
		PixelGetColor, CenterPixel2, CenterArea[1], CenterArea[2]
		CenterPixels2.Push(CenterPixel2)
		CenterArea[2]:= CenterArea[2]+1
	}
	Return, CenterPixels2
}

comparisonPixels()
{
	global
	comP:= 1
	comparison:= 0
	Loop, %CenterDifferenceY%
	{
		If (CenterPixels[A_Index] != CenterPixels2[A_Index])
		{
			comP++
		}
	}
	comparison:= (100 * comP) // CenterDifferenceY
	ToolTip, %comparison%
	Return, comparison
}

1::
getCenterPixS()
Loop
{
	getCenterPixS2()
	comparisonPixels()
}
Return

2::
ExitApp
Return

Принцип работы скрипта:
1) Сохранение данных полоски HP в состояние "полное HP" (в данном случае полоска HP вертикальная игра POE (Path of Exile), не состоит никакого труда для адаптации под горизонтальную полосу.)
2) Постоянный сбор тех же(из тех же пикселей на экране) данных для сравнения.
3) Сравнение
_________________________________________________

Проблема:
Проблема заключается в сравнение. 100 раз за сегодня переписал всё, либо полное сходство с первоначальными данными, либо полное различие. Отсутствует какая-либо динамика в изменениях. И я не могу понять где ошибка.

Проверял я всё это дело не только в игре, так же проверял на рабочем столе. Игра тут не причем.

! = К любой игре где отсутствует какие либо фильтры и альфа слои. А так же полоса всегда находиться на одном месте.

2

Re: Визуальное понимание полоски HP в (!)любой игре(!)

не совсем понятно в чем, собственно, проблема состоит.
Но как мне помнится в ПОЕ не полоска, а сфера, наполненная красным цветом как индикация уровня хп.
Я как то делал подобное -
Отмечаешь узкий вертикальный прямоугольник который затрагивает практически всю сферу.
И в нем ищешь красный цвет с большой вариативностью.
и первое нахождение красной точки по Y координате даст тебе возможность получить в процентах хп.