#include <a_samp>
#include <zcmd>
new PlayerIsAfk[MAX_PLAYERS],
PlayerAfkTime[MAX_PLAYERS],
OldVW[MAX_PLAYERS],
Text:Afk[MAX_PLAYERS][5],
Float:OldPos[MAX_PLAYERS][4];
public OnGameModeInit()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
Afk[i][0] = TextDrawCreate(641.555541, 1.500000, "usebox");
TextDrawLetterSize(Afk[i][0], 0.000000, 49.405799);
TextDrawTextSize(Afk[i][0], -2.000000, 0.000000);
TextDrawAlignment(Afk[i][0], 1);
TextDrawColor(Afk[i][0], 0);
TextDrawUseBox(Afk[i][0], true);
TextDrawBoxColor(Afk[i][0], 151);
TextDrawSetShadow(Afk[i][0], 0);
TextDrawSetOutline(Afk[i][0], 0);
TextDrawBackgroundColor(Afk[i][0], 128);
TextDrawFont(Afk[i][0], 0);
Afk[i][1] = TextDrawCreate(641.555541, 137.393341, "usebox");
TextDrawLetterSize(Afk[i][1], 0.000000, 5.656665);
TextDrawTextSize(Afk[i][1], -2.000000, 0.000000);
TextDrawAlignment(Afk[i][1], 1);
TextDrawColor(Afk[i][1], 0);
TextDrawUseBox(Afk[i][1], true);
TextDrawBoxColor(Afk[i][1], 102);
TextDrawSetShadow(Afk[i][1], 0);
TextDrawSetOutline(Afk[i][1], 0);
TextDrawFont(Afk[i][1], 0);
Afk[i][2] = TextDrawCreate(641.555541, 235.455551, "usebox");
TextDrawLetterSize(Afk[i][2], 0.000000, 6.707531);
TextDrawTextSize(Afk[i][2], -2.000000, 0.000000);
TextDrawAlignment(Afk[i][2], 1);
TextDrawColor(Afk[i][2], 0);
TextDrawUseBox(Afk[i][2], true);
TextDrawBoxColor(Afk[i][2], 102);
TextDrawSetShadow(Afk[i][2], 0);
TextDrawSetOutline(Afk[i][2], 0);
TextDrawFont(Afk[i][2], 0);
Afk[i][3] = TextDrawCreate(245.333282, 189.155563, "RETOUR");
TextDrawLetterSize(Afk[i][3], 1.003333, 4.288000);
TextDrawAlignment(Afk[i][3], 1);
TextDrawColor(Afk[i][3], -1);
TextDrawSetShadow(Afk[i][3], 0);
TextDrawSetOutline(Afk[i][3], 1);
TextDrawBackgroundColor(Afk[i][3], 51);
TextDrawFont(Afk[i][3], 2);
TextDrawSetProportional(Afk[i][3], 1);
TextDrawSetSelectable(Afk[i][3], 1);
Afk[i][4] = TextDrawCreate(204.888992, 23.395574, "Vous кtes en AFK");
TextDrawLetterSize(Afk[i][4], 0.781110, 2.729955);
TextDrawAlignment(Afk[i][4], 1);
TextDrawColor(Afk[i][4], -1);
TextDrawSetShadow(Afk[i][4], 0);
TextDrawSetOutline(Afk[i][4], 1);
TextDrawBackgroundColor(Afk[i][4], 51);
TextDrawFont(Afk[i][4], 3);
TextDrawSetProportional(Afk[i][4], 1);
}
return 1;
}
public OnPlayerConnect(playerid)
{
SetTimerEx("OneMinuteTimer",10000,1,"i",playerid);
return 1;
}
stock SetPlayerAfk(playerid)
{
PlayerIsAfk[playerid] = 1;
PlayerAfkTime[playerid] = 0;
OldVW[playerid] = GetPlayerVirtualWorld(playerid);
TogglePlayerControllable(playerid,0);
for(new i = 0; i < 5; i++)
TextDrawShowForPlayer(playerid, Afk[playerid][i]);
SelectTextDraw(playerid, 0xA3B4C5FF);
return 1;
}
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
if(clickedid == Afk[playerid][3])
{
for(new i = 0; i < 5; i++)
TextDrawHideForPlayer(playerid, Afk[playerid][i]);
PlayerIsAfk[playerid] = 0;
PlayerAfkTime[playerid] = 0;
SetPlayerVirtualWorld(playerid,OldVW[playerid]);
TogglePlayerControllable(playerid,1);
CancelSelectTextDraw(playerid);
return 1;
}
return 1;
}
public OneMinuteTimer(playerid)
{
if(PlayerIsAfk[playerid] == 1)
{
return 1;
}
if(PlayerAfkTime[playerid] == 8)
{
SetPlayerAfk(playerid);
return 1;
}
new Float:Pos[3];
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
if(IsPlayerInRangeOfPoint(playerid,3.0,OldPos[playerid][0],OldPos[playerid][1],OldPos[playerid][2]))
{
PlayerAfkTime[playerid]++;
return 1;
}
PlayerAfkTime[playerid] = 0;
OldPos[playerid][0] = Pos[0];
OldPos[playerid][1] = Pos[1];
OldPos[playerid][2] = Pos[2];
return 1;
}
Have a variable to toggle whether the player is AFK or not and when the timer's callback is executed, if the player is AFK skip it. If the timer is global and you use a player loop in it, use continue; else if you used SetTimerEx, just return a value before setting the score.
|
Use timestamps. Check if the player has been active for 1 hour and if so give him the score.
|
What if the player just interact in the server for 5 minutes decides to switch to some xxx and then come back an hour later to get his score?
|