- #include <Pointer.au3>
- #include <WinAPI.au3>
- $pid = ProcessExists("sro_client.exe")
- Global $memory = _MemoryOpen($pid)
- If @error Then
- If @error = 1 Then
- MsgBox(0, "Error", "Invalid process id.")
- Exit
- ElseIf @error = 2 Then
- MsgBox(0, "Error", "Failed to open kernel32.dll.")
- Exit
- ElseIf @error = 3 Then
- MsgBox(0, "Error", "Failed to open the specified process.")
- Exit
- EndIf
- EndIf
- $ProcessBaseAdress = _ProcessGetModuleBase($pid, "sro_client.exe")
- $StaticOffset = 0x00D7695C
- Global $offsets[5] = [0x6E4, 0x7C0, 0x3A0, 0, 0x8C]
- Global $base = $ProcessBaseAdress + $StaticOffset
- Func ReadCurrentPlus()
- $nextaddress = _MemoryRead($base, $memory)
- For $i = 0 To 4
- $newhex = Hex($nextaddress + $offsets[$i])
- Do
- $newhex = StringTrimLeft($newhex,1)
- Until StringLen($newhex) = 8
- $nextaddress = _MemoryRead("0x" & $newhex, $memory)
- Next
- Return $nextaddress
- EndFunc
- MsgBox(0, "", "Your current item in Invenory Slot 1 is +" & ReadCurrentPlus())
- Func _ProcessGetModuleBase($ivPID, $svModuleName)
- $ivPID = ProcessExists($ivPID)
- If Not $ivPID Then Return(SetError(1, 0, 0)); Process does not exist
- Local Const $TH32CS_SNAPMODULE = 0x00000008
- Local Const $sMODULEENTRY32Struct = "dword Size;" & _
- "dword 32ModuleID;" & _
- "dword 32ProcessID;" & _
- "dword GlblcntUsage;" & _
- "dword ProccntUsage;" & _
- "ptr modBaseAddr;" & _
- "dword modBaseSize;" & _
- "hwnd hModule;" & _
- "char Module[255];" & _
- "char ExePath[260]"
- Local $hvSnapShot = DllCall("Kernel32.dll", "hwnd", "CreateToolhelp32Snapshot", "dword", $TH32CS_SNAPMODULE, "dword", $ivPID)
- If Not $hvSnapShot[0] Then Return(SetError(2, 0, 0)); Could not create snapshot?
- Local $stMODULEENTRY32 = DllStructCreate($sMODULEENTRY32Struct)
- DllStructSetData($stMODULEENTRY32, "Size", DllStructGetSize($stMODULEENTRY32))
- Local $ivState = DllCall("Kernel32.dll", "int", "Module32First", "hwnd", $hvSnapShot[0], "long_ptr", DllStructGetPtr($stMODULEENTRY32))
- If Not $ivState[0] Then Return(SetError(3, _WinAPI_CloseHandle($hvSnapShot[0]), 0)); Could not enumerate first module in list?
- Local $ivRet = 0
- Local $svModule
- Do
- $ivRet = DllStructGetData($stMODULEENTRY32, "modBaseAddr")
- $svModule = DllStructGetData($stMODULEENTRY32, "Module")
- If $svModule = $svModuleName Then ExitLoop
- $ivState = DllCall("Kernel32.dll", "int", "Module32Next", "hwnd", $hvSnapShot[0], "long_ptr", DllStructGetPtr($stMODULEENTRY32))
- Sleep(1)
- Until Not $ivState[0]
- _WinAPI_CloseHandle($hvSnapShot[0])
- Return $ivRet
- EndFunc
- Func _ReadProcessPointers(ByRef $hvProcess, $ivBaseAddress, $avOffsets)
- If Not IsArray($avOffsets) Then Return _ReadProcessMemory($hvProcess, $ivBaseAddress, "ptr")
- $ivBaseAddress = _ReadProcessMemory($hvProcess, $ivBaseAddress, "ptr")
- For $i = 0 To UBound($avOffsets)-1
- $ivBaseAddress = _ReadProcessMemory($hvProcess, $ivBaseAddress+$avOffsets[$i], "ptr")
- Next
- Return $ivBaseAddress
- EndFunc
- Func _ReadProcessMemory(ByRef $hvProcess, $ivAddress, $svDataType = "byte")
- Local $stvRead = DllStructCreate("int Read")
- Local $stvData = DllStructCreate($svDataType)
- Local $avResult = DllCall("Kernel32.dll", "int", "ReadProcessMemory", "int", $hvProcess, "int", $ivAddress, "ptr", DllStructGetPtr($stvData), "int", DllStructGetSize($stvData), "ptr", DllStructGetPtr($stvRead))
- Return(SetError(Not $avResult[0], DllStructGetData($stvRead, "Read"), DllStructGetData($stvData, 1)))
- EndFunc
- Func _WriteProcessMemory(ByRef $hvProcess, $ivAddress, $bvData, $svDataType = "byte")
- Local $stvWritten = DllStructCreate("int Written")
- Local $stvData = DllStructCreate($svDataType)
- DllStructSetData($stvData, 1, $bvData)
- Local $avResult = DllCall("Kernel32.dll", "int", "WriteProcessMemory", "int", $hvProcess, "int", $ivAddress, "ptr", DllStructGetPtr($stvData), "int", DllStructGetSize($stvData), "int", DllStructGetPtr($stvWritten))
- Return(SetError($avResult[0], 0, DllStructGetData($stvWritten, "Written")))
- EndFunc