Hallo!
Die Überschrift mag etwas konfus wirken, aber es geht tatsächlich darum einen sich wiederholten Timer zu killen, der gar nicht existiert.
Das Ganze sieht ungefähr so aus:
public OnPlayerDeath(...)
{
BleedOut(playerid); //Funktionsaufruf ohne direkt einen sich wiederholenden Timer zu starten.
return 1;
}
forward BleedOut(playerid);
public BleedOut(playerid)
{
if(!BeingRezzed[playerid])
{
KillTimer(BleedOutTimer[playerid]);
BleedOutTimer[playerid] = SetTimerEx("BleedOut", 1000, true, "i", playerid);
}
if(BeingRezzed[playerid])
{
KillTimer(BleedOutTimer[playerid]);
BleedOutTimer[playerid] = SetTimerEx("BleedOut", 1000/3, true, "i", playerid);
}
return 1;
}
Im Prinzip geht es nur um den ersten Durchlauf. Wenn jemand stirbt, wird er in eine Art "Downstate" versetzt. Wird er nicht wiederbelebt, hat der Timer ein Intervall von 1s. Wird er wiederbelebt, schrumpft das Intervall auf 333,33ms. Je nach Fall soll das Intervall sich anpassen.
Wenn der Spieler also direkt stirbt, wird er ja nicht sofort wiederbelebt, also trifft der erste Fall zu, in dem, trotz allem, der Timer gekillt wird. Gibt es eine schönere Möglichkeit hierfür?