Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 11:03

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Zwischen Funktionen wechseln?

Discussion on Zwischen Funktionen wechseln? within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Zwischen Funktionen wechseln?

Code:
Func _palla()
		$palla = Not $palla
		If $palla Then
			While 1
				Global $pPalla = PixelSearch(0, 0, @DesktopHeight, @DesktopWidth, "0xECFBF7")
				If IsArray($pPalla) Then
					WinWaitActive("www.DarkOrbit.com")
					MouseMove($pPalla[0], $pPalla[1])
					MouseClick("LEFT")
					Sleep(4000)
				Else
					_fliegen()
				EndIf
			WEnd
		Else
			_pause()
		EndIf
	EndFunc

	Func _fliegen()
		While 1
			If Not IsArray($pPalla) Then
				WinWaitActive("www.DarkOrbit.com")
				$randomx = Random(0, GuiCtrlRead($Input1))
				$randomy = Random(0, GuiCtrlRead($Input2))
					If (Hex(PixelGetColor($randomx, $randomy),6) <> 000000) Then
						MouseMove($randomx, $randomy)
					EndIf
				MouseClick("LEFT")
				Sleep(4000)
			Else
				_palla()
			EndIf
		WEnd
	EndFunc
Der soll fliegen, aber wenn der Pixel auftaucht dahin klicken.
Wenn der Pixel nicht verfügbar ist, soll er wieder fliegen, bis der Pixel wieder da ist.

Es geht um diesen Pixel:
0xECFBF7

Danke :*
Requi is offline  
Old 01/23/2013, 13:37   #2
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
While Sleep(10)
While PixelGetColour($x,$y) <> $Colour
Fliegen
WEnd
MouseClick("left",$x,$y)
WEnd
butter123 is offline  
Old 01/23/2013, 13:59   #3
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
pixelsearch()
If not @error
nimm das mal für auf box klicken
YatoDev is offline  
Old 01/23/2013, 16:20   #4


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Würde das ganze aus ner dritten Funktion aufrufen, rekursion sollte man vermeiden.
Code:
Func DoStuff
$isPalaInRange = FindPalaPixel()
if(isPalaInRange)
     _collectPala()
_flieg()
endfunc
_collectPala() sollte so lang laufen, bis nichts mehr zu sehnen ist. _flieg immer nur einmal durchlaufen lassen.
Lawliet is offline  
Old 01/23/2013, 17:45   #5
 
Achat's Avatar
 
elite*gold: 528
Join Date: Jan 2012
Posts: 2,127
Received Thanks: 2,403
Rekursion führt zum Absturz, , ist also unbedingt zu vermeiden, wie Lawliet! schon sagte.

MfG
Achat is offline  
Old 01/23/2013, 21:50   #6

 
elite*gold: 64
Join Date: May 2011
Posts: 1,229
Received Thanks: 854
Ich glaube Lawliet meint einfach nur, dass du mehrere Funktionen
erstellen sollst und die dann Aufrufen sollst.
BladeTiger12 is offline  
Thanks
1 User
Old 01/24/2013, 08:46   #7
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Requi View Post
Ja das weiß ich auch .

Hab es sogar geschafft indem ich ein Funktion gelöscht habe.

If Not isarray() Then
Fliegenteil
Else
Pallateil
EndIf
mal zur info... rekursion bedeutet, das die funktion sich selbst x mal aufruft. es gibt also IMMER eine abbruch bedingung, welche unendliche rekursion vermeiden muss.

rekursion ist gegenüber iterativer alternativen immer ineffizienter, dabei aber immer deutlich einfacher formulierbar. sie ist dadurch keinesfalls wie oben geschrieben immer zu vermeiden.
insbesondere weil in autoit das parsen des quellcodes in der regel durchaus die meisten ressourcen frisst.

kleines beispiel anhand einer funktion, welche hex strings umkehrt:
Code:
Func IterativeReverseHex($hexString)
	Local $return
	For $i = StringLen($hexString) + 1 To 1 Step -2
		$return &= StringMid($hexString, $i, 2)
	Next
	Return '0x'&$return
EndFunc

Func RecursivReverseHex($hexString, $return="")
	If $hexString = "" Then Return '0x'&$return
	Return RecursivReverseHex(StringTrimLeft($hexString,2), StringLeft($hexString,2)&$return)
EndFunc

ConsoleWrite(RecursivReverseHex('05000000')&@CRLF)
ConsoleWrite(IterativeReverseHex('05000000')&@CRLF)
hier ist schön erkennbar, das sich viele probleme rekursiv als zweizeiler lösen lassen, während iterativ deutlich mehr logik und oft auch deutlich ineffizientere methoden notwendig sind (im beispiel stringmid, welches immer ineffizienter ist als stringleft).
soviel zum thema der rekursion...

was dein eigentlicher code aber sichtlich macht ist, das du allgemein ein sehr schlechtes verständnis von scriptsprachen hast. da scriptsprachen in der regel nicht multithreading fähig sind, müssen wir für einen ersatz sorgen, indem wir uns der einfachen automatenlogik bedienen.

diese besagt nichts anderes, als das sich unser programm zu jedem beliebigen zeitpunkt in einem bestimmten zustand befindet. je nach zustand reagieren wir dann unterschiedlich.
sobald du diese aussage wirklich verstanden hast, wirst du in einem programm NIEMALS mehr als eine endlosschleife (iterativ natürlich) benötigen.

nichts anderes hast du dort übrigens intuitiv in deiner eigenen lösung gemacht. da ich davon ausgehe, das dein code aber mehr als nur diese 2 funktionen beinhaltet, solltest du das ganze noch weiter vereinfachen, bis du wirklich nurnoch eine hauptschleife hast, in der dein ganzes programm läuft.
lolkop is offline  
Reply


Similar Threads Similar Threads
Photoshop: Zwischen Deutscher und Englischer Sprache wechseln
12/08/2015 - Artist Tutorials - 9 Replies
GERMAN Hallo Leute, oft ist es so, dass die richtig guten Photoshop Tutorials auf Englisch sind. Viele greifen dann z.B. bei bestimmten Filternamen auf Hilfen zurück, in denen sie nachschauen wie der Filter auf Deutsch heißt. Das ganze Nachschlagen kann man sich aber auch sparen, wenn man sein Photoshop auf die Englische Sprache umstellt. Natürlich könnt ihr den Schritt auch wieder ganz leicht rückgängig machen. Schritt 1: Geht auf eurem Computer zum Installationsordner von...
[Fragen/Probleme]Gestern Ping zwischen 20-30 und jetzt zwischen 100-2000!?
08/16/2011 - CrossFire - 9 Replies
Hallo liebe Com, Ich habe keine ahnung ob ich hier richtig bin das ist mein erster thread aber ich habe eine frage. Wie in der Überschrift schon steht habe ich verrückte ping werte und gestern hatte ich wie oben steht einen ping wert von zwischen 20-30ms und heute zwischen 100-2000. Was ich jetzt nicht verstehe wieso habe ich das? das muss ja einen grund haben wieso der ping plötzlich so hoch steigt! und so kann ich natürlich kein crossfire spielen :( hier mal ein paar daten zum router...
Mit welcher Func am besten zwischen 2 GW Fenster wechseln?
05/30/2008 - Guild Wars - 14 Replies
Hallo, Ich weiss schon wieder ein mal nich weiter (Ich kann bald n Fragen von gabba sammel Fred auf machen). Ich hab mirn Bot geschrieben der mit mehreren Accs gleichzeitig hfff läuft is auch soweit alels ganz doll nur an soner dummen Sache weiss ich wieder nicht weiter. Ich hab die Accs mit dem Multi Clienten von hier gestartet und da heißen se dann ja GW, GW1, GW2 usw. und wenn ich dem Script jetzt sag winactivate GW aktiviert er nich selten GW1 oder 2 oder sons was was halt als letztes...



All times are GMT +1. The time now is 11:05.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.