Ist OnPlayerUpdate zu fressend?

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
  • Grüße!


    Ich wollte ein Radarsystem bauen und das mit einem runden Umfang und einer Z Koordinate (also geht eine Gangzone schonmal nicht). Also habe ich mir gedacht das ich OnPlayerUpdate nutze, nachfrage ob man in der Nähe vom Radarpunkt ist und wenn ja einen Marker setzt. Wenn nicht setzt man den Marker aber auf unsichtbar. Wenn ich das jetzt mit mehreren Systemen mache bei mehreren Spielern, kommt mir die Frage auf ob das ein einfacher Server überhaupt schafft oder ob dann das Laggen losgeht.


    Kennt sich jemand damit aus?


  • Da OnPlayerUpdate ca. 20x pro Sekunde aufgerufen wird.

    Selbst wenn das der Fall wäre, was es zwar nicht ist tut aber nichts zur Sache, kannst du ja messen wie lange die Ausführungszeit ist.


    In welchen Zeitabständen der Spieler nun OnPlayerUpdate triggert in der Sekunde kann man ja gegen rechnen, so lange die Ausführungszeit mit der Zeit zwischen dem triggern des Callbacks sich nicht überschneidet ist alles im grünen Bereich.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Selbst wenn das der Fall wäre, was es zwar nicht ist tut aber nichts zur Sache, kannst du ja messen wie lange die Ausführungszeit ist.

    DJ Deagle hat schon Recht, das wird so oft, bzw. noch öfter aufgerufen.



    Rennend zu Fuß:

    Code
    [26/09/2015 12:31:32] OnPlayerUpdate called 50 times in 1 sec.
    [26/09/2015 12:31:33] OnPlayerUpdate called 48 times in 1 sec.
    [26/09/2015 12:31:34] OnPlayerUpdate called 53 times in 1 sec.
    [26/09/2015 12:31:35] OnPlayerUpdate called 47 times in 1 sec.
    [26/09/2015 12:31:36] OnPlayerUpdate called 51 times in 1 sec.
    [26/09/2015 12:31:37] OnPlayerUpdate called 52 times in 1 sec.
    [26/09/2015 12:31:38] OnPlayerUpdate called 46 times in 1 sec.
    [26/09/2015 12:31:39] OnPlayerUpdate called 47 times in 1 sec.



    Im Fahrzeug, fahrend:

    Code
    [26/09/2015 12:34:43] OnPlayerUpdate called 37 times in 1 sec.
    [26/09/2015 12:34:44] OnPlayerUpdate called 35 times in 1 sec.
    [26/09/2015 12:34:45] OnPlayerUpdate called 35 times in 1 sec.
    [26/09/2015 12:34:46] OnPlayerUpdate called 34 times in 1 sec.
    [26/09/2015 12:34:47] OnPlayerUpdate called 31 times in 1 sec.
    [26/09/2015 12:34:48] OnPlayerUpdate called 36 times in 1 sec.


    Stehend, ohne etwas zu machen:

    Code
    [26/09/2015 12:37:33] OnPlayerUpdate called 3 times in 1 sec.
    [26/09/2015 12:37:34] OnPlayerUpdate called 1 times in 1 sec.
    [26/09/2015 12:37:35] OnPlayerUpdate called 1 times in 1 sec.
    [26/09/2015 12:37:36] OnPlayerUpdate called 2 times in 1 sec.
    [26/09/2015 12:37:37] OnPlayerUpdate called 2 times in 1 sec.


    Code dazu:


    Nimmt man einen Schnitt aus den ganzen Aktionen über einen längeren Zeitraum kommt man sicherlich auf 20-40x pro Sekunde, je nach dem was der Spieler macht. Steht er natürlich nur rum dann ist es wesentlich weniger.

  • DJ Deagle hat schon Recht, das wird so oft, bzw. noch häufiger aufgerufen.

    Ich hab doch nie gesagt das das nicht der Fall ist, nur das seine Verallgemeinerung nicht stimmt, aus diesem Grund schrieb ich ja auch, das die Ausführungszeit nicht den durchschnittlichen Triggerzeitraum überschreiten sollte

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich hab doch nie gesagt das das nicht der Fall ist

    hmm

    Selbst wenn das der Fall wäre, was es zwar nicht ist

    8o



    Ist ja auch egal, du hast es wahrscheinlich anders gemeint, ging ja nur darum mal darzustellen, wie oft das wirklich aufgerufen wird, da viele das nicht wissen bzw. danach suchen/fragen, und ich es selbst auch nicht genau wusste, wie oft es wirklich ist.

  • Hab mich heute mal an das System gewagt und durfte feststellen das es bei OnPlayerUpdate zu viel war ([warning] client exceeded áckslimit´127..... <3006> Limit: 3000/sec).


    Und bei CreateDynamicArea habe ich leider nichts gefunden.


    Wenn ich das nun mit einen Timer mache den ich alle 3 sec abpsielen lasse, wäre das zu viel?
    Und wenn nicht sollte ich einen Timer nehmen der für jeden Spieler einzelnd läuft (also Timer bei OnPlayerConnect) oder sollte ich das mit 2 Schleifen machen für die entsprechenden Playerid´s.



    Es kann in dieser Abfrage zu 2 Abfragen außerhalb einer Schleife kommen und zu maximal 5 weiteren Abfragen in einer Schleife. Minimal sind es 2 außerhalb der Schleife und 3 innerhalb der Schleife.

  • http://pastebin.com/pUyZd5CV

  • Dieser Code an sich sollte auch bei OnPlayerUpdate eigentlich keinen Lag verursachen.
    Versuche es aber mal so:

    Wenn das nicht geht, dann würde ich dir zu einem 1-Sekunden Timer raten, der für alle Spieler ausgeführt wird, also einmal bei OnGameModeInit gestartet wird.
    Ich würde mich aber wundern, wenn es bei OnPlayerUpdate nicht geht.