Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±

    Простая админ.авторизация

    player_info = Обычно используют PlayerInfo
    player_admin = Обычно используют pAdmin


    В начало мода:
    PHP код:
    new admin_password 123456// Админ.пароль, используйте свой.
    new booladmin_acces[MAX_PLAYERS] = false
    public OnPlayerDisconnect(playerid, reason) :
    PHP код:
    admin_acces[playerid] = false
    DC_CMD + case:
      Открыть/закрыть

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

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



    OnPlayerCommandText + dialogid
      Открыть/закрыть

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

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


    Если хотите что бы команды можно было использовать после админ.авторизации, вставляйте в начало команды:
    PHP код:
    if(admin_acces[playerid] == false) return 1
    Пояснение: если Вы на авторизовались, то команда не будет работать.
    Последний раз редактировалось gangzone.ini; 19.04.2015 в 12:17. Причина: update

  2. #2
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    Лучше уж тогда, чтобы пароль каждому рандомный выдавался.

  3. #3
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Цитата Сообщение от Osetin Посмотреть сообщение
    Лучше уж тогда, чтобы пароль каждому рандомный выдавался.
    Сегодня попробую сделать

  4. #4
    Аватар для William_Pilipa
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.04.2013
    Сообщений
    19
    Репутация:
    0 ±
    Нормально, для новичков пойдет

  5. #5
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±

  6. #6
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Я бы сделал гораздо проще, типа отимизационнее :D

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

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

  7. #7
    Аватар для Grigor
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.04.2015
    Сообщений
    0
    Репутация:
    0 ±
    Цитата Сообщение от gangzone.ini Посмотреть сообщение
    Сегодня попробую сделать
    Помоги пж ты сделал это ?

  8. #8
    Аватар для gangzone.ini
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.06.2014
    Сообщений
    651
    Репутация:
    106 ±
    Цитата Сообщение от Grigor Посмотреть сообщение
    Помоги пж ты сделал это ?
    Не сделала, сегодня вечером скину в лс.

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

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

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

  9. #9
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от gangzone.ini Посмотреть сообщение
    Не сделала, сегодня вечером скину в лс.


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

  10. #10
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от gangzone.ini Посмотреть сообщение
    Не сделала, сегодня вечером скину в лс.


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

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

    PHP код:
    // by DeimoS
    switch(GetPVarInt(playerid"WrongPassword")) 

        case 
    0ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 3 попытки.\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход"); 
        case 
    1ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 2 попытки.\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход"); 
        case 
    2ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталось 1 попытка.\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход"); 
        case 
    3ShowPlayerDialog(playeriddLoginDIALOG_STYLE_INPUT"Авторизация""{FF0000}Ошибка: {FFFFFF}Вы ввели неверный пароль! У Вас осталась последняя попытка, после чего Вас кикнет.\nВведите пароль от аккаунта для входа на сервер:""Вход""Выход"); 
        default: 
        { 
            
    ShowPlayerDialog(playeriddLoginDIALOG_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(playeriddLogin1,"Заголовок""Содержание""Кнопка"" Еще кнопка"), Kick(playerid);
    new 
    logtires GetPVarInt(playerid"WrongPass");
    new 
    string[хз];
    format(stringsizeof(string),"Осталось попыток: %d",logtires);
    ShowPlayerDialog(playeriddLogin1"Заголовок"string"Кнопка"" Еще кнопка"); 
    Мы же оба видим, что мой вариант практичнее?) Конечно, ДеймоС написал такой просто код для урока, а то новички не смогут его понять, а так он способен на многое(я надеюсь)

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

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •