WoW Bot AutoIT HP auslesen

07/18/2010 11:59 nitro2k#1
Hey,ich hab damit angefangen mit nen kleinen Bot fürn PrivatServer zu basteln,der auf der Version 3.3.3a läuft.
Gibt es für PrivatServer andere Offsets als für die Offiziellen Server?
Aber irgendwie bekomme ich immer als HP anzahl : 0 raus. Ich habe die richtigen Offsets genommen :

;/*Patch 3.3.3*/

;/*Player offsets*/
Local $Mem_Player_Base = 0x00B366D0, $Mem_Player_Base_P1 = 0x34, $Mem_Player_Base_P2 = 0x24

Quote:
#include <NomadMemory.au3>
Global $PlayerBaseStatic = 0x00B366D0
Global $PlayerBaseOffsA = 0x34
Global $PlayerBaseOffsB = 0x24


SetPrivilege("SetDebugPrivilege",1)

$pid = wingetprocess("World of Warcraft","")
$open = _Memoryopen($pid)

$pBasePointer01 = _Memoryread($PlayerBaseStatic, $open,'ptr')
$pBasePointer02 = _Memoryread($pBasePointer01 + 0x34,$open,"dword")
$pBasePointer = _Memoryread($pBasePointer02 + 0x24,$open,"dword")
$pBase = $pBasePointer
$pStorage = _Memoryread($pBasePointer + 0x8,$open,"dword")
$hp = _Memoryread($pStorage + 0x17*4,$open,"dword")
Msgbox("", "", "Du hast " & $hp & " Hp")
07/18/2010 12:25 NeedAbot#2
Quote:
Originally Posted by nitro2k View Post
Gibt es für PrivatServer andere Offsets als für die Offiziellen Server?
Ne sind die Gleichen Offsets. Ich glaub ich hab dein Fehler gefunden:

Quote:
SetPrivilege("SetDebugPrivilege",1)
Ich glaub so ist's richtig:
Quote:
SetPrivilege("SeDebugPrivilege",1)
Mfg ,

NeedABot
07/18/2010 12:32 nitro2k#3
nein daran lags net :/
07/18/2010 12:42 Endecs#4
Also ich hab das so in vb.net (noch von 3.3.3)

Code:
Dim playerbase = wow.ReadUInt(wow.ReadUInt(wow.ReadUInt(&HB366D0) + &H34) + &H24)
Dim Health = wow.readUInt(playerbase + &H19B8)
Dim MaxHealth = wow.ReadUInt(playerbase + &H19D8)


versuchs damit.
07/18/2010 12:45 nitro2k#5
immernoch 0 hp
07/18/2010 13:48 Pexus#6
#moved
07/18/2010 22:31 nitro2k#7
push
07/20/2010 10:02 nitro2k#8
push
10/16/2013 23:23 alpines#9
Es ist mir bewusst das die Leute hier nicht mehr aktiv sind, aber die Frage wird immer noch sehr oft gestellt und deswegen möchte ich das hier nicht unbeantwortet lassen für die Leute die die SuFu benutzen:
Code:
$dwHp = _MemoryRead($PlayerBaseStatic, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x34, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x24, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x8, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x17*4, $open, "dword")
MsgBox(0, "", "Du hast " & $dwHp & " Hp")
Wozu das *4? Habs da gelassen, da ich nicht weiß ob es stimmt.

Wenn du mit dem BasePointer weiterarbeitest dann verwendest du kein 4 Byte DWORD, deshalb ist der Typ den du mit _MemoryRead ausliest ein Pointer, letzendlich die letzte Zeile ist ein 4 Byte DWORD, da du hier die engültige Adresse aussiehst.
Außerdem heißt es nicht SetDebugPrivilege, sondern SeDebugPrivilege, man könnte unter Umständen #RequireAdmin benötigen, aber das ist bei vielen Spielen nicht der Fall.

Desweiteren kannst du auch einfach _MemoryPointerRead nehmen, dort ist $aErgebnis[UBound($aErgebnis) - 1] dein gewünschter Eintrag.

Da es ja jetzt gelöst wurde kann es geclosed werden.
10/17/2013 11:47 berkay2578#10
Quote:
Originally Posted by alpines View Post
Es ist mir bewusst das die Leute hier nicht mehr aktiv sind, aber die Frage wird immer noch sehr oft gestellt und deswegen möchte ich das hier nicht unbeantwortet lassen für die Leute die die SuFu benutzen:
Code:
$dwHp = _MemoryRead($PlayerBaseStatic, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x34, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x24, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x8, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x17*4, $open, "dword")
MsgBox(0, "", "Du hast " & $dwHp & " Hp")
Wozu das *4? Habs da gelassen, da ich nicht weiß ob es stimmt.

Wenn du mit dem BasePointer weiterarbeitest dann verwendest du kein 4 Byte DWORD, deshalb ist der Typ den du mit _MemoryRead ausliest ein Pointer, letzendlich die letzte Zeile ist ein 4 Byte DWORD, da du hier die engültige Adresse aussiehst.
Außerdem heißt es nicht SetDebugPrivilege, sondern SeDebugPrivilege, man könnte unter Umständen #RequireAdmin benötigen, aber das ist bei vielen Spielen nicht der Fall.

Desweiteren kannst du auch einfach _MemoryPointerRead nehmen, dort ist $aErgebnis[UBound($aErgebnis) - 1] dein gewünschter Eintrag.

Da es ja jetzt gelöst wurde kann es geclosed werden.
Thread is from 2010 ._.
10/17/2013 12:55 alpines#11
I don't know if you understand german but I already mentioned it in my reply. Anyway, I think it can be closed now, the main reason I answered to this old topic is because it has more than thousand views so many people find this thread through the search on this site.
10/17/2013 13:53 berkay2578#12
I don't speak German, still bumping a 3y/o thread even when you posted a solution just doesn't seem right.
10/17/2013 18:41 Lawliet#13
Quote:
Originally Posted by berkay2578 View Post
Thread is from 2010 ._.
egal, solang das thema noch aktuell ist!
10/17/2013 19:38 KDeluxe#14
Quote:
Originally Posted by alpines View Post
Es ist mir bewusst das die Leute hier nicht mehr aktiv sind, aber die Frage wird immer noch sehr oft gestellt und deswegen möchte ich das hier nicht unbeantwortet lassen für die Leute die die SuFu benutzen:
Code:
$dwHp = _MemoryRead($PlayerBaseStatic, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x34, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x24, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x8, $open, "ptr")
$dwHp = _MemoryRead($dwHp + 0x17*4, $open, "dword")
MsgBox(0, "", "Du hast " & $dwHp & " Hp")
Wozu das *4? Habs da gelassen, da ich nicht weiß ob es stimmt.

Wenn du mit dem BasePointer weiterarbeitest dann verwendest du kein 4 Byte DWORD, deshalb ist der Typ den du mit _MemoryRead ausliest ein Pointer, letzendlich die letzte Zeile ist ein 4 Byte DWORD, da du hier die engültige Adresse aussiehst.
Außerdem heißt es nicht SetDebugPrivilege, sondern SeDebugPrivilege, man könnte unter Umständen #RequireAdmin benötigen, aber das ist bei vielen Spielen nicht der Fall.

Desweiteren kannst du auch einfach _MemoryPointerRead nehmen, dort ist $aErgebnis[UBound($aErgebnis) - 1] dein gewünschter Eintrag.

Da es ja jetzt gelöst wurde kann es geclosed werden.
Bei der NomadMemory.aue/Pointer.au3 macht es gar keinen Unterschied, ob man 'DWORD' oder 'ptr' verwendet. Einen Unterschied macht es nur bei 64 Bit Anwendungen, aber damit können beide genannten .au3's nicht umgehen.
'SeDebugPrivilege' gibt dem eigenen Prozess die Berechtigung zum debuggen von 'fremden' Anwendungen. Um welches Spiel es sich handelt ist IMMER egal.
Für den Zugriff auf dritte Programme (ReadProcessMemory/WriteProcessMemory) braucht man ohnehin Adminrechte.

Nicht _MemoryPointerRead() ist hier die bessere Wahl, sondern [Only registered and activated users can see links. Click Here To Register...].