Skip to main content

Пространство имён

hook.add

Подписывает функцию на событие.

Аргументы

Возвращает

Ничего.

Пример

Повторная регистрация той же пары (event, id) заменяет обработчик. Это то, что не даёт lua_reload <plugin> удвоить подписки. Id уникален внутри плагина — два разных плагина спокойно называют свои "init".

Приём сетевых сообщений — msg:Name

Особый вид имени, без точки: hook.add("msg:TextMsg", id, fn) подписывается на сетевые сообщения, которые движок отправляет клиентам — приёмная сторона к msg.send. Свои подробности — у msg.

Порядок вызова

Обработчики идут в порядке загрузки плагинов. Обычно это неважно, но на отменяемом событии решает, кто выиграет: e:cancel() обрывает цепочку. Числа приоритета в hook.add тут не помогли бы: как только их начнут ставить все, они снова перестанут что-либо значить. Порядком распоряжается владелец сервера — через addons/lua/load_order.txt:
Всё, чего в файле нет, идёт после по алфавиту, поэтому список не обязан быть полным. Текущий порядок видно в lua_list и lua_hooks.
Неизвестное имя без точки и без msg: — ошибка со списком движковых событий. Так ловится опечатка, которая иначе дала бы молча неработающую подписку.

Смотри также

hook.remove

Снимает подписку по имени события и id.

Аргументы

Возвращает

Снимает только собственный обработчик плагина: один плагин не может тихо отписать чужой.

hook.run

Запускает своё событие плагина.

Аргументы

Возвращает

Пример

Точка в имени обязательна: она отличает своё событие от опечатки в движковом. Движковое событие через hook.run запустить нельзя — это делает модуль.

Смотри также

hook.list

Возвращает список подписок в порядке вызова.

Аргументы

Возвращает

Консольная обёртка — lua_hooks.