16.08.2011, 15:03
how can i check if a player isn't moving for 10 seconds?
new bool:Afk[MAX_PLAYERS];
new AfkTimer[MAX_PLAYERS];
new Float:LastPos[MAX_PLAYERS][3];
public OnPlayerConnect(playerid)
{
Afk[playerid] = false;
}
public OnPlayerUpdate(playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(!Afk[playerid] && x == LastPos[playerid][0] && y == LastPos[playerid][1] && z == LastPos[playerid][2])
{
AfkTimer[playerid] = SetTimerEx("SetPlayerAfk", 10000, 0, "%d", playerid);
}
else
{
Afk[playerid] = false;
KillTimer(AfkTimer[playerid]);
GetPlayerPos(playerid, LastPos[playerid][0], LastPos[playerid][1], LastPos[playerid][2]);
}
}
forward SetPlayerAfk(playerid);
public SetPlayerAfk(playerid)
{
SendClientMessage(playerid, 0xFFFFFF, "You are AFK.");
Afk[playerid] = true;
}
new bool:Afk[MAX_PLAYERS];
new AfkTimer[MAX_PLAYERS];
new Float:LastPos[MAX_PLAYERS][3];
forward SetPlayerAfk(playerid);
public OnPlayerConnect(playerid)
{
Afk[playerid] = false;
AfkTimer[playerid] = SetTimerEx("SetPlayerAfk",10000,1,"d",playerid);//10 seconds?
}
public OnPlayerDisconnect(playerid,reason)
{
KillTimer(AFKTimer[playerid]);
return 1;
}
public OnPlayerSpawn(playerid)
{
GetPlayerPos(playerid,LastPos[playerid][0],LastPos[playerid][1],LastPos[playerid][2]);
return 1;
}
public SetPlayerAfk(playerid)
{
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
if(Pos[0] == LastPos[playerid][0] && Pos[1] == LastPos[playerid][1] && Pos[2] == LastPos[playerid][2])
{
SendClientMessage(playerid, 0xFFFFFF, "You are AFK.");
Afk[playerid] = true;
}
else
{
Pos[0] = LastPos[playerid][0];
Pos[1] = LastPos[playerid][1];
Pos[2] = LastPos[playerid][2];
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/check", cmdtext, true))
{
if(Afk[playerid])return SendClientMessage(playerid, 0xFFFFFFFF, "Afk");
return SendClientMessage(playerid, 0xFFFFFFFF, "Not Afk");
}
return 0;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/check", cmdtext, true))
{
if(Afk[playerid] == true) return SendClientMessage(playerid, 0xFFFFFFFF, "Afk");
return SendClientMessage(playerid, 0xFFFFFFFF, "Not Afk");
}
return 0;
}
new bool:Afk[MAX_PLAYERS];
new AfkTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Afk[playerid] = false;
}
public OnPlayerUpdate(playerid)
{
new Keys,ud,lr;
GetPlayerKeys(playerid,Keys,ud,lr);
if(ud == 0 && lr == 0)
{
AfkTimer[playerid] = SetTimerEx("SetPlayerAfk", 10000, 0, "%d", playerid);
}
else
{
Afk[playerid] = false;
KillTimer(AfkTimer[playerid]);
}
return 1;
}
forward SetPlayerAfk(playerid);
public SetPlayerAfk(playerid)
{
Afk[playerid] = true;
}