TimerAFK[playerid] = SetTimerEx("AFKTimer", 1000, true, "i", playerid);
fCallBack::AFKTimer(playerid) //закончил работу
{
AFK[playerid]++;
if(AFK[playerid] == 5)
{
afkplayer[playerid] = Create3DTextLabel("{66cc33}АФК:{FFFFFF} 00:00:00", -1, 30.0, 40.0, 10.0, 40.0, 0);
Attach3DTextLabelToPlayer(afkplayer[playerid], playerid, 0.0, 0.0, 0.1);
printf("%d выполнился",playerid);
}
if(AFK[playerid] > 5)
{
new string[35];
format(string,sizeof(string), "{66cc33}АФК:{FFFFFF} %02d:%02d",minutesf[playerid], secondsf[playerid]);
Update3DTextLabelText(afkplayer[playerid], -1, string);
if(secondsf[playerid] >= 60) { secondsf[playerid] = 0, minutesf[playerid]++; }
if(minutesf[playerid] >= 59) { Kick(playerid); }
secondsf[playerid]++;
}
if(AFK[playerid] < 0)
{
Delete3DTextLabel(afkplayer[playerid]);
secondsf[playerid] = 0;
minutesf[playerid] = 0;
}
return 1;
}
fCallBack::AFKTimer(playerid) //çàêîí÷èë ðàáîòó
{
AFK[playerid]++;
if(AFK[playerid] == 5)
{
oldtime[playerid] = gettime();
afkplayer[playerid] = Create3DTextLabel("{66cc33}ÀÔÊ:{FFFFFF} 00:00:00", -1, 30.0, 40.0, 10.0, 40.0, 0);
Attach3DTextLabelToPlayer(afkplayer[playerid], playerid, 0.0, 0.0, 0.1);
printf("%d âûïîëíèëñÿ",playerid);
}
else if(AFK[playerid] > 5)
{
new string[35];
format(string,sizeof(string), "{66cc33}ÀÔÊ:{FFFFFF} %02d",gettime() - oldtime[playerid];);
Update3DTextLabelText(afkplayer[playerid], -1, string);
}
else if(AFK[playerid] < 0)
{
oldtime[playerid] = 0;
Delete3DTextLabel(afkplayer[playerid]);
}
return 1;
}
глобальные
new timeafk[MAX_PLAYERS];
new timelast[MAX_PLAYERS];
new afk[MAX_PLAYERS];
в OnPlayerConnect
afk[playerid]=0;
в паблик который обновляется каждую 1 секунду
if(GetTickCount()-timelast[i] >= 2000)
{
afk[i]=1;
timeafk[i]++;
new str[64];
format(str,64,"[AFK] %s",conv(timeafk[i]));
SetPlayerChatBubble(i,str,0x33CC00FF,15.0,1200);
}
else if(GetTickCount()-timelast[i] < 2000)
{
afk[i]=0;
}
в OnPlayerUpdate
timelast[playerid] = GetTickCount();
stock conv(sec)
{
new cmin = floatround(sec/60,floatround_tozero);
new str[64];
new minsec = sec-(cmin*60);
if(minsec < 10)
{
format(str,64,"%d:0%d",cmin,minsec);
}
else format(str,64,"%d:%d",cmin,minsec);
return str;
}
так... определить афк игрок или нет можно так и не надо ничего выдумывать.
|
new AFK_Timer[MAX_PLAYERS]; public OnPlayerUpdate(playerid) { AFK_Timer[playerid] = 0; return 1; } // В таймер на 1 секунду new str[18]; for(new i; i < MAX_PLAYERS; i++) { if(!IsPlayerConnected(i)) continue; if(++AFK_Timer[i] > 4) { format(str, sizeof(str), "АФК %d сек", AFK_Timer[i]-4); SetPlayerChatBubble(i, str, -1, 10.0, 1500); } } // Проверка на афк игрока if(AFK_Timer[playerid] > 4) { /* АФК */}
if (AFK[playerid] != -3 && !afkplayer[playerid]) {
Delete3DTextLabel(afkplayer[playerid]);
afkplayer[playerid] = 0;
}
AFK[playerid] = -3;
fCallBack::AFKTimer(playerid) {
AFK[playerid]++;
if (AFK[playerid] == 5) {
oldtime[playerid] = gettime();
afkplayer[playerid] = Create3DTextLabel("{66cc33}АФК:{FFFFFF} 00:00", -1, 30.0, 40.0, 10.0, 40.0, 0);
Attach3DTextLabelToPlayer(afkplayer[playerid], playerid, 0.0, 0.0, 0.1);
} else if (AFK[playerid] > 5) {
new string[35], time = gettime() - oldtime[playerid];
format(string,sizeof(string), "{66cc33}АФК:{FFFFFF} %02.f:%02.f", time/60, time%60);
Update3DTextLabelText(afkplayer[playerid], -1, string);
}
return 1;
}
format(string,sizeof(string), "{66cc33}АФК:{FFFFFF} %02.0f:%02.0f", float(time/60), float(time%60));
у него не рабочий вариант, да и таймер работает даже когда игрок не АФК.
|