idle kicker - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (
https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (
https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (
https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: idle kicker (
/showthread.php?tid=277115)
idle kicker -
xDeadlyBoy - 16.08.2011
how can i check if a player isn't moving for 10 seconds?
Re: idle kicker -
=WoR=Varth - 16.08.2011
https://sampwiki.blast.hk/wiki/GetPlayerPos
https://sampwiki.blast.hk/wiki/SetPVarFloat
https://sampwiki.blast.hk/wiki/SetTimerEx
https://sampwiki.blast.hk/wiki/GetPVarFloat
I suggest you search an FS about AFK system/kicker.
Re: idle kicker -
xDeadlyBoy - 16.08.2011
i tried, but it doesn't work... look at my script:
pawn Код:
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;
}
it doesn't work...
Re: idle kicker -
=WoR=Varth - 16.08.2011
pawn Код:
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;
}
Re: idle kicker -
xDeadlyBoy - 16.08.2011
it's sending a lot of messages that says "You are AFK" even when i'm not afk...
and i'm checking if i'm afk with this:
pawn Код:
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;
}
it's always says "Not Afk".
Re: idle kicker -
=WoR=Varth - 16.08.2011
pawn Код:
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;
}
I don't see any mistake on my code. Perhaps I missed something.
Re: idle kicker -
xDeadlyBoy - 16.08.2011
nvm, i solved it
![Cheesy](images/smilies/biggrin.png)
if you want to know how i did it:
pawn Код:
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;
}
Re: idle kicker -
=WoR=Varth - 16.08.2011
OnPlayerUpdate called when player do something in client side. So how can it called if player AFKing?
I never dealing with OnPlayerUpdate so IDK How this callback works.
Re: idle kicker -
xDeadlyBoy - 16.08.2011
i checked if a player is pressing the movement keys, it's very simple...
Re: idle kicker -
=WoR=Varth - 16.08.2011
I know. I just don't know if OnPlayerUpdate called even we do nothing.