AutoIT Memory Reading

05/09/2015 22:34 TurboGolom#1
Hey Leute,
momentan arbeite ich an einem kleinen simplen Bot an dem ich mich tag für tag hocharbeite und verbessere. Momentan kann mein Bot im Hintergrund kämpfen.Ebenfalls möglich ist heilen, trinken usw was allerdings momentan nur über imagesearch/pixelsearch funktioniert was soweit ok ist. allerdings möchte ich mich ja weiter entwickeln und stieß dabei auf memory reading. der Umgang mit CE ist relativ neu für mich und ich bin nicht sicher ob ich es richtig umsetze bzw verstehe.

gut ich verstehe es wie folgt:
schauen ob der bot etwas anvisiert hat:
Gegner anvisieren und in CE nach 1 suchen
Gegner abvisieren und in CE nach 0 suchen
das ganze spiel so lange bis ich nur noch 1-2 werte habe.
den richtigen wert filtern und dann zb in eine IF abfrage einbauen, nach dem motto wenn der CE wert true ist dann kampf, wenn nicht dann nach gegner suchen ?
soweit richtig ?

2te Sache die mich beschäftigt
hatte mich etwas mit der Controlclick Funktion beschäftigt und sofern man gewisse Buttons oder Fenster anklicken will ( im Hintergrund) benötige ich eine ControlID. Kann ich diese nach dem selben prinziep auslesen mit CE wie bsp 1 ? Weil laut AutoIT Tutorial sollte es ganz leicht mit dem AutoIT window info tool funktionieren aber es erkennt die Fenster im spiel nicht sondern nur das gesamte spiel.
Sprich auch hier wieder:
Fenster öffnen in CE nach 1 suchen
Fenster schließen in CE nach 0 suchen ?

danke für jeden hilfreichen tip
05/09/2015 23:44 alpines#2
Nein, so einfach ist die Sache doch wieder nicht.
Je nach dem wie das Spiel das handlet kann man nicht pauschal annehmen, das ein Wert 1 ist wenn man ein Mob anvisiert und der Wert anschließend 0 wird wenn man den Fokus wegnimmt. Du kannst allerdings nach dem Mobnamen suchen, Mobfokus auf anderes ändern, nach neuen Namen suchen usw. Dann solltest du den Speicherbereich bekommen wo das fokussierte Mob ist. Den ersten Wert, oder die Position (spielt absolut keine Rolle) nimmst du, suchst Pointer dazu damit du am Ende einen Pointer mit Offsets hast und von dort aus die anderen Werte (Position, HP, Name, etc) auslesen kannst mittels eines Objekt-Offsets.

Da das Spiel auf oGL oder DX basiert gibt es ControlIDs nicht. ControlIDs sind nur für die von Windows erstellen Controls (Input, Button, Combobox, etc).
Ein DirectX / OpenGL Layer hingegen wird nicht als Control erkannt.
Wenn du ControlClicken willst lass das Feld der ControlID einfach mit "" frei.

Sollte der Click dennoch nicht funktionieren blockiert möglicherweise ein HackShield die Eingabe und du kannst versuchen mittels _SendMessage den Click zu senden.