Nachdem ich heute mehrere Stunden damit verbracht habe die MoveTo Engine bei mir ans Laufen zu bringen habe ich mich entschlossen mein Problem zu posten.
Ich benutze die MoveTo Engine von tonitusch666 mit dem dazugehörigen Dumper. Ich habe die Update.ini auf den neuesten Stand gebracht (copy&paste aus Thread) und selbst mit CE überprüft.
Das seltsame ist, das die Funktion CheckArea() aus der tt6.au3 einwandfrei funktioniert! Das heißt die Mems sind OK, jedoch funktioniert dieser simple MoveTo Aufruf nicht:
PHP Code:
#include "tt6.au3"
PrepMoveTo()
MoveTo(1, 14237, -382)
StopMoveTo()
Der Charakter dreht sich entweder nur im Kreis oder dreht sich n bisschen und rennt dann nur noch geradeaus.
Das einzigste was ich herausgefunden habe und nützlich sein könnte ist Folgendes:
Wenn ich einen Bot (z.B. einer der Test-Bots, die bei der MoveTo Engine mitgeliefert werden) starte, gibt dieser immer die Fehlermeldung "No valid spawnpoint" aus. Das heißt, das meine Mem-Koordinaten des Charakters nicht kongruent mit denen anderer sind. So schlägt deren CheckArea() immer fehl, meins funktioniert jedoch, da ich die Funktion mit meinen "falschen" Koordinaten benutze. Warum meine PosX und PosY Koordinaten jedoch fehlerhaft sein sollten und warum deshalb die MoveTo Funktionen nicht funktionieren sollten weiß ich nicht.
Habe alle relevanten Dateien in den Anhang gepackt. Falls ihr wie ich nicht gerne fremde Dateien runterladet, hier alle im Spoiler:
;
; TT6 movement engine and collection of useful functions
; Rev 1.7
; 15.4.2009
;
; adapt to your screen size and layout !
; note: to debug replace using click function by MouseClick so you can see the position
;
[id]
#Region Global Variables
; mems compatible to update.ini by __wadim
Const $memx = IniRead("update.ini","SECTION D","POSX","Not found") ; position x
Const $memy = IniRead("update.ini","SECTION D","POSY","Not found") ; position y
Const $memmap = IniRead("update.ini","SECTION D","CHECK_MAP","Not found") ; post=0, load =2, area=1
Const $memnpcidselect = IniRead("update.ini","SECTION D","NPC_ID_SELECT","Not found") ; id of selected object
Const $memnpcidnear = IniRead("update.ini","SECTION D","NPC_ID_NEAR","Not found") ; id of nearest object
Const $memcourse = IniRead("update.ini","SECTION 9-A","CAMCOURSEB","Not found") ; angle of compass/view direction
Const $memdeath = IniRead("update.ini","SECTION 9-A","DEATH","Not found") ; alive = 0 or death = 1
; globals for movement engine
Global $gotox = 0.0, $gotoy = 0.0 , $dist = 0.0, $olddist = 0.0, $angle = 0.0, $increment = 0, $callcnt = 0
Global $client = IniRead("tt6.ini","id","windowName","Guild Wars")
$PID = WinGetProcess($client)
Global $hprocess = _MemoryOpen($PID)
Global $hwnd = WinGetHandle($client)
Global $running = False, $stopCheck = False, $blockCheck = False
Const $pi = 4 * ATan(1)
Global $accelmul = 1.0 ;modify to accelerate or slow down control action
Global $isDead = False ;global status to check if got killed, set to False after recovery or new movement
Global $gotBlocked = False ;global status to check if got blocked, set to False after exception handling
Global $noLoot = False ;global status to temporarily disable looting e.g. in parallel adlib thread
;debug movement
Const $debug_pos = False ;set True to show current movement segment
Const $debug_mov = False ;set True to show left/right control action
;generate inventory access matrix adapt positions in the tt6.ini
Const $invMaxR = 8 ;max number of rows 0..8
Const $invMaxC = 4 ;max number of columns 0..4
Global $invPos[$invMaxC+1] [$invMaxR+1][2];matrix of positions [0]=x, [1]=y
$invPos[0][0][0] = Int(IniRead("tt6.ini","inventory offsets","invPosX00",0))
$invPos[0][0][1] = Int(IniRead("tt6.ini","inventory offsets","invPosY00",0))
$invPos[0][1][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR1",0))
$invPos[0][2][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR2",0))
$invPos[0][3][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR3",0))
$invPos[0][4][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR4",0))
$invPos[0][5][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR5",0))
$invPos[0][6][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR6",0))
$invPos[0][7][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR7",0))
$invPos[0][8][1] = Int(IniRead("tt6.ini","inventory offsets","invPosYR8",0))
$invPosXdelta = Int(IniRead("tt6.ini","inventory offsets","invPosXdelta",0))
For $ri=1 To 8
$invPos[0][$ri][0] = $invPos[0][0][0] ;x offset of 0 element constant in every row
Next
For $ri=0 To 8
For $ci=1 To 4
$invPos[$ci][$ri][0] = $invPos[0][$ri][0] + $invPosXdelta *$ci ; x offset increases by number of column
$invPos[$ci][$ri][1] = $invPos[0][$ri][1] ; y offset equal to 0 position in every row
Next
Next
;blacklist for CollectLoot
;position 0 contains number of valid entries
Const $CLBlackMax = 50
Global $CLBlackList[$CLBlackMax +1]
$CLBlackList[0] = 0
#EndRegion
#Region Movement Engine
; stop movement
Func StopMoveTo()
if Not $gotBlocked Then
KeySend($ARmovkey)
EndIf
$increment = 0
$callcnt = 0
$running = False
$stopCheck = False
$blockCheck = False
EndFunc
; end movement but keep running e.g. to exit
Func KeepMoveTo()
$increment = 0
$callcnt = 0
$running = False
$stopCheck = False
$blockCheck = False
EndFunc
; disables check if we stopped runnning unintended (eg by cast or knock down)
; note: must be used to protect casts as we try to start running again immediately in auto mode
Func DisableStopCheck()
if $stopCheck Then
$stopCheck = False
EndIf
EndFunc
; enables check again
Func EnableStopCheck()
if ($blockCheck = False) And ($stopCheck = False) Then
$stopCheck = True
EndIf
EndFunc
; calculate rotation angle
Func GetCourse($val)
$i=0
$valL = Abs($val)
While $course_table[$i] < $valL
$i +=1
if $i = 100 Then ;error
ConsoleWrite(StringFormat("GetCourse: bad call: %.4f",$valL))
Exit
EndIf
WEnd
return Int($i * 10 * $accelmul)
EndFunc
; initialise new destination
Func InitDest($dx, $dy, $dcheck = False)
;no movement if we are dead or got blocked
If $isDead Or $gotBlocked Then
Return
EndIf
; set global destination
$gotox = $dx
$gotoy = $dy
if $debug_pos Then
ConsoleWrite(StringFormat("InitDest: %d %d\n",$gotox, $gotoy))
EndIf
; set stop level for angles in relation to distance
if $dist > 2000 Then
$stoplvl = 1.8
Elseif $dist > 1200 Then
$stoplvl = 1.5
Elseif $dist > 700 Then
$stoplvl = 1.2
Elseif $dist > 400 Then
$stoplvl = 0.8
Elseif $dist > 200 Then
$stoplvl = 0.6
Else
$stoplvl = 0.2
EndIf
; calc angle
$angle = ACos(($gotox - $posx)/$dist)
if $gotoy < $posy Then
$angle = -$angle
EndIf
; rotate view to destination
$cnt =0
Do
; transition via q2<->q3 by pseudo course angle
$curcou = _memoryread($memcourse,$hprocess,'float')
if (($angle > $pi/2) And ($curcou < $angle - $pi)) Then
$curcou = 2*$pi + $curcou
EndIf
if (($angle < -$pi/2) And ($curcou > $pi+$angle)) Then
$curcou = -2*$pi + $curcou
EndIf
; big delta -> stop running
if Abs($angle - $curcou) > $stoplvl Then
if $running = True Then
KeySend($ARmovkey)
$running = False
EndIf
EndIf
$accel = GetCourse(Abs($angle - $curcou))
; rotate
if $angle < $curcou Then
KeySend($TRmovkey, "down")
Sleep($accel)
KeySend($TRmovkey, "up")
if $debug_mov = True Then
ConsoleWrite(StringFormat("InitDest: %s %d %.4f %.0f\n",$TRmovkey ,$accel, $angle, $dist))
EndIf
Else
KeySend($TLmovkey, "down")
Sleep($accel)
KeySend($TLmovkey, "up")
if $debug_mov = True Then
ConsoleWrite(StringFormat("InitDest: %s %d %.4f %.0f\n",$TLmovkey ,$accel, $angle, $dist))
EndIf
EndIf
Sleep(100)
$cnt +=1
; check for death
if $dcheck And _memoryread($memdeath,$hprocess) = 1 Then
$isDead = True
Return
EndIf
; sometimes GW does not accept rotation keys, so just start movement and proceed with fingers crossed
Until (Abs($angle - $curcou) <0.1) Or ($cnt > 10)
EndFunc
; cyclic function for movement to destination (must be called every 10ms)
Func MoveToCore($okdist, $dcheck = False)
;no movement if we are dead or got blocked
If $isDead Or $gotBlocked Then
Return True
EndIf
; get data
$posx = _memoryread($memx,$hprocess,'float')
$posy = _memoryread($memy,$hprocess,'float')
$curcou = _memoryread($memcourse,$hprocess,'float')
; try to catch problem in case we missed target
if $olddist < $dist -100.0 Then
InitDest($gotox, $gotoy, $dcheck)
EndIf
; store distance every 500ms, initial value is set in InitDest(), check for special situations
If Mod($callcnt, 50) = 0 Then
; set death flag and exit
if $dcheck And _memoryread($memdeath,$hprocess) = 1 Then
$isDead = True
Return True
EndIf
; restart running in case we got stopped
if $stopCheck And (Abs($olddist - $dist) < 20.0) Then
$running = False
EndIf
; set blocked flag and exit
if $blockCheck And (Abs($olddist - $dist) < 20.0) Then
$gotBlocked = True
Return True
EndIf
$olddist = $dist
EndIf
;increment call counter
$callcnt +=1
; check running
if $running = False Then
$running = True
KeySend($ARmovkey)
EndIf
; calc angle
$angle = ACos(($gotox - $posx)/$dist)
if $gotoy < $posy Then
$angle = -$angle
EndIf
; correct angle on the fly
If (Abs($angle - $curcou) >0.1) And ($increment = 0) Then
; transition via q2<->q3 by pseudo course angle
$curcou = _memoryread($memcourse,$hprocess,'float')
if (($angle > $pi/2) And ($curcou < $angle - $pi)) Then
$curcou = 2*$pi + $curcou
EndIf
if (($angle < -$pi/2) And ($curcou > $pi+$angle)) Then
$curcou = -2*$pi + $curcou
EndIf
$increment = GetCourse(Abs($angle - $curcou))
; rotate
if $angle < $curcou Then
KeySend($TRmovkey, "down")
$increment -=10
if $debug_mov = True Then
ConsoleWrite(StringFormat("MoveToCore: %s %d %.4f %.0f\n",$TRmovkey ,$increment, $angle, $dist))
EndIf
Else
KeySend($TLmovkey, "down")
$increment -=10
if $debug_mov = True Then
ConsoleWrite(StringFormat("MoveToCore: %s %d %.4f %.0f\n",$TLmovkey ,$increment, $angle, $dist))
EndIf
EndIf
ElseIf ($increment > 0) Then
$increment -=10
if $increment <= 0 Then
KeySend($TRmovkey, "up")
KeySend($TLmovkey, "up")
EndIf
EndIf
; reached position
If $dist < $okdist Then
$increment = 0
KeySend($TRmovkey, "up")
KeySend($TLmovkey, "up")
if $debug_pos Then
ConsoleWrite(StringFormat("MoveToCore: %d %d\n",$gotox, $gotoy))
EndIf
return True
EndIf
Return False
EndFunc
; movement function
; $mode = 0 : do one iteration and return, used in very special situations only
; $mode = 1 : init destination and move there
; $mode = 2 : autorun mode, if a stop is detected it will be tried to run again automatically
; $mode = 3 : block mode, if a block is detected we set flag and exit
; $random adds some variation to movement positions
; $dcheck enables deathcheck
; $okdist specifies the distance to the destination which will be accepted as position reached
Func MoveTo($mode, $x, $y, $random = False, $dcheck = False, $okdist = 130.0)
$xl = $x
$yl = $y
if $random Then
$xl = $x + Int(Random(-100,100))
$yl = $y + Int(Random(-100,100))
EndIf
if $mode = 0 Then
$stopCheck = False
$blockCheck = False
Return MoveToCore($okdist, $dcheck)
ElseIf $mode = 1 Then
$stopCheck = False
$blockCheck = False
InitDest($xl, $yl, $dcheck)
While Not MoveToCore($okdist, $dcheck)
Sleep(10)
WEnd
ElseIf $mode = 2 Then
$stopCheck = True
$blockCheck = False
InitDest($xl, $yl, $dcheck)
While Not MoveToCore($okdist, $dcheck)
Sleep(10)
WEnd
ElseIf $mode = 3 Then
$stopCheck = False
$blockCheck = True
InitDest($xl, $yl, $dcheck)
While Not MoveToCore($okdist, $dcheck)
Sleep(10)
WEnd
Else ;error
ConsoleWrite(StringFormat("MoveTo: bad mode: %d",$mode))
Exit
EndIf
EndFunc
#EndRegion
#Region Collection of Functions
; check if position is in area
Func CheckArea($xval, $yval)
$ret = False
$pX = _memoryread($memx,$hprocess,'float')
$pY = _memoryread($memy,$hprocess,'float')
if ($pX < $xval + 250) And ($pX > $xval - 250) And ($pY < $yval + 250) And ($pY > $yval - 250) Then
$ret = True
EndIf
Return $ret
EndFunc
; random sleep function with -+5% variation
Func RndSleep($val)
$sle = Random($val * 0.95, $val *1.05, 1)
Sleep($sle)
EndFunc
;check if we got killed
Func CheckDeath()
if _memoryread($memdeath,$hprocess) = 1 Then
$isDead = true
return true
EndIf
EndFunc
; check area for not collectable items like chests/signs etc.
Func BuildCLBlackList()
$CLBlackList[0] = 0
KeySend($INtgtkey)
Sleep(200)
$cnt = 0
$id = _memoryread($memnpcidselect,$hprocess)
While ( $id > 0 And $cnt < $CLBlackMax)
for $i=1 to $cnt
If $CLBlacklist[$i] = $id Then ExitLoop 2
Next
$cnt +=1
$CLBlackList[$cnt] = $id
KeySend($IXtgtkey)
Sleep(200)
$id = _memoryread($memnpcidselect,$hprocess)
WEnd
$CLBlackList[0] = $cnt
EndFunc
; collect loot
; $max limits number of items to pick up
; $checkblack enables usage of blacklist generated by a call to BuildCLBlackList()
; $retrytime specifies the time in ms to do another attempt to collect the item,
; useful if items may be spread all over the place after a farm run
; $retrycount specifies how many retry attempts should be done until item gets blacklisted
; (e.g. blocked by an foe)
Func CollectLoot($max, $checkblack = False, $retrytime = 200, $retrycount = 0)
$cnt =0
If $checkblack Then
$max += $CLBlackList[0]
Else
; clear old blacklist
$CLBlackList[0] =0
EndIf
;select first item
KeySend($INtgtkey)
RndSleep(200)
$id = _memoryread($memnpcidselect,$hprocess)
While ( $id > 0) And ($cnt < $max)
;check for death
If (_memoryread($memdeath,$hprocess) = 1) Then ExitLoop
;check if item has been blacklisted
If $checkblack Then
For $i = 1 To $CLBlackList[0]
If $CLBlackList[$i] = $id Then
KeySend($IXtgtkey)
RndSleep(200)
$id = _memoryread($memnpcidselect,$hprocess)
$cnt +=1
ContinueLoop 2
EndIf
Next
EndIf
;check if looting has been disabled
$CLtimer = TimerInit()
While $noLoot
$CLtime = TimerDiff($CLtimer)
Sleep(500)
If $CLtime > 30000 Then ;noLoot timeout
ConsoleWrite("CollectLoot: noLoot timeout exceeded")
Exit
EndIf
WEnd
;collect item
$rcnt = 0
KeySend($DIactkey)
RndSleep(200)
$CLtimer = TimerInit()
While ($id = _memoryread($memnpcidselect,$hprocess))
Sleep(100)
;wait if we have to run a longer distance
$CLtime = TimerDiff($CLtimer)
if $CLtime > $retrytime Then
;dont do a retry just wait retrytime
if $retrycount = 0 Then ExitLoop
;try again
KeySend($DIactkey)
$rcnt +=1
;max retries reached, check if still not collected and blacklist item
if $rcnt = $retrycount Then
RndSleep(200)
If ($id = _memoryread($memnpcidselect,$hprocess)) Then
$checkblack = True
$enter = True
for $i=1 to $CLBlackList[0]
If $CLBlacklist[$i] = $id Then
$enter = False
EndIf
Next
if $enter Then
$CLBlackList[0] +=1
$CLBlackList[$CLBlackList[0]] = $id
EndIf
EndIf
ExitLoop
EndIf
$CLtimer = TimerInit()
EndIf
;check for death
If (_memoryread($memdeath,$hprocess) = 1) Then ExitLoop 2
WEnd
; wait until dead and got rezzed
Func WaitRezz()
While _memoryread($memdeath,$hprocess) <> 1
Sleep(2000)
WEnd
While _memoryread($memdeath,$hprocess) <> 0
Sleep(2000)
WEnd
RndSleep(3000)
EndFunc
; transfer to different area / portal
; $toID specifies area we want to travel to
; $timeout is the time in sec after we exit with an error
Func TransferArea($toID, $timeout = 20)
; wait until transfer has started
$cnt = 0
While Not ((_memoryread($memmap,$hprocess)) = 2)
Sleep(200)
$cnt +=1
if $cnt > 5*$timeout Then
ConsoleWrite("TransferArea: transfer timeout exceeded")
Exit
EndIf
WEnd
;wait until new area has been reached
$cnt = 0
While (_memoryread($memmap,$hprocess)) <> $toID
Sleep(200)
$cnt +=1
if $cnt > 5*$timeout Then
ConsoleWrite(StringFormat("TransferArea: area ID: %d timeout exceeded", $toID))
Exit
EndIf
WEnd
RndSleep(4000)
;wait until course has been stabilized
$cnt = 0
While _memoryread($memcourse,$hprocess,'float') > 2*$pi
Sleep(200)
$cnt +=1
if $cnt > 5*$timeout Then
ConsoleWrite("TransferArea: course timeout exceeded")
Exit
EndIf
WEnd
EndFunc
; transfer to GH, may be used from/to GH
Func TransferGH()
KeySend($OGpnlkey)
RndSleep(500)
ControlClick($client, "", "", "left", 1, $GHclickX, $GHclickY)
$cnt = 0
While Not ((_memoryread($memmap,$hprocess)) = 2)
Sleep(200)
$cnt +=1
if Mod($cnt, 10) = 0 Then
ControlClick($client, "", "", "left", 1, $GHclickX, $GHclickY)
EndIf
if Mod($cnt, 15) = 0 Then
KeySend($OGpnlkey)
EndIf
WEnd
While (_memoryread($memmap,$hprocess)) <> 0
Sleep(100)
WEnd
RndSleep(4000)
KeySend($OGpnlkey)
RndSleep(500)
EndFunc
; ident all items from start row to end row (0..8) using ident kit at row/col (0..4)
Func IdentItems($StartRow, $EndRow, $IdentCol, $IdentRow)
KeySend($TBinvkey)
RndSleep(500)
if $EndRow > $invMaxR Then
$end = $invMaxR
Else
$end = $EndRow
EndIf
For $row = $StartRow To $end
For $col = 0 To $invMaxC
MouseSend("left", "dclick", $invPos[$IdentCol][$IdentRow][0], $invPos[$IdentCol][$IdentRow][1])
RndSleep(250)
MouseSend("left", "click", $invPos[$col][$row][0], $invPos[$col][$row][1])
RndSleep(250)
Next
Next
RndSleep(500)
KeySend($TBinvkey)
EndFunc
;Sell items at trader
func SellatTrader($countclicks)
KeySend($ANtgtkey)
RndSleep(500)
KeySend($DIactkey)
RndSleep(2000)
MouseSend("left", "click", $STclickX, $STclickY)
RndSleep(200)
for $i = 1 to $countclicks
MouseSend("left", "click", $SBclickX, $SBclickY)
RndSleep(200)
Next
EndFunc
#EndRegion
#Region Helper Functions
; create long int (32 bit) from 2 short int (16 bit)
Func MakeLong($LoWord, $HiWord)
Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc
; send mouse events to non active window
; button = left, right, none
; event = down, up, click, dclick, move
Func MouseSend($btn, $evt, $xpos, $ypos)
$user32 = DllOpen("user32.dll")
if $user32 = -1 Then
ConsoleWrite("MouseSend: cannot open user32.dll")
Exit
EndIf
;define missing constans
$MK_LBUTTON = 0x0001
$WM_LBUTTONDOWN = 0x0201
;$WM_LBUTTONUP = 0x0202 -> defined in WindowsConstants.au3
$WM_LBUTTONDBLCLK = 0x0203
$MK_RBUTTON = 0x0002
$WM_RBUTTONDOWN = 0x0204
$WM_RBUTTONUP = 0x0205
$WM_RBUTTONDBLCLK = 0x0206
;$WM_MOUSEMOVE = 0x0200 -> defined in WindowsConstants.au3
;map button to event
If $btn = "left" Then
$button = $MK_LBUTTON
$btdown = $WM_LBUTTONDOWN
$btup = $WM_LBUTTONUP
$btdbl = $WM_LBUTTONDBLCLK
ElseIf $btn = "right" Then
$button = $MK_RBUTTON
$btdown = $WM_RBUTTONDOWN
$btup = $WM_RBUTTONUP
$btdbl = $WM_RBUTTONDBLCLK
ElseIf $btn = "none" Then
If Not ($evt = "move") Then
ConsoleWrite(StringFormat("MouseSend: bad call: %s , %s",$btn, $evt))
Exit
EndIf
Else ;error
ConsoleWrite(StringFormat("MouseSend: bad button: %s",$btn))
Exit
EndIf
; send single keyboard event to non active window
; event = pressed, down, up
; kdown = key down delay
; note: supports only lower case keys + NUMx, Fx, some special keys and @
Func KeySend($inkey, $evt ="pressed", $kdown = 50)
$user32 = DllOpen("user32.dll")
if $user32 = -1 Then
ConsoleWrite("KeySend: cannot open user32.dll")
Exit
EndIf
danke für den Link, hatte schon nach so einem Programm gesucht.
Bei meinen selbst geschriebenen Programmen klappt es immer noch nicht, jedoch bei den Beispiel-Bots! Anhand denen werd ich mir das ganze schnell erarbeiten, danke für die schnelle Antwort! :thumbs:
Tut mir leid, dass ich den 10001sten Thread zu diesem Thema eröffnet habe und dass die Antwort wie immer die selbe war, aber ich war mir verdammt sicher die aktuellen Mems zu haben, da CheckArea geklappt hat.
Aja übrigens: bei tt6 wird die "Camcourse" CamcourseB genannt, überprüf am besten in der tt6.au3 die Namen mit deiner update.ini
Code:
Const $memx = IniRead("update.ini","SECTION D","POSX","Not found") ; position x
Const $memy = IniRead("update.ini","SECTION D","POSY","Not found") ; position y
Const $memmap = IniRead("update.ini","SECTION D","CHECK_MAP","Not found") ; post=0, load =2, area=1
Const $memnpcidselect = IniRead("update.ini","SECTION D","NPC_ID_SELECT","Not found") ; id of selected object
Const $memnpcidnear = IniRead("update.ini","SECTION D","NPC_ID_NEAR","Not found") ; id of nearest object
Const $memcourse = IniRead("update.ini","SECTION 9-A","[COLOR="Red"]CAMCOURSEB[/COLOR]","Not found") ; angle of compass/view direction
Const $memdeath = IniRead("update.ini","SECTION 9-A","DEATH","Not found") ; alive = 0 or death = 1
Edit: Rennt der Bot jetzt schon und bleibt nur nicht stehen? Ich würde gleich mit GWCA anfangen, geht um einiges leichter und läuft auch um einiges besser.
Rennt der Bot jetzt schon und bleibt nur nicht stehen?
Der Beispiel-Glint-Bot funktioniert wunderbar, bin den gerade am auseinander nehmen.
Zur GWCA, hab mich damit schon beschäftigt und eingearbeitet, scheint ganz gut zu sein. Dann habe ich jedoch erfahren, dass Anet dagegen vorgegangen ist, indem die Graphics.dll nicht mehr automatisch eingebunden wird. Jetzt muss man die manuell injecten, und da das relativ einfach zu entdecken ist (hab ich mir sagen lassen) ist mir das Risiko zu hoch. Ich botte schließlich immer noch mit meinem Main-Acc.
Edit: Hab den vom Spielupdate rausgekramt, wo die das geändert haben.
vorher hat er sich nur gedreht, hab jetzt aber die Version 1.4 statt der 1.7 von der tt6.au3 in den Ordner gepackt, jetzt rennt er zwar aber nicht dahin wo ich will xD
Edit: Hat sich erledigt, hatte die Dumper.exe noch mit der alten Update.ini kompiliert. Funktioniert jetzt alles einwandfrei! Vielen Dank nochmal für die Hilfsbereitschaft
kein Problem
Falls du ein paar Ideen für meinen "Überlebender-Bot" hast kannst die auch einbringen bzw. Skript durchlesen und so, oder falls du ne Idee hast, wie ich nach dem Töten der Gruppe weiterspringe ^^
Der Beispiel-Glint-Bot funktioniert wunderbar, bin den gerade am auseinander nehmen.
Zur GWCA, hab mich damit schon beschäftigt und eingearbeitet, scheint ganz gut zu sein. Dann habe ich jedoch erfahren, dass Anet dagegen vorgegangen ist, indem die Graphics.dll nicht mehr automatisch eingebunden wird. Jetzt muss man die manuell injecten, und da das relativ einfach zu entdecken ist (hab ich mir sagen lassen) ist mir das Risiko zu hoch. Ich botte schließlich immer noch mit meinem Main-Acc.
Edit: Hab den vom Spielupdate rausgekramt, wo die das geändert haben.
Ob du die Dll automatisch oder manuell injectes macht keinen Unterschied
Würden sie nach der Dll suchen, würden sie sie finden. Zwar nur so lange bis dagegen etwas unternommen wird, es würde aber mit Sicherheit reichen um einige Accs zu erwischen.
Würden sie nach der Dll suchen, würden sie sie finden. Zwar nur so lange bis dagegen etwas unternommen wird, es würde aber mit Sicherheit reichen um einige Accs zu erwischen.
Hmm ja ich denk mir auch, die könnten ja in die exe einen Code reinproggen der überprüft ob etwas injeziert wurde, kann ich mir nicht so schwer vorstellen.
Nur anscheinend ist das ned so leicht rauszubekommen.
MoveTo Engine gibt keine Charakterkoordinaten aus 05/27/2010 - AutoIt - 2 Replies Hallo, habe mir tt6 1.7 geladen und wollte gleich die koordinaten vom charakter in Guild Wars rausfinden.
Aber mir wurden lediglich die koordinaten meiner maus angezeigt.
Kann mir jemand helfen?
Cheat Engine funktioniert nicht mehr 12/26/2009 - S4 League - 4 Replies Hallo ich starte S4 mit Injector Perx by Alastor und mit Trainer 14.0 von Fichefoll und Launcher by Alastor und wenn ich dann ingame bin öffne ich Cheat Engine aber es sucht nicht mehr da komt dan immer Fehlermeldung wenn ich den Prozess S4 league exe auswählen will vor Patch 14 gings noch kann mir wer vll helfn? wäre nett :>
MoveTo Engine Problem. 10/13/2009 - GW Bots - 10 Replies Hallo Jungs..
Kan mir mal jemand sagen was ich falsche mache und warum meine Move To Engine nich funktioniert?
Hier mein bisheriger Source.. Nich wundern wenn noch Sinnloses Zeug drinsteht, ist für später.. :D
#RequireAdmin
#include "tt6.au3"
#include <NomadMemory.au3>
Metin2 cheat engine funktioniert nicht! :-(( 07/11/2009 - Metin2 Guides & Templates - 5 Replies Hallo user
Ich spiele ca. seit ½jahr Metin2 und habe versucht nach eurer Anleitung mit dem Cheat Engine 5.3 meine waffen auf +9 zu bringen.
Bei mir klappt das wenn ich Metin2.bin als Prozess auswähle nichts trage außer mein Schwert (in meinem fall schwert +4). 2 Byte -> exact value -> 24! Ingame Waffe aus der Hand nehmen und decreased value. Ingame Waffe in die Hand nehmen exact value. Ingame die Waffe aus der Hand nehmen decreased value. Dann links die Adressen nach unten befördern alle...
TT6 MoveTo engine public 05/17/2009 - GW Exploits, Hacks, Bots, Tools & Macros - 714 Replies Hallo,
wurde ja schon häufiger andiskutiert, wie man ein MoveTo machen könnte.
Zur Demo beim Tempel des Balthasar auf die Insel der Namenlosen rausrennen und MoveDemo laufen lassen.
Generell ist zu sagen, dass die beiliegenden Beispiele ziemlich sicher nicht out of the box laufen werden, da zumindest die click Positionen nicht passen. Es geht ja auch nicht darum bots zu verteilen (darf gern jemand was schickes draus machen) sondern nur zu zeigen wie das Konzept funktioniert...
...