PDA

Просмотр полной версии : [Мануал] Простая админ.авторизация



gangzone.ini
19.02.2015, 21:02
player_info = Обычно используют PlayerInfo
player_admin = Обычно используют pAdmin

В начало мода:


new admin_password = 123456; // Админ.пароль, используйте свой.
new bool: admin_acces[MAX_PLAYERS] = false;


public OnPlayerDisconnect(playerid, reason) :


admin_acces[playerid] = false;


DC_CMD + case:

В начале мода:


#define dialog_alogin 4

Команды:


CMD:alogin(playerid,params[])
{
if(player_info[playerid][player_admin] < 1) return true;
if(admin_acces[playerid] == true) return SendClientMessage(playerid, 0xAFAFAFAA, "Вы уже авторизовались как администратор");
ShowPlayerDialog(playerid, dialog_alogin, DIALOG_STYLE_INPUT, "Авторизация", "{ffffff}Для получения всех административных\nпривилегий, введите код в строку ниже.\nПри неправильном вводе, Вы будите {FE2002}кикнуты.\n", "Вход", "Отмена");
return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) :


case dialog_alogin:
{
new string_alogin[36];
if(strval(inputtext) != admin_password || !response) return SendClientMessage(playerid, 0xFF5030AA,"Вы отказались от ввода защитного кода и были кикнуты !"), kick_server(playerid);
admin_acces[playerid] = true;
format(string_alogin, sizeof(string_alogin), "Вы вошли как администратор %d уровня", player_info[playerid][player_admin]);
SendClientMessage(playerid, 0xFFFF00AA, string_alogin);
return 1;
}



OnPlayerCommandText + dialogid

public OnPlayerCommandText(playerid, cmdtext[]) :


if(strcmp(cmd, "/alogin", true) == 0)
{
if(player_info[playerid][player_admin] < 1) return true;
if(admin_acces[playerid] == true) return SendClientMessage(playerid, 0xAFAFAFAA, "Вы уже авторизовались как администратор");
ShowPlayerDialog(playerid, 10, DIALOG_STYLE_INPUT, "Авторизация", "{ffffff}Для получения всех административных\nпривилегий, введите код в строку ниже.\nПри неправильном вводе, Вы будите {FE2002}кикнуты.\n", "Вход", "Отмена");
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) :


if(dialogid == 10)
{
new string_alogin[36];
if(strval(inputtext) != admin_password || !response) return SendClientMessage(playerid, 0xFF5030AA,"Вы отказались от ввода защитного кода и были кикнуты !"), kick_server(playerid);
admin_acces[playerid] = true;
format(string_alogin, sizeof(string_alogin), "Вы вошли как администратор %d уровня", player_info[playerid][player_admin]);
SendClientMessage(playerid, 0xFFFF00AA, string_alogin);
return 1;
}


Если хотите что бы команды можно было использовать после админ.авторизации, вставляйте в начало команды:

if(admin_acces[playerid] == false) return 1;
Пояснение: если Вы на авторизовались, то команда не будет работать.

Osetin
20.02.2015, 02:07
Лучше уж тогда, чтобы пароль каждому рандомный выдавался.

gangzone.ini
20.02.2015, 10:25
Лучше уж тогда, чтобы пароль каждому рандомный выдавался.

Сегодня попробую сделать :smile:

William_Pilipa
07.03.2015, 23:12
Нормально, для новичков пойдет

gangzone.ini
08.03.2015, 13:51
:i-m_so_happy:

Desulaid
15.03.2015, 16:23
Я бы сделал гораздо проще, типа отимизационнее :D



switch(player_info[playerid][player_admin])
{
case 1: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор первого уровня");
case 2: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор второго уровня");
case 3: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор третьего уровня");
case 4: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор четвертого уровня");
default: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как Главный администратор");
}


new a[сами подсчитаете];
format(a, sizeof(a), "Вы вошли как администратор %i-го уровня", aLevel);
SendClientMessage(playerid, -1, a);
А если хотите, чтобы показывало ранг администратора, то можно поделить все с помощью оператора switch, но лично мне хватит и моего варианта :)

Grigor
19.04.2015, 01:56
Сегодня попробую сделать :smile:

Помоги пж ты сделал это ?

gangzone.ini
19.04.2015, 03:11
Помоги пж ты сделал это ?

Не сделала, сегодня вечером скину в лс.


Я бы сделал гораздо проще, типа отимизационнее :D



switch(player_info[playerid][player_admin])
{
case 1: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор первого уровня");
case 2: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор второго уровня");
case 3: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор третьего уровня");
case 4: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как администратор четвертого уровня");
default: SendClientMessage(playerid, 0xFFFF00AA, "Вы вошли как Главный администратор");
}


new a[сами подсчитаете];
format(a, sizeof(a), "Вы вошли как администратор %i-го уровня", aLevel);
SendClientMessage(playerid, -1, a);
А если хотите, чтобы показывало ранг администратора, то можно поделить все с помощью оператора switch, но лично мне хватит и моего варианта :)
Уменьшает только кол-во строк и задействована переменная в 38 ячеек)

Seregamil
19.04.2015, 06:57
Не сделала, сегодня вечером скину в лс.


Уменьшает только кол-во строк и задействована переменная в 38 ячеек)

Зато не используется конструкция switch. И что, что переменная, пусть будет задействована, если у меня будет 20 уровней, то мне тоже конструкцию использовать и делать лишнюю работу?

Desulaid
19.04.2015, 09:58
Не сделала, сегодня вечером скину в лс.


Уменьшает только кол-во строк и задействована переменная в 38 ячеек)

Ну допустим не 37 ячеек, а 40 где-то =)
Вы вошли как администратор %i-го уровня = 39 - 2 заменителя, +2 возможные цифры уровня (например 11 уровень) и +1 \0 = 40. Ну +/-1(если уровней 1-9).

А так зачем код ненужной фигней загромождать? Я всегда делаю так: (в качестве другого примерка код by DeimoS)



// by DeimoS
switch(GetPVarInt(playerid, "WrongPassword"))
{
case 0: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 3 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 1: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 2 попытки.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 2: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 1 попытка.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
case 3: ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_INPUT, "Авторизация", "{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталась последняя попытка, после чего Вас кикнет.\nВведите пароль от аккаунта для входа на сервер:", "Вход", "Выход");
default:
{
ShowPlayerDialog(playerid, dLogin, DIALOG_STYLE_MSGBOX, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Превышен лимит попыток на ввод пароля.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Вход", "Выход");
return Kick(playerid);
}
}
SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);



// by Darge
SetPVarInt(playerid, "WrongPass", GetPVarInt(playerid, "WrongPass") +1);
if(GetPVarInt(playerid, "WrongPass") == 4) return ShowPlayerDialog(playerid, dLogin, 1,"Заголовок", "Содержание", "Кнопка", " Еще кнопка"), Kick(playerid);
new logtires = 4 - GetPVarInt(playerid, "WrongPass");
new string[хз];
format(string, sizeof(string),"Осталось попыток: %d",logtires);
ShowPlayerDialog(playerid, dLogin, 1, "Заголовок", string, "Кнопка", " Еще кнопка");


Мы же оба видим, что мой вариант практичнее?) Конечно, ДеймоС написал такой просто код для урока, а то новички не смогут его понять, а так он способен на многое(я надеюсь) :i-m_so_happy:

Карочи, кейсы лучше использовать при большом выбора вариантов, а ни при 4 :big_boss:

Grigor
01.05.2015, 17:06
можеш помогать когда при авторизации отправить сообщение администраторов например Внимание авторизовался администратор Grigor 9 уровня

- - - Добавлено - - -

сделал SendAdminMessage но не получился не показовал ник

- - - Добавлено - - -

ну не получился ? а можеш сделать когда админ сам придумать свой пароль ?

gangzone.ini
01.05.2015, 17:08
можеш помогать когда при авторизации отправить сообщение администраторов например Внимание авторизовался администратор Grigor 9 уровня

- - - Добавлено - - -

сделал SendAdminMessage но не получился не показовал ник


case dialog_alogin:
{
new string_alogin[110];
if(strval(inputtext) != admin_password || !response) return SendClientMessage(playerid, 0xFF5030AA,"Вы отказались от ввода защитного кода и были кикнуты !"), kick_server(playerid);
admin_acces[playerid] = true;
format(string_alogin, sizeof(string_alogin), "Вы вошли как администратор %d уровня", player_info[playerid][player_admin]);
SendClientMessage(playerid, 0xFFFF00AA, string_alogin);
format(string_alogin, sizeof(string_alogin), "[A] %s[%d] авторизовался как администратор %s уровня", player_info[playerid][player_name], playerid, player_info[playerid]player_admin]);
SendAdminMessage(0xFFFF00AA, string_alogin);
return 1;
}