Question

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

Share this post


Link to post

3 answers to this question

  • 0

паблик 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

 

Edited by Cawfee

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

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

Share this post


Link to post
  • 0

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

 

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

 

Спойлер

/*
    глобальная переменная
    область видимости ограничена одним файлом
    (доступ к переменной возможен только из этого файла)
*/

static var = 0;
static const var = 0// аналогично, но нельзя изменить значение

static stock var = 0// если переменная не используется, компилятор ее выбросит
static const stock var = 0// аналогично

/*
    глобальная переменная
    доступ к переменной возможен из любой точки ниже объявления данной переменной
    в примерах ниже показано, что new можно опускать
*/

new var = 0;
new stock var = 0// если переменная не используется, компилятор ее выбросит
stock var = 0// то же самое

new const var = 0// аналогично, но нельзя изменить значение
const var = 0// то же самое
const stock var = 0// то же самое

/*
    глобальная публичная переменная
    обратиться к переменной можно из фильтрскриптов
*/

new public var = 0;
new public stock var = 0// если переменная не используется, компилятор ее выбросит
new public const var = 0// переменную нельзя изменить
new public const stock var = 0;

public var = 0// ключевое слово new можно упускать
public const var = 0;
public const stock var = 0;

/*
    статические функции
*/

static someFunc() {
    // доступ к функции возможен только из этого файла
}

static stock someFunc() {
    // доступ к функции возможен только из этого файла
    // если функция не используется, компилятор ее выбросит
}

/*
    глобальные функции
*/

someFunc() {
    // и не нужен никакой stock
    // это самая обычная функция
}

stock someFunc() {
    // а это обычная функция
    // но если она не используется, компилятор ее выкинет
}

/*
    глобальные публичные функции
*/

forward someFunc();
public someFunc() {
    // доступ к функции возможен из фильтрскриптов
}

@someFunc();
@someFunc() {
    // это то же самое, что и forward + public
    // главное, чтобы первый символ был @
    // тогда ключевые слова forward и public писать не нужно
}

 

 

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

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

Share this post


Link to post
  • 0

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

Edited by Anton_Urchenko

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Человек-редиска
      By Редиска
      Доброго времени суток, уважаемые форумчане!
       
      Представляю вашему вниманию игровой мод Родина РП. Мод полностью рабочий. Заходить можно с официального лаунчера Арз. 
      Коротко о моде:
      1. 8 уровней админки, 2 уровня ФД.
      2. Ежедневные награды
      3. Мод с бонусом, но его можно легко убрать
      4. Мод легко настраиваемый
      5. Бери, заливай на хостинг и запускай, никаких проблем и ошибок
      6. Система тюнинга
      7. Нет казино!
      8. Баттлпасс
      9. Аукционы
      10. Cef /donate
      11. Cef /gps
       
      Всё это и многое другое ждёт вас в данном моде!
      Цена оправдана, мод ни разу нигде не сливался. Другие лица продают его от 15к+.
    • Nik_Rofid
      By Nik_Rofid
      Здравствуйте, можно ли на сервере копии радмира сделать так, что бы на машину можно было установить конкретный номер например ставится на машу рандом номер а будет х777хх77