Дата: Понедельник, 26.08.2024, 17:12 | Сообщение # 1
Всем доброго времени суток. Сегодня мне бы хотелось вам рассказать от таких функциях в PAWN-языке, как SetTimer и SetTimerEx.
Сразу сделаю такое примечание: Для SetTimer и SetTimerEx можно использовать ТОЛЬКО public!!!
SetTimer
Итак, для начала приступим к лёгкому и пойдём по нарастающей:
Первое, это SetTimer. Функция включает в себя 3 параметра:
native SetTimer(funcname[], interval, repeating);
funcname[] - Это название функции, по сути - название вашего pablic в кавычках.
interval - Интервалы от вызова таймера до срабатывания pablic
               Так же если стоит повторение таймера, то будет работать как интервал между таймерами.
               Измеряется в миллисекундах. 1000 миллисекунд равно 1 секунде
repating - Тут всё просто: будет ли повторяться ваша функция. Может иметь значения: true - будет выполняться повторение ИЛИ false - вызывается 1 раз.
Давайте разберём пример для наглядности:
forward Info();
Код
public Info()
{
    SendClientMessageToAll(0xFFFFFFFF, "Наш сайт: pawno-rus.ru");
}
// И теперь давайте вызовем данный таймер при запуске мода
public OngameModeInit()
{
    SetTimer("Info", 1000*60*20, true);
    return true
}

Давайте разберёмся по интервалу: 1000*60*20. Так как я писал ранее, что 1000 млСек = 1 сек, то: 1 сек * 60 = 1 минута; 1 минута * 20 = 20 минут.
Таким образом данный таймер будет выводить каждые 20 минут для всех игроков на сервере в чат: "pawno-rus.ru".
 
SetTimerEx
 
По сути с SetTimer - всё, теперь перейдём к следующей функции: SetTimerEx:
native SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);
Тут добавляются ещё 2 параметра:
const format[] - формат данных для ввода в функцию. (Такие как: s, d, f);
{Float,_}:... - переменные или значение для данных из const fromat[]
Из данных объяснения мало что можно понять незнающему или начинающему скриптеру, поэтому давайте разберём на примере кода, который при входу даёт на авторизацию две минуты игроку:
forward autorez(playerid);
Код
public autorez(playerid)
{
    if(/*проверка на то залогинился ли игрок*/)
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Вы были кикнуты по причине: Время на авторизацию истекло.");
        Kick(playerid);
        return true;
    }
    return true;
}
//Дальше уже добавлям сам таймер
public OnPlayerConnect(playerid)
{
    SetTimerEx("autorez", 1000*60*2, false, "d", playerid);
    return true;
}

Если первые три пункта мы уже разбирали. то начнём сразу с 4-го:
4. Тут в кавычках надо вставлять тип данных. Наподобие функции format(output[], len, "%s %d %f", string, int, float), только без знака процента (%)
5. Тут уже указывают сами данные, так же разберём как и предыдущий: format(output[], len, "%s %d %f ", string, int, float)