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

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

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

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

Мануал Делаем Админ авторизацию

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

K3K

Дебютант
Привет всем уважаемые пользователи форума pawno-info.ru Сегодня я покажу вам как сделать простенькую админ авторизацию.
Щас я объясню что это такое (для тех кто не знает). При входе в игру (после авторизации) у вас появится окно куда надо будет ввести ваш админ пароль.
Ну пожалуй начнём.
1. Добавим в public OnPlayerLogin следующие строки:
Код:
	if(PlayerInfo[playerid][pAdmin] >= 0) // Если админка больше 0 лвл'а, то:
	{
		SPD(playerid, 11337, DIALOG_STYLE_PASSWORD, "{FFCD00}Админ авторизация", "{FFFFFF}Введите ваш админ пароль.\n Он может состоять от 4 до 15 латинских букв и цифр.", "Далее", "Отмена"); // Открываем диалог с авторизацией
		TogglePlayerControllable(playerid,0); // Замораживаем игрока (можете убрать)
		return true;
	}
2. Добавим ко всем case (в OnDialogResponse):
Код:
	    case 11337:
	    {
			if(response) // Если игрок нажал "далее"
			{
			    new name[MAX_PLAYER_NAME], ip[17]; // обЪявляем локальные переменные
			    GetPlayerIp(playerid, ip, sizeof(ip)); // Узнаем ip игрока
				GetPlayerName(playerid, name, sizeof(name));// Узнаем имя игрока
				if(strval(inputtext) != PlayerInfo[playerid][pDostup]) return printf("Admin - %s неправильно ввёл свой админ пароль.Его ip - %d",name, ip); //Если текст который введён в окне не соответствует нашему админ паролю, то отправляем в консоль сообщение.
				TogglePlayerControllable(playerid,1);// Если все хорошо, то размораживаем игрока
                SendClientMessage(playerid,-1,"Вы успешно вошли");// Отправляем уме сообщение
                SetPlayerHealth(playerid, 160);// Устанавливаем хп
				format(string, 256, ">>[A]<< %s вошёл как администратор %d уровня.",name, PlayerInfo[playerid][pAdmin]); // Форматируем текст
				ABroadCast(COLOR_GREEN,string,1); // Отправляем этот текст (который выше) в админ чат.
			}
			else // Если игрок нажал "отмена", то ...
			{
			    new ip[18], name[MAX_PLAYER_NAME];// ОбЪявляем локальные переменные
      		    GetPlayerIp(playerid, ip, sizeof(ip));// Узнаем ip игрока
			    GetPlayerName(playerid, name, sizeof(name));//Узнаем имя игрока
			    Kick(playerid);// кикаем его
			 	format(string, 256, ">>[A]<< %s нажал 'отмена' при вводе админ пароля. Его ip - %d", name, ip);// Форматируем текст
				ABroadCast(COLOR_GREEN,string,1);// Отправляем этот текст (который выше) в админ чат.
				printf("Admin - %s нажал на конопку 'отмена' при вврде админ пароля. (Возможно взлом) Его ip-%d.", name, ip);// Пишем в консоль сообщение
			}
			return true;
	    }
3. Добавляем к enum pInfo
Код:
	pDostup,
4. Добавляем в public OnPlayerConnect(playerid)
Код:
PlayerInfo[playerid][pDostup] =                             0;
5. Добавляем в stock OnPlayerRegister
Код:
ini_setInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
6. Добавляем в public OnPlayerLogin
Код:
ini_getInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
7. Добавляем в сток/паблик сохранения аккаунта (stock SavePlayer(playerid))
Код:
ini_getInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
Теперь к своей команде по добавлению админа пишем:
Код:
			if(PlayerInfo[para1][pAdmin] != 0) // Если админка не равна 0, то ...
			{
				if(PlayerInfo[para1][pDostup] == 0 || PlayerInfo[para1][pDostup] == 2038) PlayerInfo[para1][pDostup] = 124+random(8999); // Генерируем рандомный админ пароль
			}
Так-же в эту команду
Код:
format(string, sizeof(string), "{3399FF}%s {FFFF00}назначил вас администратором {3399FF}%d {FFFF00}уровня.Адм пароль - %d", sendername, level, PlayerInfo[playerid][pDostup]); // Форматируем текст с админ паролем
SendClientMessage(para1, COLOR_YELLOW, string)// Высылаем игроку его пароль.
Если у вас нету стока ABroadCast вот, вставьте его в конец мода.
Код:
stock ABroadCast(color,const string[],level){
	for(new i = 0; i < MAX_PLAYERS; i++){
		if(IsPlayerConnected(i)){
			if(PlayerInfo[i][pAdmin] >= level) SCM(i, color, string);}}return true;}
Теперь ко всем админ командам добавляем -
Код:
if(PlayerInfo[playerid][pDostup] == 0) return true;
Делал эту команду на mxini и дефолтном командном процессоре. Кому надо сам переведёт на Mysql :ddd
Так-же если что-то сделал не так или можно было сделать лучше, пишите сюда. Учту все ваши ответы :happy: :happy:
На этом всё. Всем удачи :bo::bo:
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу