Projekt: Jadebrderschafts bot

12/11/2008 17:16 NetsrakE#1
Hi Leutz,
Ich hab mir für meinen ersten Bot-Bersuch die Jadebruderschafts-Ritter am Marktplatz in Cantha rausgesucht.
Womit steht noch nicht gan fest, aber am liebsten würde ich es mit 330hp Ritu machen.
Mit dem Wayout hab ich eigendlich schon das (imo) schwerste geschafft. Eigendlich.
Gestern als ich es geschrieben habe hats eigedlich funktioniert. Nachdem ich heute allerdings den 3.Teil geschrieben habe, bekam ich immer eine fehlermeldunng beim ausführen.
Laut Autoit ist die 29Zeile fehlerhaft, ich verstehe nur nicht warum.

Code:
#include <NomadMemory.au3>

If Not WinActive("Guild Wars","") Then WinActivate("Guild Wars","")
WinWaitActive("Guild Wars","")
sleep(2000)

Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
Global $Paused
Global $mousespeed = 2
Global $CURRENTPOSX, $CURRENTPOSY, $PID, $MEMORYX, $MEMORYY
$CourseStat =IniRead("setting.ini", "settings", "Course", "0")
$PID = WinGetProcess("Guild Wars")
$hprocess = _MemoryOpen($PID)

$MEMORYX = 0xa07650
$MEMORYY = 0xa07654
$ncpidselect = 0xd2a498

func RandomSleep($min, $max)
    $time = Random($min, $max)
    Sleep($time)
endfunc


Func runout()
$CURRENTPOSX = _MEMORYREAD($MEMORYX, $HPROCESS)
$CURRENTPOSY = _MEMORYREAD($MEMORYY, $HPROCESS)

if ($CURRENTPOSX > 1177719852) And ($CURRENTPOSX < 1178065498) And ($CURRENTPOSY > 1183021888) And ($CURRENTPOSY < 1183188902) then
wayout1()
Else
runout()
endif
EndFunc

Func runout3()
send("{o}")
  
  $NCP = _Memoryread($ncpidselect, $hprocess)
  
if ($NCP = 13) Then
wayout3()
Else
wayout2()
endif
EndFunc

func wayout1()
	$Check_NPC = 0xd2a498
$PID  = WinGetProcess("Guild Wars")
$hprocess  = _MemoryOpen($PID)
$Wajjun_Basar = 11
_MemoryWrite($Check_NPC, $hprocess, $Wajjun_Basar)
	randomsleep(520,580)
	send("{d down}")
	randomsleep(1000,1020)
	send("{d up}")
	randomsleep(500,520)
	send("{f}")
	randomsleep(4000,4030)
	send("{v}")
	randomsleep(980,1000)
	send("{w down}")
	randomsleep(3000,3030)
EndFunc

func wayout2()
	$Check_NPC = 0xd2a498
$PID  = WinGetProcess("Guild Wars")
$hprocess  = _MemoryOpen($PID)
$Wajjun_Basar = 11
_MemoryWrite($Check_NPC, $hprocess, $Wajjun_Basar)
	randomsleep(520,580)
	send("{a down}")
	randomsleep(700,720)
	send("{a up}")
	randomsleep(500,520)
	send("{f}")
	randomsleep(4000,4030)
	send("{v}")
	randomsleep(980,1000)
	send("{w down}")
	randomsleep(3000,3030)
EndFunc

func wayout3()
	$Check_NPC = 0xd2a498
$PID  = WinGetProcess("Guild Wars")
$hprocess  = _MemoryOpen($PID)
$Wajjun_Basar = 11
_MemoryWrite($Check_NPC, $hprocess, $Wajjun_Basar)
	randomsleep(300,330)
	send("{f}")
	randomsleep(6000,6050)
	send("{w down}")
	randomsleep(3000,3030)
Endfunc


while 1
runout()
exit
wend
Das Problem, dass ich bei meiner Methode nach jedem Update die Werte ändern muss ist mit übrigens bekannt;)

Über Kommentare und besonders über Hilfe/tipps würde ich mich freuen

MfG Netsrak

p.S. Ausführen ist bei mir übrigens auf f. We ihr das Skript also ausprobieren wollt, müsst dir das ändern. Die Auflösung ist bei dieser Methode egal.
12/11/2008 17:18 i4mSoH34Vy#2
Welche Zeile ist denn 291
12/11/2008 18:14 NetsrakE#3
Code:
$CURRENTPOSX = _MEMORYREAD($MEMORYX, $HPROCESS)
12/11/2008 18:18 Der Crashkopf#4
Dann stimmt was mit einer variable nicht.
12/11/2008 18:27 NetsrakE#5
hmm ich habe die werte 1zu1 aus de, GW Merory Info Tool übernommen. Auch nachdem ich sie grade aktualisiert habe hats irgendwie nicht geklappt.

Noch eine andere Sache: Durch einen Tippfehler bin ich auf folgencde Variable gestoßen: 0xd2ac00. Damikt kann man die y-Koordinate des Sichtwinkels herausfiden. 1.Frage: kant jemand die Variable für die x-Koordinnate, und 2.Frage, wie kann man das in ein Autoit Skript einarbeiten?
12/11/2008 18:44 klammeraffe#6
Klasse Idee, darüber hab ich auch mal nachgedacht, weil die stelle echt nett zum Farmen ist.
EDIT: Mit der Speicheraddresse COURSE kannst du die Kamera auslesen und die Kamera verstellen
12/11/2008 18:50 NetsrakE#7
Vor allen Dingen gibt es nicht so viel das man Skripten muss(Stichwort zu den Gegnern laufen;))
Falls sich hier jemand mit Textmods ausket, könnter er mir einmal beschreiben, Wie ich einen bestimmten Teil des Bildschirms weiß mache? Wens geht so das diese stelle nur weiß ist solang nichts aus dem interface da ist;)

/e Die oben agegebene Zeile wird nur als fehler definiert, wenn man sich nicht im bei wayout() abgegebenen Bereich befindet.

/e² sry hab den Fehler gefunden
12/19/2008 15:54 aLasca#8
und was war es nun?
12/21/2008 00:46 NetsrakE#9
hab mich glaube ich irgendwo verschrieben