Ich hab mir in letzter Zeit ein bischen was zu MemoryReading angeschaut und denke / hoffe das ich in nächster Zeit auch mal was damit anstellen kann.
Mein erste Ziel wäre ein, wie gesagt, WoW Bot, der Anti-Afk wo rum steht, und nach Mobs IM SPEICHER sucht, und wenn er was gefunden hat, eine bestimmte Rotation macht, das der Mob auch stirbt.
So jetzt zur Frage wie man das angeht:
Wie suche ich Gegner im Speicher ?
Und wenn ich was gefunden habe einfach mit if($MobImTarget != null) Then ... ?
Vielleicht könnt ihr mir da ja ein bischen helfen.
Mit MemoryRead und co. wirst du da nicht weit kommen. Da müsstest du ehr mit ASM bzw .dlls arbeiten. Es gibt auch eine BlackMagicAU3.au3 UDF, die Speziell für WoW ist.
Für einen Privat oder den Offi server?
Ja mit BlackMagic hab ich in C# schon ein bischen gearbeitet, wusste nicht das es dafür auch was für AutoIt gibt. Wo bekomm ich denn die BlackMagicAu3.au3 her ?
Und der Bot soll später mal, da es noch eine relativ lange Lern- und Testphase geben wird , für die offiziellen Server sein.
Global $m_Kernel32, $m_User32 Global $m_IsInitialized = False
;------------------------------------------------- ; _BMInitialize() ;------------------------------------------------- ; Desc: This function needs to be called before ; using any other functions contained in ; this UDF. ;------------------------------------------------- Func _BMInitialize() $m_Kernel32 = DllOpen("kernel32.dll") If $m_Kernel32 = -1 Then MsgBox(0x10, "Error Opening Kernel32.dll", "Could not open Kernel32.dll") Return EndIf
$m_User32 = DllOpen("user32.dll") If $m_User32 = -1 Then MsgBox(0x10, "Error Opening User32.dll", "Could not open User32.dll") Return EndIf
;------------------------------------------------- ; _BMDispose() ;------------------------------------------------- ; Desc: This function should be called after the ; user is done with the functions in this ; UDF. ;------------------------------------------------- Func _BMDispose() If $m_Kernel32 <> -1 Then DllClose($m_Kernel32) If $m_User32 <> -1 Then DllClose($m_User32) $m_IsInitialized = False EndFunc ;End _BMDispose
;------------------------------------------------- ; _BMOpenProcess() ;------------------------------------------------- ; Desc: This should be called before manipulating ; the process' memory. ;------------------------------------------------- Func _BMOpenProcess($PID, $UsePID = True, $AccessRights = $PROCESS_ALL_ACCESS) If Not $m_IsInitialized Then SetError(1) Return 0 EndIf
Local $l_ret
If Not $UsePID Then Local $l_hWnd = $PID $l_ret = DllCall($m_User32, "dword", "GetWindowThreadProcessId", "hwnd", $l_hWnd, "dword*", 0) If Not @error Then $PID = $l_ret[2] If $PID = 0 Then MsgBox(0x10, "Null Process ID", "Start WoW before starting NinjaSkid!")
Return 0 EndIf Else MsgBox(0x10, "Error Getting ProcessId", "Could not obtain the ID of the process in question.") Return 0 EndIf EndIf
Local $l_hProcess
$l_ret = DllCall($m_Kernel32, "ptr", "OpenProcess", "dword", $AccessRights, "int", 0, "dword", $PID) If Not @error Then $l_hProcess = $l_ret[0] If $l_hProcess = 0 Then MsgBox(0x10, "Null Process Handle", "The process handle obtained is null.") Return 0 EndIf Else MsgBox(0x10, "Error Getting Process Handle", "Could not obtain a handle to the process in question.") Return 0 EndIf
Return $l_hProcess EndFunc
;------------------------------------------------- ; _BMCloseHandle() ;------------------------------------------------- ; Desc: This should be called on the handle that ; is returned by _BMOpenProcess(). ;------------------------------------------------- Func _BMCloseHandle($Handle) If $m_IsInitialized Then DllCall($m_Kernel32, "dword", "CloseHandle", "ptr", $Handle) EndIf EndFunc
#Region Read Memory Func _BMReadRawMemory($Handle, $Address, ByRef $Struct) If Not $m_IsInitialized Then SetError(1) Return 0 EndIf
If DllStructGetPtr($Struct) = 0 Or DllStructGetSize($Struct) = 0 Then SetError(2) Return 0 EndIf
man benötigt für das arbeiten mit dem speicher eigentlich keine udfs... ich persöhnlich finde diese meist unnötig kompliziert, und davon abgesehen sind die meisten auch recht unvollständig.
die funktionen die man benötigt, kann man sich mithilfe der msdn datenbank auch recht schnell selbst definieren.
ich für meinen teil arbeite viel mit inline asm und habe mir deshalb vor einiger zeit folgende udf für meinen bedarf erstellt:
natürlich wäre es möglich alle parameter der original funktionen auch zu übernehmen. da aber zumindest in meinen scripten einige parameter sowieso statisch feststanden, kann man auf diese auch sehr gut verzichten.
[Frage]AutoIt Befehl "Send ("text") 12/28/2010 - AutoIt - 4 Replies Hey ElitePvpers,
seit einigen Tagen beschäftige ich mich mit AutoIt, und kenne einige Befehle und Co. Nun Frage ich mich seid gestern, ob man den Text der gesendet werden soll in der .txt Datei abgespeichert wird und AutoIt dann den Text damit aufrufen kann. Also z.B. wenn der Script Code so aussieht:
While 1
Send("text")
Send("{Enter}")
Sleep(2000)
Wend
Kann mir bitte jemmand eine Hmachi HP erstellen """""SOS HELP"""" 09/15/2010 - Metin2 Private Server - 11 Replies SO wie der Titel schon sagt ich suche einen der mir per Teamviwer eine hp machen kann habe schon alles ausprobiert aber es klappt nie!!!!
PLS HELP...