if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
if(IsPlayerInAnyVehicle(playerid))
stock AFKSystemTime(i)
{
if(IsPlayerConnected(i))
{
new string[200];
new playersip[120];
new sendername[MAX_PLAYER_NAME];
GetPlayerName(i, sendername, sizeof(sendername));
GetPlayerIp(i, playersip, sizeof(playersip));
if(CheckAFK1[i] == CheckAFK0[i])
{
if(AFKSpawn[i] == 1)
{
if(GetPlayerState(i) == PLAYER_STATE_ONFOOT)//Плюсуется только когда игрок на ногах
CheckAFK2[i] = true;
}
}
CheckAFK1[i] = CheckAFK0[i];
if(CheckAFK2[i] == 1)
{
AccountAFK[i] ++;
}
if(AccountAFK[i] > 3)
{
format(string, sizeof(string), "АФК: {FFA500}%s", Convert(AccountAFK[i]));
SetPlayerChatBubble(i, string, 0xFFFFFFFF, 12.0, 1200);
}
}
return 1;
}
if(IsPlayerConnected(playerid)) CheckAFK0[playerid] ++;
if(AccountAFK[playerid] > -2)
{
if(AccountAFK[playerid] > 3)
{
format(string, sizeof(string), "Вы находились в АФК: {FFA500}%s", Convert(AccountAFK[playerid]));
SendClientMessage(playerid, 0xFFFFFFFF, string);
}
AccountAFK[playerid] = 0;
CheckAFK2[playerid] = 0;
}
глобальные
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;
}
forward BlaBlaBla();
new bool:afkcheck[MAX_PLAYERS];
new bool:afk[MAX_PLAYERS];
public OnGameModeInit()
{
SetTimer("BlaBlaBla", 1000, true);
return true;
}
public OnPlayerUpdate(playerid)
{
afkcheck[playerid] = false;
return true;
}
public BlaBlaBla()
{
for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
afk[i] = afkcheck[i];
afkcheck[i] = true;
}
}
if(afk[playerid]) // игрок находится в AFK
if(!afk[playerid]) // игрок не AFK
при онлайне 100 человек в OnPlayerUpdate функция GetTickCount() вызовется 2000 раз за 1 секунду
|
Судя по всему, третий класс вас ничему не научил. Какая разница какой онлайн, если rate означает время (в мс) обновления инфы об игроке в OnPlayerUpdate при движении? Хотите сказать, что обновление инфы отсылается по очереди каждому игроку? Таким образом, GetTickCount вызовется в OnPlayerUpdate 1 раз! Это вызов OnPlayerUpdate произойдёт 25 раз за секунду (в движении). В простое - 1 раз.
|