if(IsPlayerConnected(i)) { if(AFK[i] == 1) { GetPlayerName(i, sendername, sizeof(sendername)); new Float:time = AFKTime[i]; format(string, 256, "{FF6347}%s (%d) {FFFFFF}| Afk vrijeme:{FF6347}%.1fmin", sendername, i,time); SCM(playerid, COLOR_WHITE, string); } }
AFK[i] = 1; AfkLabel[i] = Create3DTextLabel("[AFK - Nisam u igrici!]",0xFF000099,0,0,0,50,-1,1); Attach3DTextLabelToPlayer(AfkLabel[i], i, 0,0,0);
AfkLabel[i] = Create3DTextLabel("[AFK - Nisam u igrici %.1fmin!]",0xFF000099,0,0,0,50,-1,1,time);
#undef MAX_PLAYERS #define MAX_PLAYERS 32 //The player capacity of your server #define COLOR_GREEN 0x33AA33AA new afkTime[MAX_PLAYERS]; forward oneSecond(); public oneSecond() { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i) && !IsPlayerNPC(i)) { //Display AFK label when the player has been away for at least 30 seconds if(afkTime[i] >= 30) { new caption[32]; format(caption, sizeof(caption), "AFK - %s seconds.", afkTime[i]); SetPlayerChatBubble(i, caption, COLOR_GREEN, 20.0, 1500); } afkTime[i]++; } } return 1; } public OnGameModeInit() { SetTimer("oneSecond", 1000, true); return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { afkTime[playerid] = 0; return 1; } public OnPlayerConnect(playerid) { afkTime[playerid] = 0; return 1; }
Here's a possible solution using OnPlayerKeyStateChange to detect inactivity.
Note that the SetPlayerChatBubble() expiretime parameter overlaps with the one second timer by 500ms, this is to ensure that the caption remains visible regardless of other factors such as lag. Code:
#undef MAX_PLAYERS #define MAX_PLAYERS 32 //The player capacity of your server #define COLOR_GREEN 0x33AA33AA new afkTime[MAX_PLAYERS]; forward oneSecond(); public oneSecond() { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i) && !IsPlayerNPC(i)) { //Display AFK label when the player has been away for at least 30 seconds if(afkTime[i] >= 30) { new caption[32]; format(caption, sizeof(caption), "AFK - %s seconds.", afkTime[i]); SetPlayerChatBubble(i, caption, COLOR_GREEN, 20.0, 1500); } afkTime[i]++; } } return 1; } public OnGameModeInit() { SetTimer("oneSecond", 1000, true); return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { afkTime[playerid] = 0; return 1; } public OnPlayerConnect(playerid) { afkTime[playerid] = 0; return 1; } |
Here's a possible solution using OnPlayerKeyStateChange to detect inactivity.
Note that the SetPlayerChatBubble() expiretime parameter overlaps with the one second timer by 500ms, this is to ensure that the caption remains visible regardless of other factors such as lag. Code:
#undef MAX_PLAYERS #define MAX_PLAYERS 32 //The player capacity of your server #define COLOR_GREEN 0x33AA33AA new afkTime[MAX_PLAYERS]; forward oneSecond(); public oneSecond() { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i) && !IsPlayerNPC(i)) { //Display AFK label when the player has been away for at least 30 seconds if(afkTime[i] >= 30) { new caption[32]; format(caption, sizeof(caption), "AFK - %s seconds.", afkTime[i]); SetPlayerChatBubble(i, caption, COLOR_GREEN, 20.0, 1500); } afkTime[i]++; } } return 1; } public OnGameModeInit() { SetTimer("oneSecond", 1000, true); return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { afkTime[playerid] = 0; return 1; } public OnPlayerConnect(playerid) { afkTime[playerid] = 0; return 1; } |
he want AFK, not inactivity, OnPlayerUpdate return 0 when player is AFK.
whatever, give us the timer.. i can't understand why you send client messages when he is AFK ^_^ |
Not counting my seconds, rather than minutes -.-
How to make it count first minute and then a second? |