Skip to content

Instantly share code, notes, and snippets.

@RogueDrifter
Last active October 8, 2018 23:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RogueDrifter/24a0d0a16fa0a0e60e1b9d5739b8409e to your computer and use it in GitHub Desktop.
Save RogueDrifter/24a0d0a16fa0a0e60e1b9d5739b8409e to your computer and use it in GitHub Desktop.
/*
Simple afk checker by Rogue 2018 Sept 2nd.
Functions:
__________
IsPlayerPaused(playerid);
IsPlayerAFK(playerid);
Callbacks:
__________
OnPlayerPause(playerid);
OnPlayerResume(playerid);
OnPlayerAFK(playerid);
OnPlayerReturn(playerid);
Callbacks to hook and add:
_________________________
public OnPlayerText
public OnPlayerClickMap
public OnPlayerCommandText
public OnDialogResponse
public OnPlayerClickTextDraw
public OnPlayerClickPlayerTextDraw
public OnPlayerSelectedMenuRow
*/
#if defined rAFKCHECK_included_
#endinput
#endif
#define rAFKCHECK_included_
#include <a_samp>
#define RAFK_MAX_WAIT_TICKS 60
#define RAFK_MAX_AFK_RANGE 2.0
enum rAFK_PLAYER_DATA
{
bool:rAfkPaused,
bool:rAfkAFK,
rAfkClickTicks,
rAfkPTicks,
rAfkWarnTicks,
Float:rAfkX,
Float:rAfkY,
Float:rAfkZ,
rAfkPTimer
}
new
rAFK_Player[MAX_PLAYERS][rAFK_PLAYER_DATA];
#if defined rAFK_OnPlayerKeyStateChange
forward rAFK_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
#endif
#if defined rAFK_OnPlayerConnect
forward rAFK_OnPlayerConnect(playerid);
#endif
#if defined rAFK_OnPlayerDisconnect
forward rAFK_OnPlayerDisconnect(playerid, reason);
#endif
#if defined rAFK_OnPlayerSpawn
forward rAFK_OnPlayerSpawn(playerid);
#endif
#if defined rAFK_OnPlayerUpdate
forward rAFK_OnPlayerUpdate(playerid);
#endif
public OnPlayerSpawn(playerid)
{
GetPlayerPos(playerid, rAFK_Player[playerid][rAfkX], rAFK_Player[playerid][rAfkY], rAFK_Player[playerid][rAfkZ]);
#if defined rAFK_OnPlayerSpawn
return rAFK_OnPlayerSpawn(playerid);
#else
return 1;
#endif
}
public OnPlayerConnect(playerid)
{
rAFK_Player[playerid][rAfkX] = -9999.0;
rAFK_Player[playerid][rAfkPTimer] = SetTimerEx("rAfk_PChecker", 1000, true, "i", playerid);
#if defined rAFK_OnPlayerConnect
return rAFK_OnPlayerConnect(playerid);
#else
return 1;
#endif
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
rAFK_Player[playerid][rAfkClickTicks] = GetTickCount();
#if defined rAFK_OnPlayerKeyStateChange
return rAFK_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
#else
return 1;
#endif
}
public OnPlayerDisconnect(playerid, reason)
{
KillTimer(rAFK_Player[playerid][rAfkPTimer]);
rAFK_Player[playerid][rAfkPTimer] = 0;
rAFK_Player[playerid][rAfkPTicks] = 0;
rAFK_Player[playerid][rAfkWarnTicks] = 0;
rAFK_Player[playerid][rAfkClickTicks] = 0;
rAFK_Player[playerid][rAfkPaused] = false;
rAFK_Player[playerid][rAfkAFK] = false;
rAFK_Player[playerid][rAfkX] = 0.0;
rAFK_Player[playerid][rAfkY] = 0.0;
rAFK_Player[playerid][rAfkZ] = 0.0;
#if defined rAFK_OnPlayerDisconnect
return rAFK_OnPlayerDisconnect(playerid, reason);
#else
return 1;
#endif
}
public OnPlayerUpdate(playerid)
{
rAFK_Player[playerid][rAfkPTicks] = GetTickCount();
#if defined rAFK_OnPlayerUpdate
return rAFK_OnPlayerUpdate(playerid);
#else
return 1;
#endif
}
forward rAfk_PChecker(playerid);
public rAfk_PChecker(playerid)
{
if(!rAFK_Player[playerid][rAfkPaused] && GetTickCount() > (rAFK_Player[playerid][rAfkPTicks]+1500) && rAFK_Player[playerid][rAfkX] != -9999.0)
{
if(GetPlayerState(playerid) != PLAYER_STATE_WASTED && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING && GetPlayerState(playerid) != PLAYER_STATE_NONE)
{
rAFK_Player[playerid][rAfkPaused] = true;
#if defined OnPlayerPause
OnPlayerPause(playerid);
#endif
}
}
if(IsPlayerInRangeOfPoint(playerid, RAFK_MAX_AFK_RANGE, rAFK_Player[playerid][rAfkX], rAFK_Player[playerid][rAfkY], rAFK_Player[playerid][rAfkZ]))
{
if(rAFK_Player[playerid][rAfkX] != -9999.0 && GetPlayerState(playerid) != PLAYER_STATE_WASTED && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING && GetPlayerState(playerid) != PLAYER_STATE_NONE)
{
if(rAFK_Player[playerid][rAfkWarnTicks] < RAFK_MAX_WAIT_TICKS)
{
rAFK_Player[playerid][rAfkWarnTicks]++;
}
else
{
rAFK_Player[playerid][rAfkAFK] = true;
#if defined OnPlayerAFK
OnPlayerAFK(playerid);
#endif
}
}
}
else
{
GetPlayerPos(playerid, rAFK_Player[playerid][rAfkX], rAFK_Player[playerid][rAfkY], rAFK_Player[playerid][rAfkZ]);
rAFK_Player[playerid][rAfkWarnTicks] = 0;
}
if( (rAFK_Player[playerid][rAfkAFK] && rAFK_Player[playerid][rAfkWarnTicks] != RAFK_MAX_WAIT_TICKS) || (GetTickCount() - rAFK_Player[playerid][rAfkClickTicks]) <= 500)
{
rAFK_Player[playerid][rAfkAFK] = false;
#if defined OnPlayerReturn
OnPlayerReturn(playerid);
#endif
}
if(rAFK_Player[playerid][rAfkPaused] && GetTickCount() < (rAFK_Player[playerid][rAfkPTicks]+1500))
{
rAFK_Player[playerid][rAfkPaused] = false;
#if defined OnPlayerResume
OnPlayerResume(playerid);
#endif
}
return 1;
}
stock bool:IsPlayerPaused(playerid)
return rAFK_Player[playerid][rAfkPaused];
stock bool:IsPlayerAFK(playerid)
return (rAFK_Player[playerid][rAfkWarnTicks] == RAFK_MAX_WAIT_TICKS);
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect rAFK_OnPlayerConnect
#if defined _ALS_OnPlayerDisconnect
#undef OnPlayerDisconnect
#else
#define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect rAFK_OnPlayerDisconnect
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn rAFK_OnPlayerSpawn
#if defined _ALS_OnPlayerUpdate
#undef OnPlayerUpdate
#else
#define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate rAFK_OnPlayerUpdate
#if defined _ALS_OnPlayerKeyStateChange
#undef OnPlayerKeyStateChange
#else
#define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange rAFK_OnPlayerKeyStateChange
@AmirSavand
Copy link

What's the difference between OnPlayerPause and OnPlayerAFK?

@RogueDrifter
Copy link
Author

RogueDrifter commented Oct 8, 2018

OnPlayerPause is when the player presses the ESC button, OnPlayerAFK is when the player doesn't move for a while.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment