Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3

Тема: AFK Система

  1. #1
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±

    AFK Система

    Здравствуйте. Подскажите пожалуйста хорошую, но простую AFK систему, с обычной проверкой, в АФК игрок или нет. Сделал систему, но она показывает АФК когда игрок просто стоит на месте. Т.е. если игрок в движении, все нормально. Буду очень благодарен.

  2. #2
    Аватар для BaBuIIIkaDrifteR
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.03.2014
    Адрес
    Ямайка
    Сообщений
    303
    Репутация:
    8 ±
    Проверка свернуто ли окошко samp.

    После incluide
    PHP код:
    #define AFK_WINDOW_TIME 1200// 1200 мс - время последнего обновления статуса с сервером.
    new AFK_window[MAX_PLAYERS]; 
    В public OnPlayerUpdate(playerid)
    PHP код:
    AFK_window[playerid] = GetTickCount(); 
    И сама проверка
    PHP код:
    if(GetTickCount() - AFK_window[playerid] > AFK_WINDOW_TIMESetPlayerChatBubble(playerid,"AFK",0xDD90FFFF,80.0,10000); 
    И удобный макрос для использования:
    PHP код:
    #define AFK(%0) (GetTickCount() - AFK_window[%0] > AFK_WINDOW_TIME) 
    Пример использования:
    PHP код:
    if(AFK(playerid)) SetPlayerChatBubble(playerid,"AFK",0xDD90FFFF,80.0,10000); 
    ip adress: В разработке:7777
    My Skype: Skype Phone
    [В]контакте: Рома Уруру
    Разработка: EnergyDRIFT©|2015

  3. #3
    Аватар для Gressie
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±
    Ко всем new:
    PHP код:
    new
        
    AFKTime[MAX_PLAYERS],
        
    bool:AFKCHECK[MAX_PLAYERS],
        
    Float:POSAFK[MAX_PLAYERS][2],
        
    Text3D:AFKTEXT[MAX_PLAYERS]; 
    OnPlayerConnect:
    PHP код:
        AFKCHECK[playerid] = false;
        
    AFKTime[playerid] = 0
    OnPlayerDisconnect:
    PHP код:
        if(AFKCHECK[playerid] == trueDelete3DTextLabel(AFKTEXT[playerid]), AFKCHECK[playerid] = false;
        
    AFKTime[playerid] = 0
    OnPlayerUpdate:
    PHP код:
        AFKTime[playerid] = 0;
        if(
    AFKCHECK[playerid] == true)
        {
            
    Delete3DTextLabel(AFKTEXT[playerid]);
            
    AFKCHECK[playerid] = false;
        } 
    В любой таймер в 1 сек:
    PHP код:
    AFKTimer(playerid); 
    В конец мода:
    PHP код:
    stock AFKTimer(playerid)
    {
        new 
    FloatposXFloatposYFloatposZafk[30];
        
    GetPlayerPos(playeridposXposYposZ);
        if(
    posX == POSAFK[playerid][0] && posY == POSAFK[playerid][1])
        {
            
    AFKTime[playerid]++;
            if(
    AFKTime[playerid] > 500 && PlayerInfo[playerid][pAdmin] < 1)
            {
                if(
    AFKCHECK[playerid] == true)
                {
                    
    Delete3DTextLabel(AFKTEXT[playerid]);
                    
    AFKCHECK[playerid] = false;
                }
                
    SendClientMessage(playeridCOLOR_LIGHTRED,"Вы были кикнуты за долгое пребывание в режиме (AFK)");
                
    KickEx(playerid);
                return 
    true;
            }
            if(
    AFKCHECK[playerid] == true)
            {
                
    format(afksizeof(afk),"Игрок на паузе: %d секунд.",AFKTime[playerid]);
                
    Update3DTextLabelText(AFKTEXT[playerid], COLOR_GRAYafk);
                return 
    true;
            }
            if(
    AFKTime[playerid] > && AFKCHECK[playerid] == false)
            {
                   
    format(afksizeof(afk),"Игрок на паузе: %d секунд.",AFKTime[playerid]);
                
    AFKTEXT[playerid] = Create3DTextLabel(afkCOLOR_GRAY0.000.0010000.020.00);
                
    Attach3DTextLabelToPlayer(AFKTEXT[playerid], playerid0.00.00.3);
                
    AFKCHECK[playerid] = true;
                return 
    true;
            }
        }
        else
        {
            if(
    AFKCHECK[playerid] == trueDelete3DTextLabel(AFKTEXT[playerid]), AFKCHECK[playerid] = false;
            if(
    AFKTime[playerid] > 0AFKTime[playerid] = 0;
            
    POSAFK[playerid][0] =  posX;
            
    POSAFK[playerid][1] = posY;
        }
        return 
    true;

    Для использования:
    PHP код:
    if (AFKTime[giveplayerid] > 0) return SendClientMessage(playeridCOLOR_GRAD1"Данный игрок в АФК."); 

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •