- Регистрация
- 7 Сен 2019
- Сообщения
- 13
- Лучшие ответы
- 0
- Репутация
- 0
Здравствуйте, есть мод и в нём система регистрации на mxINI.
Вот сам код регистрации:
Так вот, я решил добавить в регистрацию запись бана вот таким образом, добавив такие вещи:
А так же добавил в команду бана вот это:
Это всё работает, и запись бана идёт и кикает, если вдруг аккаунт забанен.
Но моя проблема в том, что я не понимаю куда мне нужно вставить вот это...
...чтобы это сработало при коннекте, я уже по-всякому пытался, но мои навыки pawno пока не позволяют.
Единственное где работает эта проверка - это в OnPlayerLogin, а то есть, если аккаунт заблокирован на сервере, то сервер кикает его только после того, как игрок залогинится, а мне нужно, чтобы его кикало сразу при заходе на сервер (при условии, что он забанен, конечно)
Вот сам код регистрации:
Инклуд:
В начале:
OnPlayerConnect:
OnDialogResponse:
В конце:
Код:
#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];
Код:
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, "Авторизация", "Данный аккаунт зарегистрирован на нашем сервере. Для авторизации введите пароль:", "Далее", "Выход");
}
Код:
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);
Единственное где работает эта проверка - это в OnPlayerLogin, а то есть, если аккаунт заблокирован на сервере, то сервер кикает его только после того, как игрок залогинится, а мне нужно, чтобы его кикало сразу при заходе на сервер (при условии, что он забанен, конечно)