Sign in to follow this  
Followers 0
tlokz

_D2Mem

7 posts in this topic

#1 ·  Posted (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!

; #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   ;==>_IsInGame

This 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 by tlokz

Share this post


Link to post
Share on other sites



to check if you're in a game just read the player unit address, because if you are, it's always non-zero =p

Share this post


Link to post
Share on other sites

to check if you're in a game just read the player unit address, because if you are, it's always non-zero =p

wow didnt think of that will test it out right now ... thnx for that :)

Share this post


Link to post
Share on other sites

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]

Share this post


Link to post
Share on other sites

Pretty cool stuff. Could have it's uses. Although, the game is quite old now.

yup, but lots of ppl love it still

Share this post


Link to post
Share on other sites

#7 ·  Posted (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 by zutto

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0