Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 06:37

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

Advertisement



Brauche Hilfe .. threading

Discussion on Brauche Hilfe .. threading within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2010
Posts: 507
Received Thanks: 203
Brauche Hilfe .. threading

Hey leute,
ich breuchte ein bisschen Hilfe..
Ich versuche einen Bot zu schreiben bin auch eig. recht weit.
Ich kann die HP / MP auslesen und sowas und auch verarbeiten nur möchte ich das der Bot immer dabei S drückt.

Also ich lade mal ein paar Code-schnipsel hoch.
Code :

Code:
If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
				Sleep(500)
				If WinActive("Hero OnLine") Then
					Send("s")
				ElseIf WinActive("Hero OnLine Bot") Then
					While 1
						Sleep(200)
					WEnd
				EndIf
			EndIf

			If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
				If $HPHave < $HPM - GUICtrlRead($Input1) Then
					WinActivate("Hero OnLine")
					If WinActive("Hero OnLine") Then
						Send("0")
					EndIf
				EndIf

				If $MPHave < $MPM - GUICtrlRead($Input2) Then
					WinActivate("Hero OnLine")
					If WinActive("Hero OnLine") Then
						Send("9")
					EndIf
				EndIf
			EndIf

Wisst ihr was ich meine ?
Wenn der nähmlich jetzt das so macht dann klickt er nicht schnell genug die Pot Knöpfe..


Mfg
Shishidump is offline  
Old 07/18/2012, 00:58   #2
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Shishidump View Post
Code:
If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
				Sleep(500)
				If WinActive("Hero OnLine") Then
					Send("s")
				ElseIf WinActive("Hero OnLine Bot") Then
					While 1
						Sleep(200)
					WEnd
				EndIf
			EndIf

			If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
				If $HPHave < $HPM - GUICtrlRead($Input1) Then
					WinActivate("Hero OnLine")
					If WinActive("Hero OnLine") Then
						Send("0")
					EndIf
				EndIf

				If $MPHave < $MPM - GUICtrlRead($Input2) Then
					WinActivate("Hero OnLine")
					If WinActive("Hero OnLine") Then
						Send("9")
					EndIf
				EndIf
			EndIf
was sollen die winActivates dazwischen? sowas kannst du getrost weglassen. ist der client active, so soll die aktion ausgeführt werden, ist das nicht der fall, so lässt der bot es halt =)

abgesehen davon musst du dich von sleeps verabschieden. diese blockieren lediglich dein restscript.

Edit:
zumal
Code:
[...]
ElseIf WinActive("Hero OnLine Bot") Then
    While 1
        Sleep(200)
    WEnd
EndIf
[...]
in einer endlosschleife endet, und somit dein script komplett blockiert.
lolkop is offline  
Thanks
1 User
Old 07/18/2012, 01:24   #3
 
elite*gold: 0
Join Date: Jan 2010
Posts: 507
Received Thanks: 203
Danke für deine Antwort aber es löst ja nicht direkt mein Problem..
Shishidump is offline  
Old 07/18/2012, 14:12   #4
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
eigentlich schon. angenommen ein befehl braucht auf deiner maschiene 0,0003 millisekunden zur ausführung.

nun kommt dein "sleep(500)" dazwischen. dieses verhindert während seiner ausführung, die ausführung von ca. 1.666.667 (500/0,0003) anderen befehlen...

somit blockiert es quasi dein gesamtes script, und macht alles sehr "träge".

deshalb erwähne ich es nochmals... willst du ein vernünftiges script schreiben, musst du dich von dem sleep befehl komplett trennen.
lolkop is offline  
Thanks
1 User
Old 07/18/2012, 15:44   #5
 
elite*gold: 0
Join Date: Jan 2010
Posts: 507
Received Thanks: 203
Was soll ich denn anstatt sleep nehmen?
Shishidump is offline  
Old 07/18/2012, 16:57   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Shishidump View Post
Was soll ich denn anstatt sleep nehmen?
hierfür gibt es timer...

Code:
While True
	Send(3)
	Sleep(500)
WEnd
ist zum beispiel durch einen timer so realisierbar.
Code:
Dim $timer
While True
	If TimerDiff($timer) >= 500 Then
		Send(3)
		$timer = TimerInit()
	EndIf
WEnd
den vorteil solltest du selbst erkennen, wenn du ununterbrochen eine 2 senden willst, aber nur alle 500ms eine 3...

durch eine timer abfrage wird der rest deines scriptes nicht blockiert, wie durch sleep befehle.
lolkop is offline  
Thanks
1 User
Old 07/18/2012, 21:25   #7
 
elite*gold: 0
Join Date: Jan 2010
Posts: 507
Received Thanks: 203
Danke !
Das war das Problem.

Nun hab ich noch ein Problem

Habe 2 Button die mit einem Event verknüpft sind.
Code:
$Button1 = GUICtrlCreateButton("Start", 152, 128, 75, 25)
GUICtrlSetOnEvent(-1, "StartPressed")
$Button2 = GUICtrlCreateButton("Stop", 152, 160, 75, 25)
GUICtrlSetOnEvent(-1, "StopPressed")
Ich wollte das Script durch eine Variable stoppen lassen.

So damit er halt normal läuft wenn Stop Null ist.
Code:
Func StartPressed()

	While 1
		If $Stop = 0 Then
Hier was er machen soll wenn Stop nicht Null ist.
Code:
Else
			Dim $timer1
			While True
				If TimerDiff($timer1) >= 500 Then
					$timer1 = TimerInit()
				EndIf
			WEnd
		EndIf
	WEnd


EndFunc   ;==>StartPressed

Und das Event für den Stop Button.
Code:
Func StopPressed()

	$Stop = 1

EndFunc   ;==>StopPressed


Aber das will nicht so ganz..
Shishidump is offline  
Old 07/18/2012, 22:14   #8
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by Shishidump View Post
Ich wollte das Script durch eine Variable stoppen lassen.

So damit er halt normal läuft wenn Stop Null ist.
die idee ist schonmal sehr gut =)

du solltest dabei aber bedenken, das ein script immer zeile für zeile abgearbeitet wird. um sicher zu gehen, das alle deine code-zeilen immer erreichbar sind, solltest du nach möglichkeit die gesamte logik in einer endlosschleife unterbringen.

du hast dich ja für ein gui mit der "on-event" variante entschieden, was an sich schonmal deutlich einfacher ist, als über GuiGetMsg ständig alles abzufragen.

allerdings solltest du dir einen anderen script aufbau angewöhnen. hier mal schemenhaft kurz erklärt:
Code:
Dim $stop = True

GuiCreate(...)
GuiCtrlCreateButton("Start", ...)
GuiCtrlSetOnEvent(-1, "Start")
GuiCtrlCreateButton("Stop", ...)
GuiCtrlSetOnEvent(-1, "Stop")
[...]
GuiSetState()

While True
    If Not $stop Then
        [...]
    EndIf
WEnd

Func Start()
    $stop = False
EndFunc

Func Stop()
    $stop = True
EndFunc
so hast du eine "hauptschleife", in der dein ganzes script abläuft.
die buttons an sich ändern lediglich zustände, welche in deiner "hauptschleife" abgearbeitet werden =)
lolkop is offline  
Thanks
1 User
Old 07/18/2012, 23:21   #9
 
elite*gold: 0
Join Date: Jan 2010
Posts: 507
Received Thanks: 203
Ahhh
Danke!
Du bringst mir ganz schön viel bei Danke !
Shishidump is offline  
Reply


Similar Threads Similar Threads
[Brauche Hilfe]Brauche Hilfe beim einfügen der neuen Rüstungen
01/04/2013 - Metin2 Private Server - 3 Replies
Brauche Hilfe! Hallo epvp. Ich habe mal ein paar Rüstungen gemoddet und dann wollte ich sie einfügen. Es hat fast alles geklappt und ich war recht "happy", weil sie für den männlichen Krieger einbandfrei funktioniert haben. Dann wollt ich gucken wie das bei den anderen Charaktern aussieht. Ich habe mir die Rüstungen gerufen. Die icons der Rüstungen sind für den Ninja und den Krieger richtig. Bei der Sura und der Schami Rüstung sieht mal aber wieder die icons der Krieger und Ninja rüstung....
C++ Threading
03/24/2012 - CO2 Programming - 13 Replies
Anybody got some good threading tutorials in c++? #Edit Using boost would be fine?
Threading
11/18/2011 - CO2 Private Server - 10 Replies
What should I do? A thread for every map that's used by players, a global thread for all players or a single thread for every player.
Brauche Dringend Hilfe! Bin Metin spieler aber Brauche Hilfe
12/30/2009 - Metin2 Private Server - 0 Replies
Es gehört hier zwar nicht rein , aber ich weiß keine andere Lösung Ich habe seit einigen Tagen ein Problem... Microsoft Windows Search Protocol Host funktioniert nicht mehr Die Anwendung wird Aufgrund eines Problems nicht mehr richtig Ausgeführt. Ich weiß nicht was das ist und wie ich es loswerde.



All times are GMT +1. The time now is 06:40.


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.