SA-MP Forums Archive
Проверка на АФК в авто - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Проверка на АФК в авто (/showthread.php?tid=541197)



Проверка на АФК в авто - Bren - 10.10.2014

Здравствуйте, у меня возникла такая проблема со системой AFK.
Когда игрок содиться в автомобиль над ним появляеться надпись что он в AFK и вот не подскажите как сделать проверку на авто чтобы в авто не было ложных вызова.
Если игрок находится в авто и он зашел в афк и над ним должна появиться надпись
Варианты как:
PHP код:
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
if(
IsPlayerInAnyVehicle(playerid)) 
не предлагать!

немного кода:
PHP код:
stock AFKSystemTime(i)
{
    if(
IsPlayerConnected(i))
    {
        new 
string[200];
        new 
playersip[120];
        new 
sendername[MAX_PLAYER_NAME];
        
GetPlayerName(isendernamesizeof(sendername));
        
GetPlayerIp(iplayersipsizeof(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(stringsizeof(string), "АФК: {FFA500}%s"Convert(AccountAFK[i]));
            
SetPlayerChatBubble(istring0xFFFFFFFF12.01200);
        }
    }
    return 
1;




Re: Проверка на АФК в авто - long76 - 10.10.2014

как проверяйте что игрок афк? в OnPlayerUpdate?


Re: Проверка на АФК в авто - Bren - 10.10.2014

PHP код:
if(IsPlayerConnected(playerid)) CheckAFK0[playerid] ++;
    if(
AccountAFK[playerid] > -2)
    {
        if(
AccountAFK[playerid] > 3)
        {
            
format(stringsizeof(string), "Вы находились в АФК: {FFA500}%s"Convert(AccountAFK[playerid]));
            
SendClientMessage(playerid0xFFFFFFFFstring);
        }
        
AccountAFK[playerid] = 0;
        
CheckAFK2[playerid] = 0;
    } 



Re: Проверка на АФК в авто - long76 - 10.10.2014

что я парюсь кину как у меня попробуй мож тебе пойдет.
pawn Код:
глобальные
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;
}



Re: Проверка на АФК в авто - SoNikMells - 10.10.2014

Простенькая проверка на AFK:
PHP код:
forward BlaBlaBla();
new 
bool:afkcheck[MAX_PLAYERS];
new 
bool:afk[MAX_PLAYERS];
public 
OnGameModeInit()
{
    
SetTimer("BlaBlaBla"1000true);
    return 
true;
}
public 
OnPlayerUpdate(playerid)
{
    
afkcheck[playerid] = false;
    return 
true;
}
public 
BlaBlaBla()
{
    for(new 
i!= MAX_PLAYERSi++) if(IsPlayerConnected(i))
    {
        
afk[i] = afkcheck[i];
        
afkcheck[i] = true;
    }
}
    if(
afk[playerid]) // игрок находится в AFK
    
if(!afk[playerid]) // игрок не AFK 
.
long76, при онлайне 100 человек в OnPlayerUpdate функция GetTickCount() вызовется 2000 раз за 1 секунду
.
.



Re: Проверка на АФК в авто - OKStyle - 11.10.2014

Quote:
Originally Posted by SoNikMells
Посмотреть сообщение
при онлайне 100 человек в OnPlayerUpdate функция GetTickCount() вызовется 2000 раз за 1 секунду
Тесты покажете?


Re: Проверка на АФК в авто - -Stranger- - 11.10.2014

OKStyle, зачем тесты? Третий класс, умножение и деление
Если rate = 40, то ((1000 / 40) * 100) = 2500.


Re: Проверка на АФК в авто - OKStyle - 11.10.2014

Судя по всему, третий класс вас ничему не научил. Какая разница какой онлайн, если rate означает время (в мс) обновления инфы об игроке в OnPlayerUpdate при движении? Хотите сказать, что обновление инфы отсылается по очереди каждому игроку? Таким образом, GetTickCount вызовется в OnPlayerUpdate 1 раз! Это вызов OnPlayerUpdate произойдёт 25 раз за секунду (в движении). В простое - 1 раз.


Re: Проверка на АФК в авто - Jon_De - 11.10.2014

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Судя по всему, третий класс вас ничему не научил. Какая разница какой онлайн, если rate означает время (в мс) обновления инфы об игроке в OnPlayerUpdate при движении? Хотите сказать, что обновление инфы отсылается по очереди каждому игроку? Таким образом, GetTickCount вызовется в OnPlayerUpdate 1 раз! Это вызов OnPlayerUpdate произойдёт 25 раз за секунду (в движении). В простое - 1 раз.
25 раз в секунду для каждого игрока

а вообще, ничего не будет если в OnPlayerUpdate что то пихать, следите за GetServerTickRate


Re: Проверка на АФК в авто - OKStyle - 12.10.2014

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
25 раз в секунду для каждого игрока
Я и написал, что для каждого. Обновление происходит единовременно или по очереди для каждого игрока? Если бы была очередь, то синхронизация была бы ужасной, поэтому единовременно.