Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
- #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
- #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
- ;--------------------------------------------------------------------------------
- ;Getting My Player GUID
- ;--------------------------------------------------------------------------------
- #include <NomadMemory.au3>
- #include <ButtonConstants.au3>
- #include <EditConstants.au3>
- #include <GUIConstantsEx.au3>
- #include <WindowsConstants.au3>
- ;--------------------------------------------------------------------------------
- ;public enum Player
- ;--------------------------------------------------------------------------------
- $playerName = 0x9BE820
- ;PlayerName = 0x9BE820,
- ;--------------------------------------------------------------------------------
- ;public enum UnitFields
- ;--------------------------------------------------------------------------------
- $UNIT_FIELD_HEALTH = 0x8 + 0x12
- ;OBJECT_END = 0x8
- ;UNIT_FIELD_HEALTH = OBJECT_END + 0x12,
- ;--------------------------------------------------------------------------------
- ; Offsets Object Manager
- ; Offset and Pointer for Wow 4.3.4.15595
- ;--------------------------------------------------------------------------------
- ;CurMgrPointer = 0x9BE7E0,
- ;CurMgrOffset = 0x463C,
- ;NextObject = 0x3C,
- ;FirstObject = 0xC0,
- ;LocalGUID = 0xC8,
- Global Const $ClientConnection = 0x9BE7E0 ;The first 2 are you create you manager from the baseaddress wow
- Global Const $CurrMgrOffset = 0x463C
- Global Const $FirstObjectOffset = 0xC0 ;The next one is to get the address of your first object ONLY
- Global Const $NextObjectOffset = 0x3C ;To cycle through the object you need this offset
- Global Const $localPlayerGUIDOffset = 0xC8
- Global Const $GameObjGUIDOffset = 0x30 ;This next one is to find the objects type : 1 to 7
- Global Const $GameObjTypeOffset = 0x14 ;And this one is to find the objects GUID
- Global Const $DescriptorOffset = 0x8
- ;Open WoW Process to enable Memory Reading and Get the WoW Base Address
- $ProcessID = ProcessExists("wow.exe")
- $WowProcess = _MemoryOpen($ProcessID)
- ;Getting WoWBase Address
- $WowBase = GetWoWBaseAddress($ProcessID)
- ;1) Getting CurrentManager_Pre
- $currMgr_pre = _MemoryRead("0x" & Hex($WowBase + $ClientConnection), $WowProcess , "dword")
- ;2) Getting CurrentManager
- $currMgr = _MemoryRead("0x" & Hex($currMgr_pre + $CurrMgrOffset), $WowProcess , "dword")
- ;Getting My Player GUID (Player Global Unique ID)
- $pGUID = _MemoryRead("0x" & Hex($currMgr + $localPlayerGUIDOffset), $WowProcess , "UINT64") ;Player Guid
- $pGUID2 = _MemoryRead("0x" & Hex($currMgr + $localPlayerGUIDOffset), $WowProcess , "dword") ;Player Guid 2
- ;Gettin My Player Address
- $ObjectMemLoc = GetMemLocByGUID($pGUID)
- $msgbox_text = "";
- $msgbox_text &= "$ProcessID: " & $ProcessID & @CRLF;
- $msgbox_text &= "$WowBase: " & $WowBase & @CRLF;
- $msgbox_text &= "$currMgr_pre: " & $currMgr_pre & @CRLF;
- $msgbox_text &= "$currMgr: " & $currMgr & @CRLF;
- $msgbox_text &= "$pGUID: " & $pGUID & @CRLF;
- $msgbox_text &= "$pGUID2: " & $pGUID2 & @CRLF;
- $msgbox_text &= "Player Name: " & GetPlayerName() & @CRLF;
- $msgbox_text &= "Player health: " & GetPlayerHealth() & @CRLF;
- MsgBox(1,"Test",$msgbox_text)
- Func GetPlayerName()
- return _memoryread($WowBase + $playerName, $WowProcess, "char[20]")
- EndFunc
- Func GetPlayerHealth()
- $pDescriptor = _MemoryRead("0x" & Hex($ObjectMemLoc + $DescriptorOffset), $WowProcess , "dword");<---essentially says that you want to use a descriptor (aka health)
- $pHealth = _MemoryRead("0x" & Hex($pDescriptor + $UNIT_FIELD_HEALTH), $WowProcess ,"dword");<---looks up your health
- return $pHealth
- EndFunc
- Func GetMemLocByGUID($guid)
- ;Read the first wow object by adding our current manager address and our first object offset together
- $NextObject = _MemoryRead("0x" & Hex($currMgr + $FirstObjectOffset), $WowProcess , "dword")
- ;next get the object type buy adding our first object and our Objtype offset together and reading that
- $ObjType = _MemoryRead("0x" & Hex($NextObject + $GameObjTypeOffset), $WowProcess , "dword")
- ;If the return of object type is less than or equal to 7 (which it should always be) and more than 0 in the case that we do have an object in the list than do a while loop.
- while (($ObjType <= 7) And ($ObjType > 0))
- ;NOTE: if there is an object in the list, objType will have to be = 1 to 7
- ; If our object plus the GUIDoffset = the GUID we are looking for (example our localplayer GUID) …
- IF (_MemoryRead("0x" & Hex($NextObject + $GameObjGUIDOffset), $WowProcess , "UINT64") = $guid) Then ; …then return our object
- Return $NextObject ;found what we wanted.
- EndIf
- ;if no return happens (stays in the function) then cycle through the objects using our next object offset on our next object (might also be called current object)
- $NextObject = _MemoryRead("0x" & Hex($NextObject + $NextObjectOffset), $WowProcess , "dword")
- ;We will also need to see the type
- $ObjType = _MemoryRead("0x" & Hex($NextObject + $GameObjTypeOffset), $WowProcess , "dword")
- Wend
- ;if we find nothing Return 0 (address are probably wrong or you messed up code)
- Return 0;
- EndFunc
- Func GetWoWBaseAddress($ProcessID)
- $HSNAP = DllCall("Kernel32.dll", "HANDLE", "CreateToolhelp32Snapshot", "DWORD", 8, "DWORD", $ProcessID)
- $STMODULE = DllStructCreate("DWORD dwSize;DWORD th32ModuleID;DWORD th32ProcessID;" & "DWORD GlblcntUsage;DWORD ProccntUsage;ptr modBaseAddr;" & "DWORD modBaseSize;HANDLE hModule;WCHAR szModule[256];" & "WCHAR szExePath[260]")
- DllStructSetData($STMODULE, "dwSize", DllStructGetSize($STMODULE))
- $RET = DllCall("Kernel32.dll", "BOOLEAN", "Module32FirstW", "HANDLE", $HSNAP[0], "ptr", DllStructGetPtr($STMODULE))
- IF ($RET[0] = False) Then
- DllCall("Kernel32.dll", "BOOLEAN", "CloseHandle", "HANDLE", $HSNAP[0])
- Return 0
- Else
- $RET[0] = True
- Do
- If DllStructGetData($STMODULE, "szModule") = "Wow.exe" Then
- DllCall("Kernel32.dll", "BOOLEAN", "CloseHandle", "HANDLE", $HSNAP[0])
- Return DllStructGetData($STMODULE, "modBaseAddr")
- EndIf
- $RET = DllCall("Kernel32.dll", "BOOLEAN", "Module32NextW", "HANDLE", $HSNAP[0], "ptr", DllStructGetPtr($STMODULE))
- Until $RET[0] = False
- EndIf
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement