Что нового

Базовые адреса в проценты

scanfail

Знающий
Сообщения
244
Репутация
17
Так как в целом новичок, хотелось бы узнать. Нашел поинтер HP, MP(0x00A6486C), теперь нужно перевести его в проценты(для бот, меньше n% => выпить HP,MP банку). Я даже представления не имею, как это сделать. Надеюсь на вашу помощь!
:IL_AutoIt_1:
P.S. - Заранее благодарен :-[

Не хочу усложнять дело, может так будет намного удобнее... Вот поинтер тестер:
Код:
#Region ### START Koda GUI section ###
$form1 = GUICreate("GrandFAPer Pointer Tester", 232, 154, 340, 276)
$group1 = GUICtrlCreateGroup("Results", 8, 8, 215, 137)
$hp = GUICtrlCreateLabel("HP", 16, 48, 100)
$mp = GUICtrlCreateLabel("MP", 16, 64, 100)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
WinSetOnTop("GrandFAPer Pointer Tester", "", 1)
TraySetIcon("")

While 1
   GUICtrlSetData($hp, "HP: " & $currenthp & "/" & $hpcap)
   GUICtrlSetData($mp, "MP: " & $currentmp & "/" & $mpcap)
	Sleep(500)
WEnd

Func initstuff()
	Global $windowtitle = "Grand Fantasia"
	Global $processid = ProcessExists("GrandFantasia.exe")
	Global $hppointer = 0x00A6486C
	Global $selfpointer = 0x00A6486C
	$memopen = _memoryopen($processid)
	Global $hpoffset1 = Dec("8")
	Global $hpoffset2 = Dec("4")
	Global $hpcappointer = 0x00A6486C
	Global $hpcapoffset1 = Dec("8")
	Global $hpcapoffset2 = Dec("48")
	Global $mppointer = 0x00A6486C
	Global $mpoffset1 = Dec("8")
	Global $mpoffset2 = Dec("8")
	Global $mpcappointer = 0x00A6486C
	Global $mpcapoffset1 = Dec("8")
	Global $mpcapoffset2 = Dec("4c")
	Global $sitpointer = 0x00A6486C
	Global $sitoffset1 = Dec("1C")
	Global $sitoffset2 = Dec("50")
	Global $cursedpointer = 0x00A6486C
	Global $cursedoffset1 = Dec("8")
	Global $cursedoffset2 = Dec("174")
	_memoryclose($processid)
EndFunc

Func readmem()
	$memopen = _memoryopen($processid)
	Global $currenthp = _memoryread($hppointer, $memopen)
	Global $hpcur1 = "0x" & Hex($currenthp + $hpoffset1)
	Global $currenthp = _memoryread($hpcur1, $memopen)
	Global $hpcur2 = "0x" & Hex($currenthp + $hpoffset2)
	Global $currenthp = _memoryread($hpcur2, $memopen)
	Global $hpcap = _memoryread($hpcappointer, $memopen)
	Global $hpcap1 = "0x" & Hex($hpcap + $hpcapoffset1)
	Global $hpcap = _memoryread($hpcap1, $memopen)
	Global $hpcap2 = "0x" & Hex($hpcap + $hpcapoffset2)
	Global $hpcap = _memoryread($hpcap2, $memopen)
	Global $currentmp = _memoryread($mppointer, $memopen)
	Global $mpcur1 = "0x" & Hex($currentmp + $mpoffset1)
	Global $currentmp = _memoryread($mpcur1, $memopen)
	Global $mpcur2 = "0x" & Hex($currentmp + $mpoffset2)
	Global $currentmp = _memoryread($mpcur2, $memopen)
	Global $mpcap = _memoryread($mpcappointer, $memopen)
	Global $mpcap1 = "0x" & Hex($mpcap + $mpcapoffset1)
	Global $mpcap = _memoryread($mpcap1, $memopen)
	Global $mpcap2 = "0x" & Hex($mpcap + $mpcapoffset2)
	Global $mpcap = _memoryread($mpcap2, $memopen)
	_memoryclose($processid)
EndFunc
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Re: Поинтер HP,MP в проценты.

OffTopic:
А не легче юзать _MemoryPointerRead is NoMadMemory? Ну, это дело каждого...

Для нахождения процентной доли нужно найти в памяти максимальное значение HP, MP у перса. А дальше математика.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Re: Поинтер HP,MP в проценты.

Ну все данные, максимум хп и т.д. есть в исходнике тестера. А вот насчет математики не понял... Можно поподробнее?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Re: Поинтер HP,MP в проценты.

perc = CurrentHP/MaxHP, где perc получится число от 0 до 1. Чтобы получить проценты, нужно умножить perc на 100.
Код:
Int()

- переводит строку в натуральное число.
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Re: Поинтер HP,MP в проценты.

Жаль, с математикой не дружу =\, но спасибо что ответил. Постараюсь разобраться! Также, хотел бы попросить, привести пример из бота и т.д., этой функции Int().
 

britanec74

Знающий
Сообщения
22
Репутация
8
Re: Поинтер HP,MP в проценты.

Тебе обязательно в %? вот я мой автохил для др игры. Надеюсь на % сам переделаешь

Код:
#NoTrayIcon
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>

Global $dif_OZ, $dif_OM, $begin_OZ, $begin_OM

Global $offset_hp = 0x1096B0
Global $offset_mp = 0x1096B4
Global $offset_charname = 0x109678


#region ### START Koda GUI section ### Form=
Global $LC_Hill = GUICreate("LCHill", 247, 64, 192, 124)
Global $Inp_OZ = GUICtrlCreateInput("", 72, 4, 25, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
Global $Inp_Otk_OZ = GUICtrlCreateInput("", 144, 4, 25, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
Global $Inp_OM = GUICtrlCreateInput("", 72, 36, 25, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
Global $Inp_Otk_OM = GUICtrlCreateInput("", 144, 36, 25, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
Global $cbx_OZ = GUICtrlCreateCheckbox("ОЗ", 8, 6, 41, 17)
Global $cbx_OM = GUICtrlCreateCheckbox("ОМ", 8, 38, 41, 17)
Global $Label1 = GUICtrlCreateLabel("F", 56, 8, 10, 17)
Global $Label2 = GUICtrlCreateLabel("F", 56, 40, 10, 17)
Global $Label3 = GUICtrlCreateLabel("Откат", 104, 8, 34, 17)
Global $Label4 = GUICtrlCreateLabel("Откат", 104, 40, 34, 17)
Global $Label5 = GUICtrlCreateLabel("!", 176, 8, 7, 17)
Global $Label6 = GUICtrlCreateLabel("!", 176, 40, 7, 17)
Global $Inp_Danger_OZ = GUICtrlCreateInput("", 184, 4, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
Global $Inp_Danger_OM = GUICtrlCreateInput("", 184, 36, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_RIGHT, $ES_NUMBER))
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

check_start()

Func check_start()
	If WinExists("[CLASS:Nksp]") Then
		GUISetState(@SW_SHOW, $LC_Hill)
		Global $WinHandle = WinGetHandle("Last Chaos")
		Global $pid = WinGetProcess("Last Chaos")
		Global $info = _MemoryOpen($pid)
		Global $base1 = 0x10735F88
		Global $base2 = 0x1072AB20
	Else
		Global $ask = MsgBox(0, "Ошибка", "Сперва запустите Last Chaos!")
		Exit
	EndIf
EndFunc   ;==>check_start

Func Hill()
	If GUICtrlRead($cbx_OZ) = $GUI_CHECKED Then
		OZ()
	EndIf
	If GUICtrlRead($cbx_OM) = $GUI_CHECKED Then
		OM()
	EndIf
EndFunc   ;==>Hill

Func OZ()
	Local $dif_OZ = TimerDiff($begin_OZ)
	If $dif_OZ > GUICtrlRead($Inp_Otk_OZ) * 1000 Then
		Global $pointer_hp = _MemoryRead($base1, $info)
		Global $pers_HP = $pointer_hp + $offset_hp
		Global $HP = _MemoryRead($pers_HP, $info)
		If $HP <= GUICtrlRead($Inp_Danger_OZ) Then
			ControlSend($WinHandle, "", "[CLASS:ViewPort Window; INSTANCE:1]", "{F" & GUICtrlRead($Inp_OZ) & "}")
			$begin_OZ = TimerInit()
		EndIf
	EndIf
EndFunc   ;==>OZ

Func OM()
	Local $dif_OM = TimerDiff($begin_OM)
	If $dif_OM > GUICtrlRead($Inp_Otk_OM) * 1000 Then
		Global $pointer_om = _MemoryRead($base1, $info)
		Global $pers_om = $pointer_om + $offset_mp
		Global $OM = _MemoryRead($pers_om, $info)
		If $OM <= GUICtrlRead($Inp_Danger_OM) Then
			ControlSend($WinHandle, "", "[CLASS:ViewPort Window; INSTANCE:1]", "{F" & GUICtrlRead($Inp_OM) & "}")
			$begin_OM = TimerInit()
		EndIf
	EndIf
EndFunc   ;==>OM

Func Name_pers()
	If WinActive("Last Chaos") Then
		Global $pointer_charname_2 = _MemoryRead($base1, $info)
		Global $Name_pers_2 = $pointer_charname_2 + $offset_charname
		Global $pointer_charname_1 = _MemoryRead($Name_pers_2, $info)
		Global $Name_pers_1 = $pointer_charname_1 + 0x0
		Global $Name_pers = _MemoryRead($Name_pers_1, $info, "char[15]")
		WinSetTitle("LCHill", "", $Name_pers)
	EndIf
EndFunc   ;==>Name_pers

While 1
	Name_pers()
	Hill()
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 
Автор
S

scanfail

Знающий
Сообщения
244
Репутация
17
Re: Поинтер HP,MP в проценты.

Посмотрел код, понял чем можно... Спасибо огромное!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Поинтер HP,MP в проценты.

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


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

"Поинтер HP,MP в проценты." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Верх