Wert im Textdraw

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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;
    }

  • //OnPlayerDeath
    BleedOutTimer[playerid] = SetTimerEx("BleedOut", 1000/3, true, "i", playerid);
    PlayerTextDrawShow(playerid, BleedoutTD[playerid]);
    zu:
    //OnPlayerDeath
    BleedOutTimer[playerid] = SetTimerEx("BleedOut", 1000/3, true, "i", playerid);
    PlayerTextDrawSetString(playerid, BleedoutTD[playerid], "300/1000");
    PlayerTextDrawShow(playerid, BleedoutTD[playerid]);

  • Du hast nur die Variable auf 310 gesetzt, nicht aber das Textdraw. Du könntest das PlayerTextDrawSetString auch dort machen, spielt im Endeffekt keine Rolle.
    Deshalb hat auch alles funktioniert, bis auf die Anzeige in der ersten Sekunde.