#RequireAdmin
#include <NomadMemory.au3>
#include <GUIConstants.au3>
SetPrivilege("SeDebugPrivilege", 1)
Global $ProcessName = "Lineage II "
Global $ProcessID = WinGetProcess($ProcessName,"")
Global $DllInformation = _MemoryOpen($ProcessID)
Global $hWnd = WinGetHandle("Lineage II ", "")
Func GetData($Param1, $Param2="no param", $Param3="no param")
Local $Base, $MemTemp, $DataType, $Offset[5] = ["nop", "nop", "nop", "nop", "nop"]
Select
Case $Param1 = "Char"
Select
Case $Param2 = "Cur HP"
$Base = 0x2077EE00
$Offset[1] = "37c"
$Offset[2] = "1ea0"
$Offset[3] = "984"
$Offset[4] = "204"
$DataType = "dword"
Case $Param2 = "Cur MP"
$Base = 0x00955890
$Offset[1] = "C9"
$DataType = "dword"
Case $Param2 = "SXP"
$Base = 0x00955e8c
$Offset[1] = "28"
$Offset[2] = "140"
$Offset[3] = "A8"
$DataType = "float"
Case Else
SetError(1)
EndSelect
Case $Param1 = "Target"
Select
Case $Param2 = "Cur HP"
$Base = 0x00955e8c
$Offset[1] = "20"
$Offset[2] = "100"
$Offset[3] = "A8"
$DataType = "float"
Case Else
EndSelect
Case Else
ErrorMsg('GetData(WTF?...', 'Ошибка вызова: команды GetData("'&$Param1&'") не существует.')
EndSelect
$MemTemp = (_MemoryRead($Base, $DllInformation))
For $i = 2 To UBound($Offset, 1)-1 Step 1
If String($Offset[$i]) = "nop" Then
$MemTemp = (_MemoryRead($MemTemp+Dec($Offset[$i-1]), $DllInformation, $DataType))
ExitLoop
Else
$MemTemp = (_MemoryRead($MemTemp+Dec($Offset[$i-1]), $DllInformation))
EndIf
Next
Return $MemTemp
EndFunc