Für Leute die OnPlayerUpdate noch nicht kennen

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
  • Guten Tag Liebe Community,


    Ich möchte euch einmal die Callback ,,OnPlayerUpdate´´ vorstellen die es neu in Sa-mp zu bewundern gibt,
    allerdings für Leute die sie noch nicht kennen.


    Diese Callback ist sehr nützlich , da sie manch Timer schnell ersetzen kann, wie in diesem Beispiel:


    Godmode:
    public OnPlayerUpdate(playerid)
    {
    new Float:HisHealth;
    GetPlayerHealth(playerid,HisHealth);
    if(HisHealth < (1000.0))
    {
    SetPlayerHealth(playerid,1000.0);
    }
    return 1;
    }


    So braucht man keinen Timer und ihr könnt euch sicher sein das die Callback schnell reagiert.
    Durch OnPlayerUpdate können auch andere dinge angestellt werden die so mit einem Timer nur laggen würden.
    Das heißt ihr könnt neue abfragen einbauen , das wäre z.b. für ein Anti Waffen Cheat gut, auch ein Anti Money Cheat würde
    schneller regieren und so den Spieler am Cheaten scheitern lassen.

    Weitere Infos zur Callback>>


    Ansonsten, jo, ich wollts nur mal gesagt haben da es evntl. manchen weiterhelfen kann die noch nichts von dieser Callback wussten.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Das Callback ist ja schön und gut,würd es aber nicht benutzten außer um ein wirklich effizientes AntiCheat - Script zu schreiben.
    Du hättest auch mal erwähnen sollen,dass das Callback sehr häufig aufgerufen wird,einfach bei jedem network Update.


    Würde es keinen Anfänger empfehlen das Callback zu benutzten,gibt schon viel zu viele Idioten die OnPlayerUpdate() dafür benutzten die Spielerstatistik zu speichern,was völliger blödsinn ist und den Server schnell in die Knie zwingt.

  • Am besten einen eigenen OnPlayerUpdate benutzen, so etwa:
    Ganz oben ins Script:
    new tOPU;
    Unter OnGameModeInit:
    tOPU=SetTimer("xOnPlayerUpdate",2000,1);
    Unter OnGAmeModeExit:
    KillTimer(tOPU);
    Ganz unten ins Script:
    forward xOnPlayerUpdate();
    public xOnPlayerUpdate()
    {
    for(new playerid=0;playerid<MAX_PLAYERS;playerid++)
    {
    //inhalt
    }
    return 1;
    }

  • Man kann OnPlayerUpdate auch nur sekündlich mit einer Variable benutzen ohne extra einen Timer zu setzen das spart dank der einen Abfrage auch Ressourcen...

  • Du meinst wohl sowas wie das hier ?
    new xx[MAX_PLAYERS]=0;
    public OnPlayerUpdate(playerid)
    {
    xx[playerid]++;
    if(xx==100)
    {
    }
    return 1;
    }


    Das wird doch auch Ressourcen fressen, da es ja immer xx etwas adden muss und checken muss ob xx 100 ist.
    Am besten ist die Methode die ich geschrieben habe ^^

  • Das funktioniert nicht den es wird nicht 100x die Sekunde abgefragt.
    Du hast nur einen Timer (stinknormalen) geschrieben ;) aber naja :P

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • FoX: Nein, das meine ich nicht aber auch wenn man das so benutzt frisst es weniger Ressourcen als ein normaler Timer...

  • Wieso werden Timer als die größten Ressourcen-feinde angesehen ?
    Timer ist immernoch besser als 2 Textdraws zu erstellen :thumbdown:
    Und ganz besser als OnPlayerUpdate xD
    Oder ich macht einfach das hier wieder ganz unten ins Script:
    forward xOnPlayerUpdate();
    public xOnPlayerUpdate(playerid)
    {
    //inhalt
    return 1;
    }


    Und schreibt unter diesen Callbacks "xOnPlayerUpdate(playerid);":

    • OnPlayerDisconnect(playerid)
    • OnPlayerCommandText(playerid, cmdtext[])
    • OnPlayerText(playerid, text[])
  • Wieso werden Timer als die größten Ressourcen-feinde angesehen ?

    Hab ich nie behauptet, ich sagte nur, dass ein Timer mehr Ressourcen frisst als OnPlayerUpdate sekündlich zu machen...

  • OnPlayerUpdate wird doch unterschiedlich oft pro sekunde aufgerufen.
    Da ist es doch unmöglich OnPlayerUpdate "sekündlich" zu machen.


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Nein er meint wohl das hier:
    tOPU=SetTimer("xOnPlayerUpdate",2000,1);


    Die Methode die ich im vorherigen Post geschrieben hab ist immernoch am besten:

  • OnPlayerUpdate hat aber eine Funktion, dein komischer Timer nicht. OnPlayerUpdate wird nur ausgelöst, wenn der Spieler auch sein Spiel offen ist, dein Timer geht immer. Desweiteren kannst du mit diesem Public die Synchronisation des Spielers mit dem Server unterbinden.

  • Könnte man auch mit meinem Timer machen, aber dafür müsste man wieder OnPlayerUpdate benutzen xD
    DANKE man mir ist gerade eien neuer Callback eingefallen für spriTe_v5 !


    Und wer braucht schon die Funktion die checkt ob der Spieler offen ist oder nicht ? x)

  • Auto-AFK für Leute die auf dem Desktop sind - zum Beispiel. Der wichtigste Punkt ist, dass man mit OnPlayerUpdate einfach eigene Callbacks erstellen kann, bei einem 2 Sekunden-Timer ist das problematischer, da das Event möglicherweise ausgelöst wird, aber vom Timer nicht erfasst wird, da es ausschließlich in der Zeit zwischen den Timerdurchläufen passieren könnte.