Pointer und Offsets Finden und Scripten! Autoit

01/17/2014 17:55 MrLudolf#1
Hallo Pvpers^^

Ich möchte per Autoit ein Programm schreiben, welches mir aus WoW Version 3.3.5a die aktuellen Lebenspunkte ausliest und diese in einer MsgBox ausgibt. Habe dazu jedes erdenkliche Tutorial aus dem Internet durchgearbeitet, komme aber einfach nicht weiter.

Als erstes habe ich mit CE die Pointer mit Offsets ausgelesen.
Auf die Base Adresse werden Werte addiert und dann verweist diese Adresse auf den Wert. Habe ich das richtig verstanden?
[Only registered and activated users can see links. Click Here To Register...]
Jetzt wähle ich irgendeinen aus oder?
Aber was genau ist davon die Baseadresse?
Und was hat dieses "WoW.exe" vor manchen Adressen zu suchen?
Wie setzte ich das in Autoit um?
Ich benutze die NomandMemory.au3.

Vielen Dank! :)
01/17/2014 19:08 Terraya#2
Also, verstehe nicht ganz wie du gesucht hast?

also es gibt eig. einige wege das zu machen aber ich nenne dir hier mal 2:

1.Exact Value , 4Bytes
2.gebe deine HP Anzahl ein und suche dannach
3.lasse dich schlagen das du ein paar -HP Punkte bekommst ODER das beste was du
machen kannst ist, zieh ein "EQ" teil aus und dan hast ja sowieso - HP wenn das eq teil HP dazu gibt
4. gebe dan diese HP in CE ein und suche dannach
5.mache weiter so bis du die "Adresse" gefunden hast.(eig. nach 2-3x suchen solltest du sie schon haben)

aderes beispiel:
1.Exact value
2.gebe deine HP ein
3.lasse dich schlagen
4.suche in CE nach "Value decresed by"
5.lasse dich wider hauen
6.das gleiche etc... bis du sie findest.

Nähstes beispiel:
per "String" suchen, also wie du siehst gibt es mehrere möglichkeiten

und mit dem script rufst du die Adresse per MsgBox auf:


EDIT: Hier hast du noch den Code zum Pointer ausgeben
ACHTUNG du musst yeh nach scaN/value type "Dword" etc... austauschen sonst bekommst du einen falschen wert raus

01/17/2014 21:47 KDeluxe#3
[Only registered and activated users can see links. Click Here To Register...]
Ich habe mein Beispielscript entsprechend angepasst. Ich habe den 1. Pointer des Screenshots verwenden:
01/18/2014 12:02 MrLudolf#4
Vielen Dank erstmal ;)
KDeluxe ich habs mit deinem vorgefertigtem Script probiert und es läuft super.
Aber wenn ich nun mit deiner KDMemory arbeite bekomme ich keine Rückantwort.
Hier mein Script
01/18/2014 12:43 BladeTiger12#5
Hängt vielleicht an:

1. die Variable $hp ist eine Array, also:
[0] = Addresse, [1] = Value

2. Da steht "DWO RD", soll es nicht "DWORD" heißen?
Also die Space.

3. Du hast $offsetsValue[5] einfach so Deklariert ohne "Dim, Global, Local".
Das sollte doch ein Fehler geben.

4. Dein Process wird nicht von WinGetProcess gefunden.

Solltest dir das mal alles anschauen.
01/18/2014 13:04 MrLudolf#6
Hab alle Punkte von dir beachtet, aber bekomme wieder keine MsgBox :/
1. Array habe ich geändert. Stimmt das so?
2. Das DWORD ist richtig geschrieben, irgendwie ein Anzeigefehler im Forum.
3. Variablen habe ich jetzt mit Dim deklariert.
4. PID wird gefunden. Habe zum testen eine ini anlegen lassen, in dieser steht die richtige PID, habs mit dem Taskmanager abgeglichen.

Kann es sein das ich ein Fehler wegen meinem 64bit System habe? In der KDMemory steht ja was davon.

Hab grad etwas herausgefunden, wenn ich unten bei der MsgBox bei $hp das [1] weglasse bekomme ich eine MsgBox mit FALSE

neues Script ->
01/18/2014 13:07 BladeTiger12#7
Kann es sein, dass deine Base-Address falsch ist?

Die ist nicht in jedem Spiel "0x400000".

Lass sie dir mal so ausgeben:

Code:
MsgBox(0,"",_KDMemory_GetModuleBaseAddress($handles, "Wow.exe"))
01/18/2014 13:42 MrLudolf#8
Vielen Dank BladeTiger,
Du hattest recht die Baseadresse ist 0x400000 und auf diese habe ich meine vorherige Baseadresse addiert. Jetzt klappt alles wunderbar.
Hier nochmal der fertige Script mit dem es funktioniert!

01/18/2014 16:50 KDeluxe#9
Es macht mich immer wieder traurig wenn ich sehe, wie ein ~ 40 Zeilen Script auf acht Zeilen minimiert wird. Weniger Code ist besser, das ist aber lange kein Grund gänzlich auf eine Fehlerbehandlung zu verzichten. Wenn ein Fehler nicht ausgeschlossen werden kann, was hier definitiv nicht möglich ist, so kann dieser Fall nicht einfach ignoriert werden. Wenn du halbwegs vernünftig programmieren möchtest solltest du das im Hinterkopf behandeln.
01/19/2014 13:52 MrLudolf#10
Ja das ist mir völlig klar, aber ich wollte erstmal die Kernfunktion zum laufen bringen und begreifen, später baue ich dann natürlich auchnoch Fehlerbehandlungen mit ein.