Timernutzung in AutoIt

08/05/2008 23:52 mileseven#1
Hallo alle zusammen.

Da ich bis jetzt hier kein Tutorial über Timer in AutoIt gesehen habe,
werde euch zeigen wie man Timer benutzt.

Als Beispiel nehme ich eine Funktion für einen Bot, wo ein Skill nach einer bestimmte Zeit benutzt werden soll.

Als erstes müssen die Variablen deklarieren, die wir brauchen:


Global $TimerInit; Zeitinitialisierung
Global $Timer; Differenz der Zeit in milisekunden
Global $SkillTimer; Zeit für den Skill
Global $Delay = 5000; Delay für den Skill ( 5 Sekunden )

Die Initialisierung starten wir vor der Hauptschleife des Bots:


$TimerInit = TimerInit()


So nun brauchen wir natürlich die Differenz in Milisekunden. Diese sollte in der Schleife stehen:


Func MainLoop()

While 1

; SPEICHERE TIMERDIFFERENZ IN INTEGER ( ms )
$Timer = int(TimerDiff($TimerInit))

WEnd

EndFunc


So $Timer gibt nun die Zeit in Milisekunden wieder, die vom Start des Bots gezählt wird.

Jetzt kommen wir zu der Skill Funktion. Als erstes übeprüfen wir ob ein Skill benutzt werden soll.

Dafür benutzen wir diese Formel ( $SkillTimer zurzeit noch 0ms ):


$Timer - $SkillTimer >= $Delay


Als Beispiel bei einer Sekunde laufzeit:


1000ms - 0ms >= 5000ms ; FALSE


bei 5 Sekunden:


5000ms - 0ms >= 5000ms ; TRUE


Hoffe das versteht jeder.


Func ShallUseSkill()

if ($Timer - $SkillTimer) >= $Delay then
return true ; Skill bereit zum benutzen
EndIf

endfunc


Jetzt kommen wir zu der Funktion wo der Skill benutzt wird, auf jedenfall muss nach der Benutzung des Skill, der SkillTimer aktualsiert werden.


Func UseSkill()

ControlSend ( "TitelVomSpiel", "", "", "{F1}" )
$SkillTimer = $Timer ; Sehr wichtig!

EndFunc


$SkillTimer wurde gleich $Timer gesetzt, sodass die Prozedur von vorne staffinden kann. Beispiel:


3000ms - 0ms >= 5000ms ; FALSE



5000ms - 0ms >= 5000ms ; TRUE


Nun wird $SkillTimer gleich $Timer gesetzt.


5000ms - 5000ms >= 5000ms ; FALSE



6000ms - 5000ms >= 5000ms ; FALSE



10000ms - 5000ms >= 5000ms ; TRUE


Das wiederholt sich immer wieder.

Nun gut, das war alles. Man muss nur noch nur noch die Funktion in die Hauptschleife einbauen:


Func MainLoop()

While 1

; SPEICHERE TIMERDIFFERENZ IN INTEGER ( ms )
$Timer = int(TimerDiff($TimerInit))

if ShallUseSkill() = true then
UseSkill()
endif

WEnd

EndFunc


Man sollte Timer anstelle Sleep benutzten. Der Sleep Befehl pausiert das Programm, und das ist nicht toll ;).

Es gibt bestimmt andere, bessere Lösung. Ich hab eine von viele hier reingestellt.

Edit: Sry dass da keine Einrückungen sind, ich bekomms einfach nicht hin.
08/06/2008 00:45 meak1#2
nice tut glaube könnte mal nützlich sein :>, maaaaaaannnnnnnnnn kann mir wer erklären wie man bild richtig ändert? wenn ich bei edit picture neues mache geht das nich rein ich raste aus :S
02/23/2010 02:35 sh00ky#3
also ich habe das versucht aber ich kann das programm dann nicht mehr mit dem "X" beenden?
02/23/2010 03:02 Fevii#4
liegt vlt dran das es von 08 ist? und deshalb veraltet ist? schon mal dran gedacht?
02/23/2010 15:56 SynT@x#5
Nice Tutorial gehört aber hier rein ;)

--> [Only registered and activated users can see links. Click Here To Register...]

Denke pand0r wird es für dich verschieben ^^

Mit freundlichen Grüßen

SynT@x

#upps '08 ôo :D
02/23/2010 16:09 Pand0r#6
Quote:
Originally Posted by SynT@x View Post
Nice Tutorial gehört aber hier rein ;)

--> [Only registered and activated users can see links. Click Here To Register...]

Denke pand0r wird es für dich verschieben ^^

Mit freundlichen Grüßen

SynT@x
#moved