Nex
Умник
Здравствуйте. Сегодня хотел бы для вас сделать мануал или урок по созданию системы админки и авторизации в ней.
И так, приступим.Первым делаем создадим макрос.
Поместить его можно в начале мода.
PHP:
#define DIALOG_ADMINDOSTUP 0 // Изменяем "0" на свой удобный диалог
Ко всем new:
PHP:
new adostup[MAX_PLAYERS];
Добавляем все следующие статистики, в которые мы будем записывать уровень и пароль от админки.
PHP:
pAdmin, // Сюда мы записываем уровень игрока(запятую не забывайте)
pADostup // Сюда пароль от админки
PHP:
adostup[playerid] = false; // Ставим нашу переменную на "false"(0), то есть лож.
Если создаете мод с нуля, то данную команду в public OnPlayerCommandText.
PHP:
if(strcmp(cmd, "/giveadmin", true) == 0)
{
new string[55];
Player[playerid][pAdmin] = 7; // Тут я думаю все понятно, запись в нашу переменную 7 уровень, в моем случае.
new dostup = 1000+random(8999); // Создание рандомного цифирного пароля.
Player[playerid][pADostup] = dostup; // Запись этого цифирного пароля
format(string, sizeof(string), "Вы выдали себе админку %d уровня. Пароль: %d", Player[playerid][pAdmin], Player[playerid][pADostup]);
SendClientMessage(playerid, OxFFFFFFFF, string); // Вывод в чат сообщения
return true;
}
PHP:
else if(strcmp(cmd, "/alogin", true) == 0) // Тут я думаю все понятно.
{
if(Player[playerid][pAdmin] < 1) return SendClientMessage(playerid, 0xFFFFFFFF, "Вам недоступна данная команда!"); // Проверяем, является ли игрок который ввел эту команду администратором. Если ДА, то выводим диалог, НЕТ, то выводим в чат "Вам недоступна данная команда!".
ShowPlayerDialog(playerid, DIALOG_ADMINDOSTUP, DIALOG_STYLE_PASSWORD, "Авторизация в админ-панели", "Введите ваш пароль от админ-панели в поле ниже:", "Вход", ""); // Диалог авторизации.
return true;
}
Ко всем диалогам(public OnDialogResponse).
PHP:
case DIALOG_ADMINDOSTUP:
{
if(!response) return true;
{
new string[64]; // Создаем переменную, которая будет отвечать за чат.
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_ADMINDOSTUP,DIALOG_STYLE_PASSWORD,"Авторизация в админ-панели", "Введите ваш пароль от админ-панели в поле ниже:", "Вход", ""); // Если ничего не ввели, то выводим опять этот же диалог.
if(strval(inputtext) != Player[playerid][pADostup]) // Проверяем, ввели правильной пароль или нет.
{
if(GetPVarInt(playerid,"ErrorAdmin") == 3) Kick(playerid); // ПВар, который отвечает за попытки авторизации. Если игрок ввел 3 раза неверный пароль, то его кикает.
SetPVarInt(playerid,"ErrorAdmin",GetPVarInt(playerid,"ErrorAdmin")+1); // Если игрок ввел неверно пароль, то прибавляем "+1" к ПВару.
format(string, sizeof(string), "Вы ввели неверный пароль.\nУ вас осталось %d попыток.",3-GetPVarInt(playerid,"ErrorAdmin")); // Вывод сообщения, о том сколько осталось попыток.
ShowPlayerDialog(playerid,DIALOG_ADMINDOSTUP,DIALOG_STYLE_PASSWORD,"Авторизация в админ-панели", "Введите ваш пароль от админ-панели в поле ниже:", "Вход", ""); // Высвечиваем диалог
return true;
}
adostup[playerid] = true; // Если авторизация прошла успешна, то приводить нашу переменную в состояние истины(true или же 1).
format(string, sizeof(string), "Вы авторизовались как администратор %d уровня.", Player[playerid][pAdmin]);
SendClientMessage(playerid, 0xFFFFFFFF, string); // Вывод сообщения об авторизации.
}
else ShowPlayerDialog(playerid,DIALOG_ADMINDOSTUP,DIALOG_STYLE_PASSWORD,"Авторизация в админ-панели", "Введите ваш пароль от админ-панели в поле ниже:", "Вход", ""); // Вывод диалоге, если пароль неверный.
return true;
}
Ну и конечно не забудьте добавить загрузку и сохранения этих двух переменных, и конечно добавить также в Базе Данных вашей.
Думаю на этом все. Если найдете ошибку, напишите ее в комментарии, я обязательно исправлю.
Последнее редактирование:
