Timer jeder Sekunde

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
  • Hallo.


    Ich habe eine kurze Frage. Ist es sehr Ressourcenlastig, wenn man einen dauerhaften Timer von 1 Sekunde reapen lässt, der folgenes abfragt:


    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    // ---- Wenn er seine Zeit verbraucht hat! ---- //
    if(PlayerInfo[i][Minuten] == 0 && PlayerInfo[i][Stunden] == 0 && PlayerInfo[i][Sekunden] <= 0)
    {
    new namedestyps[128];
    GetPlayerName(i, namedestyps, sizeof(namedestyps));
    new typ = GetPlayerID(namedestyps);
    SpielerTod(typ);
    SendClientMessage(i, COLOR_RED, "Deine Zeit ist abgelaufen!");
    format(zeitdrawstring,sizeof(zeitdrawstring), "00:00:00");
    TextDrawSetString(ZeitDraw[i],zeitdrawstring);
    TextDrawHideForPlayer(i, ZeitDraw[i]);
    PlayerInfo[i][Stunden] = 1;
    return 1;
    }
    PlayerInfo[i][Sekunden] -= 1;
    format(zeitdrawstring, sizeof(zeitdrawstring), "%d:%d:%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);


    if(PlayerInfo[i][Sekunden]== -1 && PlayerInfo[i][Minuten] > 0)
    {
    PlayerInfo[i][Minuten] -= 1;
    PlayerInfo[i][Sekunden] = 59;
    }
    else if(PlayerInfo[i][Sekunden] == -1 && PlayerInfo[i][Minuten] <= 0 && PlayerInfo[i][Stunden] > 0)
    {
    PlayerInfo[i][Stunden] -= 1;
    PlayerInfo[i][Minuten] = 59;
    PlayerInfo[i][Sekunden] = 59;
    }


    if(PlayerInfo[i][Sekunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "%d:%d:0%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    if(PlayerInfo[i][Minuten]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "%d:0%d:0%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    if(PlayerInfo[i][Stunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "0%d:0%d:0%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    }
    }
    else if(PlayerInfo[i][Stunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "0%d:%d:0%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    }
    return 1;
    }


    else if(PlayerInfo[i][Minuten]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "%d:0%d:%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    if(PlayerInfo[i][Stunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "0%d:0%d:%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    return 1;
    }
    return 1;
    }
    else if(PlayerInfo[i][Stunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "0%d:%d:%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    if(PlayerInfo[i][Sekunden]<=9)
    {
    format(zeitdrawstring, sizeof(zeitdrawstring), "0%d:%d:0%d", PlayerInfo[i][Stunden], PlayerInfo[i][Minuten], PlayerInfo[i][Sekunden]);
    TextDrawSetString(ZeitDraw[i], zeitdrawstring);
    }
    }
    }
    }


    Oder gibt es vielleicht noch eine andere Methode, die Zeit ticken zu lassen?


    mf.g.

    Du brauchst eine Website?

    Du hast ein Layout angefertigt und willst es gecoded sehen?

    DANN SCHREIB MICH AN.

    Kostenlos und für euch.

  • SetTimerEx währ schon schonender ;)


    Würde ich nicht sagen vllt bei einem spieler . Jedoch macht es die Masse aus 30 Timer die für jeden spieler sind und jede 1 Sekunde updaten sind ressourcenfressender
    als 1 Timer. Als beispiel bei 30 Usern zu dem ist der knack punkt immer der wenn alle zur selben zeit updaten.

  • Also mit SetTimerEx werden 2 Sekunden gleichzeitig abgezogen.. Ich denke es liegt daran, dass wir 2 Leute auf dem Server sind und er also doppelt durchläuft.


    OnPlayerConnect { SetTimerEx("ZeitTimer", 1000, true, "i", playerid); return 1; }


    Und mit dem normalen SetTimer den ich mit einer Var von MAX_PLAYERS fetlege, läuft er bei dem Spieler mit der ID 0 immer korrekt und bei dem anderem bleibt sie stehen.

    Du brauchst eine Website?

    Du hast ein Layout angefertigt und willst es gecoded sehen?

    DANN SCHREIB MICH AN.

    Kostenlos und für euch.