Вопросы

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

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


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

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

  • 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

 

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

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

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

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


Ссылка на сообщение
  • 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. Опять же, возможно, вы не прибегали к этому, чтобы не усложнять пример.

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


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

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

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

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


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

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

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

    • Sasha123452
      От Sasha123452
      Слив мода LINE RP
      Скачать файл Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины).
      Добавил Sasha123452 Добавлено 14.10.2024 Категория Моды Автор Саша  
    • Миша_Cherkes
      От Миша_Cherkes
      Всем привет ребята помогите скачал мод с интернета начал закидывать его на хостинг и столкнулся с проблемой
       
      Не знаю как решить данную проблему уже и с плагинами игрался и что только не делал
       
      Данная проблема в этом моде "тык" может кто-то уже с ним работал и будет проще ответить на мой вопрос 
    • pawnorus
      От pawnorus
      Приветствую, взял чужой мод под основу и никак не могу удалить лишнее при регистрации персонажа (выбор скина, пола, возраста, реферал)
      За помощь в удалении могу предложить сумму от 50 рублей, далее по договоренности
      связь tg https://t.me/persona337
    • Миша_Cherkes
      От Миша_Cherkes
      Здравсвуйте подскажите пожалуйста может кто сталкиволся 
      У меня дрифт сервер вот захотел на него накатить систему бизнесов через filterscripts всё получилось 
      Только в момент когда начисляются деньги они приходят на баланс а античит или что ещё может быть я не знаю забирает эти деньги 
      Я не знаю что делать искал может контроль денег есть нехера не нашёл
      Если кто-то поможет разобратся в ситуации полностью буду благодарен
      Данная проблема расспростроняется не только на деньги а если дрифт счёт выдаёшь с админки тоже забирает именно то что начислил