SetTimerEx - Ungenau?

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 habe eine Funktion mit SetTimerEx erstellt:
    SetTimerEx("spielzeittimer", 60000, true, "i", playerid);



    public spielzeittimer(playerid)
    {
    pInfo[playerid][spielzeit] ++;
    return 1;
    }


    Diese Funktion ist teilweise aber bis zu 20 Sekunden ungenau! Das heißt im Spiel wird schon nach teils 30 Sekunden 1 Minute Spielzeit gutgeschrieben? Woran kann das liegen? Es laufen keine anderen Timer nebenbei.

    Erfahrung ist der beste Lehrmeister. Nur das Schulgeld ist teuer.
    Thomas Carlyle (1795-1881)

  • Beispiel:


    100 Spieler sind drauf und kriegen 1 Settimerex
    Der Server muss jetzt für jeden Spieler ein Timer zählen (also 100 mal) da kann es passieren das er sich verzählt (bin mir nicht 100% sicher).
    Lösung: 1 Timer per Settimer der für alle Spieler gilt also mit einer schleife & fragen ob Spieler online ist und kein NPC ist.


  • OnPlayerConnect(playerid);
    {
    return 1;
    }


    Und ja die Timer werden gekillt, und ich habe das ganze auch schon in einer for-Schleife probiert damit nicht 1000 TimerEx Funktionen laufen.
    Das Problem tritt auch auf wenn keine Spieler auf dem Server sind, also auch nur 1 Timer läuft.

    Erfahrung ist der beste Lehrmeister. Nur das Schulgeld ist teuer.
    Thomas Carlyle (1795-1881)

  • new OnlineSeit[MAX_PLAYERS];
    public OnPlayerConnect(playerid)
    {
    OnlineSeit[playerid] = gettime();
    }


    stock GetPlayerOnlineTime(playerid)
    {
    return floatround( floatdiv( float(gettime() - OnlineSeit[playerid]) , float(60) ), floatround_floor ); //convert seconds ( gettime() - OnlineSeit[playerid] ) to minutes
    }
    Mit GetPlayerOnlineTime(playerid) kann nun die Onlinezeit in minuten abgefragt werden ganz ohne Timer


    Edit: floor durch floatround ersetzt

    <3

    Einmal editiert, zuletzt von D0erf|er ()