• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Проверка на "забаненность аккаунта" при входе (mxINI)

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

canyosha

Начинающий
Пользователь
Регистрация
7 Сен 2019
Сообщения
13
Лучшие ответы
0
Репутация
0
Здравствуйте, есть мод и в нём система регистрации на mxINI.
Вот сам код регистрации:

Инклуд:
Код:
#include <mxINI>
#define pNick(%1)      p_info[%1][p_name]
В начале:
Код:
enum e_PLAYER_INFO//Даём название нашему enum 
{ 
    p_name[MAX_PLAYER_NAME],//Создаём новый массив для записи имени и ставим запятую 
    p_password[64],//Создаём новый массив для записи пароля и ставим запятую 
    p_money,//Создадим новую переменную для записи денег и ставим запятую 
    bool: p_logged//Создадим новую переменную логического типа для записи статистики авторизации 
}; 
new p_info[MAX_PLAYERS][e_PLAYER_INFO];
OnPlayerConnect:
Код:
GetPlayerName(playerid,p_info[playerid][p_name],MAX_PLAYER_NAME);
new account[37]; 
format(account,sizeof(account),"users/%s.ini",pNick(playerid)); 
if(!fexist(account)) 
{ 
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT, "Регистрация", "Данный аккаунт не зарегистрирован на нашем сервере. Для регистрации введите пароль:", "Далее", "Выход"); 
} 
else if(fexist(account)) 
{ 
    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация", "Данный аккаунт зарегистрирован на нашем сервере. Для авторизации введите пароль:", "Далее", "Выход"); 
}
OnDialogResponse:
Код:
if(dialogid == 0) 
{ 
    if(!response) return Kick(playerid); 
    else if(response) 
    { 
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{FF0000}Ошибка", "Вы не ввели пароль. Без пароля регистрация невозможна!\nВведите ваш пароль:", "Далее", "Выход"); 
        new account[37]; 
        format(account,sizeof(account),"users/%s.ini",pNick(playerid)); 
        if(fexist(account)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация", "Данный аккаунт зарегистрирован на нашем сервере. Для авторизации введите пароль:", "Далее", "Выход"); 
        else return CreateAccount(playerid, inputtext); 
    }    
} 
else if(dialogid == 1) 
{ 
    if(!response) return Kick(playerid); 
    else if(response) 
    { 
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FF0000}Ошибка", "Для игры на сервере Вы должны авторизироваться!\nВведите ваш пароль:", "Далее", "Выход"); 
        new account[37]; 
        format(account,sizeof(account),"users/%s.ini",pNick(playerid)); 
        if(!fexist(account)) return ShowPlayerDialog(playerid,0,DIALOG_STYLE_INPUT, "Регистрация", "Данный аккаунт не зарегистрирован на нашем сервере. Для регистрации введите пароль:", "Далее", "Выход"); 
        else 
        { 
            new password[64]; 
            new iniFile = ini_openFile(account); 
            ini_getString(iniFile, "Пароль",password); 
            ini_closeFile(iniFile); 
            if(!strcmp(inputtext, password, true)) return OnPlayerLogin(playerid); 
            else return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{FF0000}Ошибка", "Вы ввели неверный пароль! Повторите попытку\nВведите ваш пароль:", "Далее", "Выход"); 
        } 
    } 
}
В конце:
Код:
stock CreateAccount(playerid, password[]) 
{ 
    new account[37]; 
    format(account,sizeof(account),"users/%s.ini",pNick(playerid));//ОБЯЗАТЕЛЬНО создайте папку "users" в папке "scriptfiles" 
    if(fexist(account)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация", "Данный аккаунт зарегистрирован. Введите пароль:", "Далее", "Выход"); 
    new iniFile = ini_createFile(account); 
    if(iniFile < 0) ini_openFile (account); 
    { 
        ini_setString(iniFile,"Пароль",password);//О "ini_setString" и "ini_setInteger" написано в теме, которая описывает инклюд mxINI (ниже ссылка) 
        ini_setInteger(iniFile, "Деньги", 10000); 
        ini_closeFile(iniFile); 
        OnPlayerLogin(playerid); 
    } 
    return 1; 
} 

stock OnPlayerLogin(playerid) 
{ 
    new account[37]; 
    format(account,sizeof(account),"users/%s.ini",pNick(playerid));//ОБЯЗАТЕЛЬНО создайте папку "users" в папке "scriptfiles" 
    new iniFile = ini_openFile(account); 
    ini_getString(iniFile,"Пароль", p_info[playerid][p_password],64); 
    ini_getInteger(iniFile, "Деньги", p_info[playerid][p_money]); 
    ini_closeFile(iniFile); 
    ResetPlayerMoney(playerid); 
    GivePlayerMoney(playerid, p_info[playerid][p_money]); 
    p_info[playerid][p_logged]=true; 
    SpawnPlayer(playerid); 
    return 1; 
} 

stock SavePlayer(playerid) 
{ 
    if(p_info[playerid][p_logged]==false) return 1; 
    new account[37]; 
    format(account,sizeof(account),"users/%s.ini",pNick(playerid));//ОБЯЗАТЕЛЬНО создайте папку "users" в папке "scriptfiles" 
    new iniFile = ini_openFile(account); 
    ini_setString(iniFile, "Пароль", p_info[playerid][p_password]); 
    p_info[playerid][p_money] = GetPlayerMoney(playerid); 
    ini_setInteger(iniFile, "Деньги", p_info[playerid][p_money]); 
    ini_closeFile(iniFile); 
    return 1; 
} 

stock Removee_PLAYER_INFO(playerid) 
{ 
    p_info[playerid][p_logged]=false;//По умолчанию игрок будет не авторизирован 
    p_info[playerid][p_money]=0;//Обнулим переменную денег 
    p_info[playerid][p_password]=0;//Обнулим переменную пароля 
    //В этот stock можете добавлять любые переменные, значение которых нужно изменять при входе/выходе из игры 
    return 1; 
}

Так вот, я решил добавить в регистрацию запись бана вот таким образом, добавив такие вещи:
Код:
p_ban, //в начале мода
ini_setInteger(iniFile, "Ban", 0); //в CreateAccount
ini_getInteger(iniFile, "Ban", p_info[playerid][p_ban]); //в OnPlayerLogin
ini_setInteger(iniFile, "Ban", p_info[playerid][p_ban]); //в SaveAccount
p_info[playerid][p_ban]=0; //в Removee_PLAYER_INFO
А так же добавил в команду бана вот это:
Код:
return p_info[player1][p_ban]=1, BanEx(player1, string);
Это всё работает, и запись бана идёт и кикает, если вдруг аккаунт забанен.

Но моя проблема в том, что я не понимаю куда мне нужно вставить вот это...
Код:
if(p_info[playerid][p_ban]== 1) return Kick(playerid);
...чтобы это сработало при коннекте, я уже по-всякому пытался, но мои навыки pawno пока не позволяют.

Единственное где работает эта проверка - это в OnPlayerLogin, а то есть, если аккаунт заблокирован на сервере, то сервер кикает его только после того, как игрок залогинится, а мне нужно, чтобы его кикало сразу при заходе на сервер (при условии, что он забанен, конечно)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу