Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Таймеры и с чем их едят

Статус
В этой теме нельзя размещать новые ответы.

telekt

Изучающий
Пользователь
Регистрация
4 Ноя 2013
Сообщения
118
Лучшие ответы
0
Репутация
33
Доброго времени суток, уважаемые пользователи Pawno-info. Сегодня я решил поделиться своей теорией о таймерах. Итак, начнем
Предисловие
Существуют 2 типа таймеров:
1) SetTimer
2) SetTimerEx
Лично по мне SetTimer ближе и удобнее, особенно для новичков.
Время в таймерах измеряется в милисекундах => 1 секунда = 1000 МС
1 минута - 60000 МС и.т.д

SetTimer
SetTimer, как я уже говорил выше, самый простой из этих двух типов таймеров. Он отвечает за повтор определенного паблика/функции по окончании определенного кол-ва времени
Объявление таймера SetTimer происходит так:

Код:
SetTimer("FuncName",time,repeating);
Разберем написанное выше подробнее.
"FuncName" - название таймера [ПРИМЕЧАНИЕ: обязательно указание в ковычках ("")]
Далее time - время таймера, как я говорил выше, указывается в милисекундах.
И наконец repeating - определяет будет ли таймер стартовать снова по завершению своей работы. Repeating имеет тип переменной bool => может принимать значения ТОЛЬКО false и true
Разберем работу таймера SetTimer на примере:

Код:
public OnGameModeInit()
{
SetTimer("Test", 600000, true);
return true;
}

forward Test();
public Test(){
SendClientMessageToAll(0xFFFFFFAA, "Тестовый таймер завершил свою работу. Прошло 10 минут!");
return true;
}
Итак, что же мы видим в этой функции:
В public OnGameModeInit() создается таймер с названием Test
Периодичностью: 10 минут
С повторением функции после завершения.
Далее каждую минуту игрокам выводится в чат сообщение:

Код:
Тестовый таймер завершил свою работу. Прошло пять минут!
SetTimerEx
Этот таймер сложнее предыдущего тем,что к нему можно добавить определенные аргументы.
Таймер записывается так:

Код:
SetTimerEx("FuncName",time,repeating,const format[], { Float,_}:...);
Первые 3 аргумента нам уже известны. 4 и 5 же нет.Разберем их:
Переменная const format[] может принимать значения "i", "s", "b", "f", "fis" и.т.д(использующие sscanf поймут о чем я говорю)
Кто не понял скажу так:
"i" - integer(целочисленная переменная)
"s" - string(Переменная, содержащая символы буквенные)
"b" - bool(true/false)
"f" - Float(с плавающей точкой, например, 3.14)
"fis" - float+integer+string(пример: 3.14, 6, "test")
второй параметр как раз таки содержит значение переменной, типа указанного ранее.
Так например:

Код:
SetTimerEx("Test",600000,true,"s","testing");
Как же работает такой таймер? Разберем на примере.
Код:
public OnGameModeInit()
{
SetTimerEx("Test",600000,true,"s","testing");
return true;
}
forward Test(integ,const string[],Float:floatt);
public TimerPublic(integ,const string[],Float:floatt)
{
printf("Тестовый таймер завершил свою работу. Выводимое сообщение: %s", string);
return true;
}
Таким образом каждые 10 минут в консоль сообщение.
KillTimer
Из названия понятно, что функция KillTimer(namerid); убивает таймер(прекращает его работу)
Это можно сделать в случаях, когда при выполнении какого-то действия требуется остановить таймер.
Пример:

Код:
Ко всем new:
new testtimer;
В public OnGameModeInit()
testtimer = SetTimer("Test",600000,true);
И в нужную функцию:
KillTimer(testtimer);
На этом урок окончен всем спасибо, жду отзывов и оценок.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу