Frage zu OnPlayerUpdate

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
  • Hallo!
    Wie der Titel schon sagt hab ich eine Frage zu OnPlayerUpdate.


    Also. Ich möchte ein Anti-Desktop system machen und OnPlayerUpdate wird ja nicht mehr ausgeführt wenn man aufm desktop ist.
    Jetzt wollte ich fragen ob noch ein anderes Callback möglich ist weil OnPlayerUpdate updated mir zu oft und es kann nicht gut für den server sein


    Vielen Dank im Vorraus

  • new bool:Desktop[MAX_PLAYERS];


    public OnPlayerUpdate(playerid)
    {
    Desktop[playerid] = false;
    return 1;
    }


    bei einem 1 sekunden timer
    if(!Desktop[i]) Desktop[i] = true;


    stock IsPlayerDesktop(playerid)
    {
    if(Desktop[playerid]) return 1;
    return 0;
    }


    und weil onplayerupdate nichtmehr ausgeführt wird bleibt ja desktop[playerid] auf true und man weiß das er desktop ist


    das müsste so funktionieren, und ist eine einfach lösung



    mfg Halo

  • Der boolean wird zwar auf false gesetzt wenn OnPlayerUpdate ausgeführt wird, aber warum sollte der sich dann von selbst auf true setzen nur weil OnPlayerUpdate nichtmehr ausgeführt wird ?


    Wegen dem timer.

    bei einem 1 sekunden timer
    if(!Desktop[i]) Desktop[i] = true;


    Ist aber sicherlich kein Idealer Loesungsweg, da die Chance besteht, dass jemand faelschlicher weise als auf dem Desktop erkannt wird. Die chance ist aber bei einer update rate von 30ms und bei einem reset timer von 1sekunde nicht sehr hoch. Den Faktor koennte man so gut, wie eliminieren, indem man Desktop[] fuer mehr als nur 2zustaende nutzt und in dem 1sekunden timer abfragt, ob Desktop[] < 3 ist und in dem Fall Desktop[]++, dann bei IsPlayerDesktop() nur true, ausgibt wenn Desktop[] = 3 ist. Auf diese weise muss der Spieler mindestens 3 sekunden pausiert sein. Wenn man dann auch noch die 3 sekunden etwas anpasst werden dann auch keine Leute gekickt (bei einem Anti-Desktop system), die nur mal kurz irgendetwas im hintergrund mache wollen, denn das Spiel neustarten nur weil man kurz z.B. bei einem Messenger eine Nachricht schreibt dauert sicherlich meistens laenger als zu pausieren.