[AutoIt] Frage/Antworte Thread

04/26/2008 23:26 Quade#76
Ich melde mich auch ma zu Wort.

Ich scripte ja noch nich lange... trotzdem PickUpBot ohne Hilfe selbst gescriptet...

Nunja... Zum Problem: Ich hab ja nun mein GUI erschaffen.

Nun will ich das bei Click auch einen Button oder beim anhaken eines Tree's oder Radio's halt das ausführt... somit is mir nich ganz kla wie ich mein GUI mit einer Function verbinde...:


GUICtrlCreateButton("1", 20, 80, 30, 20) ; Auf diesem Button soll also die Funktion: HotKeySet("{F9}", "Start")
HotKeySet("{F10}", "Ende")

while(1)
sleep(1000)
WEnd


func Start ()
While(1)
Send("y")
sleep(100)
WEnd
EndFunc

Func Ende ()
Exit
EndFunc

liegen,


Ich will ja nich jedes Script einzeln ausführen müssen sondern mit ner einfachen oberfläche wie z.B. beim HackSelctor ganz einfach einen Button pushen :)

Schonma Danke :)
04/27/2008 09:33 marcopolo1990#77
Quote:
Originally Posted by Nightmaster560 View Post
genau
hast du nen Lösungsansatz?
man könnte es mit ner date funktion machen, ist aber sehr umständlich
ich würde vorschlagen, eine variable als counter zu benutzen
man setzt die variable in die while funktion und gibt ihr ein +=
dadurch vermehrt sie sich und kann ab einen bestimmten punkt gestoppt werden

Code:
While (1)
Global $Counter = 0

While (1)

$Pixel = Pixelsearch ( x1, y1, x2, y2, farbe in hex, range, step )

if not @error then
;code
endif

Sleep (100)

$Counter += 1

If $Counter = 100 then
msgbox (0, "Counter", "Die Zeit wurde überschritten" )
$Counter = 0
exitloop
endif

wend

Quote:
Originally Posted by Quade View Post
Ich melde mich auch ma zu Wort.

Ich scripte ja noch nich lange... trotzdem PickUpBot ohne Hilfe selbst gescriptet...

Nunja... Zum Problem: Ich hab ja nun mein GUI erschaffen.

Nun will ich das bei Click auch einen Button oder beim anhaken eines Tree's oder Radio's halt das ausführt... somit is mir nich ganz kla wie ich mein GUI mit einer Function verbinde...:


GUICtrlCreateButton("1", 20, 80, 30, 20) ; Auf diesem Button soll also die Funktion: HotKeySet("{F9}", "Start")
HotKeySet("{F10}", "Ende")

while(1)
sleep(1000)
WEnd


func Start ()
While(1)
Send("y")
sleep(100)
WEnd
EndFunc

Func Ende ()
Exit
EndFunc

liegen,


Ich will ja nich jedes Script einzeln ausführen müssen sondern mit ner einfachen oberfläche wie z.B. beim HackSelctor ganz einfach einen Button pushen :)

Schonma Danke :)
eigentlich soll ja hier nicht über GUI's gesprochen werden, dennoch versuche ich dir mal zu helfen

erstell dir zuerstmal ein komplettes GUI

Code:
#include <GUIConstants.au3>

$Form1 = GUICreate("Form1", 200, 200, 300, 300)
$Button1 = GUICtrlCreateButton("1", 20, 80, 30, 20)
GUISetState(@SW_SHOW)
dann verbinde dein Gui und den Button mit einer Switch case endswitch schleife

Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
                Case $Button1
                        ;Code
	EndSwitch
WEnd
die Case die benutzt werden, können für andere variablen auch stehen

ok ich nehm dir mal die arbeit ab ;)
hier der komplette code :

Code:
#include <GUIConstants.au3>

HotKeySet("{F9}", "Start")
HotKeySet("{F10}", "Ende")

$Form1 = GUICreate("Form1", 200, 200, 300, 300)
$Button1 = GUICtrlCreateButton("1", 20, 80, 30, 20)
GUISetState(@SW_SHOW)

Func Start ()
While(1)
		Send("y")
		sleep(100)
	WEnd
Endfunc

Func Ende ()
Exit
Endfunc

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
                Case $Button1
Sleep (5000) ;warte 5 sekunden, bis der script losgeht
                       While(1)
		Send("y")
		sleep(100)
	WEnd
	EndSwitch
WEnd
hoffe habe mal beiden geholfen (und vielleicht den anderen auch xD)
04/27/2008 11:32 Nightmaster560#78
Das is ein Ansatz....aber das Problem an der Sache ist jetzt wieder, dass der Script erst weiter läuft, wenn

$Pixel = Pixelsearch ( x1, y1, x2, y2, farbe in hex, range, step )

erfüllt ist.

Daraufhin wird $counter um 1 erhöht.

Das heißt jetzt auf ein konkretes Besipiel bezogen....er Angelt (If $Counter = 100 then) 100 mal und zeigt dann Box an (msgbox (0, "Counter", "Die Zeit wurde überschritten" ).

d.h. ich kann mit dieser Funktion bestimmen wieoft die Angel ausgeworfen wird.

Das ließe sich ganz einfach beheben indem man 2 Schlaufen parallel laufen lässt....eine Schlaufe setzt $counter +=1
und die zweite Schlaufe läuft gleichzeitig nebenbei mit....das hab ich aber noch nicht rausgefunden.

Ein Ansatz wäre

While 2
$counter +=1
WEnd

While 1
$counter =0
If $counter >=20 Then

Jetzt is aber das Problem dass der aus der While 2 Loop nich raus geht sondern die ganze Zeit $counter += 1 setzt...Also ne Endlosschleife.
04/27/2008 11:47 marcopolo1990#79
hmm du kannst nicht 2 endlosschleifen einfach nebeneinander laufen lassen

außderm versteh ich nicht, was an diesem beispiel falsch sein sollte
wenn du mal erklären würdest was du genau vorhast, kann man es besser daran anpassen
04/27/2008 12:26 °Remus°#80
weis nich aber so dürfte es doch am besten gehen:

While 1
Pixelsearch(...)
If not @error Then
Send("{Space}")
$Counter = 0
Else
$Counter +=1
EndIf
If $Counter = 500 Then
Send("{Space}"
$Counter = 0
EndIf
WEnd
04/27/2008 13:02 marcopolo1990#81
da würde aber dann der sleep fehlen xD naja aber so würde es auch gehen
04/27/2008 13:05 °Remus°#82
der sleep is ja egal dann wartet man einfach bis $Counter = 5000 einziges problem is das die zählgeschwindigkeit vom rechner abhängt^^
04/27/2008 13:10 marcopolo1990#83
deswegen ja der sleep, der regelt den counter egal wie schnell der pc ist
zb conter soll jede sekunde 2 mal scannen
wurde einen sleep von (500) entsprechen
oder 3 mal (333) oder 4 mal (250) etc
dann muss man nurnoch rechnen
jede sek 2 mal counter
daher 60 sec 120 mal counter
also if $Counter = 120 Then ...
04/27/2008 13:17 °Remus°#84
die zeit die nen rechner bei pixelsearch brauch belibt trotzdem unterschiedlich un selbst bei so kleinen sleeps erhöht das die wahrscheinlichkeit das die fischblase verpasst wird
04/27/2008 14:09 Nightmaster560#85
Ok ich hole mal ein stückchen weiter aus.....

Ich habe mir einen Angelbot gescriptet. Dieser ist wie folgt aufgebaut:

-Er macht Köder dran und wirft aus.
-Er geht in eine Endlosschleife.
-Angelblase suchen. Der Script wird erst "fortgesetzt" wenn eine Angelblase gefunden wurde
-rausziehen, suche nach kleinem Fisch, wieder auswerfen.

Das ist mein Angelbot...nix besonderes.

So jetzt zu euren Lösungen. Ich bezihe sie gleich direkt auf meinen Angelbot.

-wirft aus
-Schleife beginnt
-Zählvariable $v wird auf 0 gesetzt
-Angelblase suchen, wenn gefunden
-raus ziehen
-$v + 1
-rausziehen, suche nach kleinem Fisch, wieder auswerfen.
-$v prüfen, wenn bst. Wert überschritten....macht er irgendwas, wenn nich passiert nix
-Angelblase suchen , wenn gefunden
-raus ziehen
-$v + 1
-rausziehen, suche nach kleinem Fisch, wieder auswerfen.
-$v prüfen, wenn bst. Wert überschritten....macht er irgendwas, wenn nich passiert nix
-Angelblase suchen
.
.
.

Das war der Lödungsansatz von MarcoPolo..... das Problem daran ist jetzt, dass wie man sieht egal wo man das $v+1 in der Schleife platziert, es wird immer jeweils nach gefundener Angelblase erhöht. Ich will aber dass wenn nach längerer Zeit keine Angelblase gefunden wird erneut ausgeworfen wird. Um das zu beheben könnte folgende Funktion benutzen:

While 1
Pixelsearch(...)
If not @error Then
Send("{Space}")
$Counter = 0
Else
$Counter +=1
EndIf
If $Counter = 500 Then
Send("{Space}"
$Counter = 0
EndIf
WEnd

Das war der Lösungsansatz von Remus.

Ich beschreibe ihn nochmals eindeutig im Wortlaut und beziehe ihn gleichzeitig wieder speziell auf meinen Bot.

.
.
.
-Angelblase suchen, wenn gefunden
-rausziehen, kleinen Fisch suchen auswerfen
wenn nicht gefunden
-$v+1, (kleinen Fisch suchen auswerfen)

;##An dieser Stelle könnte man nachdem $v+1 ausgeführt wurde die Schleife von vorne beginnen lassen, dann wäre mein Problem gelöst.##

-Angelblase suchen, wenn gefunden
-rausziehen, kleinen Fisch suchen auswerfen
wenn nicht gefunden
-$v+1, (kleinen Fisch suchen auswerfen)
.
.
.

So, und das Hauptproblem an der Sache ist, dass der Script erst weitergeführt wird wenn eine Angelblase gefunden wurde. Das kann ich nicht ändern, weil ich sonst die kleinen Fische nicht mit verwenden kann. (If kleiner Fisch gefunden, dann dran machen, else normalen Köder nehmen).

so ich denke bis hier hin ist alles klar.

Und jetzt suche ich eine Lösung für folgendes Problem:

Es wird keine Angelblase gefunden aufgrund eines Fehlers im Spiel (lagg, Bug, was auch immer). Jetzt will ich dass mein Bot diese Fehler umgeht, indem er die Angel erneut auswirft wenn nach einer gewissen Zeit nichts passiert ist. (Die Zeit kann auch in Form einer Zählvariable eingebaut werden)

Ein Algorithmus im Wortlaut wäre wie folgt:

.
.
.
-$v auf 0 setzten
-mit jedem error welche der pixelsearch vom Suchen der Angelblase zurückgibt wird $v um eins erhöht, und derselbe pixelsearch wird erneut ausgeführt.
-Angelblase suchen, wenn gefunden...sihe oben ...
.
.
.

Oh mein Gott....jetzt bin ich auch noch seklber drauf gekommen ich depp :p

While 1
While 1
$coord = PixelSearch( x1, y1, x2, y2, Farbhex ) ;Angelblase
If @error Then
$counter += 1
Sleep(100)
If $counter = 25 then
Sleep(100)
Send("{F4 down}")
Sleep("100")
Send("{F4 up}")
Sleep(100)
$counter = 0
Else
EndIf
ExitLoop


Eieieiei....aber danke dass ihr mich zum Ergebnis geführt habt....falls ihr sowas nochmal gebrauchen könnt^^ da steht ne Lösung is sicherlich ganz hilfreich
04/27/2008 14:34 marcopolo1990#86
hast dir den pixelsearch auch falsch gesetzt xD

sollte eigentlich eher so ein format haben
Code:
[COLOR="Red"]While (1)[/COLOR]
Sleep (5000)
[COLOR="Lime"]$Rollback = 0[/COLOR]
Send ( "{F3 down}" , 0 )
Sleep (500)
Send ( "{F3 up}" , 0 )
Sleep (5000)
Send ( "{F4 down}" , 0 )
Sleep (500)
Send ( "{F4 up}" , 0 )
Sleep (300)
[COLOR="Red"]While (1)[/COLOR]
Sleep (100)
$Pixelfisch = Pixelsearch ( x1, x2, y1, y2, fabre, range , step )
If not @error  Then
Sleep ( 2650 )
Send("{F4 down}")
Sleep(500)
Send("{F4 up}")
ExitLoop
Endif
$Rollback += 1
If $Rollback = 2000 Then
[COLOR="Lime"]$Rollback = 0[/COLOR]
ExitLoop
Endif
[COLOR="Red"]Wend[/COLOR]
[COLOR="Red"]Wend[/COLOR]
daher wenn er der counter ausschlägt, kehrt er in die vorige while schlife zurück und nicht ganz raus
taadaa er fängt von vorne an
(was dein kleiner fisch search angeht soll hier bitte nicht beredet werden! einziger tipp den ich geben kann wäre, es per 2ten bot suchen lassen durch hotkeys die sich dann zwischeneinander austauschen)
04/27/2008 14:38 Moviestar#87
Könnte man vll. ein Handelbug Bot scripten ?
Oder so änlich ^^
04/27/2008 14:40 marcopolo1990#88
könnte man, ich bin aber immoment zu faul dazu xD
mein script pc wird immer langsamer xD wenn metin2 ruckelt krieg ich das kotz##
04/30/2008 14:40 Lord123123#89
Ich ahbe eine Frage.ICha heb einen Fishing Bot gescriptet und jetzt frag ich mich wie kann ich das machen das ich die Zeit einstellen kann in einem Kästchen(will net immer den code verändern) so wie bei einem fish bot von marcpolo.(da konnte man die zeit eingeben 1000=1 sec.)Wie geht das? danke für die antworten.
04/30/2008 14:54 marcopolo1990#90
erklär ich dir nachher, wenn ich zuhause bin xD also ca heut abend