Вопросы

NO2037
Активный

Как проверить, что игрок стоит в AFK? Где-то читал что в OnPlayerUpdate, но не до конца понял как именно. Спасибо.

Поделиться сообщением


Ссылка на сообщение

3 ответа на этот вопрос

  • 0
Anton_Urchenko
Освоившийся

паблик OnPlayerUpdate не вызывается когда игрок стоит в АФК, чтобы отслеживать афк ли игрок, нужно создать таймер

 

SetTimer("SecondTimer"1000true);

в таймеры вызываем метод SecondTimer(), который будет срабатывать каждую секунду, в нем мы будем увеличивать перменную отвечающую за кол-во секунд проведенных в АФК, например вот так :

for(new i = 0; i != MAX_PLAYERS; i++)
{
    if(IsPlayerConnected(i)) SetPVarInt(i, "IsPlayerAFK", GetPVarInt(i, "IsPlayerAFK") + 1);
}
return 1;

таким образом каждую секунду значение в его личной pvar переменной "IsPlayerAFK" значение будет увеличиваться на 1.

а в паблике OnPlayerUpdate() мы это значение будем сбрасывать(т.к. этот паблик работает только когда игрок не АФК)

например вот так :

if(GetPVarInt(playerid, "IsPlayerAFK") > 1)  //это сработает если число секунд которое игрок был в афк(переменная IsPlayerAFK больше 1
{
    new string[30];
    format(string, sizeof(string), "Вы были АФК %d секунд(ы).", GetPVarInt(playerid,"IsPlayerAFK"));
    SCM(playerid, COLOR_LIGHT_BLUE, string);
}
SetPVarInt(playerid, "IsPlayerAFK"0); // иначе мы устанавливаем это значение в 0

 

Отредактировано пользователем Cawfee

Заметка от Cawfee , создано

Все же стоит код заключать в соответствующий тег "Код", чтобы была и табуляция, и подсветка.

Поделиться сообщением


Ссылка на сообщение
  • 0
Cawfee
Великий Гуру

@Anton_Urchenko, коль уж вы себя позиционируете как человека, желающего чему-то научиться, влезу в диалог.

 

1. Не повторяйте ошибки неучей: все, что вы можете объявить, - это функцию и переменную. И функция, и переменная могут быть объявлены с маркерами, определяющими особенности размещения в памяти и использования. И маркер public может быть применен не только к функциям, но и переменным, ровно как и stock, и stock. Ниже примеры.

 

  открыть спойлер

 

2. Практика показывает, что лучше создавать не один таймер, в котором осуществлять перебор всех игроков для обработки ежесекундных действий, а создавать для каждого игрока персональные таймеры (SetTimerEx). Возможно, конечно, вы не использовали это, чтобы не усложнять представленную вами логику. Тем не менее лишний раз акцентирую на этом внимание.

3. Сама по себе идея перебора всех игроков из диапазона [0; MAX_PLAYERS] с проверкой, подключен ли рассматриваемый игрок, также неудачна: используйте итераторы foreach. Опять же, возможно, вы не прибегали к этому, чтобы не усложнять пример.

Поделиться сообщением


Ссылка на сообщение
  • 0
Anton_Urchenko
Освоившийся

хз как удалить сообщение

Отредактировано пользователем Anton_Urchenko

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • lisicaf
      От lisicaf
      Всех приветствую и заранее спасибо за любую оказанную помощь.
      Суть: Аризона выпускает новое обновление в котором меняет CEF доната(скрин ниже), каким образом можно его скопировать и перенести к себе в мод Аризоны?