╔══════════════════════════════════════════════════════════════════╗
║              AFK Sentinel v2.0  —  by G3ntEZ                    ║
║         TG: @G3ntEZ  |  VK: vk.com/xzx111zxz                   ║
╚══════════════════════════════════════════════════════════════════╝

  Smart Anti-AFK для CS:S v34 / SourceMod
  Нет кика. Только Spectator после предупреждения.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  СТРУКТУРА АРХИВА
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  afk_sentinel/
  ├── addons/sourcemod/
  │   ├── scripting/
  │   │   └── afk_sentinel.sp          ← исходный код
  │   ├── plugins/
  │   │   └── (сюда кладётся .smx после компиляции)
  │   └── configs/
  │       ├── afk_sentinel.cfg          ← настройки плагина
  │       └── downloadslist.txt         ← список файлов для скачивания
  └── sound/
      └── afk_sentinel/
          └── afk_sentinel.mp3          ← звук предупреждения (добавь сам)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  УСТАНОВКА  (RU)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. КОМПИЛЯЦИЯ
   - Помести afk_sentinel.sp в:
       cstrike/addons/sourcemod/scripting/
   - Скомпилируй:
       Windows: scripting/compile.exe afk_sentinel.sp
       Linux:   ./scripting/spcomp afk_sentinel.sp
   - Перемести afk_sentinel.smx в:
       cstrike/addons/sourcemod/plugins/

2. КОНФИГ
   - Скопируй afk_sentinel.cfg в:
       cstrike/addons/sourcemod/configs/
   - При первом запуске плагин также создаёт cfg автоматически
     через AutoExecConfig (но без комментариев).
     Лучше использовать файл из комплекта — там всё подписано.

3. ЗВУК
   - Помести свой MP3-файл сюда:
       cstrike/sound/afk_sentinel/afk_sentinel.mp3
   - Требования: MP3, 44100 Hz, до 192 kbps.
   - Если хочешь другой файл — смени путь в cfg (sm_afks_sound)
     и в downloadslist.txt.

4. DOWNLOADS LIST
   - Убедись, что файл существует:
       cstrike/addons/sourcemod/configs/downloadslist.txt
   - В нём должна быть строка:
       afk_sentinel/afk_sentinel.mp3
   - Плагин читает этот файл при старте каждой карты и добавляет
     файл(ы) в download table — клиенты скачают звук автоматически.

5. ПЕРЕЗАПУСК
   - Перезапусти сервер, или выполни в консоли:
       sm plugins load afk_sentinel

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  НАСТРОЙКА  —  ConVar-ы
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ConVar                  По умолч.   Описание
  ──────────────────────  ─────────   ─────────────────────────────────────
  sm_afks_enabled         1           Вкл/выкл плагин
  sm_afks_afk_time        120         Секунд бездействия до варнинга
  sm_afks_warn_time       10          Секунд обратного отсчёта
  sm_afks_ignore_dead     1           Игнорировать мёртвых игроков
  sm_afks_min_players     2           Мин. игроков для проверки AFK
  sm_afks_sound           (путь)      Путь к звуку (без "sound/")
  sm_afks_move_eps        8.0         Порог движения (юниты)
  sm_afks_angle_eps       12.0        Порог поворота камеры (градусы)
  sm_afks_announce        1           Объявлять всем о переводе в spec

  Менять можно прямо в консоли сервера, например:
    sm_afks_afk_time 90
    sm_afks_min_players 3

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  КАК РАБОТАЕТ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  1. Каждую секунду плагин проверяет всех живых игроков (team >= 2).
  2. Активность засчитывается при:
       - Движении (смещение > move_eps юнит)
       - Повороте камеры (pitch+yaw > angle_eps градусов)
       - Нажатии кнопок (атака, прыжок, присед, использование и др.)
       - Написании в чат
       - Получении урона, стрельбе, смерти, спавне
  3. Если игрок не проявлял активности afk_time секунд:
       - Начинается обратный отсчёт warn_time секунд
       - Каждую секунду: бип + HintText с таймером
       - Если игрок пошевелился — таймер сбрасывается
  4. По истечении отсчёта:
       - Игрок переводится в Spectator (team 1)
       - Сообщение в чат (игроку + всем, если announce = 1)
       - Запись в лог сервера
  5. Spectator-ы и боты никогда не проверяются.
  6. Если на сервере меньше min_players — проверка не ведётся.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  INSTALL  (EN)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. COMPILE
   - Put afk_sentinel.sp into:
       cstrike/addons/sourcemod/scripting/
   - Compile:
       Windows: scripting/compile.exe afk_sentinel.sp
       Linux:   ./scripting/spcomp afk_sentinel.sp
   - Move afk_sentinel.smx to:
       cstrike/addons/sourcemod/plugins/

2. CONFIG
   - Copy afk_sentinel.cfg to:
       cstrike/addons/sourcemod/configs/
   - Plugin auto-generates cfg on first run via AutoExecConfig,
     but the included file has all options documented.

3. SOUND
   - Place your MP3 file at:
       cstrike/sound/afk_sentinel/afk_sentinel.mp3
   - Requirements: MP3, 44100 Hz, up to 192 kbps.
   - Custom path: edit sm_afks_sound in cfg and downloadslist.txt.

4. DOWNLOADS LIST
   - Make sure this file exists:
       cstrike/addons/sourcemod/configs/downloadslist.txt
   - It must contain:
       afk_sentinel/afk_sentinel.mp3
   - Plugin reads this on every map start and adds files to the
     downloads table so clients auto-download the sound.

5. RESTART
   - Restart the server or run in console:
       sm plugins load afk_sentinel

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  CHANGELOG
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  v2.0  — Полная переработка
    + Фикс: мгновенный AFK при заходе (gLastActivity = 0.0)
    + Фикс: таймер умирал после смены карты
    + Фикс: некорректный расчёт дельты угла (нет нормализации)
    + Фикс: sm_afks_min_players создавался, но не применялся
    + Фикс: ChangeClientTeam без ForcePlayerSuicide → краш на живых
    + Фикс: IntValue вместо FloatValue для afk_time
    + Добавлен: AngleDiff() с нормализацией [-180, 180]
    + Добавлен: ConVar sm_afks_announce
    + Добавлен: g_bInitialized[] — защита от гонки при подключении
    + Добавлен: LogAction() — все переводы пишутся в лог
    + Добавлен: корректная горячая перезагрузка плагина
    + Улучшен: OnPlayerRunCmd проверяет больше кнопок движения

  v1.0  — Первый релиз (G3ntEZ)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  ЛИЦЕНЗИЯ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  Свободное использование и модификация с указанием автора.
  © G3ntEZ, 2025
