Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

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

Статус
В этой теме нельзя размещать новые ответы.

Djcrem

Умник
Писал данный код на заказ, заказчик отказался от оплаты из-за отсутствия денег.
Данная система позволяет прямо из игры, старшим администраторам управлять администрацией сервера, при этом администраторы, их уровни и пароли хранятся в отдельной базе данных. В профиле игрока ничего храниться не будет, все в базе администраторов.
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
Отправка сообщения в администраторский чат. У каждого данная функция своя.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу