Hey Leute,
da ich mitbekommen habe, dass noch immer viele Leute Probleme mit Timern haben, habe ich mich entschlossen ein Tutorial rund um die Timer in PAWN zu beschäftigen.
Nun welche Befehle gibt es überhaupt für die Timer?
Es gibt 3 Befehle die sich hauptsächlich mit den Timern beschäftigen, diese lauten:
SetTimer
SetTimerEx
KillTimer
SetTimer:
SetTimer wird verwendet um z.B. automatische Servernachrichten auszugeben.
Die Funktion lautet:
SetTimer((funcname[], interval, repeating);
funcname = Wie du die Funktion bennenst, ist frei wählbar, darf aber nicht mehrmals vorkommen. z.B. "TestTimer"
interval = Wann der Timer ausgelöst werden soll in Millisekunden. 1 Sekunde = 1000 Millisekunden. => 1 Minute = 60000 Millisekunden.
repeating = Fragt ab, ob der Timer immer wieder wiederholt werden soll oder nicht. (true / false)
Noch dazu musst SetTimer "publiced" sprich auch "forwarded" werden.
So sieht der Befehl in der Anwendung aus:
SetTimer("TimerTest", 1000*60, true); // Setzt einen Timer namens TimerTest jede Minute, und dieser wiederholt sich immer (true)
forward TimerTest(); // forwarded den Timer
public TimerTest()
{
SendClientMessageToAll(farbe_rot, "Ich bin eine Test-Nachricht!"); // sendet eine nachricht zu Allen
return 1;
}
SetTimerEx:
Nun SetTimerEx wird verwendet um Timer mit Parametern wie z.B. playerid auszudrücken.
Die Funktion lautet:
SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);
funcname = Wie du die Funktion bennenst, ist frei wählbar, darf aber nicht mehrmals vorkommen. z.B. "TestTimer"
interval = Wann der Timer ausgelöst werden soll in Millisekunden. 1 Sekunde = 1000 Millisekunden. => 1 Minute = 60000 Millisekunden.
repeating = Fragt ab, ob der Timer immer wieder wiederholt werden soll oder nicht. (true / false)
const format = Bedeutet welcher Parameter ausgedrückt werden soll, hierbei gibt es folgende:
i interger
d gleich wie i
a steht für einen Array
s steht für einen string
f steht für einen float
b steht für boolean
Float = Erklärt den Parameter, z.B. bei "d", könnte dieser playerid lauten, aber unten ein genaueres Beispiel.
Auch SetTimerEx muss "publiced" und "forwarded" werden.
So sieht es in der Anwendung aus:
if (strcmp("/test", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid, farbe_rot, "In 1 Minute bekommst du eine automatische Nachricht!"); // sendet eine Nachricht
SetTimerEx("TestTimer", 1000*60, false, "d", playerid); // setzt einen Timer namens TestTimer 1 Minute nach dem /test-Befehl für denjenigen der den Befehl benützt
return 1;
}
forward TimerTest(playerid); // forwarded den Timer mit den Parameter playerid
public TimerTest(playerid)
{
SendClientMessage(playerid, farbe_rot, "Deine Timer-Nachricht ist angekommen!"); // sendet die automatische Nachricht nach 1 Minute
return 1;
}
KillTimer:
KillTimer wird verwendet, um Timer zu löschen bevor sie ausgelöst werden.
Die Funktion lautet:
KillTimer(timerid);
timerid = Der Name bzw. die ID des Timers die zerstört werden soll.
So sieht es in der Anwendung aus:
new Timer1;
Timer1 = SetTimer("TimerTest", 1000*60, true);
if (strcmp("/killtimer", cmdtext, true, 10) == 0)
{
KillTimer(Timer1); // killt den Timer
SendClientMessage(playerid, farbe_rot, "Du hast den Timer zerstört!");
return 1;
}
Ich hoffe euch wird die Arbeit mit den Timern nun leichter fallen.
Lg,
playerid