Доступ к архиву

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

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

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

Админ-панель в диалоге

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

Serejqa

Ученик
Доброго времени суток. Хочу вам предложить пример своей административной панели в диалоговом окне с записью в файл. Пусть это уже и было, пусть было лучше, чем у меня, но может быть кому-нибудь понравится и возьмут себе.
Функции этой панели: 1) У каждого игрока свой пароль от панели. 2) Игрок не сможет использовать команды администратора без входа в панель. 3) Возможность изменять пароль от панели. 4) Возможность удалять администратора, как из админ-панели, так из админки сервера.
1. В enum pInfo добавить переменную pHAdmin.Ко всем new добавляем new HisPlayerid; В OnPlayerLogin, где
PHP:
if( strcmp( key , "Level" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pLevel] = strval( val ); }
if( strcmp( key , "World" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pVirWorld] = strval( val ); }
if( strcmp( key , "AdminLevel" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pAdmin] = strval( val ); }
пишем
PHP:
 if( strcmp( key , "HAdminLevel" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pHAdmin] = strval( val ); }
Дальше в OnPlayerRegister где
PHP:
format(var, 32, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);
format(var, 32, "Level=%d\n",PlayerInfo[playerid][pLevel]);fwrite(hFile, var);
format(var, 32, "AdminLevel=%d\n",PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
добавим:
PHP:
format(var, 32, "HAdminLevel=%d\n",PlayerInfo[playerid][pHAdmin]);fwrite(hFile, var);
. По такому же принципу, если надо, сделайте OnPlayerRename и OnPlayerSave.
2. Добавляем стоки, в любое свободное место в моде.
PHP:
stock CheckPass(playerid,inputtext[])// Сток, проверка пароля
{
	new iniFile = ini_openFile("files/admins.ini");
	if(iniFile > -1)
	{
		new string[128], name[32];
		GetPlayerName(playerid, name, 32);
		ini_getString(iniFile, name, string);
		if(!strcmp(inputtext, string, false))
		{
	        PlayerInfo[playerid][pAdmin] = PlayerInfo[playerid][pHAdmin];
			format(string,sizeof(string),"{FFFFFF}Вы успешно зашли в админ-панель. {FFE4B5}(Администратором %d уровня)",PlayerInfo[playerid][pHAdmin]);
	        ShowPlayerDialog(playerid,1500,DIALOG_STYLE_MSGBOX,"Админ-панель",string,"Закрыть","");
		}
		else
		{
			format(string,sizeof(string),"{FFFFFF}Пароль введен не верно.");
	        ShowPlayerDialog(playerid,1500,DIALOG_STYLE_MSGBOX,"Админ-панель",string,"Закрыть","");
		}
		ini_closeFile(iniFile);
	}
	return 1;
}
stock QuitAP(playerid) // Выйти из админ-панели
{
	if(PlayerInfo[playerid][pHAdmin] > 0)
	{
        ShowPlayerDialog(playerid,477,DIALOG_STYLE_MSGBOX,"Админ-панель","Вы больше не администратор.\nЧтобы войти в админ-панель, КПК -> 9. Админ-панель.","Закрыть","");
		PlayerInfo[playerid][pAdmin] = 0;
	}
}
stock SetPass(playerid,pass[])// Установить пароль
{
	new string3[32];
	new name[32]; GetPlayerName(playerid,name,32);
	format(string3, sizeof(string3), "files/admins.ini");
	new var[256];
	new File: hFile = fopen(string3, io_append);
	if (hFile)
	{
		format(var, 256, "\n%s=%s\r\n",name,pass); fwrite(hFile, var);
		fclose(hFile);
	}
 }
stock ChangePass(playerid,inputtext[]) // Смена пароля
{
	new iniFile = ini_openFile("files/admins.ini");
	if(iniFile > -1)
	{
		new name[64]; GetPlayerName(playerid,name,64);
		ini_removeKey(iniFile,name);
	  	ini_closeFile(iniFile);
		SetPass(playerid,inputtext);
	    new string[254];
	    format(string,254,"{FFFFFF}Ваш новый пароль: {FFE4B5}%s{FFFFFF}. Не забудьте его!\nЖелательно сделать скриншот. (F8)",inputtext);
		ShowPlayerDialog(playerid,433,DIALOG_STYLE_MSGBOX,"Админ-панель",string,"ОК","Закрыть");
	}
}
stock DellPass(playerid) //Удалить пароль из файла, если /makeadmin [id] 0
{
	new string[128];
	new name[32]; GetPlayerName(playerid,name,32);
	new iniFile = ini_openFile("files/admins.ini");
	if(iniFile > -1)
	{
		ini_removeKey(iniFile,name);
		format(string,sizeof(string),"{FFFFFF}Вы успешно удалили %s из списка администраторов.",name);
        ShowPlayerDialog(playerid,1500,DIALOG_STYLE_MSGBOX,"Админ-панель",string,"Закрыть","");
	  	ini_closeFile(iniFile);
  	}
 }
3. В OnPlayerCommandText добавляем:
PHP:
  if (strcmp("/adminpanel", cmdtext, true) == 0)
    {
        if(PlayerInfo[playerid][pHAdmin] == 0)
        {
            SendClientMessage(playerid,COLOR_WHITE,"Ты не администротатор");
            return 1;
        }
		if(PlayerInfo[playerid][pAdmin] == 0)
		{
			ShowPlayerDialog(playerid,451,DIALOG_STYLE_INPUT,"Админ-панель","Введите пароль от админ-панели:","ОК","Отмена"); // Если 451 ид занят, меняйте на свой.
		}
		else
		{
		    ShowPlayerDialog(playerid,453,DIALOG_STYLE_LIST,"Админ-панель","1. Изменить пароль от админ-панели\n2. Выйти из админ-панели","ОК","Закрыть"); // Если 453 ид занят, меняйте на свой.
		}
	}
4. В OnDialogResponse добавляем:
PHP:
    else if(dialogid == 452)
    {
		if(response)
		{
			if(!strlen(inputtext))// если оставляет пустую строку, выводим ему опять окно
			{
				ShowPlayerDialog(playerid,452,DIALOG_STYLE_INPUT,"Админ-панель","Установи пароль от его админ-панели:","ОК","Отмена");
				return 1;
			}
		new tpass[64];
        strmid(tpass, inputtext, 0, strlen(inputtext), 255);
		SetPass(HisPlayerid,tpass);
		new stringss[128];
	    format(stringss,64,"Ваш пароль от админ-панели: {FFE4B5}%s{FFFFFF}. Не забудьте его!\nЖелательно сделать скриншот. (F8)",inputtext);
		ShowPlayerDialog(HisPlayerid,459,DIALOG_STYLE_MSGBOX,"Админ-панель",stringss,"ОК","");
		HisPlayerid = 0;
		}
	}
	else if(dialogid == 453)
	{
	    if(response)
	    {
			switch(listitem)
			{
				case 0: ShowPlayerDialog(playerid,454,DIALOG_STYLE_INPUT,"Админ-панель","Введите новый пароль:","ОК","Отмена");
				case 2: QuitAP(playerid);
			}
	    }
	}
	else if(dialogid == 454)
	{
		if(response)
		{
			new tpass[64];
	        strmid(tpass, inputtext, 0, strlen(inputtext), 255);
		    ChangePass(playerid,inputtext);
	    }
	}
5. В команду /makeadmin добавим:
PHP:
ShowPlayerDialog(playerid,452,DIALOG_STYLE_INPUT,"Админ-панель","Установи пароль от его панели:","ОК","Отмена");
HisPlayerid = para1;
6. И в OnPlayerDisconnect пишем PlayerInfo[playerid][pAdmin] = 0;. Это нужно для того, чтобы при следующем заходе на сервер, игроку сразу не далась админка.
Скрины:


Пишите свои вопросы и предложения по улучшению/изменению урока.

Автор: Serejqa aka budarajka, т.е. я.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу