Перейти к содержанию
Авторизация  
John_Smith

Авторизация/регистрация администратора [SAMP-RP] [MySQL R6]

Рекомендуемые сообщения

John_Smith

Данная система позволяет прямо из игры, старшим администраторам управлять администрацией сервера, при этом администраторы, их уровни и пароли хранятся в отдельной базе данных. В профиле игрока ничего храниться не будет, все в базе администраторов.

PHP код:

     #define TABLE_ADMIN         "admin"
- задэфайним для удобства

 

PHP код:

     new query[2048], string[512]
Сама команда авторизации:

PHP код:

     CMD:alogin(playerid, params[])
{
    if(PlayerLogged[playerid] == 0) return 1;
    format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", PlayerInfo[playerid][pSendername]);
    mysql_query(query);
    mysql_store_result();
    if(!mysql_fetch_row_format(query)) return true;
    if(!strcmp(GetAdmin(PlayerInfo[playerid][pSendername], "password"), "qwerty", true))
    {
        SetPVarInt(playerid, "Alogin", 1);
        ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
        SendClientMessage(playerid, COLOR_GREY, "Зарегистрируйте администраторский пароль. Он должен быть больше 5 и меньше 16 символов!");
    }
    else ShowPlayerDialog(playerid, 1227, 1, "Авторизация", "Введите администраторский ключ:", "Принять", "Отмена"), SetPVarInt(playerid, "Alogin", 2);
    return true;
}
Диалог авторизации:

 

PHP код:

     case 1227:
{
    if(!response) return 1;
    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
    new pass2, level = strval(GetAdmin(PlayerInfo[playerid][pSendername], "level"));
    if(GetPVarInt(playerid, "Alogin") == 1)
    {
        if(sscanf(inputtext, "s[16]", pass2)) ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
        if(!strcmp(inputtext, "qwerty", true)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
        if(strlen(inputtext) < 6 || strlen(inputtext) > 16) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
        format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET  password = '%s' WHERE name = '%s' LIMIT 1", pass2, PlayerInfo[playerid][pSendername]);
        mysql_query(query);
        SendClientMessage(playerid, COLOR_GREEN, "Поздравляем! Вы получили доступ модератора");
        PlayerInfo[playerid][pAdmin] = level;
        AdminLogged[playerid] = true;
        format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid);
        return true;
    }
    else if(GetPVarInt(playerid, "Alogin") == 2)
    {
        if(strcmp(inputtext, GetAdmin(PlayerInfo[playerid][pSendername], "password"), true)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Неверный пароль модератора!"), Kick(playerid);
        SendMes(playerid, COLOR_LIGHTGREEN, "Вы вошли как модератор %d уровня", level);
        PlayerInfo[playerid][pAdmin] = level;
        AdminLogged[playerid] = true;
        format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid);
        SendAdminMessage(COLOR_LIGHTGREEN, string);
    }        
}
Команда для добавления/удаления/повышения модераторов

 

PHP код:

     CMD:moderator(playerid, params[])
{
    if(PlayerLogged[playerid] == 0) return 1;
    if(PlayerInfo[playerid][pAdmin] < 8 || AdminLogged[playerid] == false) return 1;
    new data[32], name[32];
    if(sscanf(params, "s[32]i", name, params[1])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]");
    if(params[1] < 0) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]");
    format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", name);
    mysql_query(query);
    mysql_store_result();
    if(mysql_fetch_row_format(query))
    {
        if(params[1] == 0)
        {
            format(query, sizeof(query), "DELETE FROM "TABLE_ADMIN" WHERE `name`='%s'", name);
            mysql_query(query);
            mysql_free_result();
            SendMes(playerid, COLOR_LIGHTRED, "%s успешно удален из списка модераторов", name);
        }
        else
        {
            format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET  level = '%d' WHERE name = '%s' LIMIT 1", params[1],name);
            mysql_query(query);
            SendMes(playerid, COLOR_GREEN, "Уровень администрирования у  %s изменен на %d", name, params[1]);
        }
    }
    else
    {
        getdate(years, months, days);
        format(data, 32, "%02d.%02d.%04d", days, months, years);
        format(query, 512, "INSERT INTO "TABLE_ADMIN" (Name, level, LastCon) VALUES ('%s', %d, '%s')", name, params[1], data);
        mysql_query(query);
        SendMes(playerid, COLOR_GREEN, "%s успешно добавлен в список модераторов. Уровень полномочий %d", name, params[1]);
    }
    return true;
}
В конец мода

PHP код:

     stock GetAdmin(username[], obtaining[])
{
    new Query[128];
    format(Query, 128, "SELECT %s FROM "TABLE_ADMIN" WHERE name = '%s' LIMIT 1", obtaining, username);
    mysql_query(Query);
    mysql_store_result();
    if(mysql_fetch_row(Query) == 1)
    {
        mysql_free_result();
        return Query;
    }
    return Query;
}
Теперь берем, и все что связано с сохранением и создание в базе поля pAdmin удаляем. И создаем таблицу в базе данных.

 

PHP код:

     CREATE TABLE IF NOT EXISTS `admin` (
  `Name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `level` int(2) NOT NULL,
  `password` varchar(32) NOT NULL DEFAULT 'qwerty',
  `LastCon` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
После каждого своего повышения, администратор находящийся в онлайне должен ввести команду /alogin заново, тогда уровень администрирования изменится. Если администратор оффлайн, то ничего этого проделывать не нужно. Если хотите снять администратора который в онлайне, просто вводите /moderator Jasper_Fox 0 и кикаете/баните/варните или просите выйти.

 

PHP код:

     AdminLogged[playerid] = true;
Переменная которая показывает, авторизован игрок как администратор или нет. У каждого она своя.

 

PHP код:

     SendAdminMessage
Отправка сообщения в администраторский чат. У каждого данная функция своя.

 

Автор: Djcrem

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
st1vka

До чего скатились модераторы...

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
John_Smith

Up

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.