SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 26/12/2014, 10:37 AM   #1
AlexeyTrekkkk
Big Clucker
 
Join Date: Jun 2014
Location: Rostov-On-Don
Posts: 77
Reputation: 0
Default Проверка на АФК

Добрый день, у меня возникла проблема, делаю систему АФК если игрок нажал на ESC.
Вот код:
PHP Code:
TimerAFK[playerid] = SetTimerEx("AFKTimer"1000true"i"playerid); 
это в onplayerconnect
далее, я создаю паблик
[PHP]fCallBack::AFKTimer(playerid) //закончил работу
PHP Code:
fCallBack::AFKTimer(playerid//закончил работу
{
        
AFK[playerid]++;
        if(
AFK[playerid] == 5)
        {
            
afkplayer[playerid] = Create3DTextLabel("{66cc33}АФК:{FFFFFF} 00:00:00", -130.040.010.040.00);
            
Attach3DTextLabelToPlayer(afkplayer[playerid], playerid0.00.00.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], -1string);

            if(
secondsf[playerid] >= 60) { secondsf[playerid] = 0minutesf[playerid]++; }
            if(
minutesf[playerid] >= 59) { Kick(playerid); }
            
secondsf[playerid]++;
        }
        if(
AFK[playerid] < 0)
        {
            
Delete3DTextLabel(afkplayer[playerid]);
            
secondsf[playerid] = 0;
            
minutesf[playerid] = 0;
        }
        return 
1;

В OnPlayerUpdate AFK[playerid] = -3; когда игрок уходит в AFK то это прекращается и AFK[playerid] начинает нормально прибавляться, но 3д текст появляется на 1 секунду и снова убирается почему то, а бывает появляется первый раз нормально а потом нет. Подскажите пожалуйста, в чем проблема.
AlexeyTrekkkk is offline   Reply With Quote
Old 26/12/2014, 10:48 AM   #2
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Проверка на АФК

Для начала "else fi".
И зачем первый раз показывать секунды если потом ты из стираешь?
А не проще запомнить время когда игрок вошел в АФК и просто показывать разницу от текущего, нежели каждый раз их прибавлять в двух переменных?

По коду самих текстов все вроде хорошо, лимит не превышен?
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 26/12/2014, 11:09 AM   #3
AlexeyTrekkkk
Big Clucker
 
Join Date: Jun 2014
Location: Rostov-On-Don
Posts: 77
Reputation: 0
Default Re: Проверка на АФК

лимит не превышен. поставил else if, стираю их чтобы при выходе из АФК и последующем входе в него, счет секунд начинался по новой. Вот сейчас код:
PHP Code:
fCallBack::AFKTimer(playerid//çàêîí÷èë ðàáîòó
{
        
AFK[playerid]++;
        if(
AFK[playerid] == 5)
        {
            
oldtime[playerid] = gettime();
            
afkplayer[playerid] = Create3DTextLabel("{66cc33}ÀÔÊ:{FFFFFF} 00:00:00", -130.040.010.040.00);
            
Attach3DTextLabelToPlayer(afkplayer[playerid], playerid0.00.00.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], -1string);
        }
        else if(
AFK[playerid] < 0)
        {
            
oldtime[playerid] = 0;
            
Delete3DTextLabel(afkplayer[playerid]);
        }
        return 
1;

Проблема та же осталась. При этом, если в АФК войдут два игрока, и один из него потом выйдет, то таймер на игроке в АФК работает, и текст тоже.
AlexeyTrekkkk is offline   Reply With Quote
Old 26/12/2014, 11:48 AM   #4
long76
Big Clucker
 
Join Date: Aug 2013
Posts: 152
Reputation: 1
Default Re: Проверка на АФК

так... определить афк игрок или нет можно так и не надо ничего выдумывать.
pawn Code:
глобальные
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;
}
long76 is offline   Reply With Quote
Old 26/12/2014, 01:34 PM   #5
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Проверка на АФК

Quote:
Originally Posted by long76 View Post
так... определить афк игрок или нет можно так и не надо ничего выдумывать.
Прежде чем отвечать нужно читать тему, а не только заголовок, а то можно сесть в лужу!
Что с вами и произошло.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 26/12/2014, 01:51 PM   #6
AlexeyTrekkkk
Big Clucker
 
Join Date: Jun 2014
Location: Rostov-On-Don
Posts: 77
Reputation: 0
Default Re: Проверка на АФК

Stepashka, есть идеи в чем еще может быть проблема?
AlexeyTrekkkk is offline   Reply With Quote
Old 26/12/2014, 01:57 PM   #7
Jon_De
High-roller
 
Join Date: Mar 2011
Location: ru
Posts: 1,246
Reputation: 21
Default Re: Проверка на АФК

что за говнокоды? совсем чтоль?

Code:
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) { /* АФК */}

Last edited by Jon_De; 26/12/2014 at 10:12 PM.
Jon_De is offline   Reply With Quote
Old 26/12/2014, 03:48 PM   #8
AlexeyTrekkkk
Big Clucker
 
Join Date: Jun 2014
Location: Rostov-On-Don
Posts: 77
Reputation: 0
Default Re: Проверка на АФК

Но у меня ведь то же самое.
AlexeyTrekkkk is offline   Reply With Quote
Old 26/12/2014, 05:12 PM   #9
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,763
Reputation: 142
Default Re: Проверка на АФК

Перенеси Delete3DTextLabel(afkplayer[playerid]); в OnPlayerUpdate так:
pawn Code:
if (AFK[playerid] != -3 && !afkplayer[playerid]) {
    Delete3DTextLabel(afkplayer[playerid]);
    afkplayer[playerid] = 0;
}
AFK[playerid] = -3;
Соответственно убери третий блок из своего события.
pawn Code:
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;
}
По идеи должно работать, косяков тут нет.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 26/12/2014, 05:59 PM   #10
AlexeyTrekkkk
Big Clucker
 
Join Date: Jun 2014
Location: Rostov-On-Don
Posts: 77
Reputation: 0
Default Re: Проверка на АФК


причем, они даже не в афк.
AlexeyTrekkkk is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Проверка на АФК в авто Bren Русский/Russian 10 12/10/2014 07:16 AM
Проверка функции serpip Русский/Russian 2 11/10/2013 07:22 PM
Проверка на чекпоинт ? Mexanizm93 Русский/Russian 8 11/09/2013 10:30 PM
Проверка аккаунтов 7-Zip Русский/Russian 8 07/04/2012 05:12 PM


All times are GMT. The time now is 07:49 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.