[WIP] AuthSystem

amxx [WIP] AuthSystem 1.1.10

Нет прав для скачивания
Версия Дата выхода Скачиваний Оценка
1.1.10 115 0.00 звёзд 0 оценок
1.1.8 3 0.00 звёзд 0 оценок
1.1.7 3 0.00 звёзд 0 оценок
Исправление недочётов (спасибо Mistrick за их поиск)
  • Нравится
Реакции: Nordic Warrior
- Отныне используются предопределённые константы длинн полей (спасибо Kaido Ren за наводку)
- Исправлен разбор данных о пользователе
- Исправлена неточность логирования
- Исправлен метод, отвечающий за чтение результатов из БД (в нём не обновлялся индекс)
Исправлена ошибка при разборе параметров натива
Изменено логирование mysql
Исправлена функция чтения результатов из массива
Добавлено всеобщее логирование. Изменить настройки логирования можно в logger.inc
Исправлен наитупейший баг, приводивший к авторизации не зарегистрированного пользователя по последней вошедшей учётке.
- Реализован алгоритм, авторизующий игрока не раньше того, как он зайдёт на сервер
- Благодаря предыдущему решению - избегаем багов в зависимых плагинах, т.к. была возможность авторизации до того, как клиент получит флаги доступа.
Оптимизирована авторизация/регистрация (теперь не используется прозвон через set_task)
Изменёна начальная точка авторизации (client_putinserver -> client_authorized). Это должно предотвратить баг с выдачей флагов (client_authorized - вызывается при получении steamID игрока и неизвестно когда точно, раньше или позже client_putinserver)
Убита мелкая букашка, которая зажала себе один return и ломала компиляцию в array_read_user. :/ Спецификация: DEVCS-2102-31244
Изменения касаются аргументов натив-функций.
В связи с замечанием Mistrick было решено переписать спецификацию и API под поддерживаемый стиль нативов.

Главные изменения по оптимизации и рефакторингу кода:
- был написан автоматический парсер структур с возможностью задания приоритетов;
- расставлены комментарии, где они могут понадобиться.

Главные изменения:
- появилась поддержка поточного исполнения всех запросов.
- есть возможность работать с целым набором данных (организовано через ArrayCell).
- передача аргументов теперь работает по типу ключ-значение

Например, есть структура user[UserStruct], можно передать как всю структуру целиком, так и её часть:
1) auth_adduser(UserStruct, user);
2) auth_adduser(us_nickname, "cstyler", us_password, "nekto123");
3) auth_adduser(UserStruct, user, us_nickname, "wopox"); Т.е. их можно даже комбинировать.

Чем правее находится аргумент, тем больше его приоритет (он переписывает предыдущее поле такого же типа).
В связи с созданием запросов в отдельном потоке, в API теперь добавлены параметры для обратного вызова.
У нативов они помечены как @callback. Чтобы использовать потоковый запрос, нужно всего-лишь добавить название функции в конец списка аргументов. Например:
1) auth_getuser(us_user_id, 5, "your_good_callback"); - в вашу public your_goot_callback(Array:h_array) придёт указатель на массив с данными.
2) auth_adduser(UserStruct, user, ""); - выполнить потоковый запрос без обратного вызова.

Если вы не укажете callback, то будет произведено последовательное выполнение запроса, а результат будет возвращен напрямую, например:
new Array:h_array = auth_getuser(us_steam, "STEAM:1:0:20102030");

Для удобного разбора результатов можно использовать сток
array_read_user(Array:handle, dest[UserRecord], index=-1);
Метод возвращает Bool:more_results - если в массиве есть ещё значения, то можно вызвать этот метод повторно и он автоматически прочтет следующую запись (полезно для чтения в цикле).

Для чтения конкретного индекса стоит задать переменную index.
Сверху Снизу