Hotkayset pause

05/12/2012 20:25 bauerorli#1
Moin moin leute :D

ich habe/ schreibe einen bot soweit sogut

wenn ich z.b. F1 drück dann startet der bot
wenn ich dann z.b. F2 drück pausirt der bot
kann mann es hinbekommen das wenn ich dann wieder F2 drücke das er dann in der skribt da weitermacht wo er aufgehört hat?

also das er z.b. da was hinschreibt z.b. pause und wenn ich dann die pause beende macht er ab dem wort pause weiter und löscht er logischerweise dann auch das wort pause in der skribt wieder?
05/13/2012 19:37 Achat#2
[Only registered and activated users can see links. Click Here To Register...]

Immer zuerst Stickys lesen und darin posten ;)

Poste bitte mal dein Script

MfG
05/14/2012 23:00 bauerorli#3
Hier die script

05/14/2012 23:39 Lawliet#4
[spoiler-]text[/-spoiler] ohne die Bindestriche.
05/15/2012 08:52 lolkop#5
zunächst mal ist es DAS script, nicht DIE script :P

und nun zu deinem problem... willst du eine pause funktion in dein script einbauen, nutzt du hierfür einen einfachen schalter.

implementieren kann man das zb so:
Code:
HotKeySet("{F1}", 'pause')

Dim $pause = False

While True
	If Not $pause Then
		<hier kommt dein hauptpart>
	EndIf
WEnd

Func pause()
	$pause = Not $pause
EndFunc
willst du nun noch an der stelle weiter machen, wo du angefangen hast, kannst du noch einen befehlszähler hinzufügen, und in deinem hauptscript, jeweils den befehl abfragen und ausführen.

da beim groben überblicken deines scriptes alle deine befehle so aufgebaut sind:
Code:
MouseClick ("left",[...],[...])
Sleep ([...])
kannst du dir hierfür eine kleine vereinfachende funktion schreiben:
Code:
Func Click($x, $y, $sleep, $befehl)
	If $befehlszaehler = $befehl Then
		MouseClick('left', $x, $y)
		Sleep($sleep)
		$befehlszaehler += 1
	EndIf
EndFunc
letztendlich sieht dein script dann etwa so aus:
Code:
HotKeySet("{F1}", 'pause')

Dim $pause = False, $befehlszaehler = 1

While True
	If Not $pause Then
		Click(1185, 997, 50, 1)
		Click(958, 450, 50, 2)
		Click(894, 483, 50, 3)
		Click(830, 517, 50, 4)
		Click(771, 548, 50, 5)
		Click(709, 578, 500, 6)
		[...]
	EndIf
WEnd

Func pause()
	$pause = Not $pause
EndFunc

Func Click($x, $y, $sleep, $befehl)
	If $befehlszaehler = $befehl Then
		MouseClick('left', $x, $y)
		Sleep($sleep)
		$befehlszaehler += 1
	EndIf
	If $befehlszaehler > [gesamtanzahl befehle] Then $befehlszaehler = 1
EndFunc
05/15/2012 11:38 Lawliet#6
Ich würde alle Klick Koordinaten in ein Array packen und dann alles über eine For Schleife lösen. Bei einer Pause einfach die Zählvariable speichern und später mit dieser die For Schleife fortsetzen.
05/15/2012 13:12 bauerorli#7
zurück zu: lolkop

Macht ja sinn das so zuschreiben also soweit ich das als einanfänger der 5 tage sich damit beschäfit das beurteiln kann :P
Wenn ich dass, aber einbaue und dann "F1" "pause" drücke
dann leuft das scribt trosdem weiter bis er "unten" angekommen ist und dann pausirt es erst.
05/15/2012 16:31 Achat#8
Mach doch in deine Click func einfach

Code:
If $pause = false then
;DEIN CODE
Endif
MfG
05/15/2012 16:50 BotofWar#9
Code:
Func Pause()

$anzeigetext="Pause- Weiter mit ENDE-Taste"
Anzeige()

While 1
	Sleep ( 100 )
    If _IsPressed("23", $dll) Then; End Taste
	
		ExitLoop

	EndIf
WEnd
	
EndFunc


Func Anzeige()

	ToolTip("Bot läuft" & @CR & _ 
	"MSG : " & $anzeigetext,1,50)

EndFunc
05/15/2012 21:19 lolkop#10
niemals in funktionen endlosschleifen beginnen... das ist einer der schlimmsten anfängerfehler, die man begehen kann...
05/16/2012 13:07 bauerorli#11
Warum denn nicht? wenn er da nichtaleine mehr rauskommen soll ist das ja eigendlich geal oder nicht?
05/16/2012 13:38 lolkop#12
Quote:
Originally Posted by bauerorli View Post
Warum denn nicht? wenn er da nichtaleine mehr rauskommen soll ist das ja eigendlich geal oder nicht?
weil man in scriptsprachen immer nur als eine art automat arbeitet.
man gelangt von einem zustand in den anderen.

wichtig ist, das die zustände immer alle in EINEM kreislauf bzw EINER endlosschleife laufen. laufen wir plötzlich in eine neue schleife, so sind wir plötzlich in einem neuen Automaten, und haben somit keine übersicht mehr über die zustände des alten automaten.

ein kleines beispiel:
Code:
GuiCreate(..)
$button = GuiCtrlCreateButton(...)
[...]
While True ; Automat 1
    $msg = GuiGetMsg()
    ; $msg enthält nun den jeweiligen zustand des Guis.
    ; solange wir in Automat 1 Bleiben, haben wir immer den überblick über
    ; unseren $msg Zustand!
    If $msg = $button Then Funktion()
    [...]
WEnd

Func Funktion()
    While True ; Automat 2
        ; Wir betreten Automat 2. dementsprechend verlieren wir den Überblick
        ; über Zustände des Automaten 1. $msg kann nicht mehr aktualisiert
        ; werden, und ist somit nicht mehr verfügbar. Die folge ist, das wir
        ; nichtmehr auf guiaktivitäten reagieren können
        [...]
    WEnd
EndFunc
zusammen gefasst: zustände werden über variablen definiert. starten wir eine neue endlosschleife, gehen sämtliche informationen aus der ersten zwangsweise verloren, bzw müssten wieder neu eingebaut werden, was ein sinnloser mehraufwand wäre.
05/16/2012 15:04 bauerorli#13
So thx für die antworten, :D
Da der bot jetzt ja ziemlich benutzer unfreundlich ist da er nur left wenn der andere die felder genau so hingestelt hat we ich und hald auch die bildschirmauflösung von 1920x1080 haben muss damit der bot bei ihm auch geht hätte ich 2 fragen:

1.
kann mann simpel autoit den ganzen bildschirm scannen lassen und dann hald die felder raussuchen und dann da raufklicken lassen?

2
dann hätte ich noch die idee dass, ich z.b. wenn ich eine belibege taste drücke er die korardinaten von der maus einspeichert und das ich das hald so oft machen kann wie ich will also dementsprechen das er dann nicht nur die eine koradrinate einspeichert sondern
die dann hald hintereinander speichert.

Hier ein Bild von dem spiel : [Only registered and activated users can see links. Click Here To Register...]
da er es nicht anzeigt hier noch mal der link : [Only registered and activated users can see links. Click Here To Register...]
Erstmal thx für die antworten :P

dann hätte ich noch 2 fragen da der bot jetzt ja nur bei denen leuft /oder hald nur solange wie ich ncihts veränder wenn ich mehr felder hinzufüge muss ich den ja neu schreiben also die koradrinaten überall reinschreiben daher die fragen:

kann ich autoit den ganzen bildschirm scanenn lassen und die felder finden lassen ohne das cih da jeden pixel reinschreiben muss den er scanen soll? wäre ne ziemiche arbeit bei ne auflösung von 1920x1280 und auf nem andern bildschirm gehts dann ja schonwieder nicht...

die 2 wäre das mann eine taste belegt und wenn man die drück speicher er die koradrdinaten in eine "tabelle" und wenn mann den dann ausführt nimmt er die koradinaten? wobei ich mich frage muss ich dann z.b. wenn mann damit mit variablen macht dann müste ich ja wenn ich das für 20 mache immer 20 eingeben und wenn ich mehr hab muss ich es wieder umschreiben oder wie sieht das aus?

hier ein bild vom spiel: [Only registered and activated users can see links. Click Here To Register...]

schon mal ein thx im voraus :D
05/16/2012 16:13 Achat#14
Quote:
Originally Posted by bauerorli View Post
So thx für die antworten, :D
Da der bot jetzt ja ziemlich benutzer unfreundlich ist da er nur left wenn der andere die felder genau so hingestelt hat we ich und hald auch die bildschirmauflösung von 1920x1080 haben muss damit der bot bei ihm auch geht hätte ich 2 fragen:

1.
kann mann simpel autoit den ganzen bildschirm scannen lassen und dann hald die felder raussuchen und dann da raufklicken lassen?

2
dann hätte ich noch die idee dass, ich z.b. wenn ich eine belibege taste drücke er die korardinaten von der maus einspeichert und das ich das hald so oft machen kann wie ich will also dementsprechen das er dann nicht nur die eine koradrinate einspeichert sondern
die dann hald hintereinander speichert.

Hier ein Bild von dem spiel : [Only registered and activated users can see links. Click Here To Register...]
da er es nicht anzeigt hier noch mal der link : [Only registered and activated users can see links. Click Here To Register...]
Erstmal thx für die antworten :P

dann hätte ich noch 2 fragen da der bot jetzt ja nur bei denen leuft /oder hald nur solange wie ich ncihts veränder wenn ich mehr felder hinzufüge muss ich den ja neu schreiben also die koradrinaten überall reinschreiben daher die fragen:

kann ich autoit den ganzen bildschirm scanenn lassen und die felder finden lassen ohne das cih da jeden pixel reinschreiben muss den er scanen soll? wäre ne ziemiche arbeit bei ne auflösung von 1920x1280 und auf nem andern bildschirm gehts dann ja schonwieder nicht...

die 2 wäre das mann eine taste belegt und wenn man die drück speicher er die koradrdinaten in eine "tabelle" und wenn mann den dann ausführt nimmt er die koradinaten? wobei ich mich frage muss ich dann z.b. wenn mann damit mit variablen macht dann müste ich ja wenn ich das für 20 mache immer 20 eingeben und wenn ich mehr hab muss ich es wieder umschreiben oder wie sieht das aus?

hier ein bild vom spiel: [Only registered and activated users can see links. Click Here To Register...]

schon mal ein thx im voraus :D
Bitte achte auf deine Rechtschreibung und Grammatik!

1.

2. Hotkeyset -> _Func Array -> MouseGetPos() Endfunc

3. Nicht Tabelle....Array ;)

Hier mal Beispiel

Code:
#include <Array.au3>

HotKeySet('{1}','_Pos')
HotKeySet('{2}','_Show')

global $asPos[1][2] = [['X-Koordinate','Y-Koordinate']]

func _Pos()
	ReDim $asPos[UBound($asPos)+1][2] ;Array um eine Zeile erweitern
	$aiPos=MouseGetPos()
	$asPos[UBound($asPos)-1][0] = $aiPos[0]
	$asPos[UBound($asPos)-1][1] = $aiPos[1]
EndFunc

func _Show()
	_ArrayDisplay($asPos)
EndFunc

while 1
	sleep(1)
WEnd
[Only registered and activated users can see links. Click Here To Register...]
05/16/2012 17:29 bauerorli#15
Sorry hab ziemlich stark LRS ;(

Hab noch mal ne frage.
Wo ist der fehler?

Quote:
#include<ImageSearch.au3>

HotKeySet("{F1}","start")
HotKeySet("{F2}","ende")

While 1
Sleep (100)
WEnd


Func start ()
While 1
$result=_ImageSearch("beetleer.png",1,$x1,$y1,0)
If $result=1 Then
MouseClick ("left",1185,997)
MouseClick ("left"$x1,$y1)
MouseClick ("left",1370,626)


EndIf
WEnd


EndFunc


Func ende ()
Exit
EndFunc
Die Fehlermeldung kommt dann:
Quote:
C:\Users\Orlando\Desktop\Projektordner MWbot autosearch\OrliMwbot.au3 (13) : ==> Variable used without being declared.:
$result=_ImageSearch("beetleer.png",1,$x1,$y1,0)
$result=_ImageSearch("beetleer.png",1,^ ERROR
>Exit code: 1 Time: 4.415
was muss ich tuhn?

Was ich bis jetzt rausgefunden habe ist das der fehler beim bild liegt aber dateifahrt muss ich doch nicht angebenoder? habe die fotos imgleichenordner