Godfather - onplayerupdate - massiv Performance steigern! unbedingt LESEN !

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
  • moinmoin


    da es bei meinem Hosting von einem Kunden Beschwerden gibt über Lags will ich hier mal versuchen das Problem grundlegend aus der welt zu räumen.


    Nicht optimierte GF scripte speichern in "onplayerupdate" bei jeder Positionsänderung und Bewegung eines Spielers den Account auf Festplatte.


    ich habe aus sa-reallife.org den code zusammengefischt womit wir in einem timer alle 10 minuten alle accounts speichern und ihm diese anleitung geschickt: http://forum.samp-online.com/a…-der-server-laggt/#post41


    mir fehlt gerade leider die nötige umgebung ums zu testen, habs nur im editor zusammen kopiert.


    wär gut wenns mal jemand testen kann obs funzt :)


    cya
    DeDi

  • 0/10 ....



    • //----- SCHRITT 5: Alle onplayerupdate(?); ersetzen mit

    • PlayerUpdate(playerid);

    WTF? das ist der selbe rotz wie davor. nur das es jetzt anderst heist... OMG


    echt les dir den thread zu scriptoptimierug mal durch...


    Soooo für alle die trotzdem ihr script auslasten wollen:
    Schneidet alles bei OnPlayerUpdate aus.(so das nurnoch das return 1 dasteht)
    dann fügt ihr das bei OnPlayerDisconnect ein.


    Soooo das ist schonmal VIEL besser weil er jetzt nurnoch speichert wenn der spieler den server verlässt. ggf muss gmx undso auch angepasst werden.


    MfG
    Mischi

  • peinlich, du hast leider 0 ahnung, und dich gerade selbst disqualifiziert ... den timer hast du nicht gesehn?


    und du weißt schon, dass "onplayerupdate" pro sekunden XX mal aufgerufen wird etc?


    ach was red ich, lass die anderen über dich auslachen, is ja peinlich


    wenn man keine ahnung hat, sollte man besser die fresse halten :P > http://forum.sa-mp.com/index.php?topic=115828.0


    //edit


    ach und noch was mischi, bei deiner methode sind die daten verloren wenn der server ausgeht :pinch:


    man kann einfach bei onplayerdisconnect die neue PlayerUpdate(); aufrufen


    die neue PlayerUpdate(); wird auch nicht wie der callback zu "OnPlayerUpdate" gehandhabt, die neue wird nur aufgerufen wenn der befehl kommt :wacko:

    Einmal editiert, zuletzt von DeDiHosting ()

  • Gute Anleitung DeDi ! Werde die auch an zukünftige Kunden mit Laggproblemen & GF weiterleiten :)

  • Man kann schauen wie OnPlayerUpdate funktioniert, auch wie oft es aufgerufen wird, indem man einfach
    printf("OnPlayerUpdate wurde benutzt.");
    reinstellt. Kurz den Server ausprobiert - gehen/springen/schwimmen.
    Dannach mal die Serverlog aufmacht und sich das ganze anschaut.

  • Was bringt die Variable SaveTimer?
    Es steht nur
    SaveTimer = SetTimer(...);
    drin, aber sonst nichts anderes. Kein new SaveTimer und kein KillTimer(SaveTimer);


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • da merkt man das du 0 Ahnung hast...


    ich könnte auch ganz einfach meinScript posten aber mach ich nciht weil das Non Puplic sein soll :)^^


    zudem war das was ich gepostet habe nur das was du gepostet hast. nur meinst lastet nich so aus wie deins.


    und nochwas dasmein script nicht speichert wenn der server ausgeht. xD du hast mein script nicht gesehen und kannst das daher garnicht behaupten...


    weist ein script was alle 10 min speichert... Was ist wohl macht wohl mehr auslastung ein Script was speichert wenn der spieler off geht und wenn der server off geht oder ein script was alle 10 min speichert?... Soviel ahnung trau ich selbst dir zu..


    naja nC weiter bb

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • da merkt man das du 0 Ahnung hast...


    ich könnte auch ganz einfach meinScript posten aber mach ich nciht weil das Non Puplic sein soll :)^^


    Das sagen sie alle, jeder kann behaupten das er irgendwas hammermässiges hat....


    Dass kann ich auch: "Ich habe ein Script das dass beste auf der ganzen Welt ist................................ "

    "Solange es Menschen gibt, wird es Kriege geben"
    (Albert Einstein)

  • Wozu kann man das den gebrauche das OnPlayerUpdate?
    Ach mein guter alter Hoster ist auch hier aktiv....man man man^^
    Mfg
    GeForceOne


    Das kann man z.B. für etwas kleines nutzen, was die ganze zeit aktualisiert werden soll, z.B. ne pos abfragen, oda was anderes, aber ich habs eig noch nie gebraucht.


    Ich speicher die player daten immer ab, wenn an der spielerdatei iwas geändert wird (was wichtiges), ansonsten immer beim disconenct oda ongamemodeexit usw.
    Aber gute info, auch für non-GF nutzer, da OnPlayerUpdate auch oft in iwelchen tuts oda nackten reg systemen benutzt wird/wurde.


    MFG, Robdeflop

  • OnPlayerUpdate lässt die Platte rattern, jo Dedi super Anleitung, leider wollen es viele einfach nicht einsehen das der ständige Dateizugriff
    sehr lange dauert & den Prozess jedes mal um einige Sekunden verzögert, das Dateisystem wartet immer erst bis das ganze Fertig ist
    daher kommt es auch zu massiven laggs da OnPlayerUpdate schon mehr als 32x in der Sekunde aufgerufen wird sprich die Platte muss ständig
    hinhalten.


    Wie gesagt das ist für die Platte ( HD ) nicht gesund & für euren Server sicher auch nicht.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Man könnte eig in einem reinen GF alle "OnPlayerUpdate" einfach unbennen in "SaveAll",
    denn GF hat auch schon einen Timer drin wo OnPlayerUpdate aufgerufen wird,
    was eig quatsch ist, da OnPlayerUpdate eh jede Sekunde ausgeführt wird. Doch so ist
    werden die Accs dann nur noch per Timer und wenn ein Spieler den Server verlässt gespeichert.
    Sollte eig reichen und mit der PAWNO Funktion "Ersetzen" geht das auch ganz schnell. :D

  • Hallo DeDi,


    also im standard GF soeichert er es alle 30 Minuten ab:

    public OnGameModeInit()
    {
    // Some scipts here
    accountstimer = SetTimer("SaveAccounts", 1800000, 1); //30 mins every account saved
    return 1;
    }


    Den SaveAccounts Abschnitt

    public SaveAccounts()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    OnPlayerUpdate(i);
    if(PlayerInfo[i][pJob] > 0)
    {
    if(PlayerInfo[i][pContractTime] < 25)
    {
    PlayerInfo[i][pContractTime] ++;
    }
    }
    }
    }
    }


    Meiner Meinung nach sehe ich auch keinen Fehler...., denn es wird alle 30 Minuten einmal gespeichert.

  • Zitat

    OnPlayerUpdate(i);


    Ja also, aber OnPlayerUpdate wird um die 60 mal in der sekunde aufgerufen sobald der spieler sich bewegt^^

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen