Serejqa
Ученик
Доброго времени суток. Хочу вам предложить пример своей административной панели в диалоговом окне с записью в файл. Пусть это уже и было, пусть было лучше, чем у меня, но может быть кому-нибудь понравится и возьмут себе.
Функции этой панели: 1) У каждого игрока свой пароль от панели. 2) Игрок не сможет использовать команды администратора без входа в панель. 3) Возможность изменять пароль от панели. 4) Возможность удалять администратора, как из админ-панели, так из админки сервера.
1. В enum pInfo добавить переменную pHAdmin.Ко всем new добавляем new HisPlayerid; В OnPlayerLogin, где
пишем
Дальше в OnPlayerRegister где
добавим:
. По такому же принципу, если надо, сделайте OnPlayerRename и OnPlayerSave.
2. Добавляем стоки, в любое свободное место в моде.
3. В OnPlayerCommandText добавляем:
4. В OnDialogResponse добавляем:
5. В команду /makeadmin добавим:
6. И в OnPlayerDisconnect пишем PlayerInfo[playerid][pAdmin] = 0;. Это нужно для того, чтобы при следующем заходе на сервер, игроку сразу не далась админка.
Скрины:
Пишите свои вопросы и предложения по улучшению/изменению урока.
Автор: Serejqa aka budarajka, т.е. я.
Функции этой панели: 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 ); }
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);
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);
}
}
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 ид занят, меняйте на свой.
}
}
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);
}
}
PHP:
ShowPlayerDialog(playerid,452,DIALOG_STYLE_INPUT,"Админ-панель","Установи пароль от его панели:","ОК","Отмена");
HisPlayerid = para1;
Скрины:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Автор: Serejqa aka budarajka, т.е. я.
Последнее редактирование:
