Подключение
Порядок: client:connect → client:authorized → client:connected.
client:connect
Игрок стучится на сервер; его ещё можно не пустить.
Поля события
Пример
Отмена. e:cancel() не пускает игрока. Без e.reason он увидит общую фразу.
Здесь e.player:steamid() возвращает STEAM_ID_PENDING, а
сообщения не доходят. Права и статистику вешай на
client:authorized, приветствия — на client:connected.
client:disconnect
Игрок отключился — уже был в игре, или его коннект отклонил Lua-плагин через
client:connect.
Поля события
Место, где чистят своё состояние по e.player.id.
e.reason и e.forced приходят из двух разных источников в зависимости от
того, что случилось:
- Игрок был в игре и отвалился (кик, бан, таймаут,
disconnect в
консоли) — e.forced == false. Причина от движка через ReHLDS-хук
SV_DropClient. Требует ReHLDS: на ванильном HLDS e.reason здесь пустая
строка. Формат — как в логах сервера: "Kicked", "Disconnect by user",
"Timed out" — движок не даёт фиксированный список кодов, только строку.
- Коннект отклонил Lua-плагин через
client:connect + e:cancel() —
e.forced == true. Причина всегда есть: это тот же текст, что увидел
отказанный игрок (e.reason, выставленный в client:connect, либо
дефолтная фраза, если плагин его не задал). Движок в этом случае
ClientDisconnect вообще не вызывает, client:disconnect подставляется
вместо него, чтобы игрок не “пропадал” молча для тех, кто слушает только
это событие.
Проверяй e.forced, если логика зависит от того, был ли игрок реально в
игре.
client:authorized
Steam ответил, steamid наконец известен.
Поля события
Срабатывает один раз за подключение. Всё, что завязано на steamid — права, статистика — начинается здесь.
client:connected
Игрок в игре, сообщения до него доходят.
Поля события
Место для приветствий и первого HUD.
player:chat
Игрок написал в чат.
Поля события
Пример
Отмена. e:cancel() проглатывает сообщение — оно не доходит ни до кого. Так работает !команда, и так же чат-менеджер подменяет строку: отменить и разослать свою.
menu:select
Игрок нажал клавишу в меню, открытом из Lua.
Поля события
Обычно не нужно: menu разбирает это сам.