Tausend Dank,
das du meiner bitte so schnell nachgekommen bist den Guide
ins deutsche zu übersetzen.
mfg Simaru
das du meiner bitte so schnell nachgekommen bist den Guide
ins deutsche zu übersetzen.
mfg Simaru
; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _MemRead ; Description ...: Transfer memory from external address space to internal address space ; Syntax.........: _MemRead(ByRef , , , ) ; Parameters ....: - tagMEMMAP structure ; - Pointer to external memory ; - Pointer to internal memory ; - Size in bytes of memory to read ; Return values .: Success - True ; Failure - False ; Author ........: Paul Campbell (PaulIA) ; Modified.......: ; Remarks .......: This function is used internally by Auto3Lib and should not normally be called ; Related .......: _MemWrite ; Link ..........; ; Example .......; ; =============================================================================================================================== Func _MemRead(ByRef , , , ) Local Return _WinAPI_ReadProcessMemory(DllStructGetData(, "hProc"), , , , ) EndFunc ;==>_MemRead
Func _MMemRead(, , , = '')
Local = DllStructCreate ('int[' & & ']')
DllCall('kernel32.dll', 'int', 'ReadProcessMemory', 'int', , 'int', , 'int', DllStructGetPtr (, 1), 'int', , 'int', )
Local = DllStructGetData (, 1)
=0
Return
EndFunc ;==> _MMemRead()
Nun das War eine Codeinjection per Knopfdruck immer Gold dazu addieren:Quote:
@Fir3andIc3:
Ich glaub, die injection erfüllt am ehesten den zweck für das Auslesen der HP/MP etc.
Offset 00946F64 <- Speicheradresse für neuen Code?
hex 01 <- ??? benutze HEX; dachte ASM benutzt regulär nur hex, es sei, man sagt int ? :)
OFFSET 00946DF8 <- 2ter offset, wofuer?
-- von hier an, also neuer Code?
(dann bräuchte er nur Adresse 006e2251 zu suchen...
und müsste eine 2te Zeile einfügen:
(006e2251) mov [ecx+0000071c], esi <- ESI beinhaltet hier scheinbar den Wert der maxHP...
(00xxxxxx) mov 00946FF0, esi <- kopiert er dann den gleichen Wert auch an die Adresse?
-- nu keine Ahnung, mehr soll er nicht tun =]
Aber ich muss via MemRead aus AutoIt nun genau auf besagte Adresse zugreifen, um den Wert der HP lesen zu können, da ich ihn nu hoffentlich angewiesen habe, mir den Wert in die 'fixe' Adresse zu speichern.
Hm, ich hab das ganze zwar iwie verstanden, aber sicher nur zur Hälfte, wenn überhaupt. :/
procedure TForm2.Button1Click(Sender: TObject);
var
hSnap: THandle;
xModule: ModuleEntry32;
Result: Cardinal;
begin
Result := 0;
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then MessageDlg('...just run the game first ;-)', mtwarning,[mbOK],0);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
hSnap:= CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
xModule.dwSize:= SizeOf(xModule);
If Module32First(hSnap, xModule) Then Begin
While Module32Next(hSnap, xModule) Do
If xModule.modBaseSize = $0026A000 Then
Result := Cardinal(xModule.modBaseAddr);
End;
CloseHandle(hSnap);
GetMem(buf,1);
if Result = 0 then else
begin
buf := Chr($8B) + Chr($4E) + Chr($2C) + Chr($8B) + Chr($04) + Chr($81) + Chr() + Chr($41) + Chr($04) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($10) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($18) + Chr($05) + Chr($00) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($50) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($60) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($64) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($70) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($78) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($4C) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($5C) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($7C) + Chr() + Chr($01) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($64) + Chr($05) + Chr($00) + Chr($00) + Chr($00) + Chr() + Chr($41) + Chr($68) + Chr($05) + Chr($00) + Chr($00) + Chr($00) + Chr();
WriteProcessMemory(HandleWindow,Ptr(10B0F),buf,98,write);
buf := Chr() + Chr($2F) + Chr($72) + Chr() + Chr() + Chr($90);
[COLOR="Red"]WriteProcessMemory(HandleWindow,Ptr(Result +),buf,6,write);[/COLOR]
end;
closehandle(HandleWindow);
end;
Quote:
Mal ne Frage zu WPE, wenn wir jetzt z.B die CD für Skills tauschen können, kann man das ja auch bei Potions, also könnte man doch z.B. grüne Potions gegen Rote und Orange gegen Blaue austauschen, also ich meine den Cooldownhack
Ausserdem frage ich mich, wie man herausfindet was etwas bewirkt, also z.B ihr wisst ja, das 16-23 Cooldown ist, wie wärs bei Items, dort müsste man doch auch das finden, das es von der Datenbank(Server) abgezogen wird...
Das könnte man dann ja auch filtern ^^
Okay, eigentlich ist ja alles möglich ^^
Nur wie, das weiß nicht jeder :D
gn8 marvin
Nun ich habe ein Tool erstellt mit welchem der Trick mit dem Wiederbeleben super geht (also zurück in City sofort Exit, wieder einloggen und man ist wieder an der selben stelle wie vor dem Tod). Evtl. könnte man sowas einbauen mit Autologin halt. Das würde Sinn machen. Die Koordinaten XY und Z habe ich schon mal herausgehabt mit ASM. War Laggy aber er ist immer wieder zu der Stelle gegangen wo ich die Koordinaten vorher gefreezt habe :D Man könnte damit evtl. eine Funktion einbauen nur für spezielle Orte wie gehe Tullan oder gehe Zylok usw.Quote:
Oben beschriebenes von Fir3andIc3 ist nur ASM, ja. ;)
@71ngel:
So ziemlich alles hat der gute marvin1504 bereits erläutert. ;)
Es wäre ein leichtes, solch eine Routine einzubauen, die eine bestimmte Menge Mobs pullt und diese danach mit möglichen AoE-Attacken niederstreckt...aber:
eine ähnliche Routine ist durch den Knopf *next Target* | *neues Ziel* bereits eingebaut, die zwar nicht wartet, bis die gewünschte Menge vor Dir steht, aber in gewissen Abständen neue Mobs anvisiert und dazu lockt.
Ich hab die Erfahrung gemacht, das es wenig Sinn bringt, eine solche Funktion (zB in Archbot vorhanden) einzubauen, da man genauso gut auch komplett auf AOE und 'switch Mob in Time' gehen kann, bringt keinen Unterschied, wenn man seinen Char nicht dummerweise an einen Ort verbannt, wo es eh lebensbedrohlich für ihn wird. ;)
Solche Dinge, wie den Char wiederbeleben, ihn an den alten Kampfplatz zurückzuschicken, beinhaltet eine riesen Arbeit. Zuerst muss man für den Bot eine eigene Karte erstellen, die er lesen kann, dann muss man entweder per Bildabgleich herausfinden, wo genau Dein Char sich befindet, was man in regelmässigen Abständen wiederholen muss. So weit ist aber noch nix passiert, nun muss man dem Bot ausserdem Wegpunkte geben, die besagen, wie er von jedem x-belibiegen Ort zu einem gewünschten gelangt, mal Dir selbst aus, was da für Arbeit hintersteht. ;)
(ich weiss zwar, das man zB durch spammen einfach durch Wände etc laufen kann, aber falls der Char doch mal irgendwo festhängt, ist der Ärger gross)
zB. der ACXO-Bot hat eine Karte, woraus er denk ich auch Werte über den Standort abliest und wenn man sich die Scripte von ihm mal anschaut, fällt eines sofort auf, es gibt X,Y und Z Koordinaten, mit denen sie arbeiten.
Tjoar, sollte sich der kleine Bot hier irgendwann tatsächlich soweit heraus etablieren, würden sicher einige solche Scripte bauen, aber sicher nicht für den Bot, wie er ist, nicht mit AutoIt, das stösst bereits jetzt an seine Grenzen. ;)