KlasterK

Установка пароля на сервер [dc_cmd + sscanf2]

1 post in this topic

Вы можете поставить пароль на ваш сервер, не входя в RCon и чтобы уже играющие игроки тоже не могли продолжить играть.

Если у вас возникли вопросы, пишите.

Спойлер

// В место глобальных переменных
new slock_password[32] = "";

// В ваш player enum
enum PlayerInfo
{
    ...
    pServerLockLogged = 0,
    ...
}

// В место с константами или в ваш dialog enum
#define DIALOG_SLOCK_INPUT Введите число
// ИЛИ
enum Dialogs
{
    ...
    DIALOG_SLOCK_INPUT,
    ...
}

// В место с командами
CMD:lockserver(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1"Вы не RCon админ!"); // Замените на вашу проверку админа
    if(params[0] == '\0'return SendClientMessage(playerid, -1"Вы не указали пароль!")     // Замените цвет
    slock_password = params;
    for(new i = 0; i < MAX_PLAYERS; i++)
        if(IsPlayerConnected(playerid) && !IsPlayerAdmin(playerid)) // Замените IsPlayerAdmin на вашу проверку админа
            ShowPlayerDialog(playerid, DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, "Авторизация""Администратор установил пароль на сервер.\nВведите пароль чтобы продолжить играть.""Войти""Выйти");
}

public OnPlayerConnect(playerid)
{
    if(s_password[0] != '\0' && !PlayerInfo[playerid][pServerLockLogged]) // Если у вас enum(замените имя на своё)
    if(s_password[0] != '\0' && !GetPVarInt(playerid, "slock_logged")     // Если у вас PVar
        ShowPlayerDialog(playerid, DIALOG_SLOCK_INPUT, DIALOG_STYLE_INPUT, "Авторизация""Администратор установил пароль на сервер.\nВведите пароль чтобы продолжить авторизацию/регистрацию.""Войти""Выйти");
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    else if(dialogid == DIALOG_SLOCK_INPUT) // Если у вас if-elseif
    case DIALOG_SLOCK_INPUT:                // Если у вас switch
    {
        if(!response || inputtext[0] == '\0' || !strcmp(inputtext, slock_password)) // Если игрок нажал Esc, ничего не написал или неправильный пароль
            Kick(playerid); // Можно заменить, если у вас есть красивый кик на TextDraw или GameText
        else
        {
            SetPVarInt(playerid, "slock_logged"1);     // Если у вас PVar
            PlayerInfo[playerid][pServerLockLogged] = 1// Если у вас enum(замените имя на своё)
            if(!PlayerInfo[playerid][pLogged])           // Замените на свою проверку на авторизованность
                OnPlayerConnect(playerid);
        }
    }
}

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • phizlfs
      By phizlfs
      Привет! У меня небольшая проблема. Дело в том, что когда я подключаюсь к серверу у меня вылетает текстдрав, а точнее только box(черная, прозрачная штука). Я в коннект вписал скрытие всех текстдравов игроку - не помогло, пробовал делать это стоком - не помогло, пробовал вместо for(new i... просто в столбик по порядку всё писать - не помогло. Кто знает, в чем может быть проблема? Заранее огромное спасибо.
    • maksimov maksim
      By maksimov maksim
      Как сделать чтоб админ не мог снять админа выше себя
       
      Сама команда
      CMD:makeadmin(playerid, params[]) {     if(pData[playerid][pAdmin] < 6 || !GetPVarInt(playerid,"AdminLogin")) return true;     if(sscanf(params,"dd",params[0],params[1])) return SendClientMessage(playerid,0xFFa500AA, "Используйте: /makeadmin [id] [уровень]");     if(params[1] > 5 || params[1] < 0) return SCM(playerid, CR, "Значение не может быть меньше 0 и больше 5");     if(!pData[params[0]][pMysqlID] || !IsPlayerConnected(params[0])) return SCM(playerid, CR, "Данный игрок не авторизован.");     if(params[1] == 0)     {         pData[params[0]][pAdmin] = 0;         pData[params[0]][pAdmprefix] = 0;         SFCM(params[0], CR, "Администратор {FFFFFF}%s {FF8A30}аннулировал вам полномочия администратора",pData[playerid][pNickname]);         SFCM(playerid, CR, "Аннулирование прав администратора у игрока {FFFFFF}%s {FF8A30}прошло успешно", pData[params[0]][pNickname]);         UpdatePlayerData(params[0], "admin", pData[params[0]][pAdmin]);         UpdatePlayerData(params[0], "admprefix", pData[params[0]][pAdmprefix]);         return true;         }     new query[128];     pData[params[0]][pAdmin] = params[1];     pData[params[0]][pAdmprefix] = 0;     UpdatePlayerData(params[0], "admprefix", pData[params[0]][pAdmprefix]);     UpdatePlayerData(params[0], "admin", pData[params[0]][pAdmin]);     SFCM(params[0], CGREEN, "Администратор {FFFFFF}%s {33AA33}установил вам новый уровень администратора", pData[playerid][pNickname]);     ShowPlayerDialog(params[0],dAPassNew,DIALOG_STYLE_INPUT,"{f4b042}Настройки администратора","{FFFFFF}Введите Ваш будущий админ пароль.\nОн должен состоять мин. - 4 сим. и макс. - 10 сим.\nЖелательно в нём должны присутствовать буквы и цифры.","Далее","");     SFCM(playerid, CGREEN, "Вы успешно выдали {FFFFFF}%s {33AA33}права администратора {FFFFFF}%d {33AA33}уровня", pData[params[0]][pNickname],params[1]);     mysql_format(MySQLGo, query,sizeof(query),"INSERT INTO `admin` (`Name`,`level`,`Postavil`) VALUES ('%s','%d','%s')", pData[params[0]][pNickname],params[1],pData[playerid][pNickname]);     mysql_query(MySQLGo, query);     return true; }  
      Помогите пожалуйста