> ## Documentation Index
> Fetch the complete documentation index at: https://cs-lua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# timer

> Отложенные и повторяющиеся вызовы

# timer

Отложенные и повторяющиеся вызовы.

```lua theme={null}
timer.after(5, function()
	players.broadcast:chat("{green}Прошло 5 секунд")
end)
```

Идут на серверном времени и тикают из `StartFrame`. Снимаются вместе с плагином:
при `lua_reload`, при одиночной перезагрузке и при отключении плагина за
превышение прекеша.

## Анонимные

Адресуются по id, который вернул вызов.

|                                       |                                                     |
| ------------------------------------- | --------------------------------------------------- |
| [`timer.after`](anonymous.md#after)   | Вызывает функцию один раз через заданное время      |
| [`timer.every`](anonymous.md#every)   | Вызывает функцию каждые N секунд, пока её не снимут |
| [`timer.cancel`](anonymous.md#cancel) | Снимает таймер по id                                |

## Именованные

Адресуются по имени, уникальному внутри плагина.

|                                     |                                                             |
| ----------------------------------- | ----------------------------------------------------------- |
| [`timer.create`](named.md#create)   | Заводит именованный таймер; повторный вызов заменяет старый |
| [`timer.destroy`](named.md#destroy) | Снимает именованный таймер этого плагина                    |

## Смена карты

Смена карты обнуляет серверные часы. Модуль переносит отложенные сроки на новые,
поэтому `timer.after(600, ...)` остаётся «через десять минут», а не срабатывает
пачкой на первом кадре следующей карты.

`persist = false` отменяет перенос: такой таймер снимается вместе с картой, на
которой был заведён.

```lua theme={null}
-- инфраструктура плагина: должна пережить changelevel
timer.create("stats.flush", 60, flush)

-- привязано к текущей карте: на следующей уже бессмысленно
timer.after(30, warmup_over, { persist = false })
```

По умолчанию `persist = true`. Обратный вариант ломал бы плагины молча: таймер
сохранения статистики, заведённый один раз при загрузке, после первой же смены
карты перестал бы работать до конца жизни сервера.
