Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Пользователь
Регистрация
15 Авг 2024
Сообщения
37
Доброй ночи, форумчане.
Вопрос такой, каким образом можно выводить игроку инфу о том сколько он простоял в АФК, во время того, как он выйдет с него.
Типа, прикол в чем, игрок выходит с АФК - срабатывает OnPlayerUpdate, и получается, что если выводить, сколько игрок в афк, то это сообщение спамится будет.

Снимок экрана 2025-02-01 044045.pngСнимок экрана 2025-02-01 044001.png
 
Пользователь
Регистрация
15 Авг 2024
Сообщения
37
@gemfwrk, то что я прикрепил - попытка реализовать то, что хочу
и, даже если и вижу, что тут бесконечный цикл идет, то не вижу, как можно по другому все это реализовать, дак поэтому сюда и обратился
 
Пользователь
Регистрация
15 Авг 2024
Сообщения
37
@gemfwrk, думал, ты и делаешь акцент, что подобный код у меня как ошибка идет.
сейчас так сделал, работает, но с правильностью отображения что-то не то, тут думаю разберусь.

еще, хотел спросить, во время авторизации/регистрации сразу регает афк, а после спавна пишет якобы с афк вышел.
тут как лучше стоит сделать? обзавестить новым таймером, который будет активировать афк счетчик, или, лучше будет пвару значение определенное присвоить после авторизации/регистрации, и потом проверку делать, то ли значение в пваре
 
Создатель WayDev
Команда форума
Администратор
Регистрация
13 Мар 2022
Сообщения
924
Проверка на АФК сама по себе некорректная.

Решение, что дал тебе @gemfwrk - это вообще полнейший бред.
В OnPlayerUpdate надо постоянно обнулять переменную PlayerAFK, если статус игрока меняется.
Самый легкий вариант сделать корректную систему АФК:

Pawn:
// переменные
new PlayerAFK[MAX_PLAYERS];

// ежесекундный таймер
forward SecondTimer(); // тут уже с playerid или без - индивидуально
public SecondTimer() {
    foreach(new i: Player) { // или же через цикл при помощи функции GetPlayerPoolSize
        PlayerAFK[i] ++;
        if(PlayerAFK[i] >= 3) {
            // SetPlayerChatBubble и т.д.
        }
    }
    return true;
}

// паблик, отвечающий за обновление статуса игрока
public OnPlayerUpdate(playerid) {
    if(IsPlayerConnected(playerid)) // проверяем, подключен ли игрок (необязательно)
        if(PlayerAFK[playerid]) PlayerAFK[playerid] = 0; // обновляем переменную, если статус игрока меняется
  
    return true;
}

Есть вариант еще сделать при помощи pvar'ов, но это уже лишний гемор.
 
Сверху