Guten Abend/Nacht liebe Community,
heute möchte ich euch gerne das anzeigen eines Wertes via Pointer in Autoit näher bringen.
Vorwort:
Bitte bedenkt das dies hier mein erstes Tutorial ist und ich es mitten in der Nacht schreibe. Ich werde jeden Teil dieses Tutorials auch nocheinmal als Video verfilmen und hochladen und das Script posten damit ihr euch alles nochmal in Ruhe anschauen könnt.
Als Beispiel zum Pointer auslesen habe ich das Rollenspiel NosTale genommen.
Ihr könnt natürlich auch jedes andere nehmen.
Vorraussetzungen:
-AutoIT (DL:
)
-Koda Formdesginer (DL: koda.darkhost.ru/dl.php?file=koda_1.7.3.0.zip)
-Grundkentnisse in AutoIT
-Cheat Engine (DL: members.upc.nl/cheatengine/d1/CheatEngine61.exe)
-Die Pointer.au3 die ich unten anhängen werde. (Muss in das Verzeichniss wo euer Script liegt oder in den Include Ordner von AutoIT)
-Wie Adroxxxx immer so schön schreibt: "Gesunder Menschenverstand".
Teil I : Die Gui erstellen.
Gibt es nicht viel zu sagen. Koda starten, 2 Labels und 2 Progressbars erstellen und das Script abspeichern.
Video:
Script:
Teil II : Den Pointer finden und den Wert auslesen.
Öffnet Cheat Engine und öffnet den NosTale Prozess.
Scannt eure momentanen HP. (Value Type: 4Byte)
Ändert eure momentanen HP indem ihr euch angreifen lässt oder was auch immer
und schreibt den veränderten Wert hin und drückt Next Scan.
Dies macht ihr solange bis Links nur noch eine Adresse zusehen ist.
Macht doppelklick auf die Adresse damit sie unten ist.
Macht Rechtsklick auf die Adresse und drückt auf: "Find out what writes to this Adress".
Verändert im Spiel jetzt eure momentanen HP erneut und es müsste etwas im Fenster stehen was ihr vorher mit "Find out what writes to this Adress" gefunden habt.
Macht DoppelKlick auf die Adresse und es sollte sich ein neues Fenster öffnen
4C ist das Offset das schreiben wir uns irgendwo hin oder wie merken es uns.
Die Adresse in der Mitte des Fensters ist der Hexadresse. (0xXXXXXXX)
Die ist nur wichtig wenn meine Methode im Video unten nicht funktioniert. Aber im
Moment ist sie unwichtig.
Dann machen wir einen Rechtsklick auf unsere Adresse von vorhin die unsere momentanen Hp beinhalten und drücken auf "Pointerscann for this adress".
Dann öffnet sich ein Fenster wo ihr eine Haken bei "Pointer must end with specific offsets" hinmacht und schreibt das Offset hin und klickt auf Add. Indem Fall wäre es 4C. Etwas weiter unten über Cancel steht eine 5 bei "max level", dass hier ist die Anzahl der MultiLevelpointer die ihr habt. Bei meiner Methode müsste ihr ausprobieren was das richtige ist. Bei mir wäre es 2 also ein Lvl 2 Pointer.
(Das ist die Anzahl der Offsets die wir brauchen um zu der Statischen Adresse zu gelangen) Wir schreiben hier eine 2 rein und drücken auf OK und erstellen uns noch eine Pointerliste. (Zu den Max Level: Die Anzahl der Offsets und die Offsets an sich können von Spiel zu Spiel anders sein. Ihr müsst einfach durchprobieren welchen MultiLevelPointer ihr habt.)
Wenn der PointerScann fertig ist sollten in der Regel 1-2 Pointer gefunden worden sein. Jetzt machen wir einen Doppelklick auf die Adresse und sie sollte in Cheat Engine unter der Adresse unserer momentanen HP erscheinen.
Wenn wir jetzt einen Doppelklick auf das Pointerscann ergebnis machen sollte sich ein Fenster. Dort stehen die 2 Offsets drin und die Statische Adresse. Kopiert die Adresse des Pointer und speichert sie irgendwo ab.
Video:
(Ich habe indem Video zuerst einen Level 5 Pointer gesucht da dort aber sehr viele Adressen kamen habe ich danach nach einem Level 2 Pointer gesucht.)
Teil III : Den Wert des Pointers auslesen und anzeigen lassen.
Hier am besten einfach das Video anschauen das es sich schlecht erklären lässt.
Video:
Script:
Teil IV : Das zusammenfügen der Gui und der Pointer.
Gibt es wieder nicht viel zu schreiben. Einfach das Video wieder anschauen.
Video:
Script:
Ende im Gelände:
Ich hoffe ich konnte ich mit diesem Tutorial weiterhelfen.
Wie oben schon beschrieben ist dies mein ertes Tutorial in diesem Bereich.
Kritik ist gerne erwünscht. Ansonsten gilt für dieses Tutorial: Learning by Doing.
Sollte bei Teil 3 der Wert 0 ausgegeben werden dann liegt das an _MemorygetbaseAdress.
Dann sollte man das Script und den Prozess schließen. Dann zuerst den Prozess starten, einloggen bist die HP erscheinen und dann erst das Script starten.
heute möchte ich euch gerne das anzeigen eines Wertes via Pointer in Autoit näher bringen.
Vorwort:
Bitte bedenkt das dies hier mein erstes Tutorial ist und ich es mitten in der Nacht schreibe. Ich werde jeden Teil dieses Tutorials auch nocheinmal als Video verfilmen und hochladen und das Script posten damit ihr euch alles nochmal in Ruhe anschauen könnt.
Als Beispiel zum Pointer auslesen habe ich das Rollenspiel NosTale genommen.
Ihr könnt natürlich auch jedes andere nehmen.
Vorraussetzungen:
-AutoIT (DL:
)-Koda Formdesginer (DL: koda.darkhost.ru/dl.php?file=koda_1.7.3.0.zip)
-Grundkentnisse in AutoIT
-Cheat Engine (DL: members.upc.nl/cheatengine/d1/CheatEngine61.exe)
-Die Pointer.au3 die ich unten anhängen werde. (Muss in das Verzeichniss wo euer Script liegt oder in den Include Ordner von AutoIT)
-Wie Adroxxxx immer so schön schreibt: "Gesunder Menschenverstand".
Teil I : Die Gui erstellen.
Gibt es nicht viel zu sagen. Koda starten, 2 Labels und 2 Progressbars erstellen und das Script abspeichern.
Video:
Script:
PHP Code:
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("HP/MP", 250, 95, 243, 147)
$Label1 = GUICtrlCreateLabel("HP:", 24, 16, 22, 17)
$Label2 = GUICtrlCreateLabel("MP:", 24, 64, 23, 17)
$Progress1 = GUICtrlCreateProgress(64, 16, 134, 16)
$Progress2 = GUICtrlCreateProgress(64, 64, 142, 16)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Teil II : Den Pointer finden und den Wert auslesen.
Öffnet Cheat Engine und öffnet den NosTale Prozess.
Scannt eure momentanen HP. (Value Type: 4Byte)
Ändert eure momentanen HP indem ihr euch angreifen lässt oder was auch immer
und schreibt den veränderten Wert hin und drückt Next Scan.
Dies macht ihr solange bis Links nur noch eine Adresse zusehen ist.
Macht doppelklick auf die Adresse damit sie unten ist.
Macht Rechtsklick auf die Adresse und drückt auf: "Find out what writes to this Adress".
Verändert im Spiel jetzt eure momentanen HP erneut und es müsste etwas im Fenster stehen was ihr vorher mit "Find out what writes to this Adress" gefunden habt.
Macht DoppelKlick auf die Adresse und es sollte sich ein neues Fenster öffnen
4C ist das Offset das schreiben wir uns irgendwo hin oder wie merken es uns.
Die Adresse in der Mitte des Fensters ist der Hexadresse. (0xXXXXXXX)
Die ist nur wichtig wenn meine Methode im Video unten nicht funktioniert. Aber im
Moment ist sie unwichtig.
Dann machen wir einen Rechtsklick auf unsere Adresse von vorhin die unsere momentanen Hp beinhalten und drücken auf "Pointerscann for this adress".
Dann öffnet sich ein Fenster wo ihr eine Haken bei "Pointer must end with specific offsets" hinmacht und schreibt das Offset hin und klickt auf Add. Indem Fall wäre es 4C. Etwas weiter unten über Cancel steht eine 5 bei "max level", dass hier ist die Anzahl der MultiLevelpointer die ihr habt. Bei meiner Methode müsste ihr ausprobieren was das richtige ist. Bei mir wäre es 2 also ein Lvl 2 Pointer.
(Das ist die Anzahl der Offsets die wir brauchen um zu der Statischen Adresse zu gelangen) Wir schreiben hier eine 2 rein und drücken auf OK und erstellen uns noch eine Pointerliste. (Zu den Max Level: Die Anzahl der Offsets und die Offsets an sich können von Spiel zu Spiel anders sein. Ihr müsst einfach durchprobieren welchen MultiLevelPointer ihr habt.)
Wenn der PointerScann fertig ist sollten in der Regel 1-2 Pointer gefunden worden sein. Jetzt machen wir einen Doppelklick auf die Adresse und sie sollte in Cheat Engine unter der Adresse unserer momentanen HP erscheinen.
Wenn wir jetzt einen Doppelklick auf das Pointerscann ergebnis machen sollte sich ein Fenster. Dort stehen die 2 Offsets drin und die Statische Adresse. Kopiert die Adresse des Pointer und speichert sie irgendwo ab.
Video:
(Ich habe indem Video zuerst einen Level 5 Pointer gesucht da dort aber sehr viele Adressen kamen habe ich danach nach einem Level 2 Pointer gesucht.)
Teil III : Den Wert des Pointers auslesen und anzeigen lassen.
Hier am besten einfach das Video anschauen das es sich schlecht erklären lässt.
Video:
Script:
PHP Code:
; das hier ist das script das uns den wert der HP anzeigt.
#RequireAdmin ; wird bei windows vista/7 benötigt.
#include <Pointer.au3> ; enthält _memorygetbaseadress
$PID = ProcessExists("") ; hier den prozess der geöffnet werden soll hinschreiben.
$MemOpen = _MemoryOpen($PID) ;öffnet den prozess
Global $Offset[3]; dazu gleich mehr.
$Offset[0] = 0 ; immer bei 0 lassen´
$Offset[1] = Dec("") ; hier offset 2 hinschreiben.
$Offset[2] = Dec(""); hier offset 1 hinschreiben.
$StaticOffset = Dec("") ; hier die statischadresse hineinschreiben.
$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($baseADDR + $StaticOffset)
$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset) ; liest den wert aus
;jetzt wollen wir uns doch den wert noch anzeigen lassen O:
;das machen wir am besten mit einem tooltip.
while 1
Tooltip ($Value[1]) ;das [1] zeigt uns den wert also dezimalzahl an.
WEnd
; mit f5 das script starten.
; am besten in eine while schleife packen damit man es besser sehen kann.
Teil IV : Das zusammenfügen der Gui und der Pointer.
Gibt es wieder nicht viel zu schreiben. Einfach das Video wieder anschauen.
Video:
Script:
PHP Code:
; als erster fügen wir die gui ein die wir erstellt haben.
; dann fügen wir das Pointerscript ein
#RequireAdmin ; wird bei windows vista/7 benötigt.
#include <Pointer.au3> ; enthält _memorygetbaseadress
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("HP/MP", 250, 95, 243, 147)
$Label1 = GUICtrlCreateLabel("HP:", 24, 16, 22, 17)
$Label2 = GUICtrlCreateLabel("MP:", 24, 64, 23, 17)
$Progress1 = GUICtrlCreateProgress(64, 16, 134, 16) ; und das hier ist unsere Progressbar die uns den wert anzeigen soll.
; das machen wir so:
$Progress2 = GUICtrlCreateProgress(64, 64, 142, 16)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
while 1
$PID = ProcessExists("NostaleX.dat") ; hier den prozess der geöffnet werden soll hinschreiben.
$MemOpen = _MemoryOpen($PID) ;öffnet den prozess
Global $Offset[3]; dazu gleich mehr.
$Offset[0] = 0 ; immer bei 0 lassen´
$Offset[1] = Dec("AC") ; hier offset 2 hinschreiben.
$Offset[2] = Dec("4C"); hier offset 1 hinschreiben.
$StaticOffset = Dec("003D240C") ; hier die statischadresse hineinschreiben.
$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($baseADDR + $StaticOffset)
$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset) ; liest den wert aus
;und das hier ist unser momentaner wert
$PID1 = WinGetProcess ("NosTale")
$MemOpen1 = _MemoryOpen($PID1)
Global $Offset1[3]
$Offset1[0] = 0
$Offset1[1] = Dec("AC")
$Offset1[2] = Dec("48")
$StaticOffset1 = Dec("003D240C")
$BaseAddr1 = _MemoryGetBaseAddress($MemOpen1, 1)
$Addr1 = "0x" & Hex($baseADDR1 + $StaticOffset1)
$Value1 = _MemoryPointerRead($Addr1, $MemOpen1, $Offset1) ; das ist unser maximalwert
;jetzt noch an die richtige stell packen.
GUICtrlSetData ($Progress1, $Value[1]*100/$Value1[1])
; am besten wieder in eine while schleife packen damit sich die progressbar auch immer aktualisiert.
WEnd
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Ende im Gelände:
Ich hoffe ich konnte ich mit diesem Tutorial weiterhelfen.
Wie oben schon beschrieben ist dies mein ertes Tutorial in diesem Bereich.
Kritik ist gerne erwünscht. Ansonsten gilt für dieses Tutorial: Learning by Doing.
Sollte bei Teil 3 der Wert 0 ausgegeben werden dann liegt das an _MemorygetbaseAdress.
Dann sollte man das Script und den Prozess schließen. Dann zuerst den Prozess starten, einloggen bist die HP erscheinen und dann erst das Script starten.






