Re: Lineage II, работа с показателями жизни
Вынес сообщение в отдельную тему, ну и хочу представить вам функцию написанную Archy26, мы используем ее для обработки пикселя в монохромном режиме, то есть нам не важен цвет пикселя, все что мы обрабатываем - это его яркость:
Func TrimColor($TargetTrim)
#cs TrimarkColor - Comment Start
Исползуется для получения из цвета в формате RGB значение яркости пикселя. Возвращает значение от 0 до 255.
Скорость:
Функция выполняется за ~0.06-0.10 мс.
#ce TrimColor - Comment End
Dim $a, $as, $as1, $as2, $a_fin
$a = Hex($TargetTrim, 6)
$a_fin = (Dec(StringTrimRight($a, 4)) + Dec(StringTrimLeft(StringTrimRight($a, 2), 2)) + Dec(StringTrimLeft($a, 4)))/3
$TargetTrim = Round($a_fin, 0)
Return $TargetTrim
EndFunc
Получая цвет в формате 0x000000 функция возвращает значение яркости от 0 до 255, тем самым отпадает проблема со всякими бликами и переливаниями интерфейса.
Далее еще одно, более актуальное и механизму и по скорости работы решение - использование PixelSearch, определить Pixelsearch высотой в 1 пиксель и шириной на одну полоску и задать ему поиск цвета в достаточно широком диапазоне, далее. Приравнять сам пиксельсерч к какой-нибудь переменной, далее когда PS находит нужный цвет он вернет в переменную в [0] значение Х которое будет отражать первый найденный пиксель подходящего цвета. Далее мы можем посчитать локальное расположение этого пикселя на самой полоске и из этого вычислить % хп, мп и сп.
Второй способ (как и первый но все же я бы выбрал второй) позволяет обойти эти самые цифры, они просто неподойдут под нужный цвет. Так же я бы порекомендовал просто личить их из памяти
. Lineage II думаю ничем особенным от остальных ммо игр не отличается (таких как WoW, Allods и тд), поэтому хранит свои данные в памяти процесса, а пользователь может их оттудова успешно извлеч при желании и использовать в своих корыстных целях.
Ниже собственно приведен скрин с ранних времен ЗБТ Аллодов.
Относительно же работы в памяти, не составляет труда использовать уже найденные адреса хранящие данные о чём либо, несоставляет так же труда их найти своими руками, НО есть такая излюбленная всеми в наше время фишка, как динамические адреса, тоесть вы запускаете процесс, находите в нем что вам надо, используете, а после перезапуска процесса адреса меняются. Можно искать оффсеты которые будут отражать расположение нужного адреса в памяти процесса, но их может и не быть, да и в поиске конкретно оффсетов я не спец и посоветовать ничего особенного не могу.
Я бы остановился на варианте с PixelSearch
Собственно вот пример поиска % заполненности полоски с помощью PSearch
Func _WinGetMyCargoStatus()
Dim $MyCargoLeftTopX = 775, $MyCargoLeftTopY = 591, _
$CargoStatusBarLTX = $MyCargoLeftTopX + 127, $CargoStatusBarLTY = $MyCargoLeftTopY + 61, $CargoStatusBarRBX = $CargoStatusBarLTX + 98, $CargoStatusBarRBY = $CargoStatusBarLTY + 4, _
$CargoStatusBarCol = 0x010E12, $CargoStatusBarShade = 5
$FullCargoStatusBar = PixelSearch($CargoStatusBarLTX, $CargoStatusBarLTY, $CargoStatusBarRBX, $CargoStatusBarRBY, $CargoStatusBarCol, $CargoStatusBarShade)
If @error Then
Return 100
Else
$FullCargoPercent = Round((($FullCargoStatusBar[0] - $CargoStatusBarLTX) * 100 / 99),0)
Return $FullCargoPercent
EndIf
EndFunc