Hey Com,
Derzeitig wollte ich ein Anti AFK System scripten
Allerdings weiss ich nicht wie ich da mit OnPlayerUodate rangehe?
Hat da jemand einen Gedankenanstubser parat?
Mfg
Hey Com,
Derzeitig wollte ich ein Anti AFK System scripten
Allerdings weiss ich nicht wie ich da mit OnPlayerUodate rangehe?
Hat da jemand einen Gedankenanstubser parat?
Mfg
einfach bei einem timer der z.B. alle 5 min ausgeführt wird die coordinaten speichern, wenn die coordinaten nach 5 min wieder die selben sind kick
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
wenns probleme gibt bitte melden
Ich muss dir leider mitteilen Timtrucker,dass du keinen schimmer hast wozu man "stock" benutzt bzw was es bedeutet.
Erkundige dich hier,bevor du falsche Informationen verbreitest.
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
Da sieht man schon beim ersten schaun falsch kann ich das so machen?
if(!OnPlayerUpdate(playerid))
{
Timer erstellen
}
Ne andere Frage in meinem Dcript war OnPlayerUpdate nicht vorhanden und ich habs einfach reinkopiert geht das dann noch?
OnPlayerUpdate wird aufgerufen wenn:
Der Spieler einen Schritt macht.
Der Spieler die Chatbox öffnet.
Der Spieler IRGENDETWAS macht.