Spieler bei nicht bewegung kicken?

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
  • Mit OnPlayerUpdate kannst du eher prüfen,ob der Spieler überhaupt Ingame ist oder sich stattdessen im Menu oder auf dem Desktop befindet.
    Wenn du lediglich auf die Änderung der Position hinaus willst,dann sollte es ein einfacher Timer auch tun.
    Du musst dich erstmal für einen Weg entscheiden welches du als Kriterium für AFK festlegen willst.

  • Mit OnPlayerUpdate kannst du eher prüfen,ob der Spieler überhaupt Ingame ist oder sich stattdessen im Menu oder auf dem Desktop befindet.
    Wenn du lediglich auf die Änderung der Position hinaus willst,dann sollte es ein einfacher Timer auch tun.
    Du musst dich erstmal für einen Weg entscheiden welches du als Kriterium für AFK festlegen willst.


    Ich versteh OnPlayerUpdate irgendwie nicht...


    //Goldkiller: Das ist aber nicht dein Thread zu diesem Problem ;).

  • Mach am besten einen neuen Stock:

    stock PlayerAFKCounter()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    SetPVarInt(i, "AfkSeconds", GetPVarInt(playerid, "AfkSeconds") + 1);
    if(GetPVarInt(i, "AfkSeconds") >= AfkMaxSeconds)
    {
    Kick(i);
    }
    }
    }
    }


    In OnGameModeInit fügst du folgendes ein:


    SetTimer("PlayerAFKCounter", 1000, true);


    und in OnPlayerKeyStateChange das:


    SetPVarInt(playerid, "AfkSeconds", 0);


    Ganz oben im Skript das:
    new AfkMaxSeconds = 500;


    AfkMaxSeconds sagt jetzt aus, wieviele sekunden der Spieler Online sein darf bis er gekickt wird. Ich hoffe es funkitoniert alles soweit gut :D
    wenns probleme gibt bitte melden

  • Achja tuht mir leid xD mit Stock geht das doch auch gar nicht - blödsinn also nochmal:


    Erstell eine neue Public funktion:
    public PlayerAFKCounter()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    SetPVarInt(i, "AfkSeconds", GetPVarInt(playerid, "AfkSeconds") + 1);
    if(GetPVarInt(i, "AfkSeconds") >= AfkMaxSeconds)
    {
    Kick(i);
    }
    }
    }
    }


    In OnGameModeInit fügst du folgendes ein:


    SetTimer("PlayerAFKCounter", 1000, true);


    und in OnPlayerKeyStateChange das:


    SetPVarInt(playerid, "AfkSeconds", 0);


    Ganz oben im Skript das:


    new AfkMaxSeconds = 500;
    forward PlayerAFKCounter()


    Ps: Ich weiss wohl wozu man stock verwendet, habe mich nur vertan


    lg