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

    • angel_sinvays
      By angel_sinvays
      Приветствую! Меня зовут Артём, мне 19 лет, и я являюсь основателем и ведущим специалистом студии Sinvays. Уже семь лет я работаю в PAWN, и за это время принял участие в множестве проектов. Моя цель – создавать качественные и уникальные решения для вашего игрового проекта. Обратите внимание, чтобы сделать заказ необходимо написать мне в личные сообщения либо делать это через студию.
      Ознакомиться с полным спектром услуг можно у меня в личных сообщениях либо через бота в студии.

      Список услуг которые я предоставляю:
       
      Написание регистрации на mysql [DIALOG / TextDraw] — от 350 рублей.
      Написание авторизации на mysql [DIALOG / TextDraw] — от 350 рублей.
      Написание системы — от 200 рублей (в зависимости от сложности).
      Рисовка TextDraw — от 50 рублей (зависит от потребностей)
      Исправление багов в игровом моде — от 100 рублей (зависит от количества и сложности)
      Переделка любого мода под ваши интересы — от 150 рублей (зависит от потребностей)
       
      Пожалуйста, обратите внимание:

      Для начала сотрудничества мне необходимо четкое техническое задание и ваше желание работать совместно.

      Услуги предоставляются по 100% оплате!

      Моё портфолио: https://vk.com/topic-180751181_50413848
      Мои отзывы: https://vk.com/topic-180751181_50413975 
    • gazilius
      By gazilius
      Здравствуйте, ищу скриптера
      платформа CRMP
      Ищу человека который будет потихоньку писать системы для мода с нуля
      Оплата сдельная
       
      тз
      mysql
      1. Система регистрации и авторизации
      Выбор спавна:
      Лыткарино
      Игроки пока не поздороваются не видят имени друг друга
       
      2. Работы
      Автобусник - катаешься по всей карте и за остановку получаешь 500 игровой валюты
      Механик - берет вызов по всей области и после ремонта получает свои 500 игровой валюты и за заправку за каждый литр еще 10 игровой валюты
      Таксист - принимает заказ где человек ставит маркер куда ему нужно, после чего таксист если оказывается на метки и получает свою оплату - км 50 игровой валюты
      деньги списываются с того кто заказал такси
       
      Автобус парк - Лыткарино, Батырево
      База механиков - Арзамас, Южный
      Такси компаний - Арзамас, Южный

      Жду ваших цен и прайсов
      тг @ormbet
    • egoryaz
      By egoryaz
      хочу сделать свой логотип для проекта на textdraw много видео посмотрел даже использовал tdeditor но не могу его запустить подскажите как сделать свой логотип