- Перевод подключения к MySQL на асинхронный режим для устранения зависаний сервера при недоступности базы данных.
- Исправление уязвимости, из-за которой кастомные теги услуг (например, _usluga) ошибочно парсились и выдавали игрокам стандартные AMXX-флаги.
- Устранение краша плагина (Invalid array handle) при старте, вызванного гонкой состояний при инициализации массивов и Trie.
- Оптимизация формирования имен таблиц БД для предотвращения ошибок SQL при генерации асинхронных запросов.
1. Фикс критических ошибок и оптимизация
- Утечка памяти SQL: Исправлена утечка хендлов при переподключении к БД (добавлено принудительное освобождение старого соединения).
- Дублирование запросов: Убран повторный запрос в БД при входе игрока. Загрузка данных теперь вызывается только при полном подключении с предварительной проверкой статуса авторизации (игнорируются боты и HLTV).
- Чтение дат из БД: В SQL-запросе загрузки игрока поля дат теперь оборачиваются в UNIX_TIMESTAMP(), что предотвращает запись мусора в целочисленные переменные.
- Префикс таблиц: Добавлено чтение дефолтного префикса из квара на случай, если конфигурационный файл отсутствует.
- Натив gpapi_set_user_flags: Полностью переписан. Теперь он корректно сохраняет услугу в массив, учитывая время действия и генерируя уникальный ID для внутренних нужд, а не просто выдает флаги.
2. Динамическое отслеживание истечения услуг
- Автоматическое снятие флагов: Реализована система задач для автоматического снятия услуг по истечении времени.
- Функции: Добавлены проверки и задачи. Сервер сам следит за таймстемпами и снимает флаги ровно в момент истечения, без необходимости ручной перезагрузки админов.
- Интеграция: Проверка истечения вызывается как при загрузке услуг из БД, так и при выдаче временных услуг через натив.
3. Сохранение данных при отключении игрока
- Обновление активности: Добавлена функция, которая при выходе игрока асинхронно обновляет поле времени последней активности в таблице пользователей.
- Очистка памяти: При отключении игрока его данные удаляются из кэша, что предотвращает утечки оперативной памяти при длительной работе сервера.
4. Выдача услуг через консоль и нативы
- Консольная команда: Добавлена команда gp_addservice (требует флаг RCON). Позволяет выдать или продлить услугу игроку по его SteamID.
- Натив gpapi_add_account: Позволяет сторонним плагинам программно выдавать услуги с записью в БД.
- Умное продление: Если у игрока уже есть эта услуга и она не истекла, время суммируется с текущим сроком действия.
- Автоматическая синхронизация: После успешного выполнения запроса вызывается перезагрузка услуг, и игрок мгновенно получает новые флаги.
5. Нативы для сторонних плагинов
- Удаление услуг: Натив gpapi_remove_user_service. Позволяет удалить услугу из памяти сервера, отменить задачу на истечение и опционально деактивировать её в БД.
- Данные форума: Натив gpapi_get_forum_data. Передает в массив статистику игрока с форума (количество лайков, постов и тем), загруженную при входе.