Скриптер
Проверенный
Участник
Пользователь
- Сообщения
- 198
- Реакции
- 273
- Помог
- 5 раз(а)
Описанная ниже спецификация предоставляет гибкие возможности для разработчиков плагинов.
Названия методов даны в обобщенном виде, без привязки к конкретному плагину (или его названию) и рекомендованы к написанию именно в таком виде.
Прошу меня поправить, если чего-то не хватает/нужно исправить.
В ближайшее время (в течении двух-трёх недель) я начну реализовывать плагин по этой спецификации.
Константы:
C:
#define NICK_LENGTH 32
#define STEAM_LENGTH 24
#define IP_LENGTH 16
#define CACHE_LENGTH 65
auth_identify_by [a/b/c/d] - Идентифицировать пользователя по признаку (см. AuthFlags).
auth_security_sault - соль, используемая в хешировании
Структуры/enum:
C:
// Результат работы форварда - для определения дальнейшей обработки события
enum
{
AUTH_CONTINUE = 0,
AUTH_SUPERCEDE
};
// Статус авторизации игрока
enum AuthStatus {
AUTH_NULL = 0, // Значение не задано
AUTH_NOT_REGISTERED = 1, // Пользователь не зарегистрирован
AUTH_SUCCESS, // Пользователь авторизован
AUTH_FAIL, // Пользователь не авторизован
AUTH_EMPTY // Абонет не абонент (пустой слот)
};
// Флаги авторизации (по каким полям проверять авторизацию пользователя)
enum AuthFlags (<<=1) {
AFLAG_NULL = 0, // Значение не задано
AFLAG_NICK = 1, // По нику (a)
AFLAG_STEAM, // SteamID (b)
AFLAG_IP, // IP адресу (c)
AFLAG_PASS // Паролю (d)
};
// Действия при ошибке авторизации
enum AuthFailActions(<<=1) {
AFAIL_NULL = 0, // Значение не задано
AFAIL_KICK = 1, // Кикнуть игрока
AFAIL_BAN, // Забанить игрока
AFAIL_LOG // Занести действие в лог
}
// Структура, в которой хранится вся необходимая информация об игроке
enum UserStruct {
us_user_id, // ID зарегистрированного пользователя
us_nickname[NICK_LENGTH], // Имя пользователя
us_steam[STEAM_LENGTH], // SteamID
us_ip[IP_LENGTH], // IP адрес
us_password[CACHE_LENGTH], // Пароль
AuthFailActions:us_authfail, // Действия при ошибке авторизации
AuthFlags:us_authflags, // Правила аутентификации пользователя
AuthStatus:us_authstatus, // Статус авторизации
us_accessflags // Права доступа игрока
}
Нативы плагина:
C:
/**
* Метод возвращает статус игрока (см. AuthStatus)
* @param playerID - номер игрока на сервере
* @return AuthStatus - статус авторизации игрока
*/
native AuthStatus:auth_player_status(playerID);
/**
* Метод возвращает ID зарегистрированного игрока по его номеру
* @param playerID - номер игрока на сервере
* @return user_id - номер зарегистрированного пользователя. 0 - пользователь не найден/не авторизован
*/
native auth_get_byplayer(playerID);
/**
* Метод регистрирует нового пользователя
* @usage auth_adduser(.username="YoNick", .password="yoSecretPass");
* @usage auth_adduser(.steam="STEAM_1:0:012345", .ip="127.0.0.1", .authfail=AFAIL_KICK);
* @return user_id - номер зарегистрированного пользователя
*/
native auth_adduser(user_id=0, username[NICK_LENGTH]=" ", steam[STEAM_LENGTH]=" ", ip[IP_LENGTH]=" ", password[CACHE_LENGTH]=" ", authfail=0, authflags=0, accessflags=0, data[UserStruct] = user_proto);
/**
* Метод получает данные пользователя по ключу
* @usage auth_getuser(.username="YoNick", .password="yoSecretPass", .ret=yo_array);
* @usage auth_getuser(.steam="STEAM_1:0:012345",.ret=yo_array);
* @usage auth_getuser(.user_id=5,.ret=yo_array);
*/
native auth_getuser(user_id=0, username[NICK_LENGTH]=" ", steam[STEAM_LENGTH]=" ", ip[IP_LENGTH]=" ", password[CACHE_LENGTH]=" ", data[UserStruct] = user_proto);
/**
* Метод удаляет пользователя
* @param user_id - ID зарегистрированного пользователя
* @return bool:result - успешность выполнения операции
*/
native auth_deluser(user_id);
/**
* Метод изменяет пользователя
* @param user_id - ID зарегистрированного пользователя
* <...>
* @usage auth_adduser(.user_id=10, .steam="STEAM_1:0:012345", .ip="127.0.0.1", .authfail=AFAIL_KICK);
*/
native auth_usermod(user_id=0, username[NICK_LENGTH]=" ", steam[STEAM_LENGTH]=" ", ip[IP_LENGTH]=" ", password[CACHE_LENGTH]=" ", authfail=-1, authflags=-1, accessflags=-1, data[UserStruct] = user_proto);
/**
* Метод получает кешированную информацию о пользователе
* @param player_id - номер игрока на сервере
* @param user[UserStruct] - структура, в которую будет записана информация о пользователе
*/
native auth_get_playerinfo(player_id, ret[UserStruct]);
/**
* Метод задаёт кешированную информацию о пользователе
* @param player_id - номер игрока на сервере
* @param user[UserStruct] - структура, которая будет записана
*/
native auth_set_playerinfo(player_id, username[NICK_LENGTH]=" ", steam[STEAM_LENGTH]=" ", ip[IP_LENGTH]=" ", password[CACHE_LENGTH]=" ", authfail=-1, authflags=-1, accessflags=-1, data[UserStruct] = user_proto);
/**
* Метод заносит информацию о пользователе в базу данных
* @param player_id - номер игрока на сервере
*/
native auth_flush_playerinfo(player_id);
/**
* Метод позволяет форсировать авторизацию игрока
* @param player_id - номер игрока на сервере
* @param user_id - номер зарегистрированного игрока
* @param skip_checks - пропускать проверки подлинности
* @return bool: result - успешность операции
*/
native auth_force_login(player_id, user_id, skip_checks = true);
/**
* Метод позволяет форсировать выход игрока
* @param player_id - номер игрока на сервере
* @return bool: result - успешность операции
*/
native auth_force_logout(player_id);
События:
C:
/**
* Метод вызывается перед сменой статуса
* @param player_id - номер игрока
* @param AuthStatus: new_status - новый статус
* @param AuthStatus: old_status - старый статус
* @param user_id - номер зарегистрированного пользователя (0 - если пользователь не был авторизован)
* @return AUTH_SUPERCEDE - какой-то плагин заблокировал смену статуса
* AUTH_CONTINUE - продолжаем действие
*/
forward auth_check(player_id, new_status, old_status, user_id);
/**
* Метод вызывается при смене статуса авторизации
* @param player_id - номер подключающегося игрока
* @param AuthStatus: new_status - новый статус
* @param AuthStatus: old_status - старый статус
* @param user_id - номер зарегистрированного пользователя (0 - если пользователь не был авторизован)
*/
forward auth_status_change(player_id, new_status, old_status, user_id);
Последнее редактирование: