Mein erster Bot

05/15/2010 00:41 sunrise123#1
Guten Abend :

Zuersteinmal möchte ich mich bei allen Bedanken die Tutorials bereitgestellt haben, vorallem das TT6 und GWCA hier im Board haben mich sehr dafür begeistert mit dem Scripten anzufangen.

Nunden, alzuschlau wurde ich einfach nicht aus den Turorials ich wusste zwar grob um was es ging, hatte jedoch keinerlei Bezug damit etwas anzufangen..

Aller Anfang ist schwer und ich habe eine geschlagene Woche gebraucht rauszufinden was Parameter sind, das ich vor einem Befehl cmd( brauche etc und es hinzubekommen das mein "Bot" dafür sorgt das mein Charackter sich bewegt.

Nunja hier meine Version 1.0 eines Drachenmoos Farmbots ausgehend von Saint Anikas Shrine:
(erstellt mit rev280 und deren graphics.dll)


Er beinhaltet einfachste Weg, Cast funktionen, die meiner Meinung doch recht gut gelungen sind, vorallem das Timing.
Ob es sich lohnt?

[Only registered and activated users can see links. Click Here To Register...]

Uploaded with [Only registered and activated users can see links. Click Here To Register...]

Könnte mir jemand weiterhelfen; aka: Gui, Sell; Loot- ; etc Functions?

Liebe Grüße & einen Schönen restlichen Abend, Sunris3
05/15/2010 08:58 OlafTank#2
;MovetoPortal
Cmd($CA_Move, _FloatToInt(-11249), _FloatToInt(-23000))
MoveToEx(34534, 324523)
Sleep (8000) ; Need to be done Too long

schau dir mal WaitLoad an und mach kein Sleep(8000). Außerdem musst du überprüfen ob du auch wirklich im Gebiet bist, das machst du mit:

$cbType = "int"
CmdCB($CA_GETMAPID)

ansonsten reicht es wenn der MoveToEx(34534, 324523) einmal nicht funktioniert und dein Char steht für immer in der Stadt.

Anstatt von Cmd($CA_Move, _FloatToInt(-5185), _FloatToInt(15823)) ;
kannst du auch einfach MoveToEx aus der GuildWarsConstants.au3 nehmen.

; Have A Break; Have a Kitka.... wait... ITEM!
Sleep (5000)
cmd($CA_TargetNearestItem)

Für Items aufheben gibt es PickupItems(-1, 3500). Die ist auch in der GuildWarsConstants.au3.
05/15/2010 10:00 Killerzwerg829#3
Ein guter Anfang :)
Ich würde aber mit Randoms verschiedene Laufwege nehmen. Und auch so den einen oder anderen Random.

Bei einem Sleep könnte das so aussehen:
Code:
Sleep(Random(6000, 8000, 1))
Bei einem Weg dann zB so:
Code:
$random = Random(1, 3, 1)
If $random = 1 Then
MoveToEx(18050.22265625, 14698.1982421875)
...
ElseIf $random = 2 Then
MoveToEx(18141.05859375, 14542.8447265625)
...
ElseIf $random = 3 Then
MoveToEx(18214.158203125, 14716.5546875, 3)
...
Endif
Für das warten, bis der in dem Dungeon ist, habe ich mir diese Funktion gecoded.

Code:
Func _SleepUpToDungeon()
	$load = CmdCB($CA_GetMapLoading)
	While Not $load[0] = 1
		Sleep(50)
		$load = CmdCB($CA_GetMapLoading)
	WEnd
	Sleep(Random(6000, 8000, 1))
EndFunc   ;==>_SleepUpToDungeon

Das könnte bei dir dann so aussehen:

Code:
...
;MovetoPortal
Cmd($CA_Move, _FloatToInt(-11249), _FloatToInt(-23000))
MoveToEx(34534, 324523)
_SleepUpToDungeon()

;ThenCastBonds
...
05/15/2010 10:37 sunrise123#4
Danke vielmals euch beiden aber; was ich nicht verstehe

$random = Random(1, 3, 1)
If $random = 1 Then
MoveToEx(-11124, 19339)
ElseIf $random = 2 Then
MoveToEx(-10531, 19339)
Endif

Wiso bei Radom (1,3,1) ? für was steht die erste 1 , die 3 , die 2te 1 ?
05/15/2010 10:41 Killerzwerg829#5
Die erste Zahl steht für den minimalsten wert, der rauskommen kann.
Die zweite Zahl für den höchsten Wert.
Die Dritte gibt an, dass ganze Zahlen rauskommen sollen.

Da du 2 Laufwege hast musst du $random = Random(1, 2, 1) schreiben, damit eine 1 oder 2 rauskommt.
05/15/2010 10:53 sunrise123#6
Wunderbar dankeschön :)

Die
Cmd($CA_Resign)

Cmd($CA_ReturnToOutpost)

Funktionen hab ich nun einfach mal hinters ItemPickup gehängt, mit nem Sleep(2500)

Wie packe ich diese ganze Misere nun in einen Endless Loop?
05/15/2010 10:54 Killerzwerg829#7
While 1

Dein Script

WEnd
05/15/2010 11:04 sunrise123#8
OwUUMQ3+UoR1DrE3VLBGEJA5iAEA habe zum einen das Build etwas verändert ( Energie hat man bei Weitem genug)

Zum anderen bringt er folgende Error :

J:\Programme\GUILD WARS\Drachenmoos_farm_1.1.au3(13,1) : ERROR: missing Wend.
Func
^
J:\Programme\GUILD WARS\Drachenmoos_farm_1.1.au3(12,1) : REF: missing Wend.
While
^
J:\Programme\GUILD WARS\Drachenmoos_farm_1.1.au3(120,1) : ERROR: syntax error
WEnd
^
J:\Programme\GUILD WARS\Drachenmoos_farm_1.1.au3 - 2 error(s), 0 warning(s)

Hier meinen Kompletten Code:

05/15/2010 12:05 Killerzwerg829#9
Versuch es mal so:

Code:
; Drachenmoos Farm Monk/Mesm. HARDmode OwUUMQ3+UoR1DrE3VLBGEJA5iAEA 55hp Vvz. 20% , Quest: Eine neue Eskorte

;Interclude
#include "GWCAConstants.au3"
$cbType = "float" ;Change return type to float value

;CheckCoordinates
$myCoords = CmdCB($CA_GETCOORDS, -2) ;Get your own coordinates
ConsoleWrite("[Check 1] X: " & $cbVar[0] & ", Y: " & $cbVar[1] & @CRLF) ;Print to chat, notice that I use $cbVar array and not $myCoords. $cbVar only works until the next call to Cmd() or CmdCB(), but $myCoords will exist forever.
;Functions

While 1



	;X: -970051815, Y: -961359012

	;MovetoPortal

	$random = Random(1, 2, 1) ; Werte nochnicht "Random"
	If $random = 1 Then
		MoveToEx(-11240, -23500)
	ElseIf $random = 2 Then
		MoveToEx(-11231, -23500)
	EndIf

	_SleepUpToDungeon()

	;ThenCastBonds


	;Cmd($CA_UseSkill, 7, -2)
	Sleep(2500)
	Cmd($CA_UseSkill, 8, -2)
	Sleep(2500)

	;MovetoCastspot

	Cmd($CA_Move, _FloatToInt(-7390), _FloatToInt(18665)) ;1 Waypoint
	Sleep(9000)

	Cmd($CA_Move, _FloatToInt(-6498), _FloatToInt(17198)) ;2 Waypoint No Agro
	Sleep(9000) ; Need to be done

	Cmd($CA_UseSkill, 6, -2)
	Cmd($CA_UseSkill, 1, -2)
	Sleep(1000)

	Cmd($CA_UseSkill, 2, -2)
	Sleep(500)

	;Pull

	Cmd($CA_Move, _FloatToInt(-5185), _FloatToInt(15823)) ;3 Waypoint
	Sleep(7000) ; Need to be done
	cmd($CA_UseSkill, 3, -2)
	Sleep(1500)

	Cmd($CA_Move, _FloatToInt(-6379), _FloatToInt(18080)) ;4 Waypoint
	Sleep(7000) ; Need to be done
	cmd($CA_UseSkill, 1, -2)
	Sleep(1000)
	cmd($CA_UseSkill, 2, -2)
	Sleep(500)

	Cmd($CA_Move, _FloatToInt(-6596), _FloatToInt(18457)) ;5 Waypoint (last)
	Sleep(8000)

	; $CA_TargetNearestFoe(1)

	; Cmd($CA_UseSkill, 7, -1)


	; Cast

	Cmd($CA_UseSkill, 3, -2)
	Sleep(1100)

	Cmd($CA_UseSkill, 4, -2)
	Sleep(2100)
	Cmd($CA_UseSkill, 5, -2)
	Sleep(4100)

	cmd($CA_UseSkill, 1, -2)
	Sleep(1000)
	cmd($CA_UseSkill, 2, -2)
	Sleep(7500)
	cmd($CA_UseSkill, 1, -2)
	cmd($CA_UseSkill, 6, -2)
	Sleep(500)
	cmd($CA_UseSkill, 3, -2)
	Sleep(6000)
	cmd($CA_UseSkill, 1, -2)
	cmd($CA_UseSkill, 2, -2)
	Sleep(1000)
	cmd($CA_UseSkill, 4, -2)
	Sleep(2000)
	cmd($CA_UseSkill, 2, -2)
	Sleep(6000)
	cmd($CA_UseSkill, 3, -2)

	; Have A Break; Have a Kitka.... wait... ITEM!
	Sleep(12000)

	PickupItems(-1, 3500)

	Cmd($CA_Resign)
	Sleep(3000)

	Cmd($CA_ReturnToOutpost)
	Sleep(10000)

WEnd

Func _SleepUpToDungeon()
	$load = CmdCB($CA_GetMapLoading)
	While Not $load[0] = 1
		Sleep(50)
		$load = CmdCB($CA_GetMapLoading)
	WEnd
	Sleep(Random(4000, 6000, 1))
EndFunc   ;==>_SleepUpToDungeon
05/15/2010 12:08 OlafTank#10
du hast da paar fehler mit Wend Und EndFunc

Code:
; Drachenmoos Farm Monk/Mesm. HARDmode OwUUMQ3+UoR1DrE3VLBGEJA5iAEA 55hp Vvz. 20% , Quest: Eine neue Eskorte

;Interclude
#include "GWCAConstants.au3"
$cbType = "float" ;Change return type to float value

;CheckCoordinates
$myCoords = CmdCB($CA_GETCOORDS, -2) ;Get your own coordinates
ConsoleWrite("[Check 1] X: "&$cbVar[0]&", Y: "&$cbVar[1]&@CRLF) ;Print to chat, notice that I use $cbVar array and not $myCoords. $cbVar only works until the next call to Cmd() or CmdCB(), but $myCoords will exist forever.
;Functions


Func wayout()

	$LeftTown = 0;
	
	While $LeftTown = 0	
		$random = Random(1, 2, 1) ; Werte nochnicht "Random"
		If $random = 1 Then
			MoveToEx(-11240, -23500)
		ElseIf $random = 2 Then
			MoveToEx(-11231, -23500)
		Endif

		WaitForLeave(1);	

		$cbType = "int"
		$aTmpMap = CmdCB($CA_GETMAPID)	
			
		If $aTmpMap[0] = 31337 Then																;hier kommt die ID von deiner OuterArea rein, ka was die ist musst selber suchen
			;LEFT TOWN																			;einfach rausgehen $aTmpMap = CmdCB($CA_GETMAPID) aufrufen und du hast sie
			$LeftTown = 1;
		Else	
			;RETRY
			Sleep(Random(1500,2000))
		EndIf
	WEnd
EndFunc
		
Func WaitForLeave($loading)

	$MAX_WAIT_TIME = 0
	;$loading should be "1" if waiting to load explorable area or "0" if outpost
	Do
		$cbType = "int"
		CmdCB($CA_GETMAPLOADING)
		sleep(Random(1000,1500))
		$MAX_WAIT_TIME += 1500;
		
		if $MAX_WAIT_TIME >= 40000 then
			Return;
		EndIf
		
	Until ($cbVar[0] = $loading)
EndFunc




While 1

	wayout();

	;ThenCastBonds


	;Cmd($CA_UseSkill, 7, -2)
	Sleep (2500)
	Cmd($CA_UseSkill, 8, -2)
	Sleep (2500)

	;MovetoCastspot

	Cmd($CA_Move, _FloatToInt(-7390), _FloatToInt(18665)) ;1 Waypoint
	Sleep (9000)

	Cmd($CA_Move, _FloatToInt(-6498), _FloatToInt(17198)) ;2 Waypoint No Agro
	Sleep (9000) ; Need to be done

	Cmd($CA_UseSkill, 6, -2)
	Cmd($CA_UseSkill, 1, -2)
	Sleep (1000)

	Cmd($CA_UseSkill, 2, -2)
	Sleep (500)

	;Pull

	Cmd($CA_Move, _FloatToInt(-5185), _FloatToInt(15823)) ;3 Waypoint
	Sleep (7000) ; Need to be done
	cmd($CA_UseSkill, 3, -2)
	Sleep (1500)

	Cmd($CA_Move, _FloatToInt(-6379), _FloatToInt(18080)) ;4 Waypoint
	Sleep (7000) ; Need to be done
	cmd($CA_UseSkill, 1, -2)
	Sleep (1000)
	cmd($CA_UseSkill, 2, -2)
	Sleep (500)

	Cmd($CA_Move, _FloatToInt(-6596), _FloatToInt(18457)) ;5 Waypoint (last)
	Sleep (8000)

	; $CA_TargetNearestFoe(1)

	; Cmd($CA_UseSkill, 7, -1)


	; Cast

	Cmd($CA_UseSkill, 3, -2)
	Sleep (1100)

	Cmd($CA_UseSkill, 4, -2)
	Sleep (2100)
	Cmd($CA_UseSkill, 5, -2)
	Sleep (4100)

	cmd($CA_UseSkill, 1, -2)
	Sleep (1000)
	cmd($CA_UseSkill, 2, -2)
	Sleep (7500)
	cmd($CA_UseSkill, 1, -2)
	cmd($CA_UseSkill, 6, -2)
	Sleep (500)
	cmd($CA_UseSkill, 3, -2)
	Sleep (6000)
	cmd($CA_UseSkill, 1, -2)
	cmd($CA_UseSkill, 2, -2)
	Sleep (1000)
	cmd($CA_UseSkill, 4, -2)
	Sleep (2000)
	cmd($CA_UseSkill, 2, -2)
	Sleep (6000)
	cmd($CA_UseSkill, 3, -2)

	; Have A Break; Have a Kitka.... wait... ITEM!
	Sleep (12000)

	PickupItems(-1, 3500)
	
	Sleep(1000)		
	Cmd($CA_Resign)
	Sleep(1000)	
	$cbType = "int"
	$WhileRuns = 0
	while 1 And $WhileRuns < 100
		$WhileRuns += 1
		CmdCB($CA_GetMyMaxHP)
		Sleep(200)
		If $cbVar[1] = 0 Then
			ExitLoop
		EndIf
	WEnd
	Sleep(Random(1000,2000))
	Cmd($CA_ReturnToOutpost)			
	WaitForLeave(0);	
	Sleep(Random(2000,4000))

WEnd
hab das nicht getestet hoffe da sind keine syntax fehler drin. Du musst nur noch die TownID vom Gebiet finden dann müsste es passen. Außerdem solltest du dich mal bisschen in Programmieren einlesen.


While 1
Func _SleepUpToDungeon()
$load = CmdCB($CA_GetMapLoading)
While Not $load[0] = 1
Sleep(50)
$load = CmdCB($CA_GetMapLoading)
WEnd
Sleep(Random(4000, 6000, 1))
EndFunc ;==>_S

du kannst nicht eine Funktion in einer While 1 Schleife deklarieren :)
05/15/2010 13:21 sunrise123#11
Quote:
hab das nicht getestet hoffe da sind keine syntax fehler drin. Du musst nur noch die TownID vom Gebiet finden dann müsste es passen. Außerdem solltest du dich mal bisschen in Programmieren einlesen.


While 1
Func _SleepUpToDungeon()
$load = CmdCB($CA_GetMapLoading)
While Not $load[0] = 1
Sleep(50)
$load = CmdCB($CA_GetMapLoading)
WEnd
Sleep(Random(4000, 6000, 1))
EndFunc ;==>_S

du kannst nicht eine Funktion in einer While 1 Schleife deklarieren :)

Bin dabei mich mit dem großen unbekannten wort "Programmieren" auseinander zu setzten.

Deklarieren? fehlt mir das nötige fachvokabular aber nun hab ichs verstanden.. Vielen Dank! Ich hoffe ich ereiche auch nur anähernd "euer" können :P
05/15/2010 13:26 Killerzwerg829#12
Mit Deklarieren ist gemeint, dass du über das "Func _SleepUpToDungeon() ... EndFunc" festlegst, was passiert, wenn du _SleepUpToDungeon() eingibtst.
05/15/2010 13:32 sunrise123#13
Entschuldigt der vielen Post's
Aber es hat sich gelohnt <3 Er läuft wunderbar durch danke an alle !!! x3