Frage zu laggs

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
  • nochmal ne frage, wie stellt man das optimal ein für ungefair 50 leute?
    und für was ist das alles?
    hab schonmal irgendwo ein thema über das gefunden


    onfoot_rate 40
    incar_rate 40
    weapon_rate 40
    stream_distance 300.0
    stream_rate 1000

  • OnPlayerUpdate ist ein Standart-SA:MP Callback. Es wird immer aufgerufen wenn ein Spieler mit den anderen Clients synchronisiert wird - Das sind pro Sekunde ~ 20-50 Mal. Jeder der in diesem Callback Accounts updatet, ist einfach nur dumm.

    dann bin ich ja 1. dumm und 2. hab ich wieder was gelernt.. also sollte man dort am besten einfach nix drinhaben und das "update der spieler" in ein eigenes callback nehmen?


    MFG



  • Man kann doch einfach direkt im a_samp Include MAX_PLAYERS auf 100 definieren.

  • Naja hab die funktion ganz gelöscht, nicht mal DAS ist drinnen:
    public OnPlayerUpdate(playerid)
    {
    return 1;
    }


    Wollt ihr wissen wie ich ein neues public gemacht hab, der weniger aufgerufen wird und bzw. nicht laggn læsst? für die, die es nicht wissen:

    Spoiler anzeigen

    ganz oben:
    forward UpdatePlayer(playerid);

    Spoiler anzeigen
    new UpdateTimer[MAX_PLAYERS];

    Spoiler anzeigen
    unter OnPlayerConnect:
    UpdateTimer[playerid] = SetTimerEx("UpdatePlayer", 2000, 1, "i", playerid);

    Spoiler anzeigen
    unter OnPlayerDisconnect:
    KillTimer(UpdateTimer[playerid]);

    Spoiler anzeigen
    und danach STRG+H, suchen nach das hier:

    Code
    OnPlayerUpdate

    Spoiler anzeigen
    ersetzen mit das hier:

    Code
    UpdatePlayer

    Spoiler anzeigen
    und dann auf den [ Alle Ersetzen ] button klicken und compilen ^^ ;)

  • Ich hab den server durch OnPlayerUpdate immer zum crashen gebraucht :D
    Ich wusste aber nit dass OnPlayerUpdate schon standart drinne is, ich hatte das eig reingemacht für mein login-register script xD
    Nu weiß ich ja why der immer abgekratzt is^^


    Laggs können aber auch durch den anbieter verursacht werden, wenn der server nit so gut is ;)


    MFG, Rob

  • FoxHound:


    Lieber ein globaler Timer der auf einen Schlag alle Player durchloopt, anstatt für jeden Spieler einen eigenen Timer laufen zu lassen. ;o


    Reloaded:


    Wenn du dann mal einen 50 Slot Server machen willst, aber in der a_samp Include MAX_PLAYERS auf 100 hast, müsste man, wenn man es macht wie du, auch wieder die a_samp.inc umdefinieren. Lieber direkt in jedem Script so umstellen wie mans grade braucht.


    Übrigens, Sachen die in OnPlayerUpdate auf KEINEN Fall benutzt werden sollten:
    - File-Zugriffe
    - Remote Functions
    - Loops (egal ob for oder while)
    - Vielzahl an Custom Functions


    Wenn man OnPlayerUpdate richtig nutzt lassen sich sehr schöne Dinge anstellen, siehe Y_Less' YUP Include.

  • Das Thema kommt grade wie gerufen, ich habe gestern mein Serverseitiges Anticheat unter OnPlayerUpdate eingebaut, wäre das ok oder wäre es besser ein extra Callback zu erstellen und es mit einem Timer aufzurufen?

  • Ist insofern ok, wenn du nicht zuviel Code aufrufst und zuviele Checks einbaust.

  • Hi


    ich hatte das hier unter onplayerupdate
    aber der server hat gelaggt bis zum geht nicht mehr
    if (Eingeloggt[playerid] == 1)
    {
    new tmpip[16];
    new ip[40];
    new string[256];
    new Spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Spieler, sizeof(Spieler));
    format(string, sizeof(string), "/Admin/User/%s.ini", Spieler);
    GetPlayerIp(playerid,ip,40);
    GetPlayerIp(playerid,tmpip,sizeof(tmpip));
    dini_Set(string,"ip",tmpip);
    dini_IntSet(string, "score", SpielerInfo[playerid][score]);
    dini_IntSet(string, "cash", GetPlayerMoney(playerid));
    dini_IntSet(string, "kills", SpielerInfo[playerid][kills]);
    dini_IntSet(string, "bank", SpielerInfo[playerid][bank]);
    dini_IntSet(string, "exporte", SpielerInfo[playerid][exporte]);
    dini_IntSet(string, "deaths", SpielerInfo[playerid][deaths]);
    dini_IntSet(string, "haus", SpielerInfo[playerid][haus]);
    dini_IntSet(string, "admin",SpielerInfo[playerid][admin]);
    }


    jetzt habe ich es unter public SaveStats(playerid) dazu einen timer der auf 1ne sekunde gestellt ist
    aber die statistik wir nicht gespeichert