tlokz Posted September 30, 2008 Posted September 30, 2008 (edited) Me and a friend actually got memory reading in autoit to work well with Diablo II I know this isn't going to be useful to most of you but it might. Well here it is!expandcollapse popup; #INDEX# ====================================================================== ; Title .........: _D2Mem ; Version .......: 1.0.0.0 ; AutoIt Version : 3.2 or better ; Language ......: English ; Description ...: Diablo II memory reading ; Author ........: TK_Incorperate & T_LOKZz ;=============================================================================== ; #CURRENT# ==================================================================== ; _D2Mem_GetStat ; _D2Mem_IsInGame ;=============================================================================== ; #FUNCTION# =================================================================== ; Name ..........: _D2Mem_GetStat ; Description ...: The reading of the memory part ; Syntax ........: _InetFile_VersionCheck($PStat, $window) ; Parameters ....: $PStat - Stat to check ; $window - Diablo II window to check ; Stats .........: 6 = current life ; 22 = current mana ; 38 = current stamina ; 53 = current level ; 61 = current experience ; -27 = (naked) strength ; -19 = (naked) energy ; -11 = (naked) dexterity ; -3 = (naked) vitality ; Return values .: Success - Returns the value of the stat checked ; (If out of game all stats will return 0) ; Failure - Will set an error ; Errors ........: @error = 1 - Window didn't exist ; Author ........: TK_Incorperate ; Modified ......: 9/28/08 ; Remarks .......: Naked means it wont add what's added from gear, ; so if you have 15 base str and 45 added, it will ; only show up as 15 ; Related .......: _D2Mem_IsInGame ; Link ..........: ; Examples ......: ;=============================================================================== Global $GlobalPlayerUnit = 0x6FBCC3D0 Func _D2Mem_GetStat($PStat, $window) $pid = WinGetProcess($window, "") If $pid = -1 Then SetError(1) Else Local $Buffer = DllStructCreate('dword') Local $dll[2] = [DllOpen('kernel32.dll')] Local $Open = DllCall($dll[0], 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 0, 'int', $pid) $dll[1] = $Open[0] DllCall($dll[0], 'int', 'ReadProcessMemory', 'int', $dll[1], 'int', $GlobalPlayerUnit, 'ptr', DllStructGetPtr($Buffer), 'int', 4, 'int', '') $Pointer1 = '0x' & Hex(DllStructGetData($Buffer, 1) + 92) DllCall($dll[0], 'int', 'ReadProcessMemory', 'int', $dll[1], 'int', $Pointer1, 'ptr', DllStructGetPtr($Buffer), 'int', 4, 'int', '') $Pointer2 = '0x' & Hex(DllStructGetData($Buffer, 1) + 36) DllCall($dll[0], 'int', 'ReadProcessMemory', 'int', $dll[1], 'int', $Pointer2, 'ptr', DllStructGetPtr($Buffer), 'int', 4, 'int', '') $Pointer3 = '0x' & Hex(DllStructGetData($Buffer, 1) + $PStat + 31) DllCall($dll[0], 'int', 'ReadProcessMemory', 'int', $dll[1], 'int', $Pointer3, 'ptr', DllStructGetPtr($Buffer), 'int', 4, 'int', '') $Value = DllStructGetData($Buffer, 1) DllClose($dll[0]) Return $Value EndIf EndFunc ;==>GetStat ; #FUNCTION# =================================================================== ; Name ..........: _D2Mem_IsInGame ; Description ...: Series of checks to acurately check if your in game or not ; Syntax ........: _D2Mem_IsInGame($window) ; Parameters ....: $window - Diablo II window to check ; Return values .: Success - Returns 1 (Your in game) ; Failure - Returns 0 (Your not in game) ; Errors ........: @error = 1 - Window didn't exist ; Author ........: T_LOKZz ; Modified ......: 9/28/08 ; Remarks .......: ; Related .......: _D2Mem_GetStat ; Link ..........: ; Examples ......: ;=============================================================================== Func _D2Mem_IsInGame($window) If WinExists($window, "") Then If _D2Mem_GetStat(46, $window) > 0 Or _D2Mem_GetStat(38, $window) > 0 Or _D2Mem_GetStat(61, $window) > 0 Then Return 1 Else Return 0 EndIf Else SetError(1) EndIf EndFunc ;==>_IsInGameThis is used in Auto-Awesom my lil program to keep Awesom-O running (Best Diablo II bot) if anybody is further interested they can PM me or head over to AOBot Edited September 30, 2008 by tlokz
karman Posted September 30, 2008 Posted September 30, 2008 to check if you're in a game just read the player unit address, because if you are, it's always non-zero =p
tlokz Posted October 1, 2008 Author Posted October 1, 2008 to check if you're in a game just read the player unit address, because if you are, it's always non-zero =pwow didnt think of that will test it out right now ... thnx for that
Skrip Posted October 1, 2008 Posted October 1, 2008 Pretty cool stuff. Could have it's uses. Although, the game is quite old now. [left][sub]We're trapped in the belly of this horrible machine.[/sub][sup]And the machine is bleeding to death...[/sup][sup][/sup][/left]
tlokz Posted October 1, 2008 Author Posted October 1, 2008 Pretty cool stuff. Could have it's uses. Although, the game is quite old now.yup, but lots of ppl love it still
jvanegmond Posted October 1, 2008 Posted October 1, 2008 Looks good. Get ready for Diablo III. github.com/jvanegmond
zutto Posted February 25, 2009 Posted February 25, 2009 (edited) aint working tried calling isingame with call("_D2Mem_IsInGame", "Diablo II") wont return anything edit: i added messagebox'es to the functions but they wont pop up :E Edited February 25, 2009 by zutto
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now