|
You last visited: Today at 14:07
Advertisement
Brauche Hilfe .. threading
Discussion on Brauche Hilfe .. threading within the AutoIt forum part of the Coders Den category.
07/18/2012, 00:00
|
#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
|
|
|
07/18/2012, 00:58
|
#2
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Shishidump
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.
|
|
|
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..
|
|
|
07/18/2012, 14:12
|
#4
|
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.
|
|
|
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?
|
|
|
07/18/2012, 16:57
|
#6
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Shishidump
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.
|
|
|
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..
|
|
|
07/18/2012, 22:14
|
#8
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by Shishidump
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 =)
|
|
|
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 !
|
|
|
 |
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 +2. The time now is 14:07.
|
|