Es gibt bereits viele AFK-Systeme.
Die basieren darauf, dass bei OnPlayerUpdate kein Aufruf passiert.
Du brauchst eine globale Variable
new idletime[MAX_PLAYERS];
Diese soll den letzten Moment speichern, der bei OnPlayerUpdate aufgerufen wurde.
Nun musst da auch was gespeichert werden.
public OnPlayerUpdate(playerid)
{
return idletime[playerid] = GetTickCount(), 1;
}
Nun wird der letzte Moment gespeichert.
Jedoch muss doch überprüft werden, wann der Spieler AFK geht. Jedoch wird es bei OnPlayerUpdate
nicht gehen, da es ja dann nicht mehr aktualisiert wird. Wir brauchen einen Timer.
Der Timer sollte beim GameMode Start gestartet werden. Hin zu OnGameModeInit.
public OnGameModeInit()
{
SetTimer("AFK", 3000, 1);
return 1;
}
forward AFK();
public AFK()
{
new tick = GetTickCount();
for(new i, j = GetMaxPlayers(); i < j; i++)
{
if(tick - idletime[i] >= 5000) // Nach 5 Sekunden AFK
{
// Was passiert, wenn der Spieler AFK ist?
}
}
return 1;
}