Skip to main content

msg

Отправка сырых сетевых сообщений движка — своих и стоковых. msg отправляет сетевое user-сообщение напрямую — то же самое, что MESSAGE_BEGIN/WRITE_*/MESSAGE_END в SDK, но одним вызовом. Подходит и для стоковых сообщений игры (TextMsg, ScreenFade, Damage и другие, которые уже умеет читать клиент), и для полностью своих — под клиентский мод, который сам их разбирает.

Почему не begin/write/end

В SDK MESSAGE_BEGIN открывает сообщение, WRITE_* пишут в него поля, MESSAGE_END закрывает. Если дать Lua самому вызывать эти шаги по очереди, любая ошибка между begin и end — не то поле, nil, что угодно — оставит сообщение недописанным. Это не падение одного плагина: битый или недооткрытый пакет уходит в общий сетевой поток движка и задевает всех на сервере. Поэтому msg.send — один вызов. Все аргументы и все поля собираются и проверяются в Lua заранее; MESSAGE_BEGIN вызывается только тогда, когда упасть уже физически нечему. Приём чужих сообщений — не здесь, а в hook.add("msg:Name", ...).

Отправка

Поля сообщения

Каждая функция описывает одно поле в порядке провода — сама ничего не отправляет, только проверяет диапазон и возвращает значение, которое msg.send пишет по очереди.