Ich versuche einer Idee für einen Levelbot hinterherzujagen habe dabei aber Probleme
Ich arbeite mit Autoit und versuche aus der Minimap auszulesen wo die Monster sind und dann den Charakter darauf zulaufen zu lassen
Mein Ansatz:
PHP Code:
Func Suche ()
$Pfeilspitze = PixelSearch (900,15,1000,110, 0xFFFFE7)
If not @error Then
$Monster = PixelSearch (900,15,1000,110, 0xEB1609)
If not @error Then
$M = (68 - $Pfeilspitze[1]) / (955 - $Pfeilspitze[0])
$B = $Pfeilspitze[1] - ($Pfeilspitze[0] * $M)
$Ergebnis = ($M * $Monster[0])+$B
If $Monster[1] = $Ergebnis Then
Send("{W}")
Else
Send("{E}")
EndIf
Else
Suche()
EndIf
Else
Send("{E down}")
Sleep(100)
Send("{E up}")
EndIf
EndFunc
Ich habe 2 Punkte Die Spitze des Pfeiles ($Pfeilspitze[0],$Pfeilspitze[1]) und die Mitte (955,68) daraus rechne ich eine Grade und wenn das Monster auf dieser graden ist soll er sich dahin bewegen
Hast du versucht ob das Spiel überhaupt Send/ControlSend unterstützt?
Eventuell kannst du es mit PostMessage probieren aber die meisten Spiele haben einen Anti-Hack installiert bei denen Send von AutoIt nicht mehr funktioniert.
Desweiteren musst du beachten, das du eine Rekursion in deiner Funktion hat, nach 1899 Aufrufen wird das Script abstürzen, denn du startest Search() in Func Search()
aso stimmt habe ich nicht genannt - ich spiele auf einem selbst gemachtem p server von Metin2
send und so funktioniert eigentlich immer sehr gut
wie kann ich die Rekursion verhindern aber noch von vorne anfangen?
Zu meinem eigentlichem Problem hat jemand schonmal mit autoit versucht zu rechnen kann es das überhaupt? ich glaube langsam das für $M eine zu kleine zahl raus kommt und das autoit die nicht benutzen kann oder als 0 wertet - kann das sein?
Um das Rechnen in AutoIt brauchst du dir keinen Kopf zu machen, 15 Nachkommastellen erreichst du bei einer Pixelsuche glaub ich nicht.
Neustarten könntest du das, indem du ExitLoop verwendest.
Versuch die ganze Position in eine While 1 zu packen und bei der Zeile mit Search() schreibst du gar nichts hin und bei den anderen nimmst du ExitLoop damit, die Schleife unterbrochen wird.
Der Code könnte so vielleicht korrekt aussehen, musst du eventuell noch anpassen:
Code:
Func Suche ()
While 1
$Pfeilspitze = PixelSearch (900,15,1000,110, 0xFFFFE7)
If not @error Then
$Monster = PixelSearch (900,15,1000,110, 0xEB1609)
If not @error Then
$M = (68 - $Pfeilspitze[1]) / (955 - $Pfeilspitze[0])
$B = $Pfeilspitze[1] - ($Pfeilspitze[0] * $M)
$Ergebnis = ($M * $Monster[0])+$B
If $Monster[1] = $Ergebnis Then
Send("{W}")
Else
Send("{E}")
EndIf
ExitLoop
Else
Sleep(100) ;Hier war die Rekursion
EndIf
Else
Send("{E down}")
Sleep(100)
Send("{E up}")
ExitLoop
EndIf
WEnd
EndFunc
nur hat sich leider an meinem eigentlichem Problem nichts verändert
angenommen die komplette rechnung sei falsch dan müsste doch mehr oder weniger dauerhaft ein E gesendet werden aber ingame passiert einfach garnichts
wo könnte das programm sonst noch probleme haben oder hängen?
Stürzt das Script denn ab oder hängt es sich nur irgendwie auf?
Wenn es nicht abstürzt dann müssen wir den restlichen Source sehen, weil dort wahrscheinlich der Fehler liegen wird.
Du kannst ab und zu MsgBoxen einbauen die Zahlen ausgeben und an bestimmten Positionen stehen, wie z.B. der If / Send um zu gucken, ob das Script überhaupt so weit kommt.
Monstersuche mit Autoit 08/11/2013 - Metin2 Private Server - 3 Replies Hey Freunde,
Ich versuche einer Idee für einen Levelbot hinterherzujagen habe dabei aber Probleme
Ich arbeite mit Autoit und versuche aus der Minimap auszulesen wo die Monster sind und dann den Charakter darauf zulaufen zu lassen
Mein Ansatz:
Func Suche ()
$Pfeilspitze = PixelSearch (900,15,1000,110, 0xFFFFE7)
If not @error Then