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.