Таймеры в Pawn: создание и использование

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Таймеры позволяют выполнять код через определенные промежутки времени. Разберем работу с ними.

SetTimer
Создает одноразовый таймер:
Код:
SetTimer("MyFunction", 5000, false); // вызов через 5 секунд один раз
SetTimer("MyFunction", 1000, true); // вызов каждую секунду

SetTimerEx
Таймер с параметрами:
Код:
SetTimerEx("GiveMoney", 30000, false, "ii", playerid, 1000);
// Вызов функции GiveMoney через 30 секунд с параметрами playerid и 1000

Примеры использования
Код:
// Автоматическое сохранение каждые 5 минут
public OnGameModeInit()
{
    SetTimer("AutoSave", 300000, true);
    return 1;
}

forward AutoSave();
public AutoSave()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            SavePlayerData(i);
        }
    }
    print("Автосохранение выполнено");
}

// Задержка перед спавном
public OnPlayerSpawn(playerid)
{
    SetTimerEx("DelayedSpawn", 2000, false, "i", playerid);
    return 1;
}

forward DelayedSpawn(playerid);
public DelayedSpawn(playerid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SendClientMessage(playerid, -1, "Добро пожаловать!");
}

// Обратный отсчет
new countdown = 10;

forward Countdown();
public Countdown()
{
    if(countdown > 0)
    {
        new string[32];
        format(string, sizeof(string), "Осталось: %d секунд", countdown);
        SendClientMessageToAll(-1, string);
        countdown--;
    }
    else
    {
        SendClientMessageToAll(-1, "Время вышло!");
        KillTimer(countdownTimer);
    }
}

KillTimer
Остановка таймера:
Код:
new Timer:timer = SetTimer("MyFunction", 1000, true);
// ...
KillTimer(timer);

Важные моменты:
- Используйте forward для объявления функций таймеров
- Храните ID таймеров для возможности их остановки
- Не создавайте слишком много таймеров одновременно
- Время указывается в миллисекундах

Практикуйтесь с таймерами для создания динамичных систем!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху