[INCLUDE] GetPlayerFPS

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
  • Hallöle an Alle,


    ja, das Thema ist ein alter Schuh, schon aus dem Jahr 2010: https://forum.sa-mp.com/showthread.php?t=172085


    Ist mir bewusst, allerdings habe ich gesehen, dass es kein Include gibt für diese Funktion.


    Zwar gibt es viele Beispiele, wie es implementiert wurde, aber meistens nicht gut bzw nicht direkt nutzbar.


    Der Clue daran ist, dass die Berechnung kontinuierlich stattfinden muss, was bei einer einzelnen Funktion nicht gegeben ist.


    Viele updaten das über OnPlayerUpdate, was viel zu übertrieben ist, da das nur jede Sekunde theoretisch geupdatet wird und nicht 1000x in der Sekunde.


    Der Punkt ist, da die Timer nicht ganz akkurat laufen in Pawn (ohne Timerfix), muss man den Timer etwas frequentierter ansetzen, aber das ist dennoch wesentlich performanter (also 4x die Sekunde, anstatt über 1000x).


    Oftmals wird das auch über PVars gelöst, was in diesem Fall nicht unbedingt eine gute Wahl wäre, da der Wert oft geupdatet wird und immer benötigt wird.


    Source-Code: PasteBin
    Direkter-Download: MediaFire


    Will man die Include in einem Filterscript nutzen, muss man #define FILTERSCRIPT übers Include packen :)


    Die Include macht die Funktion direkt nutzbar, ohne dass man sich um das Updaten sorgen machen muss.


    In diesem Sinne, vielleicht hilft es ja dem Ein oder Anderem.


    Viel Spaß noch allen beim Skripten und einen schönen Tag! :good:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Naja, dafür eine Include zu schreiben, erachte ich als doch wenig sinnvoll, vor allem weil es eigentlich einen passenden Thread für etwas in dieser Größe gibt: https://breadfish.de/index.php…%BCtzliche-codeschnipsel/
    Wenn jetzt jeder anfangen würde, eine einzige Funktion als Include zu basteln, dann herrscht das reine Chaos. Zudem eine einzelne Funktion ohne große Logik dahinter als Standalone-Include sinnlos ist.
    Davon abgesehen ist das ja bei weitem nichts neues, nur weil es jetzt in einer Include steht, macht es das nicht besser.


    Für solche Schnipsel macht man sich eine Sammel-Include und gut ist. Das ganze Gehooke (nur damit es überaus kompliziert aussieht mit den ganzen Sonderzeichen) kann man sich auch sparen.


    Außerdem noch zwei Punkte zum Code:
    1. Das Array drunk sollte nicht global sondern nur local static deklariert werden, es wird ja nur dort genutzt.
    2. Im Loop sollte noch abgefragt werden, ob der Spieler auch online ist, sonst führst du den Code auch für Spieler durch, die nicht online sind, das ist kein gutes Doing.



    Ich empfehle Folgendes:
    OnGameModeInit:
    SetTimer("FPS", 251, true);


    Und das hier in eine Sammel-Include (oder die Deklaration unter die normalen Include und den public ganz unten in den Gamemode).
    #define GetPlayerFPS(%0) public_fps{%0}
    new public_fps[MAX_PLAYERS char];


    forward FPS();
    public FPS()
    {
    static olddrunk[MAX_PLAYERS], d, fps;
    for(new i = GetPlayerPoolSize(); i > -1; i--)
    {
    if(!IsPlayerConnected(i)) continue;
    d = GetPlayerDrunkLevel(i);
    if(d < 100) SetPlayerDrunkLevel(i,2000);
    fps = olddrunk[i] - d;
    if(fps > 0) public_fps{i} = fps;
    olddrunk[i] = d;
    }
    return 1;
    }


    Mehr ist es nicht. Da braucht es keine Include.


    PS: OnPlayerUpdate wird nicht über 1000x pro Sekunde aufgerufen, im Gegenteil, sehr weit darunter (in der Regel zwischen 30 und 50 mal).

  • format(string, sizeof(string), "FPS: %d", GetPlayerFPS(playerid));

    Deine metode geht super grade ebend textdrwas erstellt und eingebaut und ging sofort und das auch sehr genau danke dafür


    @t


    Denoch finde ich die Include auch nicht schlecht wenn man in sein GM platz sparen möchte :thumbup:

  • Super! :)


    Denoch finde ich die Include auch nicht schlecht wenn man in sein GM platz sparen möchte

    Wie gesagt, in dem Fall dann eine Sammel Include nutzen, in die du alles auslagerst, was du aus Platzgründen nicht im Gamemode haben willst. Das ist besser als jede Funktion in eine eigene Include zu packen, spart den Hook Wahnsinn und ist deutlich sauberer.