Skip to main content

Подключение

Порядок: client:connectclient:authorizedclient: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 разбирает это сам.