Ich lasse einen Timer für das Ausbluten eines Spielers in einem Textdraw in Form von BleedOutPoints anzeigen. Von 300 sollen die Punkte auf 0 runtergezählt werden. Innerhalb der Timerfunktion fang ich gleich an 10 abzuziehen, weswegen BleedOutPoints auf 310 gesetzt wurde.
Wenn ich nun beim ersten mal sterbe, dann dauert es eine Sekunde bis das TD angezeigt wird, mit den intendierten 300 Punkten. Sterbe ich allerdings ein zweites Mal wird das TD sofort angezeigt, aber der Wert -10 angezeigt. Eine Sekunde später springt er wieder auf 300.
Wie stelle ich es an, dass von vorne rein die 300 angezeigt werden?
//Variable
new BleedOutPoints[MAX_PLAYERS] = 310;
//OnPlayerDeath
BleedOutTimer[playerid] = SetTimerEx("BleedOut", 1000/3, true, "i", playerid);
PlayerTextDrawShow(playerid, BleedoutTD[playerid]);
//Timer Funktion
forward BleedOut(playerid);
public BleedOut(playerid)
{
if(!BeingRezzed[playerid])
{
BleedOutCount[playerid]++;
if(BleedOutCount[playerid] >= 3)
{
BleedOutPoints[playerid] -= 10;
new string3D[4],
stringTD[20];
format(string3D, sizeof(string3D), "%d", BleedOutPoints[playerid]);
UpdateDynamic3DTextLabelText(RezzLabel[playerid], C_RED, string3D);
switch(pInfo[playerid][Language])
{
case LANGUAGE_DE: format(stringTD, sizeof(stringTD), "~r~%d~w~/1000", BleedOutPoints[playerid]);
case LANGUAGE_EN: format(stringTD, sizeof(stringTD), "~r~%d~w~/1000", BleedOutPoints[playerid]);
}
BleedOutCount[playerid] = 0;
PlayerTextDrawSetString(playerid, BleedoutTD[playerid], stringTD);
}
}
else if(BeingRezzed[playerid])
{
BleedOutPoints[playerid] += (10*PlayersRezzingPlayer[playerid]);
new string3D[4],
stringTD[20];
format(string3D, sizeof(string3D), "%d", BleedOutPoints[playerid]);
UpdateDynamic3DTextLabelText(RezzLabel[playerid], C_RED, string3D);
switch(pInfo[playerid][Language])
{
case LANGUAGE_DE: format(stringTD, sizeof(stringTD), "~r~%d~w~/1000", BleedOutPoints[playerid]);
case LANGUAGE_EN: format(stringTD, sizeof(stringTD), "~r~%d~w~/1000", BleedOutPoints[playerid]);
}
PlayerTextDrawSetString(playerid, BleedoutTD[playerid], stringTD);
}
if(BleedOutPoints[playerid] < 0)
{
new stringGT[67];
switch(pInfo[playerid][Language])
{
case LANGUAGE_DE: format(stringGT, sizeof(stringGT), "Verblutet~n~Benutze ~r~~k~~VEHICLE_ENTER_EXIT~~w~ um zu respawnen.");
case LANGUAGE_EN: format(stringGT, sizeof(stringGT), "Bled to death~n~Use ~r~~k~~VEHICLE_ENTER_EXIT~~w~ to respawn.");
}
PlayerTextDrawHide(playerid, BleedoutTD[playerid]);
GameTextForPlayer(playerid, stringGT, 10000, 5);
KillTimer(BleedOutTimer[playerid]);
DestroyDynamic3DTextLabel(RezzLabel[playerid]);
DestroyDynamicMapIcon(RezzMapIcon[playerid]);
DestroyDynamicArea(RevivalArea[playerid]);
ApplyAnimation(playerid, "CRACK", "crckdeth1", 4.1, 0, 1, 1, 1, 24*60*60000, 1);
BleedOutCount[playerid] = 0;
}
if(BleedOutPoints[playerid] >= 1000)
{
SetPlayerPos(playerid, pDeathLoc[playerid][0], pDeathLoc[playerid][1], pDeathLoc[playerid][2]);
SetPlayerFacingAngle(playerid, pDeathLoc[playerid][3]);
KillTimer(BleedOutTimer[playerid]);
DestroyDynamic3DTextLabel(RezzLabel[playerid]);
DestroyDynamicMapIcon(RezzMapIcon[playerid]);
DestroyDynamicArea(RevivalArea[playerid]);
PlayerTextDrawHide(playerid, BleedoutTD[playerid]);
BleedOutPoints[playerid] = 310;
BleedOutCount[playerid] = 0;
}
return 1;
}
//Respawn Funktion
CMD:respawn(playerid, params[])
{
RespawnPlayerAtHospital(playerid);
SetPlayerHealth(playerid, 100);
IsPlayerInDownState[playerid] = false;
ClearAnimations(playerid);
KillTimer(BleedOutTimer[playerid]);
PlayerTextDrawHide(playerid, BleedoutTD[playerid]);
DestroyDynamicMapIcon(RezzMapIcon[playerid]);
DestroyDynamic3DTextLabel(RezzLabel[playerid]);
DestroyDynamicArea(RevivalArea[playerid]);
SetSpawnProtection(playerid);
BleedOutPoints[playerid] = 310;
BleedOutCount[playerid] = 0;
return 1;
}