Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Разбор сис-мы регистрации по частям

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

1Dima0990

Умник
Многие вставляют систему регистрации в мод не задумываясь какая строчка за что отвечает, от этого возникают различные вопросы недочеты и тд
Я решил разобрать систему регистрации по частям (Для примера возьму самую простую регистрацию)
.

Начнем писать регистрацию.
1.Для начала создадим такую строчку в начале мода. Эта строчка подключает инклуд mxINI. Если мод новый незабудте закинуть инклуд в папку pawno/includes
PHP:
#include <mxINI>
2.Теперь создадим массив с информацией об игроке. Здесь будет прописываться все что связано с игроком (Уровень администратора,vip информация......)
PHP:
enum pInfo
{
pPass[64],//Пароль игрока
}
3.Ко всем new Добавим:
PHP:
new Player[MAX_PLAYERS][pInfo];//Максимальное количество игроков на сервере
new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет,Далее увидите для чего это !
4.К форвардам:
PHP:
forward OnPlayerLogin(playerid,password[]);
forward OnPlayerRegister(playerid, password[]);
forward DisconnectPlayer(playerid, bool:is_kicked, reason[]);
PHP:
5.Создадим сохранение данных об игроке добавим stock в конце или перед public OnPlayerModeInit
PHP:
stock SavePlayer(playerid)//Сохранение данных об игроке
{
    new string[64];
    new playername[MAX_PLAYER_NAME];//Имя игрока
    GetPlayerName(playerid, playername, sizeof(playername));//Получаем имя игрока
    format(string, sizeof(string), "players/%s.ini", playername);//Указываем путь где лежит файл с именем игрока
    new iniFile = ini_openFile(string);//Открываем файл
    ini_setString(iniFile,"Pass",Player[playerid][pPass]);//Добавляем значение pass То есть пароль
    ini_closeFile(iniFile);//Закрываем файл
}
6.Далее в этот паблик вставляем вставляем :
PHP:
public OnPlayerConnect(playerid)
{
    new playername[MAX_PLAYER_NAME];// Масив для имени игрока
    new string[128];// Путь до папки с именем игрока
    GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока
    format(string,sizeof(string),"players/%s.ini", playername);// Путь к файлу с аккаунтом
    if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие.
        {
        PAccount[playerid] = 1;// Аккаунт есть иприсваиваем ему значение 1
        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название диалога","****************текст","Готов","Отмена");// Показываем диалог на вход в игру.Для авторизации
        }
        else// Если файла с именем нет, то выполняется это действие.
        {
        PAccount[playerid] = 0;// Аккаунта нет.Присваиваем значение 0
        ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Название диалога","**************Текст","Готов","Отмена");// Показываем диалог регистрации.Диалог для регистрации!!!
        }
	return true;
}
7.Далее нам надо сделать так чтобы при отключении игрока от сервера сохранялись его данные для этого делаем вот что
PHP:
public DisconnectPlayer(playerid, bool:is_kicked, reason[])
{
    SavePlayer(playerid);//Вставляем сюда тем самым сохраняя данные об игроке при отключениии (disconnect)
    return 1;
}
8.В этом паблике вставляем наши диалоги:

PHP:
if(dialogid == 1)// Ид диалога для логина
{
if(response)// Если игрок нажал первую кнопку входа
{
if(!strlen(inputtext))//Если окно ввода пустое выводим диалог снова
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название диалога","*************Текст","Готов","Отмена");// Показываем диалог входа в игру.
return 1;
}
new pass[64];// Массив с паролем
strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
OnPlayerLogin(playerid,pass);// Запускаем паблик входа
}
else// Если игрок нажал Отмена кикаем его
{
Kick(playerid);
}
}
if(dialogid == 2)// Ид диалога для регистрации
{
if(response)// Если игрок нажал первую кнопку
{
if(!strlen(inputtext))// Если окно ввода пустое выводим диалог
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Название диалога","*******Текст","Готов","Отмена");// Показываем диалог регистрации.
return 1;
}
if(strlen(inputtext) < 6 || strlen(inputtext) > 16) // Если пароль меньше 6 и больше 15 букв/цифр(Говорим игроку что нельзя ввести пароль свыше 15 символов и меньше 6)
{
ShowPlayerDialog(playerid,3,DIALOG_STYLE_MSGBOX,"Название диалога","Пароль должен содержать не меньше 6 и не больше 16 ......символов","Далее","Отмена");// Показываем диалог о не верном пароле
return 1;
}
new pass[64];// Массив с паролем
strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации
}
else// Если игрок нажал Отмена кикаем его
{
Kick(playerid);
}
}
if(dialogid == 3)//Оповещании о не верном пароле
{
if(response)// Если игрок нажал первую кнопку
{
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Название диалога","***********Текст","Готов","Отмена");// Показываем диалог регистрации.
}
else
{
SendClientMessage(playerid,0xCC55000,"Вы были кикнуты с сервера!");// Выводим игрок сообщение
Kick(playerid);
}
}
if(dialogid == 4)//Оповещание о успешной регистрации
{
if(response)// Если игрок нажал первую кнопку
{
ShowPlayerDialog(playerid,5,DIALOG_STYLE_MSGBOX,"Название диалога","******Текст","Далее","");//Диалог допустим правила сервера
}
}
if(dialogid == 5)//Пожелание удачной игры или еще чего нибуть
{
if(response)// Если игрок нажал первую кнопку
{
SpawnPlayer(playerid);
}
}
if(dialogid == 6)//Оповещание об успешной авторизиации
{
if(response)// Если игрок нажал первую кнопку
{
SendClientMessage(playerid,0xCC55000,"Добро пожаловать!");
SpawnPlayer(playerid);
}
}
9.Создадим паблики регистрации и авторизации на которые мы ссылались
В самом конце:

PHP:
public OnPlayerRegister(playerid, password[])// Паблик регистрации
{
if(IsPlayerConnected(playerid))//Подключен ли игрок ? проверяем если да то ....
{
new string[64];// Массив с путем для файла
new playername[MAX_PLAYER_NAME];// Массив для имени игрока
GetPlayerName(playerid, playername, sizeof(playername));// Получаем имя игрока
format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока в путь для сохранения
new iniFile = ini_createFile(string);// Создаем файл с именем игрока в папке players
if(iniFile < 0)// Если файла нет
{
iniFile = ini_openFile(string);// Открываем файл
}
if(iniFile >= 0)// Если файл есть
{
strmid(Player[playerid][pPass],password,0,strlen(password),255);// Прописываем массиву  pPass, значение password (тОЕСТЬ В ФАЙЛЕ  БУДЕТ ПИСАТЬСЯ password = 123456 допустим)
ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл, ввели допустим 123456 и записали в текстовый файл
ini_closeFile(iniFile);// Закрываем файл
ShowPlayerDialog(playerid,4,DIALOG_STYLE_MSGBOX,"Название диалога","Вы успешно зарегистрировали этот аккаунт в базе данных.\nДля продолжения регистрации нажмите далее.","Далее","");
}
}
return 1;
}
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))// Проверка на подключение игрока
{
new string[64];// Масив с путём для файла
new pass[64];// Масив с паролем
new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
new iniFile = ini_openFile(string);// Открываем файл
ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль
if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
{
ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль
ini_closeFile(iniFile);// Закрываем файл
}
else// Если пароль не верен..
{
ini_closeFile(iniFile);// Закрываем файл
SendClientMessage(playerid,0xCC55000,"Вы были кикнуты с сервера по причине:Неверный пароль!");// Выводим игроку сообщение о неверном пароле
Kick(playerid);//Функция для кика игрока (отключение от сервера)
return 1;
}
ShowPlayerDialog(playerid,6,DIALOG_STYLE_MSGBOX,"Название диалога","Вы успешно авторизировались!","Далее","");
}
return 1;
}
На этом урок закончен.
Автор я:1Dima0990
Если понравилось ставь плюсик +
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу